1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
| #ifndef INTELLIGENTOBJECT_H_INCLUDED
#define INTELLIGENTOBJECT_H_INCLUDED
#include "EObjectType.h"
#include "TypeDefCollision.h"
namespace IntelligentObjectType
{
enum EIntelligentObjectType
{
None,
Character,
Enemy,
Count
};
}
///////////////////////////////////////////////////////////////////////////////////
//Base Interface Class for every intelligent Object (Character, ennemy, etc)
///////////////////////////////////////////////////////////////////////////////////
class IntelligentObject
{
public:
IntelligentObject() : m_X(0), m_Y(0), m_Width(0), m_Height(0), m_Speed(0.f), m_MaxSpeed(0.f), m_AccelerationX(0.f), m_AccelerationY(0.f), m_Score(100), m_IsVisible(true), m_Type(IntelligentObjectType::None)
{
}
IntelligentObject(IntelligentObjectType::EIntelligentObjectType type) : m_X(0), m_Y(0), m_Width(0), m_Height(0), m_Speed(0.f), m_MaxSpeed(0.f), m_AccelerationX(0.f), m_AccelerationY(0.f), m_Score(100), m_IsVisible(true), m_Type(type)
{
}
//Pure virtual function to prevent to instanciate it
virtual ~IntelligentObject()
{
}
//The function that will be call by the collision system
void Collide(Collision* col)
{
DoCollide(*col);
}
/*
void React(ReactObject* obj)
{
DoReact(*obj);
}*/
void Update(float elapsedTime)
{
DoUpdate(elapsedTime);
}
virtual void Hurt(){}
float GetX() const
{
return m_X;
}
float GetY() const
{
return m_Y;
}
int GetWidth() const
{
return m_Width;
}
int GetHeight() const
{
return m_Height;
}
float GetSpeed() const
{
return m_Speed;
}
float GetAccelerationX() const
{
return m_AccelerationX;
}
float GetAccelerationY() const
{
return m_AccelerationY;
}
int GetScore() const
{
return m_Score;
}
bool IsVisible() const
{
return m_IsVisible;
}
void SetVisible(bool visible)
{
m_IsVisible = visible;
}
void SetX(float x)
{
m_X = x;
}
void SetY(float y)
{
m_Y = y;
}
void SetPosition(int x, int y)
{
m_X = x;
m_Y = y;
}
void SetWidth(int width)
{
m_Width = width;
}
void SetHeight(int height)
{
m_Height = height;
}
void SetSpeed(float speed)
{
m_Speed = speed;
}
void SetAccelerationX(float accelerationX)
{
m_AccelerationX = accelerationX;
}
void SetAccelerationY(float accelerationY)
{
m_AccelerationY = accelerationY;
}
void SetScore(int score)
{
m_Score = score;
}
IntelligentObjectType::EIntelligentObjectType GetType() const
{
return m_Type;
}
float GetMaxSpeed() const
{
return m_MaxSpeed;
}
void SetMaxSpeed(float speed)
{
m_MaxSpeed = speed;
}
BaseObjectType::EBaseObjectType GetBaseType() const
{
return BaseObjectType::IntelligentObjectType;
}
protected:
//Protected function
virtual void DoCollide(CollisionTwoIntelligentObject& col){}
virtual void DoCollide(CollisionIntelligentMovableObject& col){}
virtual void DoCollide(CollisionIntelligentImmobileObject& col){}
//virtual void DoCollide(CollisionTwoMovableObject& col){}
//virtual void DoCollide(CollisionMovableImmobileObject& col){}
/*
virtual void DoReact(ReactIntelligentObject& reaction){}
virtual void DoReact(ReactMovableObject& reaction){}
virtual void DoReact(ReactImmobileObject){}*/
virtual void DoUpdate(float elapsedTime){}
//Member
float m_X;
float m_Y;
int m_Width;
int m_Height;
float m_Speed;
float m_MaxSpeed;
float m_AccelerationX;
float m_AccelerationY;
int m_Score;
bool m_IsVisible;
IntelligentObjectType::EIntelligentObjectType m_Type;
};
#endif |