00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #if !defined(__INCLUDE_Lightningh_INCLUDE__)
00022 #define __INCLUDE_Lightningh_INCLUDE__
00023
00024 #include <engine/ActionReferenced.h>
00025 #include <weapons/WeaponLightning.h>
00026 #include <list>
00027
00028 class GLTexture;
00029 class Target;
00030 class Lightning : public ActionReferenced
00031 {
00032 public:
00033 Lightning(WeaponLightning *weapon,
00034 WeaponFireContext &weaponContext,
00035 FixedVector &position, FixedVector &velocity);
00036 virtual ~Lightning();
00037
00038 virtual void draw();
00039 virtual void init();
00040 virtual void simulate(fixed frameTime, bool &remove);
00041 virtual std::string getActionDetails();
00042
00043 protected:
00044 struct Segment
00045 {
00046 FixedVector start;
00047 FixedVector end;
00048 FixedVector direction;
00049 bool endsegment;
00050 fixed size;
00051 };
00052 bool firstTime_;
00053 fixed totalTime_;
00054 std::list<Segment> segments_;
00055
00056 GLTexture *texture_;
00057 WeaponLightning *weapon_;
00058 FixedVector position_;
00059 FixedVector velocity_;
00060 WeaponFireContext weaponContext_;
00061
00062 void damageTargets(FixedVector &position,
00063 std::map<unsigned int, fixed> &hurtMap);
00064 void dispaceDirection(FixedVector &direction,
00065 FixedVector &originalDirection, fixed angle);
00066 void generateLightning(int id, int depth, fixed size,
00067 FixedVector &originalPosition, FixedVector &originalDirection,
00068 FixedVector &position, FixedVector &direction,
00069 std::map<unsigned int, fixed> &hurtMap);
00070 };
00071
00072 #endif // __INCLUDE_Lightningh_INCLUDE__