TapestryEngine

A 2D Platformer Game Engine
Log | Files | Refs

3fc2f2da29c50145a8bb19e2fa1cc956594990a8.svn-base (3320B)


      1 #ifndef EVENT_H
      2 #define EVENT_H
      3 
      4 #include "Utils.h"
      5 #include "Console.h"
      6 
      7 enum EventType
      8 {
      9 	UNSUBSCRIBE,
     10 
     11 	//ASSIGN_HANDLE,
     12 	//GET_ACTOR_ADDRESS,
     13 
     14 	ANIM_COMPLETE,
     15 
     16 	KEY_DOWN,
     17 	KEY_UP,
     18 
     19 	ACTOR_COLLISION,
     20 	SENSOR_COLLISION,
     21 	PLAYER_CHECK,
     22 	PLAYER_CONFIRM,
     23 
     24 	MOVED_THIS_FRAME,
     25 	CHECK_RECT_SENSOR,
     26 	CHECK_BLOCKERS,
     27 
     28 	CAMERA_TARGET,
     29 
     30 	EMIT_PARTICLE,
     31 	CREATE_PARTICLE,
     32 
     33 	CREATE_POINT_SOUND,
     34 	ACTOR_PLAY_SOUND,
     35 	SOUND_COMPLETE,
     36 
     37 	SWITCH,
     38 
     39 	DIALOGUE,
     40 	SCROLL,
     41 	TERMINATE_DIALOGUE,
     42 
     43 	FADE,
     44 
     45 	TELEPORT,
     46 
     47 	INTERACT,
     48 
     49 	DAMAGE,
     50 
     51 	SPAWN,
     52 	DEATH
     53 
     54 };
     55 
     56 enum SensorType
     57 {
     58 	LOS, //Line Of Sight
     59 	Attack,
     60 	Touch,
     61 };
     62 
     63 struct SensorData
     64 {
     65 	SensorType st;
     66 	SDL_Rect* sensor;
     67 	int id;
     68 };
     69 
     70 struct SensorResponse
     71 {
     72 	SensorType st;
     73 	int id;
     74 };
     75 
     76 struct PointSpawnData
     77 {
     78 	int x;
     79 	int y;
     80 	char* name;
     81 	char* type;
     82 };
     83 
     84 struct DialogueData
     85 {
     86 	char* str;
     87 	int talkerID;
     88 };
     89 
     90 union EventData
     91 {
     92 	int i;
     93 	void* p;
     94 	bool b;
     95 	char* str;
     96 	SDL_Rect* rect;
     97 	SensorData sd;
     98 	SensorResponse sr;
     99 	PointSpawnData psd;
    100 	DialogueData dd;
    101 };
    102 
    103 class EventReceiver; //Forward Declare event receiver
    104 
    105 class Event
    106 {
    107 public:
    108 	Event() : mType(), mEvData() {} //, mReturnAddress(NULL) {}
    109 
    110 	Event(EventType EvType) : mType(EvType), mEvData() {}
    111 
    112 	//Event(EventType EvType, ActHandle ReturnAddress = NULL) : mType(EvType), mEvData(), mReturnAddress(ReturnAddress) {}
    113 
    114 	Event(EventType EvType, EventData EvData, int ReturnAddress = NULL) : mType(EvType), mEvData(EvData) {}//, mReturnAddress(ReturnAddress) {}
    115 
    116 	Event(EventType EvType, int i) : mType(EvType)//, mReturnAddress(NULL)
    117 	{
    118 		mEvData.i = i;
    119 	}
    120 
    121 	Event(EventType EvType, void* P) : mType(EvType)//, mReturnAddress(NULL)
    122 	{
    123 		mEvData.p = P;
    124 	}
    125 
    126 	Event(EventType EvType, char* str) : mType(EvType)//, mReturnAddress(NULL)
    127 	{
    128 		mEvData.str = str;
    129 	}
    130 
    131 	Event(EventType EvType, SensorType SeType, SDL_Rect* sensor, int ID) : mType(EvType)//, mReturnAddress(NULL) //CHECK_RECT_SENSOR constructor
    132 	{
    133 		mEvData.sd.st = SeType;
    134 		mEvData.sd.sensor = sensor;
    135 		mEvData.sd.id = ID;
    136 	}
    137 
    138 	Event(EventType EvType, SensorType SeType, ActHandle ID) : mType(EvType)//, mReturnAddress(NULL) //collision response constructor: SENSOR_COLLISION,
    139 	{
    140 		mEvData.sr.st = SeType;
    141 		mEvData.sr.id = ID;
    142 	}
    143 
    144 	Event(EventType EvType, char* type, char* name, int x, int y) : mType(EvType)//, mReturnAddress(NULL)
    145 	{
    146 		mEvData.psd.x = x;
    147 		mEvData.psd.y = y;
    148 		mEvData.psd.name = name;
    149 		mEvData.psd.type = type;
    150 	}
    151 
    152 	Event(EventType EvType, char* str, int talkID) : mType(EvType)//, mReturnAddress(NULL)
    153 	{
    154 		mEvData.dd.str = str;
    155 		mEvData.dd.talkerID = talkID;
    156 	}
    157 
    158 	EventType* GetEventType()
    159 	{
    160 		return &mType;
    161 	}
    162 
    163 	EventData* GetEventData()
    164 	{
    165 		return &mEvData;
    166 	}
    167 
    168 //	int GetReturnAddress()
    169 //	{
    170 //		if(mReturnAddress != NULL)
    171 //		{
    172 //			return mReturnAddress;
    173 //		}
    174 //		gCons->ConsPrintf("No return address listed for this event\n");
    175 //		return NULL;
    176 //	}
    177 
    178 protected:
    179 
    180 	EventType mType;
    181 	EventData mEvData;
    182 //	ActHandle mReturnAddress;
    183 };
    184 
    185 class EventReceiver
    186 {
    187 public:
    188 
    189 	virtual bool EventProcess(Event eve) = 0;
    190 };
    191 
    192 class EventFeed  :  EventReceiver
    193 {
    194 public:
    195 	
    196 	EventFeed() : mSubs(), mNumberOfSubs(0) {}
    197 
    198 	bool Subscribe(EventReceiver* sub);
    199 
    200 	bool Unsubscribe(EventReceiver* sub);
    201 
    202 	bool EventProcess(Event eve);
    203 
    204 protected:
    205 
    206 	std::vector<EventReceiver*> mSubs;
    207 	int mNumberOfSubs;
    208 };
    209 
    210 class EventManager
    211 {
    212 public:
    213 protected:
    214 };
    215 
    216 #endif