Pioneer
Loading...
Searching...
No Matches
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
10class AICommand;
11
12class Missile : public DynamicBody {
13public:
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
36protected:
37 virtual void SaveToJson(Json &jsonObj, Space *space) override;
38
39private:
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
Body * GetOwner() const
Definition Missile.h:28
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
Definition Propulsion.h:25
Definition Space.h:19
Definition CollisionContact.h:9
Definition ShipType.h:12
std::string Id
Definition ShipType.h:24