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