Système de map terminé

This commit is contained in:
Fife 2016-06-10 14:28:40 +01:00
parent 955f805ff1
commit 5d6eb24143
35 changed files with 1906 additions and 2010 deletions

View File

@ -1,10 +1,9 @@
/* ************************************************************************** */
/* _____ */
/* CEngine.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* _____ _ __ ___ __ */
/* CEngine.hpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
@ -32,17 +31,17 @@
//#define CE_ALL
#define CE_BASIC
#define CE_MAP
//#define CE_RPG
//#define CE_PLATEFORME
#define CE_PLATEFORME
//#define CE_NETWORK
#ifdef CE_ALL
#define CE_BASIC
#define CE_RPG
#define CE_PLATEFORME
#define CE_NETWORK
#define CE_MAP
#endif
//*********Declaration**********//
@ -58,6 +57,7 @@
class Animation;
class Sprite;
class Script;
class Level;
struct MassData
{
@ -67,8 +67,8 @@
struct Vec2
{
double x;
double y;
int x;
int y;
};
struct AABB
@ -87,32 +87,20 @@
};
#endif
#ifdef CE_MAP
class Level;
class World;
#endif
//********Include**********//
#ifdef CE_BASIC
#include "include\Engine.hpp"
#include "include\Object.hpp"
#include "include\Level.hpp"
#include "include\Components\Transform.hpp" //Les composants de la class Object.
#include "include\Components\RigidBody.hpp"
#include "include\Components\Render.hpp"
#include "include\Components\Animation.hpp"
#include "include\Components\Sprite.hpp"
#include "include\Components\Script.hpp"
#endif
#ifdef CE_MAP
#include "include\Map\World.hpp" //Les différents composant du décor du jeu
#include "include\Map\Level.hpp"
#include "include\Object\Transform.hpp" //Les composants de la class Object.
#include "include\Object\RigidBody.hpp"
#include "include\Object\Render.hpp"
#include "include\Object\Animation.hpp"
#include "include\Object\Sprite.hpp"
#include "include\Object\Script.hpp"
#endif

View File

@ -1,52 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Animation.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#ifndef CENGINE_ANIMATION_HPP
#define CENGINE_ANIMATION_HPP
#include "..\Rework\CEngine.hpp"
class Animation
{
public:
Animation();
Animation(Sprite & v);
Animation(Sprite * v , int nb , int nbd = 250 , bool vwaitatend = false , bool vwaittheend = false );//Constructeur
void SetIt(int v);
int GetSizeX();
int GetSizeY();
int GetBlitX();
int GetBlitY();
void DrawReverseAnim( int , int , int);
void DrawAnim( int , int , int );
bool WaitDelay();
private:
Sprite * TabSprite;
int iterateur;
int delay; // En ms
int time;
int nb_image;
bool waitatend;
bool waittheend;
bool isend;
};
#endif

View File

@ -1,62 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Render.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#ifndef CENGINE_RENDER_HPP
#define CENGINE_RENDER_HPP
#include "..\Rework\CEngine.hpp"
class Render
{
public:
Render(Object * Pointeur); //Constructeur
~Render();
void SetRender(Animation * v, int nb);
void SetRender(Animation & v);
void CopieRender(Animation * v, int nb);
void CopieRender(Animation & v);
void SetIt( int v);
int GetIt();
void ReverseRender(bool);
bool GetReverse();
void SetDirection(int);
int GetDirection();
int GetSizeY();
int GetSizeX();
int GetBlitX();
int GetBlitY();
void DrawObject();
private:
Object * Conteneur;
Animation * TabAnim;
int nb_anim;
int iterateur;
int time;
int direction;
bool reverse;
bool copie;
};
#endif

View File

@ -1,50 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* RigidBody.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#ifndef CENGINE_RIGIDBODY_HPP
#define CENGINE_RIGIDBODY_HPP
#include "..\Rework\CEngine.hpp"
class RigidBody
{
public:
RigidBody(Object * Pointeur); //Constructeur
void SetMass(float);
void UseFixeBody( int w , int h);
void UseFlexBody();
void AppliedForce();
int Move( int x , int y);
int TryMove( int x , int y);
int CollisionDecor( int x , int y);
void Affine(int vx , int vy);
int GetWidht();
int GetHeight();
bool GetStat();
Body * GetBody();
private:
Object * Conteneur;
Body R_body;
bool usefixebody;
int widht;
int height;
};
#endif

View File

@ -1,39 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Script.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#ifndef CENGINE_SCRIPT_HPP
#define CENGINE_SCRIPT_HPP
#include "..\Rework\CEngine.hpp"
class Script
{
public:
Script(); //Constructeur
virtual void Update();
virtual void UpdateEverySecond();
virtual void Start();
void AffectObject(Object * OV);
void AffectEngine(Engine * EV);
Engine * GetEngine();
Object * GetObject();
private:
Object * OConteneur;
Engine * EConteneur;
};
#endif

View File

@ -1,54 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Sprite.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#ifndef CENGINE_SPRITE_HPP
#define CENGINE_SPRITE_HPP
#include "..\Rework\CEngine.hpp"
class Sprite
{
public:
Sprite();
Sprite(const unsigned char * v1 , int sizex , int sizey , int bx = 0 , int by = 0 );
Sprite(const unsigned char * v1 , const unsigned char * v2 , int sizex , int sizey , int bx = 0 , int by = 0 ); //Constructeur
void DrawReverseSprite( int x , int y , int d );
void DrawSprite( int x , int y , int d );
void CreateReverse( int brx = 0 , int bry = 0 );
int GetSizeY();
int GetSizeX();
int GetBlitX();
int GetBlitY();
private:
const unsigned char * Beta;
const unsigned char * Alpha;
unsigned char * ReverseBeta;
unsigned char * ReverseAlpha;
int size_x;
int size_y;
int b_x;
int b_y;
int br_x;
int br_y;
};
#endif

View File

@ -1,42 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Transform.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#ifndef CENGINE_TRANSFORM_HPP
#define CENGINE_TRANSFORM_HPP
#include "..\Rework\CEngine.hpp"
class Transform
{
public:
Transform(Object * Pointeur); //Constructeur
double GetX();
double GetY();
double GetRelativeX();
double GetRelativeY();
void SetX(double v);
void SetY(double v);
void SetXY(double vx ,double vy);
void SetRelativeXY(double vx ,double vy);
private:
Object * Conteneur;
Vec2 positionabsolu; // en pixel
Vec2 positionrelative; // en pixel
};
#endif

View File

