Ajout des triggers

This commit is contained in:
Fife 2016-06-14 14:39:24 +01:00
parent adf8065614
commit 22f45b7a59
15 changed files with 198 additions and 12 deletions

View File

@ -34,6 +34,7 @@
//#define CE_RPG
#define CE_PLATEFORME
//#define CE_NETWORK
#define CE_DELTA1
#ifdef CE_ALL
@ -59,6 +60,9 @@
class Script;
class Level;
class Trigger;
class Trigger_Script;
struct MassData
{
float mass;
@ -91,6 +95,7 @@
#ifdef CE_BASIC
#include "include\Engine.hpp"
#include "include\Object.hpp"
#include "include\Level.hpp"

View File

@ -57,6 +57,8 @@ class Engine
bool WaitOneSecond();
void ExecuteScriptSecond();
void AffectGui(Script * Gui);
private:
@ -65,6 +67,8 @@ class Engine
int fpswish;
bool fps;
Script * engineScript;
Object ** listeObject; //Tableau d'objet utilisé dans le cas ou il n'y a pas de map.
int nbobject; //Nombre d'objet liés au moteur. nb = Nombre

View File

@ -46,8 +46,9 @@ class Object
bool IsOnScreen();
bool Collision(int id , Level * l = NULL);
bool TestTag(char * v);
private:
protected:
Transform * OTransform;
Render * ORender;
@ -60,4 +61,23 @@ class Object
};
class Trigger: public Object
{
public:
Trigger(); //Constructeur
~Trigger();
void CreateTrigger(int x , int y , int width , int height );
void SetDestination(int x , int y , int level);
Vec2 GetDestination();
int GetDestinationLevel();
private:
Vec2 destination;
int leveldestination;
};
#endif

View File

@ -28,6 +28,9 @@ class Animation
int GetBlitX();
int GetBlitY();
bool GetWaittheEnd();
bool GetisEnd();
void DrawReverseAnim( int , int , int);
void DrawAnim( int , int , int );

View File

@ -26,6 +26,7 @@ class Render
void CopieRender(Animation & v);
void SetIt( int v );
void ForceSetIt( int v );
int GetIt();
void ReverseRender(bool);

View File

@ -21,6 +21,7 @@ class Script
virtual void Update();
virtual void UpdateEverySecond();
virtual void Start();
virtual void Teleport( int x , int y , int level );
void AffectObject(Object * OV);
void AffectEngine(Engine * EV);
@ -28,11 +29,26 @@ class Script
Engine * GetEngine();
Object * GetObject();
private:
protected:
Object * OConteneur;
Engine * EConteneur;
};
};
class Trigger_Script: public Script
{
public:
void Update();
void AffectTrigger(Trigger * TV);
Trigger * GetTrigger();
private:
Trigger * TConteneur;
};
#endif

View File

@ -39,6 +39,11 @@ return 0;
}
int mod(int a, int b)
{
return a % b;
}
int getFps()
{
// variables utilisées (en static, pour pouvoir garder en mémoire les valeurs)

View File

@ -5,6 +5,7 @@ int PrintV(int x, int y, int v);
int getFps();
void setFps(int fpsWish);
int getDelay( int ms);
int mod(int a, int b);
int RTC_getTicks(void);

View File

@ -68,6 +68,8 @@ void Engine::InitGame()
for( int i = 0 ; i < nbLevel ; i++ )
for( int j = 0 ; j < tabLevel[i]->GetNbObject() ; j++ )
if(tabLevel[i]->GetListeObject()[j]->GetScript() && tabLevel[i]->GetListeObject()[j]->GetEnable())tabLevel[i]->GetListeObject()[j]->GetScript()->Start();
if(engineScript)engineScript->Start();
}
void Engine::StopGame()
@ -190,6 +192,7 @@ void Engine::ExecuteScript()
if(WaitOneSecond())
{
ExecuteScriptSecond();
if(engineScript)engineScript->UpdateEverySecond();
}
if(tabLevel && currentLevel != -1)
@ -257,6 +260,8 @@ void Engine::Draw()
}
}
if(engineScript)engineScript->Update();
if(fps) PrintV(110,2,getFps());
}
@ -417,3 +422,9 @@ void Engine::ExecuteScriptSecond()
}
}
}
void Engine::AffectGui(Script * Gui)
{
engineScript = Gui;
if(engineScript)engineScript->AffectEngine(this);
}

View File

@ -58,7 +58,15 @@ void Level::SetMap( const unsigned char * userTileset , unsigned char * userMap
int Level::GetIdMap( int x , int y )
{
return *(map + levelWidth * y + x);
int id = *(map + levelWidth * y + x);
#ifdef CE_DELTA1
id --;
#endif // CE_DELTA1
return id;
}
void Level::ReplaceIdMap( int x , int y , char v )
@ -84,7 +92,7 @@ void Level::DrawMap()
for( int j = miny ; j < maxy; j++)
{
if (!(i < 0 || i >= levelWidth || j < 0 || j >= levelHeight))
ML_bmp_or_cl( tileset + tileHeight * tilegap * GetIdMap(i,j), (i * tileWidth ) - xscroll , ((j - miny) * tileHeight) - yscroll, tileWidth , tileHeight);
ML_bmp_or_cl( tileset + tileHeight * tilegap * GetIdMap(i,j) , (i * tileWidth ) - xscroll , ((j - miny) * tileHeight) - yscroll, tileWidth , tileHeight);
}
}
}

View File

