00001
00008
00009
00010
00011
00012
00013 #if COMPILING_MODULE_SIM
00014 #ifndef MOD_SIM_MISSILE_HH
00015 #define MOD_SIM_MISSILE_HH 1
00016
00017 #include "mod_base_guidance.hh"
00018 #include "mod_base_partsys.hh"
00019 #include "mod_sim_game.hh"
00020
00021 namespace mod_sim {
00022
00023 void FireMissile( shptr<Craft> craftLauncher );
00024
00031 class MissileActor : public game::Actor
00032 {
00033
00034
00035 private:
00039 class SmokeTrailParticle : public Particle
00040 {
00041 public:
00042 SmokeTrailParticle( const WorldVertex& pos, const RGBA color, const fp widthFactor, const bool hitTarget );
00043 void Animate( void );
00044 const bool mHitTarget;
00045 };
00046
00047
00048
00049
00050 public:
00051 CLASS_METHOD void MakeMissile( const WorldVertex& position,
00052 const Vector3& direction,
00053 SharedPtr<Craft> craftLauncher,
00054 SharedPtr<game::Actor> target );
00055 private:
00056 MissileActor( const WorldVertex& position,
00057 const Vector3& direction,
00058 SharedPtr<Craft> craftLauncher,
00059 SharedPtr<game::Actor> target );
00060 ~MissileActor();
00061
00062 private:
00063 void AddParticle( const WorldVertex& pos, const RGBA color );
00064 void Action( const Milliseconds millisecElapsed );
00065 void UpdateMissileView( const Vector3& step );
00066
00067 private:
00068 CLASS_VAR RGBA msLightColorAmbientDiffuse;
00069 CLASS_VAR SafePtr<MissileActor> msLightOwner;
00070 CLASS_VAR SafePtr<MissileActor> msMissileViewOwner;
00071 WorldVertex mPosition;
00072 shptr<game::Actor> mTarget;
00073 bool mHitTarget;
00074 Guidance mGuidance;
00075 Milliseconds mTimeOfDeath;
00076 bool mZombie;
00077 ParticleSystem mParticleSystem;
00078 uint mParticlesPerTick;
00079 public:
00080
00081 };
00082
00083 }
00084
00085 #endif // MOD_SIM_MISSILE_HH
00086 #endif // COMPILING_MODULE_SIM