OpenMoHAA 0.82.0
Loading...
Searching...
No Matches
scriptthread.h
1/*
2===========================================================================
3Copyright (C) 2023 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#pragma once
24
25#include <listener.h>
26
27class ScriptThread : public Listener
28{
29 friend class Flag;
30 friend class EndOn;
31 friend class Listener;
32 friend class ScriptMaster;
33
34private:
35 ScriptVM *m_ScriptVM;
36 SafePtr<ScriptThread> m_WaitingContext;
37
38protected:
39 ScriptThread();
40
41 void CreateThread(Event *ev);
42 void CreateReturnThread(Event *ev);
43 void ExecuteScript(Event *ev);
44 void ExecuteReturnScript(Event *ev);
45 void EventGoto(Event *ev);
46 void EventDelayThrow(Event *ev);
47 void EventWait(Event *ev);
48 void EventWaitFrame(Event *ev);
49 void EventResume(Event *ev);
50 void EventPause(Event *ev);
51 void EventEnd(Event *ev);
52 void Print(Event *ev);
53 void Println(Event *ev);
54 void DPrintln(Event *ev); // Added in 2.0
55 void IPrintln(Event *ev);
56 void IPrintln_NoLoc(Event *ev);
57 void IPrintlnBold(Event *ev);
58 void IPrintlnBold_NoLoc(Event *ev);
59 void MPrint(Event *ev);
60 void MPrintln(Event *ev);
61
62 void Assert(Event *ev);
63 void CastInt(Event *ev);
64 void CastFloat(Event *ev);
65 void CastString(Event *ev);
66 void CastBoolean(Event *ev);
67 void CastEntity(Event *ev);
68
69 void TriggerEvent(Event *ev);
70 void CacheResourceEvent(Event *ev);
71 void RegisterAliasAndCache(Event *ev);
72 void MapEvent(Event *ev);
73 void SetCvarEvent(Event *ev);
74
75 Listener *SpawnInternal(Event *ev);
76 void Spawn(Event *ev);
77 void SpawnReturn(Event *ev);
78
79 void EventDebugLine(Event *ev); // Added in 2.0
80 void CueCamera(Event *ev);
81 void CuePlayer(Event *ev);
82 void FreezePlayer(Event *ev);
83 void ReleasePlayer(Event *ev);
84
85 void FadeIn(Event *ev);
86 void FadeOut(Event *ev);
87 void FadeSound(Event *ev);
88 void ClearFade(Event *ev);
89 void Letterbox(Event *ev);
90 void ClearLetterbox(Event *ev);
91 void MusicEvent(Event *ev);
92 void ForceMusicEvent(Event *ev);
93 void MusicVolumeEvent(Event *ev);
94 void RestoreMusicVolumeEvent(Event *ev);
95
96 void SoundtrackEvent(Event *ev);
97 void RestoreSoundtrackEvent(Event *ev);
98
99 //void ScriptError(const char* message, ...);
100 void SetCinematic(Event *ev);
101 void SetNonCinematic(Event *ev);
102 void SetAllAIOff(Event *ev);
103 void SetAllAIOn(Event *ev);
104
105 void WaitSkip(Event *ev);
106 void ThreadSkip(Event *ev);
107
108 void ServerEvent(Event *ev);
109 void StuffCommand(Event *ev);
110 void KillEnt(Event *ev);
111 void GetEntByEntnum(Event *ev); // Added in 2.30
112 void RemoveEnt(Event *ev);
113 void KillClass(Event *ev);
114 void RemoveClass(Event *ev);
115 void CameraCommand(Event *ev);
116 void SetLightStyle(Event *ev);
117 void CenterPrint(Event *ev);
118 void LocationPrint(Event *ev);
119 void MissionFailed(Event *ev);
120
121 void EventIsAlive(Event *ev);
122
123 void EventPopmenu(Event *ev);
124 void EventShowmenu(Event *ev);
125 void EventHidemenu(Event *ev);
126 void EventPlayMovie(Event *ev); // Added in 2.0
127 void EventPushmenu(Event *ev);
128 void EventHideMouse(Event *ev);
129 void Getcvar(Event *ev);
130
131 void GetRandomFloat(Event *ev);
132 void GetRandomInt(Event *ev);
133
134 void GetAbs(Event *ev);
136 // Added in 2.30
137 void EventCos(Event *ev);
138 void EventSin(Event *ev);
139 void EventTan(Event *ev);
140 void EventATan(Event *ev);
141 void EventSqrt(Event *ev);
143 void GetSelf(Event *ev);
144 void Vector_Length(Event *ev);
145 void Vector_Normalize(Event *ev);
146 void Vector_Add(Event *ev);
147 void Vector_Subtract(Event *ev);
148 void Vector_Scale(Event *ev);
149 void Vector_DotProduct(Event *ev);
150 void Vector_CrossProduct(Event *ev);
151 void Vector_ToAngles(Event *ev);
152 void EventAIsCloserThanBToC(Event *ev);
153 void EventPointsWithinDist(Event *ev);
154
155 void Angles_ToForward(Event *ev);
156 void Angles_ToLeft(Event *ev);
157 void Angles_ToUp(Event *ev);
158 void Angles_PointAt(Event *ev);
159 void EventTrace(Event *ev);
160 void EventSightTrace(Event *ev);
161 void EventPrint3D(Event *ev);
162
163 void EventHudDrawShader(Event *ev);
164 void EventHudDrawAlign(Event *ev);
165 void EventHudDrawRect(Event *ev);
166 void EventHudDrawVirtualSize(Event *ev);
167 void EventHudDrawColor(Event *ev);
168 void EventHudDrawAlpha(Event *ev);
169 void EventHudDrawString(Event *ev);
170 void EventHudDrawFont(Event *ev);
171
172 void EventError(Event *ev);
173 void EventLandmineDamage(Event *ev); // Added in 2.30
174 void EventRadiusDamage(Event *ev);
175
176 void EventBspTransition(Event *ev);
177 void EventLevelTransition(Event *ev);
178 void EventMissionTransition(Event *ev);
179 void EventStopTeamRespawn(Event *ev); // Added in 2.30
180 void EventEarthquake(Event *ev);
181 void EventTeamWin(Event *ev);
182 void EventGetBoundKey1(Event *ev);
183 void EventGetBoundKey2(Event *ev);
184 void EventLocConvertString(Event *ev);
185
186public:
187 CLASS_PROTOTYPE(ScriptThread);
188
189 void *operator new(size_t size);
190 void operator delete(void *ptr);
191
192 ScriptThread(ScriptClass *scriptClass, unsigned char *pCodePos);
193 virtual ~ScriptThread();
194
195 void Execute(Event& ev);
196 void Execute(Event *ev);
197 void Execute();
198 void Execute(ScriptVariable *data, int dataSize);
199 void Wait(int time);
200 void Pause(void);
201 void ScriptExecute(ScriptVariable *data, int dataSize, ScriptVariable& returnValue);
202 void ScriptExecuteInternal(ScriptVariable *data = NULL, int dataSize = 0);
203 void EventThrow(Event *ev);
204 void StartWaiting();
205 void StartTiming(int time);
206 void StartTiming(void);
207 void Stop(void);
208 virtual void StartedWaitFor(void) override;
209 virtual void StoppedWaitFor(const_str name, bool bDeleting) override;
210 virtual void StoppedNotify(void) override;
211 virtual ScriptThread *CreateThreadInternal(const ScriptVariable& label) override;
212 virtual ScriptThread *CreateScriptInternal(const ScriptVariable& label) override;
213
214 ScriptClass *GetScriptClass(void);
215 str FileName(void);
216
217 void EventCreateListener(Event *ev);
218 void EventDebugInt3(Event *ev); // Added in 2.0
219 void EventTimeout(Event *ev);
220
221 bool CanScriptTracePrint();
222
223 //
224 // Objectives
225 //
226 static void AddObjective(int index, int status, str text, Vector location);
227 static void SetCurrentObjective(int iObjective, int iTeam);
228 void SendObjective();
229 void SendObjectives();
230 void ClearObjectives();
231 void EventAddObjective(Event *ev);
232 void EventSetScoreboardToggle(Event *ev); // Added in 2.30
233 void EventSetCurrentObjective(Event *ev);
234 void EventClearObjectives(Event *ev);
235 void SetObjectiveLocation(Vector vLocation);
236 void SetObjectiveLocation(Event *ev);
237 void ClearObjectiveLocation(void);
238 void ClearObjectiveLocation(Event *ev);
239
240 void EventDrawHud(Event *ev);
241
242 virtual void Archive(Archiver& arc) override;
243 void ArchiveInternal(Archiver& arc);
244
245 //
246 // Openmohaa addition
247 //
248 void DelayExecute(Event& ev);
249 void DelayExecute(Event *ev = NULL);
250
251 int GetThreadState(void);
252
253 void CancelWaiting(Event *ev);
254 void EventRegisterCommand(Event *ev);
255
256 void EventHudDraw3d(Event *ev);
257 void EventHudDrawTimer(Event *ev);
258 void CanSwitchTeams(Event *ev);
259 void CharToInt(Event *ev);
260 void Conprintf(Event *ev);
261 void CreateHUD(Event *ev);
262 void Earthquake(Event *ev);
263 void FileOpen(Event *ev);
264 void FileWrite(Event *ev);
265 void FileRead(Event *ev);
266 void FileClose(Event *ev);
267 void FileEof(Event *ev);
268 void FileSeek(Event *ev);
269 void FileTell(Event *ev);
270 void FileRewind(Event *ev);
271 void FilePutc(Event *ev);
272 void FilePuts(Event *ev);
273 void FileGetc(Event *ev);
274 void FileGets(Event *ev);
275 void FileError(Event *ev);
276 void FileFlush(Event *ev);
277 void FileExists(Event *ev);
278 void FileReadAll(Event *ev);
279 void FileSaveAll(Event *ev);
280 void FileRemove(Event *ev);
281 void FileRename(Event *ev);
282 void FileCopy(Event *ev);
283 void FileReadPak(Event *ev);
284 void FileList(Event *ev);
285 void FileNewDirectory(Event *ev);
286 void FileRemoveDirectory(Event *ev);
287 void FlagClear(Event *ev);
288 void FlagInit(Event *ev);
289 void FlagSet(Event *ev);
290 void FlagWait(Event *ev);
291 void GetAreaEntities(Event *ev);
292 void GetArrayKeys(Event *ev);
293 void GetArrayValues(Event *ev);
294 void GetEntArray(Event *ev);
295 void GetPlayerNetname(Event *ev);
296 void GetPlayerIP(Event *ev);
297 void GetPlayerPing(Event *ev);
298 void GetPlayerClientNum(Event *ev);
299 void GetTime(Event *ev);
300 void GetDate(Event *ev);
301 void GetTimeZone(Event *ev);
302 void PregMatch(Event *ev);
303 void EventIHudDraw3d(Event *ev);
304 void EventIHudDrawShader(Event *ev);
305 void EventIHudDrawAlign(Event *ev);
306 void EventIHudDrawRect(Event *ev);
307 void EventIHudDrawVirtualSize(Event *ev);
308 void EventIHudDrawColor(Event *ev);
309 void EventIHudDrawAlpha(Event *ev);
310 void EventIHudDrawString(Event *ev);
311 void EventIHudDrawFont(Event *ev);
312 void EventIHudDrawTimer(Event *ev);
313 void EventIsArray(Event *ev);
314 void EventIsDefined(Event *ev);
315 void EventIsOnGround(Event *ev);
316 void EventIsOutOfBounds(Event *ev);
317 void EventACos(Event *ev);
318 void EventASin(Event *ev);
319 void EventATan2(Event *ev);
320 void EventCosH(Event *ev);
321 void EventSinH(Event *ev);
322 void EventTanH(Event *ev);
323 void EventExp(Event *ev);
324 void EventFrexp(Event *ev);
325 void EventLdexp(Event *ev);
326 void EventLog(Event *ev);
327 void EventLog10(Event *ev);
328 void EventModf(Event *ev);
329 void EventPow(Event *ev);
330 void EventCeil(Event *ev);
331 void EventFloor(Event *ev);
332 void EventFmod(Event *ev);
333 void StringBytesCopy(Event *ev);
334 void Md5File(Event *ev);
335 void Md5String(Event *ev);
336 void RegisterEvent(Event *ev);
337 void RestoreSound(Event *ev);
338 void RemoveArchivedClass(Event *ev);
339 void ServerStufftext(Event *ev);
340 void SetTimer(Event *ev);
341 void TeamGetScore(Event *ev);
342 void TeamSetScore(Event *ev);
343 void TraceDetails(Event *ev);
344 void TypeOfVariable(Event *ev);
345 void UnregisterEvent(Event *ev);
346 void VisionGetNaked(Event *ev);
347 void VisionSetNaked(Event *ev);
348 void IsPlayerBot(Event *ev);
349
350 void SubscribeEvent(Event *ev);
351 void UnsubscribeEvent(Event *ev);
352};
353
354class OSFile : public Listener
355{
356 CLASS_PROTOTYPE(OSFile);
357
358public:
359 OSFile();
360 OSFile(void *inFile);
361 ~OSFile();
362
363 void *getOSFile() const;
364
365private:
366 void *file;
367};
Definition archive.h:86
Definition listener.h:246
Definition safeptr.h:160
Definition scriptclass.h:35
Definition scriptvm.h:135
Definition scriptvariable.h:75
Definition vector.h:61
Definition str.h:77