@ -1,10 +1,9 @@
/* ************************************************************************** */
/* _____ */
/* Engine.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* _____ _ __ ___ __ */
/* Engine.hpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
@ -13,62 +12,65 @@
#include "..\Rework\CEngine.hpp"
class Engine
{
public:
class Engine
{
public:
Engine(); //Constructeur
Engine(); //Constructeur
void StartGame(); //Lance le jeu
void InitGame(); //Initialise le jeu
void StopGame(); //Quitte le jeu
void StartGame(); //Lance le jeu
void InitGame(); //Initialise le jeu
void StopGame(); //Quitte le jeu
void ShowFps(); //Affiche les FPS à l'écran
void HideFps(); //Cache les FPS de l'écran
void SetFpsWish(int v); //Set le nombre de FPS
void ShowFps(); //Affiche les FPS à l'écran
void HideFps(); //Cache les FPS de l'écran
void SetFpsWish(int v); //Set le nombre de FPS
void AddObject( Object * v); //Ajout un objet au moteur
void DelObject( Object * v); //Supprime l'objet
void DelAllObject(); //Supprime tout les objets
void AddObject( Object * v , int level = -1); //Ajout un objet au moteur
void DelObject( Object * v , bool destroy = true); //Supprime l'objet
void DelAllObject(); //Supprime tout les objets
Object ** GetListeObject(); //Renvoie un pointeur sur le tableau d'objet
int GetNbObject(); //Renvoie le nombre d'objet liés au moteur
Object ** GetListeObject(); //Renvoie un pointeur sur le tableau d'objet
int GetNbObject(); //Renvoie le nombre d'objet liés au moteur
void ExecuteScript();
void AppliedForce();
void Draw();
void ExecuteScript();
void AppliedForce();
void Draw();
AABB * GetScreen();
void MoveScreen( int x ,int y);
void MiddleScreen(int x , int y , bool fixe = true);
AABB * GetScreen();
void MoveScreen( int x ,int y);
void MiddleScreen(int x , int y , bool fixe = true);
void UpdateRelativePosition();
void UpdateRelativePosition();
#ifdef CE_MAP
void SetLevel( Level ** userTabLevel , int userNbLevel);
void SetLevel( Level * userLevel);
World * GetWorld();
void SetWorld( World * v);
void DrawLevel();
#endif
void SetCurrentLevel( int id);
Level * GetCurrentLevel();
Level * GetLevel(int id);
private:
void MoveObject( Object * v , int destination = -2 );
bool execute;
private:
int fpswish;
bool fps;
bool execute;
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
int fpswish;
bool fps;
AABB screen;
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
#ifdef CE_MAP
AABB screen;
World * engineWorld;
Level ** tabLevel;
int nbLevel;
#endif
int currentLevel;
};
};
#endif

60
include/Level.hpp Normal file
View File

@ -0,0 +1,60 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Level.hpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#ifndef CENGINE_LEVEL_HPP
#define CENGINE_LEVEL_HPP
#include "..\Rework\CEngine.hpp"
class Level
{
public:
Level();//Constructeur
void AffectEngine( Engine * v );
Engine * GetEngine();
void SetMap( const unsigned char * userTileset , unsigned char * userMap , bool * userProperties, int userTileWidth , int userTileHeight , int userWorldWidth , int userWorldHeight);
int GetIdMap( int x, int y );
void ReplaceIdMap( int x , int y, char v );
void DrawMap();
Object ** GetListeObject();
int GetNbObject();
void AddObject( Object * v); //Ajout un objet au level
bool DelObject( Object * v , bool destroy = true); //Supprime l'objet
void DelAllObject(); //Supprime tout les objets
int tileWidth;
int tileHeight;
int levelWidth;
int levelHeight;
bool * solid;
private:
Engine * engineLink;
unsigned char * map;
const unsigned char * tileset;
int tilegap;
Object ** listeObject;
int nbObject;
};
#endif

View File

@ -1,62 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Level.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#ifndef CENGINE_LEVEL_HPP
#define CENGINE_LEVEL_HPP
#include "..\Rework\CEngine.hpp"
class Level
{
public:
Level();//Constructeur
void AffectWorld( World * v );
World * GetWorld();
void SetMap( const unsigned char * userTileset , unsigned char * userMap , bool * userProperties, int userTileWidth , int userTileHeight , int userWorldWidth , int userWorldHeight);
int GetIdMap( int x, int y );
void ReplaceIdMap( int x , int y, char v );
void DrawMap();
Object ** GetListeObject();
int GetNbObject();
void AddObject( Object * v); //Ajout un objet au level
bool DelObject( Object * v); //Supprime l'objet
void DelAllObject(); //Supprime tout les objets
int tileWidth;
int tileHeight;
int levelWidth;
int levelHeight;
private:
World * worldLink;
unsigned char * map;
const unsigned char * tileset;
bool * solid;
int tilegap;
int xscroll,yscroll;
Object ** listeObject;
int nbObject;
};
#endif

View File

@ -1,48 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* World.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#ifndef CENGINE_WORLD_HPP
#define CENGINE_WORLD_HPP
#include "..\Rework\CEngine.hpp"
class World
{
public:
World();//Constructeur
void AffectEngine(Engine * EV);
Engine * GetEngine();
void SetLevel( Level ** userTabLevel , int userNbLevel);
void SetLevel( Level * userLevel);
void DrawLevel();
Level * GetCurrentLevel();
Level * GetLevel(int id);
void AddObject( Object * v, int level = -1); //Ajout un objet au level
void DelObject( Object * v); //Supprime l'objet
void DelAllObject(); //Supprime tout les objets
private:
Engine * engineLink;
Level ** tabLevel;
int nbLevel;
int currentLevel;
};
#endif

View File

@ -1,10 +1,9 @@
/* ************************************************************************** */
/* _____ */
/* Object.hpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* _____ _ __ ___ __ */
/* Object.hpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
@ -13,52 +12,53 @@
#include "..\Rework\CEngine.hpp"
class Object
{
public:
class Object
{
public:
Object(); //Constructeur
~Object();
Object(); //Constructeur
~Object();
void AffectEngine(Engine * EV);
void AffectTag(char * v);
void AffectEngine(Engine * EV);
void AffectScript(Script * SV);
void AffectTag(char * v);
void Enable();
void Disable();
void Enable();
void Disable();
void AddRigidBody(); //Ajout un RigidBody
void AddRigidBody(); //Ajout un RigidBody
//Accesseur
//Accesseur
Engine * GetEngine();
Transform * GetTransform();
RigidBody * GetRigidBody();
Render * GetRender();
Script * GetScript();
Engine * GetEngine();
Transform * GetTransform();
RigidBody * GetRigidBody();
Render * GetRender();
Script * GetScript();
char * GetTag();
bool GetEnable();
char * GetTag();
bool GetEnable();
//Fonction pour les scripts
//Fonction pour les scripts
Object * GetObjectCollisionTag( char* v , int x = 0 , int y = 0);
bool GetCollisionTag( char * v , int x = 0 , int y = 0 );
Object * GetObjectCollisionTag( char* v , int x = 0 , int y = 0);
bool GetCollisionTag( char * v , int x = 0 , int y = 0 );
bool IsOnScreen();
bool IsOnScreen();
private:
private:
bool Collision(int id);
bool Collision(int id);
Transform * OTransform;
Render * ORender;
RigidBody * ORigidBody;
Script * OScript;
Engine * Conteneur;
Transform * OTransform;
Render * ORender;
RigidBody * ORigidBody;
Script * OScript;
Engine * Conteneur;
char * tag;
bool enable;
char * tag;
bool enable;
};
};
#endif

View File

@ -0,0 +1,51 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Animation.hpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#ifndef CENGINE_ANIMATION_HPP
#define CENGINE_ANIMATION_HPP
#include "..\Rework\CEngine.hpp"
class Animation
{
public:
Animation();
Animation(Sprite & v);
Animation(Sprite * v , int nb , int nbd = 250 , bool vwaitatend = false , bool vwaittheend = false );//Constructeur
void SetIt(int v);
int GetSizeX();
int GetSizeY();
int GetBlitX();
int GetBlitY();
void DrawReverseAnim( int , int , int);
void DrawAnim( int , int , int );
bool WaitDelay();
private:
Sprite * TabSprite;
int iterateur;
int delay; // En ms
int time;
int nb_image;
bool waitatend;
bool waittheend;
bool isend;
};
#endif

60
include/Object/Render.hpp Normal file
View File

@ -0,0 +1,60 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Render.hpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#ifndef CENGINE_RENDER_HPP
#define CENGINE_RENDER_HPP
#include "..\Rework\CEngine.hpp"
class Render
{
public:
Render(Object * Pointeur); //Constructeur
~Render();
void SetRender(Animation * v, int nb);
void SetRender(Animation & v);
void CopieRender(Animation * v, int nb);
void CopieRender(Animation & v);
void SetIt( int v );
int GetIt();
void ReverseRender(bool);
bool GetReverse();
void SetDirection(int);
int GetDirection();
int GetSizeY();
int GetSizeX();
int GetBlitX();
int GetBlitY();
void DrawObject();
private:
Object * Conteneur;
Animation * TabAnim;
int nb_anim;
int iterateur;
int time;
int direction;
bool reverse;
bool copie;
};
#endif

View File

@ -0,0 +1,49 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* RigidBody.hpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#ifndef CENGINE_RIGIDBODY_HPP
#define CENGINE_RIGIDBODY_HPP
#include "..\Rework\CEngine.hpp"
class RigidBody
{
public:
RigidBody(Object * Pointeur); //Constructeur
void SetMass(float);
void UseFixeBody( int w , int h);
void UseFlexBody();
void AppliedForce();
int Move( int x , int y);
int TryMove( int x , int y);
int CollisionDecor( int x , int y);
void Affine(int vx , int vy);
int GetWidht();
int GetHeight();
bool GetStat();
Body * GetBody();
private:
Object * Conteneur;
Body R_body;
bool usefixebody;
int widht;
int height;
};
#endif

38
include/Object/Script.hpp Normal file
View File

@ -0,0 +1,38 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Script.hpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#ifndef CENGINE_SCRIPT_HPP
#define CENGINE_SCRIPT_HPP
#include "..\Rework\CEngine.hpp"
class Script
{
public:
Script(); //Constructeur
virtual void Update();
virtual void UpdateEverySecond();
virtual void Start();
void AffectObject(Object * OV);
void AffectEngine(Engine * EV);
Engine * GetEngine();
Object * GetObject();
private:
Object * OConteneur;
Engine * EConteneur;
};
#endif

53
include/Object/Sprite.hpp Normal file
View File

@ -0,0 +1,53 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Sprite.hpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#ifndef CENGINE_SPRITE_HPP
#define CENGINE_SPRITE_HPP
#include "..\Rework\CEngine.hpp"
class Sprite
{
public:
Sprite();
Sprite(const unsigned char * v1 , int sizex , int sizey , int bx = 0 , int by = 0 );
Sprite(const unsigned char * v1 , const unsigned char * v2 , int sizex , int sizey , int bx = 0 , int by = 0 ); //Constructeur
void DrawReverseSprite( int x , int y , int d );
void DrawSprite( int x , int y , int d );
void CreateReverse( int brx = 0 , int bry = 0 );
int GetSizeY();
int GetSizeX();
int GetBlitX();
int GetBlitY();
private:
const unsigned char * Beta;
const unsigned char * Alpha;
unsigned char * ReverseBeta;
unsigned char * ReverseAlpha;
int size_x;
int size_y;
int b_x;
int b_y;
int br_x;
int br_y;
};
#endif

View File

@ -0,0 +1,41 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Transform.hpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#ifndef CENGINE_TRANSFORM_HPP
#define CENGINE_TRANSFORM_HPP
#include "..\Rework\CEngine.hpp"
class Transform
{
public:
Transform(Object * Pointeur); //Constructeur
double GetX();
double GetY();
double GetRelativeX();
double GetRelativeY();
void SetX(double v);
void SetY(double v);
void SetXY(double vx ,double vy);
void SetRelativeXY(double vx ,double vy);
private:
Object * Conteneur;
Vec2 positionabsolu; // en pixel
Vec2 positionrelative; // en pixel
};
#endif

View File

@ -1,118 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Animation.cpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Components\Animation.hpp"
Animation::Animation()
{
TabSprite = NULL;
nb_image = 0;
delay = 0;
iterateur = 0;
time = 0;
waitatend = false;
waittheend = false;
isend = false;
}
Animation::Animation(Sprite & v)
{
TabSprite = &v;
nb_image = 1;
}
Animation::Animation(Sprite * v , int nb , int nbd , bool vwaitatend , bool vwaittheend)
{
TabSprite = v;
nb_image = nb;
delay = nbd;
waitatend = vwaitatend;
waittheend = vwaittheend;
}
void Animation::SetIt(int v)
{
iterateur = v;
time = RTC_getTicks();
isend = false;
}
int Animation::GetSizeY()
{
return TabSprite[iterateur].GetSizeY();
}
int Animation::GetSizeX()
{
return TabSprite[iterateur].GetSizeX();
}
int Animation::GetBlitX()
{
return TabSprite[iterateur].GetBlitX();
}
int Animation::GetBlitY()
{
return TabSprite[iterateur].GetBlitY();
}
void Animation::DrawAnim ( int x , int y , int d)
{
if( iterateur >= nb_image) iterateur = 0;
TabSprite[ iterateur ].DrawSprite( x , y , d);
if(WaitDelay())iterateur ++;
if( iterateur >= nb_image)
{
isend = true;
if(!waitatend)iterateur = 0;
else iterateur = nb_image - 1;
}
}
void Animation::DrawReverseAnim ( int x , int y , int d)
{
if( iterateur >= nb_image) iterateur = 0;
TabSprite[ iterateur ].DrawReverseSprite( x , y , d);
if(WaitDelay())iterateur ++;
if( iterateur >= nb_image)
{
isend = true;
if(!waitatend)iterateur = 0;
else iterateur = nb_image - 1;
}
}
bool Animation::WaitDelay()
{
if(RTC_getTicks() - time > (delay / 7.8125)) // si il s'est écoulé une seconde complète
{
time = RTC_getTicks(); // et on se rappelle du nombre de ticks de la dernière seconde écoulée
return true;
}
return false;
}

View File

@ -1,150 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Render.cpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Components\Render.hpp"
Render::Render(Object * Pointeur)
{
Conteneur = Pointeur;
TabAnim = NULL;
nb_anim = 0;
iterateur = 0;
reverse = false;
direction = 0;
copie = false;
}
Render::~Render()
{
if(copie)delete TabAnim;
}
void Render::SetRender(Animation * v, int nb)
{
TabAnim = v;
nb_anim = nb;
}
void Render::SetRender(Animation & v)
{
TabAnim = &v;
nb_anim = 1;
}
void Render::CopieRender(Animation * v, int nb)
{
TabAnim = new Animation[nb];
for(int i = 0; i < nb ; i++)
{
TabAnim[i] = v[i];
}
nb_anim = nb;
copie = true;
}
void Render::CopieRender(Animation & v)
{
TabAnim = new Animation;
TabAnim[0] = v;
nb_anim = 1;
copie = true;
}
void Render::SetIt(int v)
{
if(iterateur != v /*&& (!TabAnim[iterateur].GetWaittheEnd() || TabAnim[iterateur].GetisEnd())*/)
{
iterateur = v;
if( iterateur >= nb_anim) iterateur = 0;
TabAnim[ iterateur].SetIt(0);
}
}
int Render::GetIt()
{
if(TabAnim)return iterateur;
return 0;
}
void Render::ReverseRender(bool v)
{
reverse = v;
}
bool Render::GetReverse()
{
return reverse;
}
void Render::SetDirection(int v)
{
direction = v;
if(direction > 360) direction -= 360;
if(direction < 0) direction += 360;
}
int Render::GetDirection()
{
return direction;
}
int Render::GetSizeY()
{
if(TabAnim)return TabAnim[iterateur].GetSizeY();
return 0;
}
int Render::GetSizeX()
{
if(TabAnim)return TabAnim[iterateur].GetSizeX();
return 0;
}
int Render::GetBlitX()
{
if(TabAnim)return TabAnim[iterateur].GetBlitX();
return 0;
}
int Render::GetBlitY()
{
if(TabAnim)return TabAnim[iterateur].GetBlitY();
return 0;
}
void Render::DrawObject()
{
if(TabAnim)
{
if(!reverse)
{
TabAnim[ iterateur ].DrawAnim( Conteneur->GetTransform()->GetRelativeX() , 64 - Conteneur->GetTransform()->GetRelativeY() - GetSizeY() , direction);
}
else
{
TabAnim[ iterateur].DrawReverseAnim( Conteneur->GetTransform()->GetRelativeX() , 64 - Conteneur->GetTransform()->GetRelativeY() - GetSizeY() , direction);
}
}
}

