Ajout des triggers
This commit is contained in:
parent
adf8065614
commit
22f45b7a59
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -28,6 +28,9 @@ class Animation
|
|||
int GetBlitX();
|
||||
int GetBlitY();
|
||||
|
||||
bool GetWaittheEnd();
|
||||
bool GetisEnd();
|
||||
|
||||
void DrawReverseAnim( int , int , int);
|
||||
void DrawAnim( int , int , int );
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ class Render
|
|||
void CopieRender(Animation & v);
|
||||
|
||||
void SetIt( int v );
|
||||
void ForceSetIt( int v );
|
||||
int GetIt();
|
||||
|
||||
void ReverseRender(bool);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue