OpenMoHAA 0.82.1
Loading...
Searching...
No Matches
vehicleturret.h
1/*
2===========================================================================
3Copyright (C) 2015 the OpenMoHAA team
4
5This file is part of OpenMoHAA source code.
6
7OpenMoHAA source code is free software; you can redistribute it
8and/or modify it under the terms of the GNU General Public License as
9published by the Free Software Foundation; either version 2 of the License,
10or (at your option) any later version.
11
12OpenMoHAA source code is distributed in the hope that it will be
13useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with OpenMoHAA source code; if not, write to the Free Software
19Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20===========================================================================
21*/
22
23// vehicleturret.h: Vehicle Turret.
24//
25
26#pragma once
27
28#include "weapturret.h"
29#include "vehicle.h"
30
31typedef enum {
32 STT_OFF,
33 STT_OFF_TRANS_MOVING,
34 STT_MOVING,
35 STT_MOVING_TRANS_OFF
36} SOUND_STATE_TURRET;
37
38class VehicleTurretGun : public TurretGun
39{
40 friend class Vehicle;
41
42protected:
43 Vector m_vTargetAngles;
44 Vector m_vLocalAngles;
45 float m_mBaseOrientation[3][3];
46 Vector m_vBaseAngles;
47 Vector m_vLastBaseAngles;
48 SafePtr<Entity> m_pBaseEntity;
49 int m_iPitchBone;
50 bool m_bBOIsSet;
51 bool m_bUseRemoteControl;
52 int m_iBarrelTag;
53 int m_iEyeBone;
54 SafePtr<Entity> m_pVehicleOwner;
55 bool m_bRemoveOnDeath;
56 SafePtr<VehicleCollisionEntity> m_pCollisionEntity;
57 bool m_bLocked;
58 bool m_bLockedAim;
59 SOUND_STATE_TURRET m_eSoundState;
60 float m_fNextSoundState;
61 str m_sSoundSet;
62
63 // added in 2.0
64 //===
65 float m_fWarmupDelay;
66 float m_fWarmupTimeRemaining;
67 float m_fFireWarmupDelay;
68 float m_fTargetReloadTime;
69 int m_iReloadShots;
70 int m_iAmmo;
71 float m_fReloadDelay;
72 float m_fReloadTimeRemaining;
73 Vector m_vAimTolerance;
74 SentientPtr m_pRemoteOwner;
75 //===
76
77public:
78 CLASS_PROTOTYPE(VehicleTurretGun);
79
80 Vector m_vBarrelPos;
81 Vector m_vLastBarrelPos;
82 // added in 2.0
83 Vector m_vAimOffset;
84
85 VehicleTurretGun();
86 virtual ~VehicleTurretGun();
87
88 void Think(void) override;
89 void P_UserAim(usercmd_t *ucmd) override;
90
91 void SetBaseOrientation(const vec3_t borientation[3], const vec3_t bangles);
92 void SetBaseEntity(Entity *e);
93 void SetVehicleOwner(Entity *e);
94 void SetRemoteOwner(Sentient *e);
95 virtual void RemoteControl(usercmd_t *ucmd, Sentient *owner);
96 void CollisionCorrect(trace_t *pTr);
97 void UpdateOrientation(bool bCollisionCheck);
98 void UpdateSound(void);
99 void UpdateOwner(Sentient *pOwner);
100 void SetBaseEntity(Event *ev);
101 void PlaceTurret(Event *ev);
102 void TurretBeginUsed(Sentient *pEnt) override;
103 void TurretEndUsed(void) override;
104 void TurretUsed(Sentient *pEnt) override;
105 void TurretUsed(Event *ev);
106 void EventKilled(Event *ev);
107 void EventDamage(Event *ev);
108 void EventRemoveOnDeath(Event *ev);
109 void EventSetCollisionModel(Event *ev);
110 void EventGetCollisionModel(Event *ev);
111 void EventTurnSpeed(Event *ev);
112 void EventLock(Event *ev);
113 void EventUnlock(Event *ev);
114 void SetSoundSet(Event *ev);
115 bool isLocked(void);
116 void Lock(void);
117 void UnLock(void);
118 bool UseRemoteControl(void);
119
120 virtual void EndRemoteControl();
121 virtual SentientPtr GetSentientOwner();
122 virtual SentientPtr GetRemoteOwner(void);
123 virtual bool IsRemoteControlled();
124 virtual void RestrictPitch();
125 virtual void RestrictYaw();
126 virtual void TurretHasBeenMounted();
127
128 void UpdateRemoteControl();
129 void UpdateAimTarget();
130 Entity *GetParent() const;
131 float GetWarmupFraction() const;
132
133 qboolean ReadyToFire(firemode_t mode, qboolean playsound) override;
134 void AdjustReloadStatus();
135 void GetMuzzlePosition(vec3_t position, vec3_t vBarrelPos, vec3_t forward, vec3_t right, vec3_t up) override;
136 void ApplyFireKickback(const Vector& org, float kickback) override;
137 float FireDelay(firemode_t mode) override;
138
139 // Added in 2.0
140 //====
141 void SetWarmupDelay(Event *ev);
142 void SetFireWarmupDelay(Event *ev);
143 void SetReloadDelay(Event *ev);
144 void SetReloadShots(Event *ev);
145 void SetAimOffset(Event *ev);
146 void SetAimTolerance(Event *ev);
147 void SetTargetEntity(Event *ev);
148 //====
149 void PlayReloadSound(Event *ev); // Added in 2.30
150 void SetTargetEntity(Entity *ent);
151 void UpdateAndMoveOwner();
152 void UpdateTimers(float& yawTimer, float& pitchTimer);
153 void UpdateCaps(float maxYawOffset, float maxPitchOffset);
154 void IdleToRestPosition();
155 void UpdateFireControl();
156 void UpdateCollisionEntity();
157 EntityPtr GetVehicle() const;
158 SentientPtr GetRawRemoteOwner() const;
159
160 void Archive(Archiver& arc) override;
161};
162
163//
164// Added in 2.0
165//
166class VehicleTurretGunTandem : public VehicleTurretGun
167{
168private:
169 cTurretSlot m_Slot;
170 SafePtr<VehicleTurretGunTandem> m_PrimaryTurret;
172 SafePtr<VehicleTurretGunTandem> m_ActiveTurret;
173 float m_fSwitchTimeRemaining;
174 float m_fSwitchDelay;
175 ScriptThreadLabel m_SwitchLabel;
176
177public:
178 CLASS_PROTOTYPE(VehicleTurretGunTandem);
179
180public:
181 VehicleTurretGunTandem();
182 ~VehicleTurretGunTandem();
183
184 virtual void EventLinkTurret(Event *ev);
185 virtual void EventSetSwitchThread(Event *ev); // Added in 2.30
186 virtual void AttachLinkedTurret(Entity *ent);
187 virtual void UpdateLinkedTurret();
188 virtual void OpenSlotsByModel();
189
190 void Think() override;
191 bool IsRemoteControlled() override;
192 SentientPtr GetRemoteOwner() override;
193 void EndRemoteControl() override; // Added in OPM
194
195 virtual void SetPrimaryTurret(VehicleTurretGunTandem *pTurret);
196 virtual void SetActiveTurret(VehicleTurretGunTandem *pTurret);
197 VehicleTurretGunTandem *GetPrimaryTurret();
198 bool IsActiveTurret() const;
199
200 void RemoteControl(usercmd_t *ucmd, Sentient *owner) override;
201 virtual void RemoteControlSecondary(usercmd_t *ucmd, Sentient *owner);
202 virtual void RemoteControlFire(usercmd_t *ucmd, Sentient *owner);
203
204 virtual void SwitchToLinkedTurret();
205 virtual void ThinkPrimary();
206 virtual void ThinkSecondary();
207
208 void RestrictYaw() override;
209
210 void Archive(Archiver& arc) override;
211};
Definition archive.h:86
Definition entity.h:203
Definition listener.h:246
Definition safeptr.h:160
Definition gamescript.h:165
Definition vector.h:61
Definition VehicleSlot.h:78
Definition str.h:77
Definition q_shared.h:1452