View File

@ -1,216 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* RigidBody.cpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Components\RigidBody.hpp"
RigidBody::RigidBody(Object * Pointeur)
{
usefixebody = false;
widht = 0;
height = 0;
Conteneur = Pointeur;
R_body.transform = Conteneur->GetTransform();
R_body.velocity.x = 0;
R_body.velocity.y = 0;
R_body.acceleration.x = 0;
R_body.acceleration.y = 0;
R_body.mass_data.mass = 0;
R_body.mass_data.inv_mass = 0;
}
void RigidBody::SetMass(float v)
{
R_body.mass_data.mass = v;
if(v)
R_body.mass_data.inv_mass = 1 / v;
else
R_body.mass_data.inv_mass = 0;
}
void RigidBody::UseFixeBody(int w , int h)
{
usefixebody = true;
widht = w;
height = h;
}
void RigidBody::UseFlexBody()
{
usefixebody = false;
widht = 0;
height = 0;
}
int RigidBody::GetHeight()
{
return height;
}
int RigidBody::GetWidht()
{
return widht;
}
bool RigidBody::GetStat()
{
return usefixebody;
}
Body * RigidBody::GetBody()
{
return &R_body;
}
void RigidBody::AppliedForce()
{
if(R_body.mass_data.mass > 0)
{
R_body.acceleration.x = R_body.force.x * R_body.mass_data.inv_mass + R_body.acceleration.x;
R_body.acceleration.y = R_body.force.y * R_body.mass_data.inv_mass + R_body.acceleration.y;
R_body.velocity.x = R_body.velocity.x + (R_body.acceleration.x * 0.1);
R_body.velocity.y = R_body.velocity.y + (R_body.acceleration.y * 0.1);
Move(R_body.velocity.x * 0.1, R_body.velocity.y * 0.1);
R_body.force.x = 0;
R_body.force.y = 0;
R_body.acceleration.x = 0;
R_body.acceleration.y = 0;
}
}
int RigidBody::Move(int x,int y)
{
if (TryMove( x, y))return 1;
Affine(x,y);
return 0;
}
int RigidBody::TryMove( int x ,int y)
{
/*Map * m = Conteneur->GetEngine()->GetMap();
if(!m)
{
int tx = R_body.transform->GetX() + x;
int ty = R_body.transform->GetY() + y;
R_body.transform->SetXY( tx , ty);
return 1;
}
if (x >= m->LARGEUR_TILE|| y>= m->HAUTEUR_TILE)
{
TryMove( x / 2 , y / 2 );
TryMove( x / 2 , y / 2 );
return 1;
}*/
int tx = R_body.transform->GetX() + x;
int ty = R_body.transform->GetY() + y;
if (!CollisionDecor( tx , ty))
{
R_body.transform->SetXY( tx , ty);
return 1;
}
else
{
if( x )R_body.velocity.x = 0 ;
if( y )R_body.velocity.y = 0 ;
}
return 0;
}
int RigidBody::CollisionDecor( int x , int y)
{
/*if(Conteneur->GetEngine()->GetMap())
{
Map * m = Conteneur->GetEngine()->GetMap();
int sizex , sizey;
if(!usefixebody)
{
sizex = Conteneur->GetRender()->GetSizeX();
sizey = Conteneur->GetRender()->GetSizeY();
}
else
{
sizex = widht;
sizey = height;
}
if ( x < 0 || ( x + sizex ) > m->nbtiles_largeur_monde * m->LARGEUR_TILE || y + sizey > m->nbtiles_hauteur_monde * m->HAUTEUR_TILE || y < 2) return 1;
int xmin,xmax,ymin,ymax,i,j,indicetile, hm;
hm = m->nbtiles_hauteur_monde * m->HAUTEUR_TILE;
xmin = x / m->LARGEUR_TILE;
ymin = (hm - y - sizey ) / m->HAUTEUR_TILE;
xmax = (x + sizex - 1) / m->LARGEUR_TILE;
ymax = (hm - y -1) / m->HAUTEUR_TILE;
for( i = xmin ; i <= xmax ; i++ )
{
for( j = ymin ; j <= ymax ; j++ )
{
indicetile = m->GetIdMap(i,j);
if (m->plein[indicetile])return 1;
}
}
}*/
return 0;
}
void RigidBody::Affine(int vx,int vy)
{
int i;
for( i = 0 ; i < abs(vx) ; i++)
{
if ( !TryMove ( sgn(vx) , 0 ) )
break;
}
for( i = 0 ; i < abs(vy) ; i++)
{
if ( !TryMove ( 0 , sgn(vy) ) )
break;
}
}

View File

@ -1,57 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Script.cpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Components\Script.hpp"
Script::Script()
{
OConteneur = NULL;
EConteneur = NULL;
}
void Script::Start()
{
}
void Script::Update()
{
}
void Script::UpdateEverySecond()
{
}
void Script::AffectObject(Object * OV)
{
OConteneur = OV;
}
void Script::AffectEngine(Engine * EV)
{
EConteneur = EV;
}
Object * Script::GetObject()
{
return OConteneur;
}
Engine * Script::GetEngine()
{
if(OConteneur) return OConteneur->GetEngine();
return EConteneur;
}

View File

