38class VehicleTurretGun :
public TurretGun
43 Vector m_vTargetAngles;
44 Vector m_vLocalAngles;
45 float m_mBaseOrientation[3][3];
47 Vector m_vLastBaseAngles;
48 SafePtr<Entity> m_pBaseEntity;
51 bool m_bUseRemoteControl;
54 SafePtr<Entity> m_pVehicleOwner;
55 bool m_bRemoveOnDeath;
56 SafePtr<VehicleCollisionEntity> m_pCollisionEntity;
59 SOUND_STATE_TURRET m_eSoundState;
60 float m_fNextSoundState;
66 float m_fWarmupTimeRemaining;
67 float m_fFireWarmupDelay;
68 float m_fTargetReloadTime;
72 float m_fReloadTimeRemaining;
73 Vector m_vAimTolerance;
74 SentientPtr m_pRemoteOwner;
78 CLASS_PROTOTYPE(VehicleTurretGun);
81 Vector m_vLastBarrelPos;
86 virtual ~VehicleTurretGun();
88 void Think(
void)
override;
89 void P_UserAim(usercmd_t *ucmd)
override;
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);
118 bool UseRemoteControl(
void);
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();
128 void UpdateRemoteControl();
129 void UpdateAimTarget();
130 Entity *GetParent()
const;
131 float GetWarmupFraction()
const;
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;
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);
149 void PlayReloadSound(Event *ev);
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;
160 void Archive(
Archiver& arc)
override;
166class VehicleTurretGunTandem :
public VehicleTurretGun
170 SafePtr<VehicleTurretGunTandem> m_PrimaryTurret;
171 SafePtr<VehicleTurretGunTandem> m_HeadTurret;
172 SafePtr<VehicleTurretGunTandem> m_ActiveTurret;
173 float m_fSwitchTimeRemaining;
174 float m_fSwitchDelay;
178 CLASS_PROTOTYPE(VehicleTurretGunTandem);
181 VehicleTurretGunTandem();
182 ~VehicleTurretGunTandem();
184 virtual void EventLinkTurret(Event *ev);
185 virtual void EventSetSwitchThread(Event *ev);
186 virtual void AttachLinkedTurret(
Entity *ent);
187 virtual void UpdateLinkedTurret();
188 virtual void OpenSlotsByModel();
190 void Think()
override;
191 bool IsRemoteControlled()
override;
192 SentientPtr GetRemoteOwner()
override;
193 void EndRemoteControl()
override;
195 virtual void SetPrimaryTurret(VehicleTurretGunTandem *pTurret);
196 virtual void SetActiveTurret(VehicleTurretGunTandem *pTurret);
197 VehicleTurretGunTandem *GetPrimaryTurret();
198 bool IsActiveTurret()
const;
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);
204 virtual void SwitchToLinkedTurret();
205 virtual void ThinkPrimary();
206 virtual void ThinkSecondary();
208 void RestrictYaw()
override;
210 void Archive(
Archiver& arc)
override;