00001 
#ifndef DEF_EVENTS_H
00002 
#define DEF_EVENTS_H 1
00003 
00004 
#define EV_DELAY     0x00000001
00005 
#define EV_START     0x00000002
00006 
#define EV_RUN       0x00000004
00007 
#define EV_END       0x00000008
00008 
#define EV_CANCEL    0x00000010
00009 
00016 class Event {
00017     
public:
00022         
Event(
Object* obj, Uint16 length, Uint16 edelay=0, Uint32 switchstate=NOTHING);
00024         
virtual ~Event();
00025         
virtual Uint16 update(Uint16 dt);   
00026         
virtual void cancel();
00027         
virtual void start();
00028         
virtual void end();
00029         
virtual void reset() { }
00030     
protected:
00031         
Object* owner;
00032         Uint16 duration;
00033         Uint16 delay;
00034         Sint16 tleft;
00035         
bool started;
00036         Uint32 state;
00037 };
00038 
00043 class CEvent : 
public Event {
00044     
public:
00045         
CEvent(
Character* chr, Uint16 length, Uint16 edelay=0, Uint32 switchstate=NOTHING);
00046     
protected:
00047         
Character* charowner;
00048 };
00049 
00054 class AnimEvent : 
public Event {
00055     
public:
00063         
AnimEvent(
Object* obj, Uint16 length, Uint16 edelay=0, Uint32 switchstate=NOTHING,
00064           Mix_Chunk* asound=NULL, EmptyAnimationPtr runanim=EmptyAnimationPtr());
00068         
virtual Uint16 
update(Uint16 dt);
00069         
virtual void start();
00070         
virtual void end();  
00071         
virtual void cancel();
00072     
protected:
00073         EmptyAnimationPtr anim;
00074         Mix_Chunk* sound;
00075 };
00076   
00081 class CAnimEvent : 
public CEvent {
00082     
public:
00083         
CAnimEvent(
Character* chr, Uint16 length, Uint16 edelay=0, Uint32 switchstate=NOTHING,
00084           Mix_Chunk* asound=NULL, EmptyAnimationPtr runanim=EmptyAnimationPtr());
00085         
virtual Uint16 update(Uint16 dt);
00086         
virtual void start();
00087         
virtual void end();  
00088         
virtual void cancel();
00089     
protected:
00090         EmptyAnimationPtr anim;
00091         Mix_Chunk* sound;
00092 };
00093 
00099 class EAttack : 
public CAnimEvent {
00100     
public:
00112         
EAttack(
Character* chr, Uint16 length, 
Weapon* atweapon, Uint16 dir, Uint16 weapon_range=0,
00113           Uint16 target_mask=NOTHING, Uint16 edelay=0, Uint32 switchstate=0, Mix_Chunk* esound=NULL,
00114           EmptyAnimationPtr runanim=EmptyAnimationPtr());
00115         
virtual void end();
00116     
protected:
00117         
Weapon* weapon;
00118         Uint16 direction;
00119         Uint16 range;
00120         Uint16 mask;
00121 };
00122 
00128 class ERun : 
public CAnimEvent {
00129     
public:
00131         
ERun(
Character* chr, Uint16 length, Sint16 edmax, Uint16 edelay=0,
00132           Uint32 switchstate=0, Mix_Chunk* esound=NULL, EmptyAnimationPtr runanim=EmptyAnimationPtr());
00133         
virtual ~
ERun();
00135         
virtual void start(); 
00136         
virtual void end(); 
00137         
virtual void cancel(); 
00138         
virtual void reset(); 
00140         
virtual Uint16 
update(Uint16 dt);
00141     
protected:
00142         Sint16 dmax;
00143         Sint16 t_reset;
00144 };
00145 
00146 
#endif