@ -1,226 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Sprite.cpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Components\Sprite.hpp"
Sprite::Sprite()
{
Alpha = NULL;
Beta = NULL;
ReverseAlpha = NULL;
ReverseBeta = NULL;
}
Sprite::Sprite(const unsigned char * v1, int sizex, int sizey , int bx , int by)
{
Beta=v1;
size_x=sizex;
size_y=sizey;
b_x = bx;
b_y = by;
Alpha = NULL;
ReverseAlpha = NULL;
ReverseBeta = NULL;
}
Sprite::Sprite(const unsigned char * v1, const unsigned char * v2, int sizex, int sizey , int bx, int by)
{
Beta=v1;
Alpha = v2;
size_x=sizex;
size_y=sizey;
b_x = bx;
b_y = by;
ReverseAlpha = NULL;
ReverseBeta = NULL;
}
void Sprite::DrawReverseSprite( int x , int y , int d)
{
switch(d)
{
case 90: if(size_y % 2 == 0)y --; break;
case 180: if(size_y % 2 == 0)y --; if(size_x % 2 == 0)x --; break;
case 270: if(size_x % 2 == 0)x --; break;
}
if(ReverseBeta)
{
if(ReverseAlpha)
{
ML_bmp_or_rotate((const unsigned char*) ReverseAlpha, x + br_x, y + br_y, size_x , size_y, d); // Affichage du canal alpha
ML_bmp_and_rotate((const unsigned char*) ReverseBeta, x +br_x, y +br_y, size_x , size_y, d); // Affichage du sprite en entier
}
else
{
ML_bmp_or_rotate((const unsigned char*) ReverseBeta, x +br_x , y +br_y, size_x , size_y , d); // Affichage du sprite en entier
}
}
else
{
DrawSprite( x , y , d);
}
}
void Sprite::DrawSprite( int x , int y , int d)
{
switch(d)
{
case 90: if(size_y % 2 == 0)y --; break;
case 180: if(size_y % 2 == 0)y --; if(size_x % 2 == 0)x --; break;
case 270: if(size_x % 2 == 0)x --; break;
}
if(Beta)
{
if(Alpha)
{
ML_bmp_or_rotate((const unsigned char*) Alpha, x + b_x, y + b_y, size_x , size_y , d); // Affichage du canal alpha
ML_bmp_and_rotate((const unsigned char*) Beta, x +b_x, y +b_y, size_x , size_y ,d); // Affichage du sprite en entier
}
else
{
ML_bmp_or_rotate((const unsigned char*) Beta, x +b_x , y +b_y, size_x , size_y , d); // Affichage du sprite en entier
}
}
}
void Sprite::CreateReverse( int brx , int bry)
{
int taille, lx , decalage;
unsigned char transit;
unsigned char out ;
br_x = brx;
br_y = bry;
decalage = size_x % 8;
lx = size_x / 8 + ( decalage != 0 );
taille = lx * size_y;
if(Beta)
{
ReverseBeta = (unsigned char*) malloc(sizeof(unsigned char) * taille);
for( int i = 0 ; i < size_y ; i++ )
for( int a = 0 ; a < lx ; a++ )
ReverseBeta[i * lx + a] = Beta[ (i + 1) * lx - (a + 1)];
for(int i = 0; i < taille ; i++)
{
transit = ReverseBeta[i];
out = 0x0;
if((transit & 0x80) != 0x0) out = out | 0x01;
if((transit & 0x40) != 0x0) out = out | 0x02;
if((transit & 0x20) != 0x0) out = out | 0x04;
if((transit & 0x10) != 0x0) out = out | 0x08;
if((transit & 0x08) != 0x0) out = out | 0x10;
if((transit & 0x04) != 0x0) out = out | 0x20;
if((transit & 0x02) != 0x0) out = out | 0x40;
if((transit & 0x01) != 0x0) out = out | 0x80;
ReverseBeta[i] = out;
}
if(decalage)
{
for(int i = 0 ; i < size_y ; i++ )
for(int a = 0 ; a < lx ; a++ )
{
transit = ((unsigned char)ReverseBeta[i * lx + a] >> ( decalage));
ReverseBeta[i * lx + a] = ((unsigned char)ReverseBeta[i * lx + a] << ( 8 - decalage));
if(a != 0)ReverseBeta[i * lx + a - 1] = ReverseBeta[i * lx + a - 1] | transit;
}
}
}
if(Alpha)
{
ReverseAlpha = (unsigned char*) malloc(sizeof(unsigned char) * taille);
for(int i = 0 ; i < size_y ; i++)
for(int a = 0; a < lx; a++)
ReverseAlpha[i * lx + a] = Alpha[ (i +1)*lx - (a+1)];
for(int i = 0; i < taille ; i++)
{
transit = ReverseAlpha[i];
out = 0x0;
if((transit & 0x80) != 0x0) out = out | 0x01;
if((transit & 0x40) != 0x0) out = out | 0x02;
if((transit & 0x20) != 0x0) out = out | 0x04;
if((transit & 0x10) != 0x0) out = out | 0x08;
if((transit & 0x08) != 0x0) out = out | 0x10;
if((transit & 0x04) != 0x0) out = out | 0x20;
if((transit & 0x02) != 0x0) out = out | 0x40;
if((transit & 0x01) != 0x0) out = out | 0x80;
ReverseAlpha[i] = out;
}
if(decalage)
{
for(int i = 0 ; i < size_y ; i++ )
for(int a = 0 ; a < lx ; a++ )
{
transit = ((unsigned char)ReverseAlpha[i * lx + a] >> ( decalage));
ReverseAlpha[i * lx + a] = ((unsigned char)ReverseAlpha[i * lx + a] << ( 8 - decalage));
if(a)ReverseAlpha[i * lx + a - 1] = ReverseAlpha[i * lx + a - 1] | transit;
}
}
}
}
int Sprite::GetSizeY()
{
return size_y;
}
int Sprite::GetSizeX()
{
return size_x;
}
int Sprite::GetBlitX()
{
return b_x;
}
int Sprite::GetBlitY()
{
return b_y;
}

View File

@ -1,66 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Transform.cpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Components\Transform.hpp"
Transform::Transform(Object * Pointeur)
{
Conteneur = Pointeur;
positionabsolu.x = 0;
positionabsolu.y = 0;
positionrelative.x = 0;
positionrelative.y = 0;
}
double Transform::GetX()
{
return positionabsolu.x;
}
double Transform::GetY()
{
return positionabsolu.y;
}
double Transform::GetRelativeX()
{
return positionrelative.x;
}
double Transform::GetRelativeY()
{
return positionrelative.y;
}
void Transform::SetX(double v)
{
positionabsolu.x = v;
}
void Transform::SetY(double v)
{
positionabsolu.y = v;
}
void Transform::SetXY(double vx ,double vy)
{
positionabsolu.x = vx;
positionabsolu.y = vy;
}
void Transform::SetRelativeXY(double vx ,double vy)
{
positionrelative.x = vx;
positionrelative.y = vy;
}

View File

