Nuclide
Software Development Kit for id Technology (BETA)
Loading...
Searching...
No Matches
IO.h
1/*
2 * Copyright (c) 2016-2024 Vera Visions LLC.
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
14 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*/
16
67
77class ncIO
78{
79public:
80 void ncIO(void);
81
86 virtual void Spawned(void);
87
90 virtual void Respawn(void);
91
93 virtual void ReloadCachedAttributes(void);
94
98 virtual void SpawnKey(string,string);
99
100 /* EntityDef interactions */
102 nonvirtual float GetDefAct(string);
104 nonvirtual string GetDefString(string);
106 nonvirtual float GetDefFloat(string);
108 nonvirtual bool GetDefBool(string);
110 nonvirtual int GetDefInt(string);
112 nonvirtual vector GetDefVector(string);
113
115 nonvirtual float GetSubDefAct(string, string);
117 nonvirtual string GetSubDefString(string, string);
119 nonvirtual float GetSubDefFloat(string, string);
121 nonvirtual bool GetSubDefBool(string, string);
123 nonvirtual int GetSubDefInt(string, string);
125 nonvirtual vector GetSubDefVector(string, string);
126
128 nonvirtual void Destroy(void);
130 virtual void OnRemoveEntity(void);
131
133 nonvirtual void Relink(void);
134
137 nonvirtual float GetNextThinkTime(void);
139 nonvirtual bool IsThinking(void);
141 nonvirtual void ReleaseThink(void);
143 nonvirtual void ThinkBusy(float);
144
147 nonvirtual void SetThink(void());
151 nonvirtual void SetNextThink(float);
156 nonvirtual void ScheduleThink(void(void),float);
157
158#ifdef SERVER
162 virtual void Save(float);
163
167 virtual void Restore(string,string);
168
170 virtual void RestoreComplete(void);
171
173 virtual void TransitionComplete(void);
174
176 virtual void Input(entity,string,string);
177
178 /* helper functions to allocate outputs */
180 nonvirtual void UseOutput(entity,string);
186 nonvirtual string PrepareOutput(string,string);
187
193 nonvirtual string CreateOutput(string);
194
197 nonvirtual bool CheckOutput(string);
198
200 virtual void ParentUpdate(void);
201
202 /* save game related methods */
204 nonvirtual void SaveFloat(float,string,float);
206 nonvirtual void SaveInt(float,string,int);
208 nonvirtual void SaveString(float,string,string);
210 nonvirtual void SaveVector(float,string,vector);
212 nonvirtual void SaveBool(float,string,bool);
214 nonvirtual void SaveEntity(float,string,entity);
216 nonvirtual void SetSendFlags(float);
217#endif
218
219#ifdef CLIENT
221 virtual void _ReceiveComplete(float, float);
222#endif
223
225 nonvirtual float GetSpawnFloat(string);
227 nonvirtual int GetSpawnInt(string);
229 nonvirtual string GetSpawnString(string);
231 nonvirtual vector GetSpawnVector(string);
233 nonvirtual bool GetSpawnBool(string);
237 nonvirtual entity GetSpawnEntity(string, entity);
238
239 /* load game/spawn helper functions */
241 nonvirtual float ReadFloat(string);
243 nonvirtual int ReadInt(string);
245 nonvirtual string ReadString(string);
247 nonvirtual vector ReadVector(string);
249 nonvirtual bool ReadBool(string);
251 nonvirtual entity ReadEntity(string);
252
258 nonvirtual float GetTime(void);
259
260 /* save game related methods */
262 nonvirtual void DebugFloat(string,float);
264 nonvirtual void DebugInt(string,int);
266 nonvirtual void DebugString(string,string);
268 nonvirtual void DebugVector(string,vector);
270 nonvirtual void DebugBool(string,bool);
272 nonvirtual void DebugEntity(string,entity);
273
274private:
275 string m_rawSpawnData;
276#ifdef SERVER
277 string m_outputOnSpawn;
278 string m_outputOnKilled;
279 string m_outputOnTrigger;
280 string m_outputOnUser1;
281 string m_outputOnUser2;
282 string m_outputOnUser3;
283 string m_outputOnUser4;
284
285 /* entityDef powered modelevent callbacks */
286 string m_modelEventCallbacks;
287 string m_gameModeFilter;
288#endif
289};
290
291#define CREATE_OUTPUT(x) if (STRING_SET(x)) { \
292 x = CreateOutput(x); \
293 }
294
295.bool _mapspawned;
296
297#define CGENT_LOG imageToConsole("gfx/icon16/brick", ICN_SIZE, "Client Entity Log")
298#define CGENT_WARNING imageToConsole("gfx/icon16/brick_error", ICN_SIZE, "Client Entity Warning")
299#define CGENT_ERROR imageToConsole("gfx/icon16/brick_delete", ICN_SIZE, "Client Entity Error")
300
301#define SVENT_LOG imageToConsole("gfx/icon16/brick", ICN_SIZE, "Server Entity Log")
302#define SVENT_WARNING imageToConsole("gfx/icon16/brick_error", ICN_SIZE, "Server Entity Warning")
303#define SVENT_ERROR imageToConsole("gfx/icon16/brick_delete", ICN_SIZE, "Server Entity Error")
304
305void
306_NSEntLog(string className, string functionName, float edictNum, string warnMessage)
307{
308#ifdef SERVER
309 if (autocvar_g_logTimestamps)
310 print(sprintf("%s ^9%f ^7%s (%d)^7: %s\n", SVENT_LOG, time, className, edictNum, warnMessage));
311 else
312 print(sprintf("%s ^7%s (%d)^7: %s\n", SVENT_LOG, className, edictNum, warnMessage));
313#endif
314#ifdef CLIENT
315 if (autocvar_g_logTimestamps)
316 print(sprintf("%s ^9%f ^7%s (%d)^7: %s\n", CGENT_LOG, time, className, edictNum, warnMessage));
317 else
318 print(sprintf("%s ^7%s (%d)^7: %s\n", CGENT_LOG, className, edictNum, warnMessage));
319#endif
320}
321
322void
323_NSEntWarning(string className, string functionName, float edictNum, string warnMessage)
324{
325#ifdef SERVER
326 if (autocvar_g_logTimestamps)
327 print(sprintf("%s ^9%f ^3%s (%d)^1: %s\n", SVENT_WARNING, time, functionName, edictNum, warnMessage));
328 else
329 print(sprintf("%s ^3%s (%d)^1: %s\n", SVENT_WARNING, functionName, edictNum, warnMessage));
330#endif
331#ifdef CLIENT
332 if (autocvar_g_logTimestamps)
333 print(sprintf("%s ^9%f ^3%s (%d)^1: %s\n", CGENT_WARNING, time, functionName, edictNum, warnMessage));
334 else
335 print(sprintf("%s ^3%s (%d)^1: %s\n", CGENT_WARNING, functionName, edictNum, warnMessage));
336#endif
337}
338
339void
340_NSEntError(string className, string functionName, float edictNum, string warnMessage)
341{
342#ifdef SERVER
343 if (autocvar_g_logTimestamps)
344 print(sprintf("%s ^9%f ^1%s (id: %d)^1: %s\n", SVENT_ERROR, time, functionName, edictNum, warnMessage));
345 else
346 print(sprintf("%s ^1%s (id: %d)^1: %s\n", SVENT_ERROR, functionName, edictNum, warnMessage));
347#endif
348#ifdef CLIENT
349 if (autocvar_g_logTimestamps)
350 print(sprintf("%s ^9%f ^1%s (id: %d)^1: %s\n", CGENT_ERROR, time, functionName, edictNum, warnMessage));
351 else
352 print(sprintf("%s ^1%s (id: %d)^1: %s\n", CGENT_ERROR, functionName, edictNum, warnMessage));
353#endif
354}
355
360#define EntLog(...) if (autocvar_g_logLevel >= LOGLEVEL_DEBUG) _NSEntLog(classname, __FUNC__, num_for_edict(this), sprintf(__VA_ARGS__))
361
366#define EntWarning(...) if (autocvar_g_logLevel >= LOGLEVEL_WARNINGS) _NSEntWarning(classname, __FUNC__, num_for_edict(this), sprintf(__VA_ARGS__))
367
372#define EntError(...) if (autocvar_g_logLevel >= LOGLEVEL_ERRORS) _NSEntError(classname, __FUNC__, num_for_edict(this), sprintf(__VA_ARGS__))
virtual void OnRemoveEntity(void)
Handles what happens before the entity gets removed from the client game.
Definition IO.qc:102
nonvirtual float GetSubDefFloat(string, string)
Like GetDefFloat, but queries a specified def, falling back to reading from our own if it's not defin...
Definition IO.qc:205
nonvirtual bool ReadBool(string)
Returns a boolean value from a string.
Definition IO.qc:224
nonvirtual float GetDefAct(string)
Looks up a sequence from an act of a key within this entity's declaration.
Definition IO.qc:179
nonvirtual bool CheckOutput(string)
Returns whether the Output is ready, or has done firing - not currently scheduled to fire,...
Definition IO.qc:401
nonvirtual void DebugEntity(string, entity)
Debug print for a given entity.
Definition IO.qc:683
nonvirtual void ScheduleThink(void(void), float)
Schedules a think timer.
Definition IO.qc:740
nonvirtual void DebugString(string, string)
Debug print for a given string.
Definition IO.qc:673
nonvirtual int GetDefInt(string)
Looks up the integer value of a key within this entity's declaration.
Definition IO.qc:166
nonvirtual string CreateOutput(string)
Called at the end of setting up an entity's output field.
Definition IO.qc:346
virtual void Respawn(void)
Server: Called when the entity first spawns or when game-logic requests the entity to return to its o...
Definition IO.qc:56
nonvirtual string GetDefString(string)
Looks up the string value of a key within this entity's declaration.
Definition IO.qc:142
nonvirtual void DebugBool(string, bool)
Debug print for a given boolean.
Definition IO.qc:658
nonvirtual string ReadString(string)
Returns a string value from a string (with error checking).
Definition IO.qc:245
nonvirtual void SetThink(void())
Overrides the Think function of the entity.
Definition IO.qc:717
virtual void SpawnKey(string, string)
This method handles entity key/value pairs on map load.
Definition IO.qc:586
nonvirtual float GetSubDefAct(string, string)
Like GetDefAct, but queries a specified def, falling back to reading from our own if it's not defined...
Definition IO.qc:173
nonvirtual float GetSpawnFloat(string)
Returns the floating-point value of a named key in the entity's spawn data.
Definition IO.qc:279
virtual void ParentUpdate(void)
Called when we need to re-align the entity to our parent entity.
Definition IO.qc:555
virtual void Spawned(void)
Called when the entity is fulled initialized.
Definition IO.qc:67
nonvirtual float GetDefFloat(string)
Looks up the floating-point value of a key within this entity's declaration.
Definition IO.qc:154
nonvirtual void SaveEntity(float, string, entity)
Saves an entity id key/value pair to a filehandle.
Definition IO.qc:491
nonvirtual void Relink(void)
Relink the entity against the world.
Definition IO.qc:579
nonvirtual void SaveFloat(float, string, float)
Saves a floating point key/value pair to a filehandle.
Definition IO.qc:467
nonvirtual bool GetSpawnBool(string)
Returns the boolean value of a named key in the entity's spawn data.
Definition IO.qc:273
nonvirtual void SetSendFlags(float)
Overrides the field that's used to determine which information should be networked.
Definition IO.qc:561
virtual void _ReceiveComplete(float, float)
Called once ReceiveEntity has done its job.
Definition IO.qc:572
nonvirtual vector GetSpawnVector(string)
Returns the vector value of a named key in the entity's spawn data.
Definition IO.qc:306
nonvirtual void SaveInt(float, string, int)
Saves a integer key/value pair to a filehandle.
Definition IO.qc:473
nonvirtual void SetNextThink(float)
Sets the next think timer of the entity.
Definition IO.qc:723
nonvirtual float GetTime(void)
Get the level time the entity finds itself in.
Definition IO.qc:651
nonvirtual void SaveVector(float, string, vector)
Saves a vector key/value pair to a filehandle.
Definition IO.qc:485
nonvirtual bool GetDefBool(string)
Looks up the boolean value of a key within this entity's declaration.
Definition IO.qc:160
nonvirtual void DebugFloat(string, float)
Debug print for a given float.
Definition IO.qc:663
virtual void ReloadCachedAttributes(void)
Shared: Called on launch/reload to read variables from defaults.
Definition IO.qc:62
nonvirtual int GetSubDefInt(string, string)
Like GetDefInt, but queries a specified def, falling back to reading from our own if it's not defined...
Definition IO.qc:217
nonvirtual void ThinkBusy(float)
When called, will make the entity think busy for the specified amount of time.
Definition IO.qc:708
nonvirtual vector ReadVector(string)
Returns a vector from a string.
Definition IO.qc:254
nonvirtual void DebugVector(string, vector)
Debug print for a given vector.
Definition IO.qc:678
nonvirtual void SaveBool(float, string, bool)
Saves a boolean key/value pair to a filehandle.
Definition IO.qc:461
nonvirtual vector GetSubDefVector(string, string)
Like GetDefVector, but queries a specified def, falling back to reading from our own if it's not defi...
Definition IO.qc:199
nonvirtual string GetSubDefString(string, string)
Like GetDefString, but queries a specified def, falling back to reading from our own if it's not defi...
Definition IO.qc:185
virtual void Input(entity, string, string)
Called when we are being prompted by another object/function with an input message.
Definition IO.qc:424
nonvirtual float GetNextThinkTime(void)
Returns an absolute value of when the entity will be think again.
Definition IO.qc:689
nonvirtual entity GetSpawnEntity(string, entity)
Returns an entity of a named key in the entity's spawn data.
Definition IO.qc:312
nonvirtual string PrepareOutput(string, string)
Prepares an output field.
Definition IO.qc:414
nonvirtual entity ReadEntity(string)
Reads an entity id from a string and returns the entity.
Definition IO.qc:261
nonvirtual void Destroy(void)
When called, will remove the entity from the game entirely.
Definition IO.qc:107
nonvirtual vector GetDefVector(string)
Looks up the integer value of a key within this entity's declaration.
Definition IO.qc:148
void ncIO(void)
Definition IO.qc:18
nonvirtual bool IsThinking(void)
Returns whether or not we're currently expecting to think any time soon.
Definition IO.qc:695
virtual void RestoreComplete(void)
Called when the entity has been successfully restored from a savegame file.
Definition IO.qc:545
virtual void TransitionComplete(void)
Called when the entity has successfully completed a level transition.
Definition IO.qc:550
nonvirtual void SaveString(float, string, string)
Saves a string key/value pair to a filehandle.
Definition IO.qc:479
virtual void Save(float)
Handles saving a copy of this entity to a given filehandle.
Definition IO.qc:500
nonvirtual string GetSpawnString(string)
Returns the string value of a named key in the entity's spawn data.
Definition IO.qc:291
nonvirtual bool GetSubDefBool(string, string)
Like GetDefBool, but queries a specified def, falling back to reading from our own if it's not define...
Definition IO.qc:211
nonvirtual void ReleaseThink(void)
When called, will unset anything related to ongoing think operations.
Definition IO.qc:701
nonvirtual void UseOutput(entity, string)
Triggers an output field that has been created beforehand.
Definition IO.qc:321
nonvirtual void DebugInt(string, int)
Debug print for a given integer.
Definition IO.qc:668
nonvirtual int ReadInt(string)
Returns an integer value from a string.
Definition IO.qc:238
nonvirtual float ReadFloat(string)
Returns a floating point value from a string value.
Definition IO.qc:231
nonvirtual int GetSpawnInt(string)
Returns the integer value of a named key in the entity's spawn data.
Definition IO.qc:285
virtual void Restore(string, string)
Similar to ncIO::SpawnKey() but for save-game fields.
Definition IO.qc:514