@ -99,8 +99,8 @@ bool Object::GetEnable()
bool Object::IsOnScreen()
{
/*if(OTransform->GetX() < Conteneur->GetScreen()->max.x && OTransform->GetX() + ORender->GetSizeX() > Conteneur->GetScreen()->min.x && OTransform->GetY() < Conteneur->GetScreen()->max.y && OTransform->GetY() + ORender->GetSizeY() > Conteneur->GetScreen()->min.y ) return true;
else return false;*/
if(OTransform->GetX() < Conteneur->GetScreen()->max.x && OTransform->GetX() + ORender->GetSizeX() > Conteneur->GetScreen()->min.x && OTransform->GetY() < Conteneur->GetScreen()->max.y && OTransform->GetY() + ORender->GetSizeY() > Conteneur->GetScreen()->min.y ) return true;
else return false;
return true;
}
@ -113,7 +113,7 @@ Object * Object::GetObjectCollisionTag( char* v, int x , int y)
{
if(Conteneur->GetCurrentLevel()->GetListeObject()[i] != this)
{
if(!strcmp(Conteneur->GetCurrentLevel()->GetListeObject()[i]->tag , v) && Conteneur->GetCurrentLevel()->GetListeObject()[i]->enable)
if( Conteneur->GetCurrentLevel()->GetListeObject()[i]->TestTag(v) && Conteneur->GetCurrentLevel()->GetListeObject()[i]->enable)
{
if(Collision(i , Conteneur->GetCurrentLevel()))return Conteneur->GetCurrentLevel()->GetListeObject()[i];
}
@ -126,7 +126,7 @@ Object * Object::GetObjectCollisionTag( char* v, int x , int y)
{
if(Conteneur->GetListeObject()[i] != this)
{
if(!strcmp(Conteneur->GetListeObject()[i]->tag , v) && Conteneur->GetListeObject()[i]->enable)
if( Conteneur->GetCurrentLevel()->GetListeObject()[i]->TestTag(v) && Conteneur->GetListeObject()[i]->enable)
{
if(Collision(i))return Conteneur->GetListeObject()[i];
}
@ -184,5 +184,11 @@ bool Object::Collision(int id , Level * l)
return false;
}
bool Object::TestTag(char * v)
{
if(!strcmp(tag , v))
return true;
return false;
}

View File

@ -49,8 +49,6 @@ Animation::Animation(Sprite * v , int nb , int nbd , bool vwaitatend , bool vwai
iterateur = 0;
time = 0;
waitatend = false;
waittheend = false;
isend = false;
}
@ -81,6 +79,15 @@ int Animation::GetBlitY()
return TabSprite[iterateur].GetBlitY();
}
bool Animation::GetWaittheEnd()
{
return waittheend;
}
bool Animation::GetisEnd()
{
return isend;
}
void Animation::DrawAnim ( int x , int y , int d)
{

View File

@ -65,7 +65,7 @@ void Render::CopieRender(Animation & v)
void Render::SetIt(int v)
{
if(iterateur != v /*&& (!TabAnim[iterateur].GetWaittheEnd() || TabAnim[iterateur].GetisEnd())*/)
if(iterateur != v && (!TabAnim[iterateur].GetWaittheEnd() || TabAnim[iterateur].GetisEnd()))
{
iterateur = v;
if( iterateur >= nb_anim) iterateur = 0;
@ -73,6 +73,13 @@ void Render::SetIt(int v)
}
}
void Render::ForceSetIt(int v)
{
iterateur = v;
if( iterateur >= nb_anim) iterateur = 0;
TabAnim[ iterateur ].SetIt(0);
}
int Render::GetIt()
{
if(TabAnim)return iterateur;

View File

@ -30,6 +30,13 @@ void Script::UpdateEverySecond()
}
void Script::Teleport( int x , int y , int level )
{
GetEngine()->MoveObject(GetObject(),level);
GetEngine()->SetCurrentLevel(level);
GetObject()->GetTransform()->SetXY(x,y);
}
void Script::AffectObject(Object * OV)
{
OConteneur = OV;

85
src/Trigger.cpp Normal file
View File

@ -0,0 +1,85 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Trigger.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#include "..\C-Engine\include\Object.hpp"
Trigger::Trigger()
{
OTransform = new Transform(this);
ORender = new Render(this);
tag = new char[20];
ORigidBody = new RigidBody(this);
enable = true;
Trigger_Script * Buffer = new Trigger_Script;
Buffer->AffectTrigger(this);
OScript = Buffer;
Conteneur = NULL;
}
Trigger::~Trigger()
{
delete OTransform;
delete ORender;
delete ORigidBody;
delete OScript;
delete []tag;
}
void Trigger::CreateTrigger(int x , int y , int width , int height )
{
OTransform->SetXY(x,y);
ORigidBody->UseFixeBody(width,height);
}
void Trigger::SetDestination(int x , int y , int level)
{
destination.x = x;
destination.y = y;
leveldestination = level;
}
Vec2 Trigger::GetDestination()
{
return destination;
}
int Trigger::GetDestinationLevel()
{
return leveldestination;
}
void Trigger_Script::AffectTrigger(Trigger * TV)
{
TConteneur = TV;
OConteneur = TV;
EConteneur = TConteneur->GetEngine();
}
Trigger * Trigger_Script::GetTrigger()
{
return TConteneur;
}
void Trigger_Script::Update()
{
for(int i = 0 ; i < GetEngine()->GetCurrentLevel()->GetNbObject() ; i++ )
{
if(GetEngine()->GetCurrentLevel()->GetListeObject()[i] != GetObject())
{
if(GetObject()->Collision(i, GetEngine()->GetCurrentLevel()))
{
if(GetEngine()->GetCurrentLevel()->GetListeObject()[i]->GetScript())
GetEngine()->GetCurrentLevel()->GetListeObject()[i]->GetScript()->Teleport(TConteneur->GetDestination().x , TConteneur->GetDestination().y , TConteneur->GetDestinationLevel());
}
}
}
}