@ -1,10 +1,9 @@
/* ************************************************************************** */
/* _____ */
/* Engine.cpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* _____ _ __ ___ __ */
/* Engine.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
@ -24,310 +23,373 @@
#include "..\Rework\include\Engine.hpp"
Engine::Engine()
Engine::Engine()
{
execute = true;
fps = false;
fpswish = 4;
listeObject = NULL;
nbobject = 0;
screen.min.x = 0;
screen.min.y = 0;
screen.max.x = 128;
screen.max.y = 64;
tabLevel = NULL;
nbLevel = 0;
currentLevel = 0;
}
void Engine::StartGame()
{
InitGame();
while(execute)
{
execute = true;
ML_clear_vram();
input_update();
fps = false;
fpswish = 4;
ExecuteScript();
AppliedForce();
UpdateRelativePosition();
Draw();
listeObject = NULL;
nbobject = 0;
screen.min.x = 0;
screen.min.y = 0;
screen.max.x = 128;
screen.max.y = 64;
#ifdef CE_MAP
engineWorld = NULL;
#endif
setFps(fpswish);
ML_display_vram();
}
void Engine::StartGame()
DelAllObject();
}
void Engine::InitGame()
{
execute = true;
srand(RTC_getTicks());
for( int i = 0 ; i < nbobject ; i++ )
{
InitGame();
while(execute)
{
ML_clear_vram();
input_update();
ExecuteScript();
AppliedForce();
UpdateRelativePosition();
Draw();
setFps(fpswish);
ML_display_vram();
}
DelAllObject();
if(listeObject[i]->GetScript() && listeObject[i]->GetEnable())listeObject[i]->GetScript()->Start();
}
void Engine::InitGame()
if(tabLevel)
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();
}
void Engine::StopGame()
{
execute = false;
}
void Engine::ShowFps()
{
fps = true;
}
void Engine::HideFps()
{
fps = false;
}
void Engine::SetFpsWish(int v)
{
fpswish = 180 / v;
}
void Engine::AddObject( Object * v , int level)
{
if(level == -1 && tabLevel)
{
execute = true;
srand(RTC_getTicks());
for( int i = 0 ; i < nbobject ; i++ )
{
if(listeObject[i]->GetScript() && listeObject[i]->GetEnable())listeObject[i]->GetScript()->Start();
}
tabLevel[currentLevel]->AddObject(v);
return;
}
void Engine::StopGame()
if( level < nbLevel && level >= 0 && tabLevel)
{
execute = false;
tabLevel[level]->AddObject(v);
return;
}
void Engine::ShowFps()
Object ** Tab = listeObject; //On créai un pointeur sur la liste actuelle d'objet
listeObject = (Object**) malloc( sizeof(Object *) * ( nbobject + 1 ) );//On alloue l'espace nécéssaire pour le nouveau tableau
for( int i = 0 ; i < nbobject ; i++ )//On copie les pointeurs
listeObject[i] = Tab[i];
listeObject[ nbobject ] = v; //Et on rajoute l'objet
v->AffectEngine(this);
nbobject ++;
delete Tab;
}
void Engine::DelObject( Object * v , bool destroy )
{
if(tabLevel)
{
fps = true;
}
void Engine::HideFps()
{
fps = false;
}
void Engine::SetFpsWish(int v)
{
fpswish = 180 / v;
}
void Engine::AddObject( Object * v)
{
#ifdef CE_MAP
if(engineWorld)
{
engineWorld->AddObject(v);
return;
}
#endif
Object ** Tab = listeObject; //On créai un pointeur sur la liste actuelle d'objet
listeObject = (Object**) malloc( sizeof(Object *) * ( nbobject + 1 ) );//On alloue l'espace nécéssaire pour le nouveau tableau
for( int i = 0 ; i < nbobject ; i++ )//On copie les pointeurs
listeObject[i] = Tab[i];
listeObject[ nbobject ] = v; //Et on rajoute l'objet
v->AffectEngine(this);
nbobject ++;
delete Tab;
}
void Engine::DelObject( Object * v)
{
#ifdef CE_MAP
if(engineWorld)
{
engineWorld->DelObject(v);
return;
}
#endif
Object ** Tab = listeObject;
int index = -1;
if(!Tab)return;
for( int i = 0 ; i < nbobject ; i++ )
if(Tab[i] == v )
index = i ;
if(index == -1)return;
listeObject = (Object**) malloc( sizeof(Object *) * ( nbobject - 1) );
for( int i = 0 ; i < index ; i++ )
listeObject[ i ] = Tab[ i ];
for(int i = index + 1 ; i < nbobject ; i++ )
listeObject[ i - 1] = Tab[ i ];
nbobject --;
delete v;
delete Tab;
}
void Engine::DelAllObject()
{
#ifdef CE_MAP
if(engineWorld)
{
engineWorld->DelAllObject();
}
#endif
for(int i = 0 ; i < nbobject ; i++)
delete listeObject[i];
delete listeObject;
listeObject = NULL;
}
Object ** Engine::GetListeObject()
{
return listeObject;
}
int Engine::GetNbObject()
{
return nbobject;
}
void Engine::ExecuteScript()
{
for( int i = 0 ; i < nbobject ; i++ )
{
if( listeObject[i]->GetEnable())
if(listeObject[i]->GetScript())
listeObject[i]->GetScript()->Update();
}
}
void Engine::AppliedForce()
{
for( int i = 0 ; i < nbobject ; i++ )
{
if( listeObject[i]->GetEnable())
if(listeObject[i]->GetRigidBody())
listeObject[i]->GetRigidBody()->AppliedForce();
}
}
void Engine::Draw()
{
#ifdef CE_MAP
if(engineWorld)
{
engineWorld->GetCurrentLevel()->DrawMap();
for( int i = 0 ; i < engineWorld->GetCurrentLevel()->GetNbObject() ; i++ )
{
if( engineWorld->GetCurrentLevel()->GetListeObject()[i]->GetEnable())
if(engineWorld->GetCurrentLevel()->GetListeObject()[i]->GetRender())
engineWorld->GetCurrentLevel()->GetListeObject()[i]->GetRender()->DrawObject();
}
}
else
{
for( int i = 0 ; i < nbobject ; i++ )
{
if( listeObject[i]->GetEnable())
if(listeObject[i]->GetRender())
listeObject[i]->GetRender()->DrawObject();
}
}
#else
for( int i = 0 ; i < nbobject ; i++ )
{
if( listeObject[i]->GetEnable())
if(listeObject[i]->GetRender())
listeObject[i]->GetRender()->DrawObject();
}
#endif
if(fps) PrintV(110,2,getFps());
}
AABB * Engine::GetScreen()
{
return &screen;
}
void Engine::MoveScreen(int x , int y)
{
screen.min.x = x;
screen.max.x = x + 64;
screen.min.y = y;
screen.max.y = y + 128;
}
void Engine::MiddleScreen(int x , int y , bool fixe)
{
screen.min.x = x - 32;
screen.max.x = x + 32;
screen.min.y = y - 64;
screen.max.y = y + 64;
if(fixe)
if(!tabLevel[currentLevel]->DelObject(v , destroy ))
{
if( screen.min.x < 0 )
for(int i = 0 ; i < nbLevel ; i++ )
{
screen.min.x = 0;
screen.max.x = 128;
if(tabLevel[i]->DelObject(v , destroy ))return;
}
if(screen.min.y < 0)
{
screen.min.y = 0;
screen.max.y = 63;
}
#ifdef CE_MAP
if(engineWorld)
{
if(screen.max.x > engineWorld->GetCurrentLevel()->levelWidth * engineWorld->GetCurrentLevel()->tileWidth)
{
screen.max.x = engineWorld->GetCurrentLevel()->levelWidth * engineWorld->GetCurrentLevel()->tileWidth;
screen.min.x = screen.max.x - 128;
}
if(screen.max.y > engineWorld->GetCurrentLevel()->levelHeight * engineWorld->GetCurrentLevel()->tileHeight)
{
screen.max.y = engineWorld->GetCurrentLevel()->levelHeight * engineWorld->GetCurrentLevel()->tileHeight;
screen.min.y = screen.max.y - 64;
}
}
#endif // CE_MAP
}
}
void Engine::UpdateRelativePosition()
{
#ifdef CE_MAP
if(engineWorld)
{
for( int i = 0 ; i < engineWorld->GetCurrentLevel()->GetNbObject() ; i++ )
{
if( engineWorld->GetCurrentLevel()->GetListeObject()[i]->GetEnable())
engineWorld->GetCurrentLevel()->GetListeObject()[i]->GetTransform()->SetRelativeXY( engineWorld->GetCurrentLevel()->GetListeObject()[i]->GetTransform()->GetX() - screen.min.x , engineWorld->GetCurrentLevel()->GetListeObject()[i]->GetTransform()->GetY() - screen.min.y );
}
}
#endif // CE_MAP
Object ** Tab = listeObject;
int index = -1;
for( int i = 0 ; i < nbobject; i++ )
if(!Tab)return;
for( int i = 0 ; i < nbobject ; i++ )
if(Tab[i] == v )
index = i ;
if(index == -1)return;
listeObject = (Object**) malloc( sizeof(Object *) * ( nbobject - 1) );
for( int i = 0 ; i < index ; i++ )
listeObject[ i ] = Tab[ i ];
for(int i = index + 1 ; i < nbobject ; i++ )
listeObject[ i - 1] = Tab[ i ];
nbobject --;
if(destroy)delete v;
delete Tab;
}
void Engine::DelAllObject()
{
if(tabLevel)
{
for(int i = 0 ; i < nbLevel ; i++ )
{
if(listeObject[i]->GetEnable())
listeObject[i]->GetTransform()->SetRelativeXY( listeObject[i]->GetTransform()->GetX() - screen.min.x , listeObject[i]->GetTransform()->GetY() - screen.min.y );
tabLevel[i]->DelAllObject();
}
}
for(int i = 0 ; i < nbobject ; i++)
delete listeObject[i];
#ifdef CE_MAP
delete listeObject;
listeObject = NULL;
}
World * Engine::GetWorld()
Object ** Engine::GetListeObject()
{
return listeObject;
}
int Engine::GetNbObject()
{
return nbobject;
}
void Engine::ExecuteScript()
{
if(tabLevel && currentLevel != -1)
{
for( int i = 0 ; i < GetCurrentLevel()->GetNbObject() ; i++ )
{
return engineWorld;
if( GetCurrentLevel()->GetListeObject()[i]->GetEnable())
if(GetCurrentLevel()->GetListeObject()[i]->GetScript())
GetCurrentLevel()->GetListeObject()[i]->GetScript()->Update();
}
}
else
{
for( int i = 0 ; i < nbobject ; i++ )
{
if( listeObject[i]->GetEnable())
if(listeObject[i]->GetScript())
listeObject[i]->GetScript()->Update();
}
}
}
void Engine::AppliedForce()
{
if(tabLevel && currentLevel != -1)
{
for( int i = 0 ; i < GetCurrentLevel()->GetNbObject() ; i++ )
{
if( GetCurrentLevel()->GetListeObject()[i]->GetEnable())
if(GetCurrentLevel()->GetListeObject()[i]->GetRigidBody())
GetCurrentLevel()->GetListeObject()[i]->GetRigidBody()->AppliedForce();
}
}
else
{
for( int i = 0 ; i < nbobject ; i++ )
{
if( listeObject[i]->GetEnable())
if(listeObject[i]->GetRigidBody())
listeObject[i]->GetRigidBody()->AppliedForce();
}
}
}
void Engine::Draw()
{
if(tabLevel && currentLevel != -1)
{
GetCurrentLevel()->DrawMap();
for( int i = 0 ; i < GetCurrentLevel()->GetNbObject() ; i++ )
{
if( GetCurrentLevel()->GetListeObject()[i]->GetEnable())
if(GetCurrentLevel()->GetListeObject()[i]->GetRender())
GetCurrentLevel()->GetListeObject()[i]->GetRender()->DrawObject();
}
}
else
{
for( int i = 0 ; i < nbobject ; i++ )
{
if( listeObject[i]->GetEnable())
if(listeObject[i]->GetRender())
listeObject[i]->GetRender()->DrawObject();
}
}
if(fps) PrintV(110,2,getFps());
}
AABB * Engine::GetScreen()
{
return &screen;
}
void Engine::MoveScreen(int x , int y)
{
screen.min.x = x;
screen.max.x = x + 64;
screen.min.y = y;
screen.max.y = y + 128;
}
void Engine::MiddleScreen(int x , int y , bool fixe)
{
screen.min.x = x - 64;
screen.max.x = x + 64;
screen.min.y = y - 32;
screen.max.y = y + 32;
if(fixe)
{
if( screen.min.x < 0 )
{
screen.min.x = 0;
screen.max.x = 128;
}
void Engine::SetWorld( World * v)
if(screen.min.y < 0)
{
engineWorld = v;
engineWorld->AffectEngine(this);
screen.min.y = 0;
screen.max.y = 63;
}
#endif
if(tabLevel && currentLevel != -1)
{
if(screen.max.x > GetCurrentLevel()->levelWidth * GetCurrentLevel()->tileWidth)
{
screen.max.x = GetCurrentLevel()->levelWidth * GetCurrentLevel()->tileWidth;
screen.min.x = screen.max.x - 128;
}
if(screen.max.y > GetCurrentLevel()->levelHeight * GetCurrentLevel()->tileHeight)
{
screen.max.y = GetCurrentLevel()->levelHeight * GetCurrentLevel()->tileHeight;
screen.min.y = screen.max.y - 64;
}
}
}
}
void Engine::UpdateRelativePosition()
{
if(tabLevel && currentLevel != -1)
{
for( int i = 0 ; i < GetCurrentLevel()->GetNbObject() ; i++ )
{
if( GetCurrentLevel()->GetListeObject()[i]->GetEnable())
GetCurrentLevel()->GetListeObject()[i]->GetTransform()->SetRelativeXY( GetCurrentLevel()->GetListeObject()[i]->GetTransform()->GetX() - screen.min.x , GetCurrentLevel()->GetListeObject()[i]->GetTransform()->GetY() - screen.min.y );
}
}
for( int i = 0 ; i < nbobject; i++ )
{
if(listeObject[i]->GetEnable())
listeObject[i]->GetTransform()->SetRelativeXY( listeObject[i]->GetTransform()->GetX() - screen.min.x , listeObject[i]->GetTransform()->GetY() - screen.min.y );
}
}
void Engine::SetLevel( Level ** userTabLevel , int userNbLevel)
{
tabLevel = userTabLevel;
nbLevel = userNbLevel;
for(int i = 0 ; i < nbLevel ; i++ )
tabLevel[i]->AffectEngine(this);
}
void Engine::SetLevel( Level * userLevel)
{
tabLevel = new Level*[1];
tabLevel[0] = userLevel;
nbLevel = 1;
userLevel->AffectEngine(this);
}
void Engine::SetCurrentLevel( int id)
{
if( id < 0 || id >= nbLevel)
currentLevel = - 1;
else
currentLevel = id;
}
void Engine::DrawLevel()
{
if(tabLevel && currentLevel != -1 )tabLevel[currentLevel]->DrawMap();
}
Level * Engine::GetCurrentLevel()
{
if(currentLevel != -1)
return tabLevel[currentLevel];
else
return NULL;
}
Level * Engine::GetLevel(int id)
{
if(id > -1 && id < nbLevel)
return tabLevel[id];
else
return NULL;
}
void Engine::MoveObject(Object * v , int destination)
{
DelObject( v , false );
AddObject( v , destination );
}

156
src/Level.cpp Normal file
View File

@ -0,0 +1,156 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Level.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Level.hpp"
Level::Level()
{
engineLink = NULL;
listeObject = NULL;
nbObject = 0;
tileset = NULL;
map = NULL;
solid = NULL;
tileHeight = 0;
tileWidth = 0;
tilegap = 0;
levelHeight = 0;
levelWidth = 0;
}
void Level::AffectEngine( Engine * v )
{
engineLink = v;
}
Engine * Level::GetEngine()
{
return engineLink;
}
void Level::SetMap( const unsigned char * userTileset , unsigned char * userMap , bool * userProperties, int userTileWidth , int userTileHeight , int userWorldWidth , int userWorldHeight)
{
tileset = userTileset;
map = userMap;
solid = userProperties;
tileWidth = userTileWidth;
tileHeight = userTileHeight;
tilegap = userTileHeight / 8;
if(userTileHeight % 8)tilegap++;
levelWidth = userWorldWidth;
levelHeight = userWorldHeight;
}
int Level::GetIdMap( int x , int y )
{
return *(map + levelWidth * y + x);
}
void Level::ReplaceIdMap( int x , int y , char v )
{
*(map + levelWidth * y + x) = v;
}
void Level::DrawMap()
{
int dy = levelHeight * tileHeight - engineLink->GetScreen()->max.y ;
int minx = engineLink->GetScreen()->min.x / tileWidth ;
int miny = dy / tileHeight ;
int maxx = 128 / tileWidth + minx + 2;
int maxy = 64 / tileHeight + miny + 2;
int xscroll = engineLink->GetScreen()->min.x ;
int yscroll = dy % tileHeight;
for( int i = minx; i < maxx; i++)
{
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);
}
}
}
Object ** Level::GetListeObject()
{
return listeObject;
}
int Level::GetNbObject()
{
return nbObject;
}
void Level::AddObject( Object * v)
{
Object ** Tab = listeObject; //On créai un pointeur sur la liste actuelle d'objet
listeObject = (Object**) malloc( sizeof(Object *) * ( nbObject + 1 ) );//On alloue l'espace nécéssaire pour le nouveau tableau
for( int i = 0 ; i < nbObject ; i++ )//On copie les pointeurs
listeObject[i] = Tab[i];
listeObject[ nbObject ] = v; //Et on rajoute l'objet
v->AffectEngine(GetEngine());
nbObject ++;
delete Tab;
}
bool Level::DelObject( Object * v , bool destroy)
{
Object ** Tab = listeObject;
int index = -1;
if(!Tab)return false;
for( int i = 0 ; i < nbObject ; i++ )
if(Tab[i] == v )
index = i ;
if(index == -1)return false;
listeObject = (Object**) malloc( sizeof(Object *) * ( nbObject - 1) );
for( int i = 0 ; i < index ; i++ )
listeObject[ i ] = Tab[ i ];
for(int i = index + 1 ; i < nbObject ; i++ )
listeObject[ i - 1] = Tab[ i ];
nbObject --;
if(destroy)delete v;
delete Tab;
return true;
}
void Level::DelAllObject()
{
for(int i = 0 ; i < nbObject ; i++)
delete listeObject[i];
delete listeObject;
listeObject = NULL;
}

View File

@ -1,162 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* Level.cpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Map\Level.hpp"
Level::Level()
{
worldLink = NULL;
listeObject = NULL;
nbObject = 0;
tileset = NULL;
map = NULL;
solid = NULL;
tileHeight = 0;
tileWidth = 0;
tilegap = 0;
levelHeight = 0;
levelWidth = 0;
xscroll = 0;
yscroll = 0;
}
void Level::AffectWorld( World * v )
{
worldLink = v;
}
World * Level::GetWorld()
{
return worldLink;
}
void Level::SetMap( const unsigned char * userTileset , unsigned char * userMap , bool * userProperties, int userTileWidth , int userTileHeight , int userWorldWidth , int userWorldHeight)
{
tileset = userTileset;
map = userMap;
solid = userProperties;
tileWidth = userTileWidth;
tileHeight = userTileHeight;
tilegap = userTileHeight / 8;
if(userTileHeight % 8)tilegap++;
levelWidth = userWorldWidth;
levelHeight = userWorldHeight;
}
int Level::GetIdMap( int x , int y )
{
return *(map + levelWidth * y + x);
}
void Level::ReplaceIdMap( int x , int y , char v )
{
*(map + levelWidth * y + x) = v;
}
void Level::DrawMap()
{
int minx,maxx,miny,maxy;
int dy = levelHeight * tileHeight - worldLink->GetEngine()->GetScreen()->max.y ;
minx = worldLink->GetEngine()->GetScreen()->min.x / tileWidth ;
miny = dy / tileHeight ;
maxx = 128 / tileWidth + minx + 2;
maxy = 64 / tileHeight + miny + 2;
xscroll = worldLink->GetEngine()->GetScreen()->min.x ;
yscroll = dy % tileHeight;
for( int i = minx; i < maxx; i++)
{
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);
}
}
}
Object ** Level::GetListeObject()
{
return listeObject;
}
int Level::GetNbObject()
{
return nbObject;
}
void Level::AddObject( Object * v)
{
Object ** Tab = listeObject; //On créai un pointeur sur la liste actuelle d'objet
listeObject = (Object**) malloc( sizeof(Object *) * ( nbObject + 1 ) );//On alloue l'espace nécéssaire pour le nouveau tableau
for( int i = 0 ; i < nbObject ; i++ )//On copie les pointeurs
listeObject[i] = Tab[i];
listeObject[ nbObject ] = v; //Et on rajoute l'objet
v->AffectEngine(GetWorld()->GetEngine());
nbObject ++;
delete Tab;
}
bool Level::DelObject( Object * v)
{
Object ** Tab = listeObject;
int index = -1;
if(!Tab)return false;
for( int i = 0 ; i < nbObject ; i++ )
if(Tab[i] == v )
index = i ;
if(index == -1)return false;
listeObject = (Object**) malloc( sizeof(Object *) * ( nbObject - 1) );
for( int i = 0 ; i < index ; i++ )
listeObject[ i ] = Tab[ i ];
for(int i = index + 1 ; i < nbObject ; i++ )
listeObject[ i - 1] = Tab[ i ];
nbObject --;
delete v;
delete Tab;
return true;
}
void Level::DelAllObject()
{
for(int i = 0 ; i < nbObject ; i++)
delete listeObject[i];
delete listeObject;
listeObject = NULL;
}

View File

@ -1,98 +0,0 @@
/* ************************************************************************** */
/* _____ */
/* World.cpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Map\World.hpp"
World::World()
{
tabLevel = NULL;
nbLevel = 0;
currentLevel = 0;
engineLink = NULL;
}
void World::AffectEngine(Engine * EV)
{
engineLink = EV;
}
Engine * World::GetEngine()
{
return engineLink;
}
void World::SetLevel( Level ** userTabLevel , int userNbLevel)
{
tabLevel = userTabLevel;
nbLevel = userNbLevel;
for(int i = 0 ; i < nbLevel ; i++ )
tabLevel[i]->AffectWorld(this);
}
void World::SetLevel( Level * userLevel)
{
tabLevel = new Level*[1];
tabLevel[0] = userLevel;
nbLevel = 1;
userLevel->AffectWorld(this);
}
void World::DrawLevel()
{
if(tabLevel)tabLevel[currentLevel]->DrawMap();
}
Level * World::GetCurrentLevel()
{
return tabLevel[currentLevel];
}
Level * World::GetLevel(int id)
{
return tabLevel[id];
}
void World::AddObject( Object * v, int level)
{
if(level < 0 && tabLevel)tabLevel[currentLevel]->AddObject(v);
if( level < nbLevel && level >= 0 && tabLevel)
{
tabLevel[level]->AddObject(v);
}
}
void World::DelObject( Object * v)
{
if(tabLevel)
{
if(!tabLevel[currentLevel]->DelObject(v))
{
for(int i = 0 ; i < nbLevel ; i++ )
{
if(tabLevel[i]->DelObject(v))return;
}
}
}
}
void World::DelAllObject()
{
if(tabLevel)
{
for(int i = 0 ; i < nbLevel ; i++ )
{
tabLevel[i]->DelAllObject();
}
}
}

View File

@ -1,162 +1,167 @@
/* ************************************************************************** */
/* _____ */
/* Object.cpp | ___| _ ____ ___ */
/* Project : C-Engine | |_ | | | __| / _ \ */
/* | _| | | | |= | __/ */
/* By: Fife <wasabifife@gmail.com> |_| |_| |_| \___| */
/* */
/* _____ _ __ ___ __ */
/* Object.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Object.hpp"
Object::Object()
{
OTransform = new Transform(this);
ORender = new Render(this);
tag = new char[20];
enable = true;
Object::Object()
{
OTransform = new Transform(this);
ORender = new Render(this);
tag = new char[20];
enable = true;
ORigidBody = NULL;
OScript = NULL;
Conteneur = NULL;
}
ORigidBody = NULL;
OScript = NULL;
Conteneur = NULL;
}
Object::~Object()
{
delete OTransform;
delete ORender;
delete ORigidBody;
delete OScript;
delete []tag;
}
Object::~Object()
{
delete OTransform;
delete ORender;
delete ORigidBody;
delete OScript;
delete []tag;
}
void Object::AffectEngine(Engine * EV)
{
Conteneur = EV;
}
void Object::AffectEngine(Engine * EV)
{
Conteneur = EV;
}
void Object::AffectTag(char * v)
{
strcpy( tag , v );//Copie v dans tag.
}
void Object::AffectScript(Script * SV)
{
OScript = SV;
OScript->AffectObject(this);
}
void Object::Enable()
{
enable = true;
}
void Object::AffectTag(char * v)
{
strcpy( tag , v );//Copie v dans tag.
}
void Object::Disable()
{
enable = false;
}
void Object::Enable()
{
enable = true;
}
void Object::AddRigidBody()
{
ORigidBody = new RigidBody(this);
}
void Object::Disable()
{
enable = false;
}
Engine * Object::GetEngine()
{
return Conteneur;
}
void Object::AddRigidBody()
{
ORigidBody = new RigidBody(this);
}
Transform * Object::GetTransform()
{
return OTransform;
}
Engine * Object::GetEngine()
{
return Conteneur;
}
RigidBody * Object::GetRigidBody()
{
return ORigidBody;
}
Transform * Object::GetTransform()
{
return OTransform;
}
Render * Object::GetRender()
{
return ORender;
}
RigidBody * Object::GetRigidBody()
{
return ORigidBody;
}
Script * Object::GetScript()
{
return OScript;
}
Render * Object::GetRender()
{
return ORender;
}
char * Object::GetTag()
{
return tag;
}
Script * Object::GetScript()
{
return OScript;
}
bool Object::GetEnable()
{
return enable;
}
char * Object::GetTag()
{
return tag;
}
bool Object::IsOnScreen()
{
bool Object::GetEnable()
{
return enable;
}
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;*/
return true;
}
return true;
}
Object * Object::GetObjectCollisionTag( char* v, int x , int y)
Object * Object::GetObjectCollisionTag( char* v, int x , int y)
{
for( int i = 0; i < Conteneur->GetNbObject(); i++ )
{
for( int i = 0; i < Conteneur->GetNbObject(); i++ )
if(Conteneur->GetListeObject()[i] != this)
{
if(Conteneur->GetListeObject()[i] != this)
if(!strcmp(Conteneur->GetListeObject()[i]->tag , v) && Conteneur->GetListeObject()[i]->enable)
{
if(!strcmp(Conteneur->GetListeObject()[i]->tag , v) && Conteneur->GetListeObject()[i]->enable)
{
if(Collision(i))return Conteneur->GetListeObject()[i];
}
if(Collision(i))return Conteneur->GetListeObject()[i];
}
}
return NULL;
}
return NULL;
}
bool Object::GetCollisionTag(char* v , int x , int y)
bool Object::GetCollisionTag(char* v , int x , int y)
{
if(GetObjectCollisionTag(v,x,y))return true;
return false;
}
bool Object::Collision(int id)
{
int widht1 = ORender->GetSizeX();
int height1 = ORender->GetSizeY();
int widht2 = Conteneur->GetListeObject()[id]->ORender->GetSizeX();
int height2 = Conteneur->GetListeObject()[id]->ORender->GetSizeY();
if(ORigidBody)
{
if(GetObjectCollisionTag(v,x,y))return true;
return false;
if(ORigidBody->GetStat())
{
widht1 = ORigidBody->GetWidht();
height1 = ORigidBody->GetHeight();
}
}
bool Object::Collision(int id)
if(Conteneur->GetListeObject()[id]->ORigidBody)
{
int widht1 = ORender->GetSizeX();
int height1 = ORender->GetSizeY();
int widht2 = Conteneur->GetListeObject()[id]->ORender->GetSizeX();
int height2 = Conteneur->GetListeObject()[id]->ORender->GetSizeY();
if(ORigidBody)
if(Conteneur->GetListeObject()[id]->ORigidBody->GetStat())
{
if(ORigidBody->GetStat())
{
widht1 = ORigidBody->GetWidht();
height1 = ORigidBody->GetHeight();
}
widht2 = Conteneur->GetListeObject()[id]->ORigidBody->GetWidht();
height2 = Conteneur->GetListeObject()[id]->ORigidBody->GetHeight();
}
if(Conteneur->GetListeObject()[id]->ORigidBody)
{
if(Conteneur->GetListeObject()[id]->ORigidBody->GetStat())
{
widht2 = Conteneur->GetListeObject()[id]->ORigidBody->GetWidht();
height2 = Conteneur->GetListeObject()[id]->ORigidBody->GetHeight();
}
}
if( (( Conteneur->GetListeObject()[id]->OTransform->GetX() + Conteneur->GetListeObject()[id]->ORender->GetBlitX() >= OTransform->GetX() + ORender->GetBlitX() + widht1)
|| (Conteneur->GetListeObject()[id]->OTransform->GetX() + Conteneur->GetListeObject()[id]->ORender->GetBlitX() + widht2 <= OTransform->GetX() + ORender->GetBlitX())
|| (Conteneur->GetListeObject()[id]->OTransform->GetY() + Conteneur->GetListeObject()[id]->ORender->GetBlitY()>= OTransform->GetY() + ORender->GetBlitY() + height1)
|| (Conteneur->GetListeObject()[id]->OTransform->GetY() + Conteneur->GetListeObject()[id]->ORender->GetBlitY() + height2 <= OTransform->GetY() + ORender->GetBlitY())
) == false )return true;
return false;
}
if( (( Conteneur->GetListeObject()[id]->OTransform->GetX() + Conteneur->GetListeObject()[id]->ORender->GetBlitX() >= OTransform->GetX() + ORender->GetBlitX() + widht1)
|| (Conteneur->GetListeObject()[id]->OTransform->GetX() + Conteneur->GetListeObject()[id]->ORender->GetBlitX() + widht2 <= OTransform->GetX() + ORender->GetBlitX())
|| (Conteneur->GetListeObject()[id]->OTransform->GetY() + Conteneur->GetListeObject()[id]->ORender->GetBlitY()>= OTransform->GetY() + ORender->GetBlitY() + height1)
|| (Conteneur->GetListeObject()[id]->OTransform->GetY() + Conteneur->GetListeObject()[id]->ORender->GetBlitY() + height2 <= OTransform->GetY() + ORender->GetBlitY())
) == false )return true;
return false;
}

