OpenMoHAA 0.82.1
Loading...
Searching...
No Matches
weapturret.h
1/*
2===========================================================================
3Copyright (C) 2025 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// weapturret.h: MOH Turret. Usable by sentients and monsters.
24//
25
26#pragma once
27
28#include "weapon.h"
29#include "camera.h"
30
31extern Event EV_Turret_Enter;
32extern Event EV_Turret_Exit;
33extern Event EV_Turret_AI_TurnSpeed;
34extern Event EV_Turret_SetMaxUseAngle;
35
36typedef enum {
37 TURRETAISTATE_DEFAULT,
38 TURRETAISTATE_TRACK,
39 TURRETAISTATE_SUPPRESS,
40 TURRETAISTATE_SUPPRESS_WAIT
41} turretaistate_e;
42
43typedef enum {
44 TURRETFIRESTATE_NONE,
45 TURRETFIRESTATE_BEGIN_FIRE,
46 TURRETFIRESTATE_WARMING,
47 TURRETFIRESTATE_READY,
48 TURRETFIRESTATE_FIRING
49} turretfiringstate_e;
50
51#define FAKEBULLETS 1
52
53class TurretGun : public Weapon
54{
55 friend class Vehicle;
56
57protected:
58 bool m_bFakeBullets;
59 bool m_bPlayerUsable;
60 bool m_bUsable;
61 bool m_bRestable;
62 Vector m_vIdleCheckOffset;
63 Vector m_vViewOffset;
64 float m_fMaxIdlePitch;
65 float m_fMaxIdleYaw;
66 Vector m_vUserViewAng;
67 Vector m_vUserLastCmdAng;
68 float m_fIdlePitchSpeed;
69 float m_fTurnSpeed;
70 float m_fAIPitchSpeed;
71 float m_fPitchUpCap;
72 float m_fPitchDownCap;
73 float m_fStartYaw;
74 float m_fMaxYawOffset;
75 float m_fUserDistance;
76 float m_fMinBurstTime;
77 float m_fMaxBurstTime;
78 float m_fMinBurstDelay;
79 float m_fMaxBurstDelay;
80 float m_fFireToggleTime;
81 int m_iFiring;
82 int m_iIdleHitCount;
83 CameraPtr m_pUserCamera;
84 float m_fViewJitter;
85 float m_fCurrViewJitter;
86 Vector m_vAIBulletSpread[MAX_FIREMODES];
87 int m_iTargetType;
88 SentientPtr m_pAIEnemy;
89 Vector m_Aim_offset;
90 SafePtr<Animate> m_pViewModel;
91 ScriptThreadLabel m_UseThread;
92
93public:
94 bool m_bHadOwner;
95
96private:
97 int m_iAIState;
98 float m_fAIConvergeTime;
99 int m_iAISuppressTime;
100 int m_iAISuppressWaitTime;
101 int m_iAILastTrackTime;
102 int m_iAIStartSuppressTime;
103 vec3_t m_vDesiredTargetAngles;
104 float m_fAIDesiredTargetSpeed;
105 vec3_t m_vAIDesiredTargetPosition;
106 vec3_t m_vAITargetPosition;
107 vec3_t m_vAICurrentTargetPosition;
108 vec3_t m_vAITargetSpeed;
109 int m_iAINextSuppressTime;
110 float m_fAISuppressWidth;
111 float m_fAISuppressHeight;
112 Vector m_vMuzzlePosition;
113 float m_fMaxUseAngle;
114
115protected:
116 void ThinkIdle();
117 void P_SetTargetAngles(Vector &vTargAngles);
118 virtual void P_ThinkActive();
119
120public:
121 CLASS_PROTOTYPE(TurretGun);
122
123 TurretGun();
124 virtual ~TurretGun();
125
126 // added in 2.0
127 //====
128 void AI_SetTargetAngles(vec3_t vTargAngles, float speed);
129 void AI_SetDesiredTargetAngles(const vec3_t angles, float speed);
130 void AI_DoTargetNone();
131 void AI_MoveToDefaultPosition();
132 void AI_DoTargetAutoDefault();
133 void AI_StartDefault();
134 void AI_StartSuppress();
135 void AI_StartSuppressWait();
136 void AI_StartTrack();
137 void AI_DoTargetAutoTrack();
138 void AI_DoSuppressionAiming();
139 void AI_DoTargetAutoSuppress();
140 void AI_DoTargetAutoSuppressWait();
141 void AI_DoTargetAuto();
142 void AI_DoAiming();
143 void AI_DoFiring();
144 void AI_ThinkActive();
145 //====
146
147 void Think() override;
148
149 void PlaceTurret(Event *ev);
150
151 virtual void P_UserAim(usercmd_t *ucmd);
152 qboolean UserAim(usercmd_t *ucmd);
153 virtual void TurretBeginUsed(Sentient *pEnt);
154 virtual void P_TurretBeginUsed(Player *pEnt);
155 virtual void AI_TurretBeginUsed(Sentient *pEnt); // added in 2.0
156 virtual void TurretEndUsed();
157 virtual void P_TurretEndUsed();
158 virtual void AI_TurretEndUsed(); // added in 2.0
159 void RemoveUserCamera(); // added in 2.0
160 virtual void TurretUsed(Sentient *pEnt);
161 virtual void P_TurretUsed(Player *player);
162
163 void TurretUsed(Event *ev);
164 void P_SetPlayerUsable(Event *ev);
165 void EventSetUsable(Event *ev); // added in 2.0
166 void P_SetViewOffset(Event *ev);
167 void EventMaxIdlePitch(Event *ev); // added in 2.0
168 void EventMaxIdleYaw(Event *ev); // added in 2.0
169 void SetIdleCheckOffset(Event *ev);
170 bool IsFiring();
171 void CalcFiringViewJitter();
172 void P_ApplyFiringViewJitter(Vector& vAng);
173 void AI_TurnSpeed(float speed);
174 void AI_PitchSpeed(float speed);
175 void PitchCaps(float upcap, float downcap);
176 void MaxYawOffset(float max);
177 void YawCenter(float center);
178 void P_UserDistance(float dist);
179 void AI_BurstFireSettings(float min_bursttime, float max_bursttime, float min_burstdelay, float max_burstdelay);
180 void AI_EventSetAimTarget(Event *ev);
181 void AI_EventSetAimOffset(Event *ev);
182 void AI_EventClearAimTarget(Event *ev);
183 void AI_EventStartFiring(Event *ev);
184 void AI_EventStopFiring(Event *ev);
185 void AI_EventTurnSpeed(Event *ev);
186 void AI_EventPitchSpeed(Event *ev); // added in 2.0
187 void EventPitchCaps(Event *ev);
188 void EventMaxYawOffset(Event *ev);
189 void EventYawCenter(Event *ev);
190 void P_EventUserDistance(Event *ev);
191 void P_EventViewJitter(Event *ev);
192 void P_EventDoJitter(Event *ev); // added in 2.0
193 void AI_EventBurstFireSettings(Event *ev);
194 void P_EventSetThread(Event *ev);
195 void P_SetMaxUseAngle(Event *ev); // added in 2.0
196 void P_SetStartYaw(Event *ev); // added in 2.0
197 void P_SetViewangles(Event *ev);
198 void P_SetViewAnglesForTurret(Event *ev);
199 void P_GetViewangles(Event *ev);
200 void P_CreateViewModel();
201 void P_DeleteViewModel();
202
203 qboolean AI_SetWeaponAnim(const char *anim, Event *ev = NULL);
204 qboolean P_SetWeaponAnim(const char *anim, Event *ev = NULL);
205 qboolean SetWeaponAnim(const char *anim, Event *ev = NULL) override;
206 void AI_StopWeaponAnim();
207 void P_StopWeaponAnim();
208 void StopWeaponAnim() override;
209
210 bool AI_CanTarget(const vec3_t org);
211 virtual float FireDelay(firemode_t mode) override;
212 virtual void SetFireDelay(Event *ev) override; // added in 2.0
213 void ShowInfo(float fDot, float fDist) override;
214
215 // added in 2.0
216 //====
217 void AI_EventSetTargetType(Event *ev);
218 void AI_EventGetTargetType(Event *ev);
219 void AI_EventSetConvergeTime(Event *ev);
220 void AI_EventSetSuppressTime(Event *ev);
221 void AI_EventSetSuppressWaitTime(Event *ev);
222 void AI_EventSetSuppressWidth(Event *ev);
223 void AI_EventSetSuppressHeight(Event *ev);
224 void AI_EventSetBulletSpread(Event *ev);
225 void GetMuzzlePosition(
226 vec3_t position, vec3_t vBarrelPos = NULL, vec3_t forward = NULL, vec3_t right = NULL, vec3_t up = NULL
227 ) override;
228 Vector EyePosition();
229 void setAngles(Vector ang) override;
230 //====
231
232 const Vector& GetUserViewAngles() const;
233 void SetUserViewAngles(const Vector& vAngles);
234
235 void Archive(Archiver& arc) override;
236};
Definition archive.h:86
Definition listener.h:246
Definition safeptr.h:160
Definition gamescript.h:165
Definition vector.h:61