Pioneer
Missile.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _MISSILE_H
5 #define _MISSILE_H
6 
7 #include "DynamicBody.h"
8 #include "ShipType.h"
9 
10 class AICommand;
11 
12 class Missile : public DynamicBody {
13 public:
15  Missile() = delete;
16  Missile(const ShipType::Id &type, Body *owner, int power = -1);
17  Missile(const Json &jsonObj, Space *space);
18  virtual ~Missile();
19  void StaticUpdate(const float timeStep) override;
20  void TimeStepUpdate(const float timeStep) override;
21  virtual bool OnCollision(Body *o, Uint32 flags, double relVel) override;
22  virtual bool OnDamage(Body *attacker, float kgDamage, const CollisionContact &contactData) override;
23  virtual void NotifyRemoved(const Body *const removedBody) override;
24  virtual void PostLoadFixup(Space *space) override;
25  virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override;
26  void ECMAttack(int power_val);
27 
28  Body *GetOwner() const { return m_owner; }
29  const Body *GetTarget() const;
30 
31  bool IsArmed() const { return m_armed; }
32  void Arm();
33  void Disarm();
34  void AIKamikaze(Body *target);
35 
36 protected:
37  virtual void SaveToJson(Json &jsonObj, Space *space) override;
38 
39 private:
40  void Explode();
41  bool IsValidTarget(const Body *body);
42 
43  AICommand *m_curAICmd;
44  int m_power;
45  Body *m_owner;
46  bool m_armed;
47  const ShipType *m_type;
48  Propulsion *m_propulsion;
49 
50  int m_ownerIndex; // deserialisation
51 };
52 
53 #endif /* _MISSILE_H */
nlohmann::json Json
Definition: Json.h:8
Definition: ShipAICmd.h:19
Definition: Body.h:57
Definition: Camera.h:80
Definition: DynamicBody.h:15
Definition: Renderer.h:44
Definition: Missile.h:12
void AIKamikaze(Body *target)
Definition: Missile.cpp:306
const Body * GetTarget() const
Definition: Missile.cpp:289
Missile()=delete
bool IsArmed() const
Definition: Missile.h:31
void ECMAttack(int power_val)
Definition: Missile.cpp:106
void TimeStepUpdate(const float timeStep) override
Definition: Missile.cpp:152
virtual void PostLoadFixup(Space *space) override
Definition: Missile.cpp:94
void Disarm()
Definition: Missile.cpp:283
void Arm()
Definition: Missile.cpp:277
virtual void SaveToJson(Json &jsonObj, Space *space) override
Definition: Missile.cpp:77
virtual bool OnCollision(Body *o, Uint32 flags, double relVel) override
Definition: Missile.cpp:189
OBJDEF(Missile, DynamicBody, MISSILE)
virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override
Definition: Missile.cpp:298
virtual ~Missile()
Definition: Missile.cpp:101
virtual void NotifyRemoved(const Body *const removedBody) override
Definition: Missile.cpp:268
void StaticUpdate(const float timeStep) override
Definition: Missile.cpp:114
virtual bool OnDamage(Body *attacker, float kgDamage, const CollisionContact &contactData) override
Definition: Missile.cpp:197
Body * GetOwner() const
Definition: Missile.h:28
Definition: Propulsion.h:25
Definition: Space.h:19
Definition: CollisionContact.h:9
Definition: ShipType.h:12
std::string Id
Definition: ShipType.h:24