130
src/Object/Animation.cpp Normal file
View File

@ -0,0 +1,130 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Animation.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Object\Animation.hpp"
Animation::Animation()
{
TabSprite = NULL;
nb_image = 0;
delay = 0;
iterateur = 0;
time = 0;
waitatend = false;
waittheend = false;
isend = false;
}
Animation::Animation(Sprite & v)
{
TabSprite = &v;
nb_image = 1;
delay = 0;
iterateur = 0;
time = 0;
waitatend = false;
waittheend = false;
isend = false;
}
Animation::Animation(Sprite * v , int nb , int nbd , bool vwaitatend , bool vwaittheend)
{
TabSprite = v;
nb_image = nb;
delay = nbd;
waitatend = vwaitatend;
waittheend = vwaittheend;
iterateur = 0;
time = 0;
waitatend = false;
waittheend = false;
isend = false;
}
void Animation::SetIt(int v)
{
iterateur = v;
time = RTC_getTicks();
isend = false;
}
int Animation::GetSizeY()
{
return TabSprite[iterateur].GetSizeY();
}
int Animation::GetSizeX()
{
return TabSprite[iterateur].GetSizeX();
}
int Animation::GetBlitX()
{
return TabSprite[iterateur].GetBlitX();
}
int Animation::GetBlitY()
{
return TabSprite[iterateur].GetBlitY();
}
void Animation::DrawAnim ( int x , int y , int d)
{
if( iterateur >= nb_image) iterateur = 0;
TabSprite[ iterateur ].DrawSprite( x , y , d);
if(WaitDelay())iterateur ++;
if( iterateur >= nb_image)
{
isend = true;
if(!waitatend)iterateur = 0;
else iterateur = nb_image - 1;
}
}
void Animation::DrawReverseAnim ( int x , int y , int d)
{
if( iterateur >= nb_image) iterateur = 0;
TabSprite[ iterateur ].DrawReverseSprite( x , y , d);
if(WaitDelay())iterateur ++;
if( iterateur >= nb_image)
{
isend = true;
if(!waitatend)iterateur = 0;
else iterateur = nb_image - 1;
}
}
bool Animation::WaitDelay()
{
if(RTC_getTicks() - time > (delay / 7.8125))
{
time = RTC_getTicks();
return true;
}
return false;
}

