Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

effects.h

00001 
00008 #ifndef _EFFECTS_H
00009 #define _EFFECTS_H
00010 
00011 #include "main.h"
00012 #include "object.h"
00013 
00014 #include <map>
00015 #include <list>
00016 using namespace std;
00017 
00023 class Effect {
00024 public:
00025 
00033     typedef map<Object*, EffectHandler> RecList;
00034 
00039     Effect( void ) : _sender( NULL ) { }
00040 
00045     Effect( Actor *sender ) : _sender( sender ) { }
00046 
00056     virtual void pre_apply( Object *who );
00057 
00063     virtual void apply_to( Object *who );
00064 
00069     virtual void apply_to_all( void );
00070 
00074     virtual RecList& get_receiver_list( void ) = 0;
00075 
00082     virtual void add_handler(Object *who);
00083 
00087     virtual void clear_handlers();
00088 
00094     EffectHandler Effect::find_handler( Object *who )
00095         { return ( get_receiver_list() )[ who ]; }
00096 
00100     Actor *get_sender( void ) { return _sender; }
00101 
00102     const Vec3 get_origin( void );
00103 
00104 protected:
00105 
00106     Actor *_sender;     
00107 };
00108 
00109 #define TO_EFFECT(pobj, type) (dynamic_cast<type*>(pobj))
00110 
00121 class RegisterEffect {
00122 public:
00123     typedef list<Effect*> EffectList;
00124     typedef EffectList::iterator iterator;
00125 
00134     RegisterEffect( Effect *effect );
00135 
00139     static iterator begin( void );
00140 
00144     static iterator end( void );
00145 };
00146 
00147 #endif // header guard

Generated on Sat Mar 13 15:00:10 2004 by doxygen 1.3.5