142
src/Object/Render.cpp Normal file
View File

@ -0,0 +1,142 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Render.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Object\Render.hpp"
Render::Render(Object * Pointeur)
{
Conteneur = Pointeur;
TabAnim = NULL;
nb_anim = 0;
iterateur = 0;
reverse = false;
direction = 0;
copie = false;
}
Render::~Render()
{
if(copie)delete TabAnim;
}
void Render::SetRender(Animation * v, int nb)
{
TabAnim = v;
nb_anim = nb;
}
void Render::SetRender(Animation & v)
{
TabAnim = &v;
nb_anim = 1;
}
void Render::CopieRender(Animation * v, int nb)
{
TabAnim = new Animation[nb];
for(int i = 0; i < nb ; i++)
{
TabAnim[i] = v[i];
}
nb_anim = nb;
copie = true;
}
void Render::CopieRender(Animation & v)
{
TabAnim = new Animation;
TabAnim[0] = v;
nb_anim = 1;
copie = true;
}
void Render::SetIt(int v)
{
if(iterateur != v /*&& (!TabAnim[iterateur].GetWaittheEnd() || TabAnim[iterateur].GetisEnd())*/)
{
iterateur = v;
if( iterateur >= nb_anim) iterateur = 0;
TabAnim[ iterateur].SetIt(0);
}
}
int Render::GetIt()
{
if(TabAnim)return iterateur;
return 0;
}
void Render::ReverseRender(bool v)
{
reverse = v;
}
bool Render::GetReverse()
{
return reverse;
}
void Render::SetDirection(int v)
{
direction = v;
if(direction > 360) direction -= 360;
if(direction < 0) direction += 360;
}
int Render::GetDirection()
{
return direction;
}
int Render::GetSizeY()
{
if(TabAnim)return TabAnim[iterateur].GetSizeY();
else return 0;
}
int Render::GetSizeX()
{
if(TabAnim)return TabAnim[iterateur].GetSizeX();
else return 0;
}
int Render::GetBlitX()
{
if(TabAnim)return TabAnim[iterateur].GetBlitX();
else return 0;
}
int Render::GetBlitY()
{
if(TabAnim)return TabAnim[iterateur].GetBlitY();
else return 0;
}
void Render::DrawObject()
{
if(TabAnim)
{
if(!reverse)
{
TabAnim[ iterateur ].DrawAnim( Conteneur->GetTransform()->GetRelativeX() , 64 - Conteneur->GetTransform()->GetRelativeY() - GetSizeY() , direction);
}
else
{
TabAnim[ iterateur].DrawReverseAnim( Conteneur->GetTransform()->GetRelativeX() , 64 - Conteneur->GetTransform()->GetRelativeY() - GetSizeY() , direction);
}
}
}

219
src/Object/RigiBodys.cpp Normal file
View File

@ -0,0 +1,219 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* RigidBody.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Object\RigidBody.hpp"
RigidBody::RigidBody(Object * Pointeur)
{
usefixebody = false;
widht = 0;
height = 0;
Conteneur = Pointeur;
R_body.transform = Conteneur->GetTransform();
R_body.velocity.x = 0;
R_body.velocity.y = 0;
R_body.acceleration.x = 0;
R_body.acceleration.y = 0;
R_body.mass_data.mass = 0;
R_body.mass_data.inv_mass = 0;
}
void RigidBody::SetMass(float v)
{
R_body.mass_data.mass = v;
if(v)
R_body.mass_data.inv_mass = 1 / v;
else
R_body.mass_data.inv_mass = 0;
}
void RigidBody::UseFixeBody(int w , int h)
{
usefixebody = true;
widht = w;
height = h;
}
void RigidBody::UseFlexBody()
{
usefixebody = false;
widht = 0;
height = 0;
}
int RigidBody::GetHeight()
{
return height;
}
int RigidBody::GetWidht()
{
return widht;
}
bool RigidBody::GetStat()
{
return usefixebody;
}
Body * RigidBody::GetBody()
{
return &R_body;
}
void RigidBody::AppliedForce()
{
if(R_body.mass_data.mass > 0)
{
#ifdef CE_PLATEFORME
R_body.force.y = -10 * R_body.mass_data.mass * R_body.mass_data.mass ;
#endif // CE_PLATEFORME
R_body.acceleration.x = R_body.force.x * R_body.mass_data.inv_mass + R_body.acceleration.x;
R_body.acceleration.y = R_body.force.y * R_body.mass_data.inv_mass + R_body.acceleration.y;
R_body.velocity.x = R_body.velocity.x + (R_body.acceleration.x * 0.1);
R_body.velocity.y = R_body.velocity.y + (R_body.acceleration.y * 0.1);
Move(R_body.velocity.x * 0.1, R_body.velocity.y * 0.1);
R_body.force.x = 0;
R_body.force.y = 0;
R_body.acceleration.x = 0;
R_body.acceleration.y = 0;
}
}
int RigidBody::Move(int x,int y)
{
if(TryMove( x, y))return 1;
Affine(x,y);
return 0;
}
int RigidBody::TryMove( int x ,int y)
{
Level * m = Conteneur->GetEngine()->GetCurrentLevel();
if( m == NULL )
{
int tx = R_body.transform->GetX() + x;
int ty = R_body.transform->GetY() + y;
R_body.transform->SetXY( tx , ty);
return 1;
}
if( x >= m->tileWidth || y>= m->tileHeight )
{
TryMove( x / 2 , y / 2 );
TryMove( x / 2 , y / 2 );
return 1;
}
int tx = R_body.transform->GetX() + x;
int ty = R_body.transform->GetY() + y;
if(!CollisionDecor( tx , ty))
{
R_body.transform->SetXY( tx , ty);
return 1;
}
else
{
if( x )R_body.velocity.x = 0 ;
if( y )R_body.velocity.y = 0 ;
}
return 0;
}
int RigidBody::CollisionDecor( int x , int y)
{
if(Conteneur->GetEngine()->GetCurrentLevel())
{
Level * m = Conteneur->GetEngine()->GetCurrentLevel();
int sizex , sizey;
if(!usefixebody)
{
sizex = Conteneur->GetRender()->GetSizeX();
sizey = Conteneur->GetRender()->GetSizeY();
}
else
{
sizex = widht;
sizey = height;
}
if( x < 0 || ( x + sizex ) > m->levelWidth * m->tileWidth || y + sizey > m->levelHeight * m->tileHeight || y < 2) return 1;
int xmin,xmax,ymin,ymax,i,j,indicetile, hm;
hm = m->levelHeight * m->tileHeight;
xmin = x / m->tileWidth;
ymin = (hm - y - sizey ) / m->tileHeight;
xmax = (x + sizex - 1) / m->tileWidth;
ymax = (hm - y -1) / m->tileHeight;
for( i = xmin ; i <= xmax ; i++ )
{
for( j = ymin ; j <= ymax ; j++ )
{
indicetile = m->GetIdMap(i,j);
if(m->solid[indicetile])return 1;
}
}
}
return 0;
}
void RigidBody::Affine(int vx,int vy)
{
int i;
for( i = 0 ; i < abs(vx) ; i++)
{
if( !TryMove ( sgn(vx) , 0 ) )
break;
}
for( i = 0 ; i < abs(vy) ; i++)
{
if( !TryMove ( 0 , sgn(vy) ) )
break;
}
}

56
src/Object/Script.cpp Normal file
View File

@ -0,0 +1,56 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Script.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Object\Script.hpp"
Script::Script()
{
OConteneur = NULL;
EConteneur = NULL;
}
void Script::Start()
{
}
void Script::Update()
{
}
void Script::UpdateEverySecond()
{
}
void Script::AffectObject(Object * OV)
{
OConteneur = OV;
}
void Script::AffectEngine(Engine * EV)
{
EConteneur = EV;
}
Object * Script::GetObject()
{
return OConteneur;
}
Engine * Script::GetEngine()
{
if(OConteneur) return OConteneur->GetEngine();
return EConteneur;
}

221
src/Object/Sprite.cpp Normal file
View File

@ -0,0 +1,221 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Sprite.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Object\Sprite.hpp"
Sprite::Sprite()
{
Alpha = NULL;
Beta = NULL;
ReverseAlpha = NULL;
ReverseBeta = NULL;
}
Sprite::Sprite(const unsigned char * v1, int sizex, int sizey , int bx , int by)
{
Beta=v1;
size_x=sizex;
size_y=sizey;
b_x = bx;
b_y = by;
Alpha = NULL;
ReverseAlpha = NULL;
ReverseBeta = NULL;
}
Sprite::Sprite(const unsigned char * v1, const unsigned char * v2, int sizex, int sizey , int bx, int by)
{
Beta=v1;
Alpha = v2;
size_x=sizex;
size_y=sizey;
b_x = bx;
b_y = by;
ReverseAlpha = NULL;
ReverseBeta = NULL;
}
void Sprite::DrawReverseSprite( int x , int y , int d)
{
switch(d)
{
case 90: if(size_y % 2 == 0)y --; break;
case 180: if(size_y % 2 == 0)y --; if(size_x % 2 == 0)x --; break;
case 270: if(size_x % 2 == 0)x --; break;
}
if(ReverseBeta)
{
if(ReverseAlpha)
{
ML_bmp_or_rotate((const unsigned char*) ReverseAlpha, x + br_x, y + br_y, size_x , size_y, d); // Affichage du canal alpha
ML_bmp_and_rotate((const unsigned char*) ReverseBeta, x +br_x, y +br_y, size_x , size_y, d); // Affichage du sprite en entier
}
else
{
ML_bmp_or_rotate((const unsigned char*) ReverseBeta, x +br_x , y +br_y, size_x , size_y , d); // Affichage du sprite en entier
}
}
else
{
DrawSprite( x , y , d);
}
}
void Sprite::DrawSprite( int x , int y , int d)
{
switch(d)
{
case 90: if(size_y % 2 == 0)y --; break;
case 180: if(size_y % 2 == 0)y --; if(size_x % 2 == 0)x --; break;
case 270: if(size_x % 2 == 0)x --; break;
}
if(Beta)
{
if(Alpha)
{
ML_bmp_or_rotate((const unsigned char*) Alpha, x + b_x, y + b_y, size_x , size_y , d); // Affichage du canal alpha
ML_bmp_and_rotate((const unsigned char*) Beta, x +b_x, y +b_y, size_x , size_y ,d); // Affichage du sprite en entier
}
else
{
ML_bmp_or_rotate((const unsigned char*) Beta, x +b_x , y +b_y, size_x , size_y , d); // Affichage du sprite en entier
}
}
}
void Sprite::CreateReverse( int brx , int bry)
{
int taille, lx , decalage;
unsigned char transit;
unsigned char out ;
br_x = brx;
br_y = bry;
decalage = size_x % 8;
lx = size_x / 8 + ( decalage != 0 );
taille = lx * size_y;
if(Beta)
{
ReverseBeta = (unsigned char*) malloc(sizeof(unsigned char) * taille);
for( int i = 0 ; i < size_y ; i++ )
for( int a = 0 ; a < lx ; a++ )
ReverseBeta[i * lx + a] = Beta[ (i + 1) * lx - (a + 1)];
for(int i = 0; i < taille ; i++)
{
transit = ReverseBeta[i];
out = 0x0;
if((transit & 0x80) != 0x0) out = out | 0x01;
if((transit & 0x40) != 0x0) out = out | 0x02;
if((transit & 0x20) != 0x0) out = out | 0x04;
if((transit & 0x10) != 0x0) out = out | 0x08;
if((transit & 0x08) != 0x0) out = out | 0x10;
if((transit & 0x04) != 0x0) out = out | 0x20;
if((transit & 0x02) != 0x0) out = out | 0x40;
if((transit & 0x01) != 0x0) out = out | 0x80;
ReverseBeta[i] = out;
}
if(decalage)
{
for(int i = 0 ; i < size_y ; i++ )
for(int a = 0 ; a < lx ; a++ )
{
transit = ((unsigned char)ReverseBeta[i * lx + a] >> ( decalage));
ReverseBeta[i * lx + a] = ((unsigned char)ReverseBeta[i * lx + a] << ( 8 - decalage));
if(a != 0)ReverseBeta[i * lx + a - 1] = ReverseBeta[i * lx + a - 1] | transit;
}
}
}
if(Alpha)
{
ReverseAlpha = (unsigned char*) malloc(sizeof(unsigned char) * taille);
for(int i = 0 ; i < size_y ; i++)
for(int a = 0; a < lx; a++)
ReverseAlpha[i * lx + a] = Alpha[ (i +1)*lx - (a+1)];
for(int i = 0; i < taille ; i++)
{
transit = ReverseAlpha[i];
out = 0x0;
if((transit & 0x80) != 0x0) out = out | 0x01;
if((transit & 0x40) != 0x0) out = out | 0x02;
if((transit & 0x20) != 0x0) out = out | 0x04;
if((transit & 0x10) != 0x0) out = out | 0x08;
if((transit & 0x08) != 0x0) out = out | 0x10;
if((transit & 0x04) != 0x0) out = out | 0x20;
if((transit & 0x02) != 0x0) out = out | 0x40;
if((transit & 0x01) != 0x0) out = out | 0x80;
ReverseAlpha[i] = out;
}
if(decalage)
{
for(int i = 0 ; i < size_y ; i++ )
for(int a = 0 ; a < lx ; a++ )
{
transit = ((unsigned char)ReverseAlpha[i * lx + a] >> ( decalage));
ReverseAlpha[i * lx + a] = ((unsigned char)ReverseAlpha[i * lx + a] << ( 8 - decalage));
if(a)ReverseAlpha[i * lx + a - 1] = ReverseAlpha[i * lx + a - 1] | transit;
}
}
}
}
int Sprite::GetSizeY()
{
return size_y;
}
int Sprite::GetSizeX()
{
return size_x;
}
int Sprite::GetBlitX()
{
return b_x;
}
int Sprite::GetBlitY()
{
return b_y;
}

65
src/Object/Transforms.cpp Normal file
View File

@ -0,0 +1,65 @@
/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Transform.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#include "..\Rework\include\Object\Transform.hpp"
Transform::Transform(Object * Pointeur)
{
Conteneur = Pointeur;
positionabsolu.x = 0;
positionabsolu.y = 0;
positionrelative.x = 0;
positionrelative.y = 0;
}
double Transform::GetX()
{
return positionabsolu.x;
}
double Transform::GetY()
{
return positionabsolu.y;
}
double Transform::GetRelativeX()
{
return positionrelative.x;
}
double Transform::GetRelativeY()
{
return positionrelative.y;
}
void Transform::SetX(double v)
{
positionabsolu.x = v;
}
void Transform::SetY(double v)
{
positionabsolu.y = v;
}
void Transform::SetXY(double vx ,double vy)
{
positionabsolu.x = vx;
positionabsolu.y = vy;
}
void Transform::SetRelativeXY(double vx ,double vy)
{
positionrelative.x = vx;
positionrelative.y = vy;
}