Nuclide
Software Development Kit for id Technology (BETA)
SurfacePropEntity.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
17#ifdef CLIENT
18noref .float health;
19#endif
20
21typedef enumflags
22{
23 SRFENT_CHANGED_ORIGIN_X,
24 SRFENT_CHANGED_ORIGIN_Y,
25 SRFENT_CHANGED_ORIGIN_Z,
26 SRFENT_CHANGED_ANGLES_X,
27 SRFENT_CHANGED_ANGLES_Y,
28 SRFENT_CHANGED_ANGLES_Z,
29 SRFENT_CHANGED_MODELINDEX,
30 SRFENT_CHANGED_SIZE,
31 SRFENT_CHANGED_FLAGS,
32 SRFENT_CHANGED_SOLIDMOVETYPE,
33 SRFENT_CHANGED_FRAME,
34 SRFENT_CHANGED_SKIN,
35 SRFENT_CHANGED_EFFECTS,
36 SRFENT_CHANGED_BODY,
37 SRFENT_CHANGED_SCALE,
38 SRFENT_CHANGED_VELOCITY,
39 SRFENT_CHANGED_ANGULARVELOCITY,
40 SRFENT_CHANGED_RENDERCOLOR,
41 SRFENT_CHANGED_RENDERAMT,
42 SRFENT_CHANGED_RENDERMODE,
43 SRFENT_CHANGED_CONTROLLER
44} nssurfacepropentity_changed_t;
45
46
47
70{
71public:
72 void ncSurfacePropEntity(void);
73
74 /* overrides */
75 virtual void Spawned(void);
76 virtual void SetModel(string);
77
78#ifdef SERVER
79 virtual void Save(float);
80 virtual void Restore(string,string);
81 virtual void RestoreComplete(void);
82 virtual void Respawn(void);
83 virtual void Input(entity,string,string);
84 virtual void SpawnKey(string,string);
85 virtual void ParentUpdate(void);
86 virtual void EvaluateEntity(void);
87 virtual float SendEntity(entity,float);
88#endif
89
90#ifdef CLIENT
91 virtual float predraw(void);
92 virtual void ReceiveEntity(float,float);
93#endif
94
96 nonvirtual bool IsOnFire(void);
97
98 /* new */
99#ifdef SERVER
101 virtual void Damage(entity, entity, ncDict, float, vector, vector);
103 virtual void DamageFeedback(entity, entity, int);
105 virtual void Pain(entity, entity, int, vector, vector, int);
107 virtual void Death(entity, entity, int, vector, vector, int);
109 virtual void BreakModel(int, vector, int);
111 virtual bool IsAlive(void);
112
114 nonvirtual void Ignite(entity, float, string);
116 nonvirtual void Extinguish(void);
117
119 nonvirtual bool IsVulnerable(void);
120
121 /* Generic Damage */
123 nonvirtual void EnableAimAssist(void);
125 nonvirtual void DisableAimAssist(void);
127 nonvirtual void MakeVulnerable(void);
129 nonvirtual void MakeInvulnerable(void);
131 nonvirtual void SetHealth(float);
133 nonvirtual void SetMaxHealth(float);
135 nonvirtual float GetHealth(void);
137 nonvirtual float GetMaxHealth(void);
139 nonvirtual void AddBonusHealth(float);
141 nonvirtual float GetBonusHealth(void);
143 nonvirtual void AddBonusArmor(float);
145 nonvirtual float GetBonusArmor(void);
146
148 nonvirtual void SetArmor(float);
150 nonvirtual float GetArmor(void);
151
153 nonvirtual void SetMaxArmor(float);
155 nonvirtual float GetMaxArmor(void);
156
158 nonvirtual float TimeSinceDeath(void);
159
161 nonvirtual bool CanBeDamaged(vector,vector);
162#endif
163
165 nonvirtual void SetSurfaceData(string);
167 nonvirtual void SetPropData(string);
169 nonvirtual bool HasPropData(void) ;
171 nonvirtual __variant GetPropData(int);
173 nonvirtual bool HasSurfaceData(void);
175 nonvirtual __variant GetSurfaceData(int);
176
177#ifdef CLIENT
179 virtual void RenderFire(void);
180#endif
181
182private:
183 nonvirtual void _SurfaceDataFinish(void);
184 nonvirtual void _PropDataFinish(void);
185
186 float m_timeUntilNextBurnDamage;
187
188 PREDICTED_FLOAT(armor)
189 PREDICTED_FLOAT_N(health)
190
191 /* Surface/PropKit */
192 int m_surfdataID;
193 string m_surfData;
194 int m_propdataID;
195 string m_propData;
196
197#ifdef SERVER
198 nonvirtual void _UpdateTakedamage(void);
199
200 float m_bonusHealth;
201 float m_timeUntilBonusHealthDecreases;
202 float m_bonusArmor;
203 float m_timeUntilBonusArmorDecreases;
204 float max_armor;
205 float m_timeOfDeath;
206 bool m_autoAim;
207 bool m_vulnerable;
208
209 /* fire/burning */
210 entity m_burningAttacker;
211 string m_burningWeapon;
212 float m_timeUntilBurningStops;
213 float m_timeUntilNextBurnDamage; /* for whenever they touch a hot flame */
214
215 /* I/O */
216 string m_outputOnDamaged;
217 string m_outputOnDamagedByPlayer;
218 string m_outputOnHalfHealth;
219 string m_outputOnDeath;
220 string m_outputOnBreak;
221
222#endif
223};
224
225#ifdef CLIENT
226void ncSurfacePropEntity_ReadEntity(bool);
227#endif
This class is responsible for handling groups of key/value pairs.
Definition: Dict.h:42
This entity represents any ncEntity with advanced rendering properties.
Definition: RenderableEntity.h:94
This entity represents an ncRenderableEntity with interactive surface properties.
Definition: SurfacePropEntity.h:70
virtual void ParentUpdate(void)
Called when we need to re-align the entity to our parent entity.
Definition: SurfacePropEntity.qc:248
virtual void Death(entity, entity, int, vector, vector, int)
Called when the health is equal or below 0.
Definition: SurfacePropEntity.qc:644
nonvirtual bool HasPropData(void)
Returns if the entity has prop data information set.
Definition: SurfacePropEntity.qc:966
virtual float SendEntity(entity, float)
Called by the engine whenever we need to send a client an update about this entity.
Definition: SurfacePropEntity.qc:773
virtual void RenderFire(void)
Called every frame to render a fire effect, but will only do so if the entity is burning.
nonvirtual void AddBonusArmor(float)
Adds bonus armor to the entity.
Definition: SurfacePropEntity.qc:216
virtual void SpawnKey(string, string)
This method handles entity key/value pairs on map load.
Definition: SurfacePropEntity.qc:594
nonvirtual float GetBonusArmor(void)
Returns the bonus armor of the entity.
Definition: SurfacePropEntity.qc:236
nonvirtual float GetMaxArmor(void)
Returns the maximum armor value the entity can have.
Definition: SurfacePropEntity.qc:169
virtual void Save(float)
Handles saving a copy of this entity to a given filehandle.
Definition: SurfacePropEntity.qc:461
void ncSurfacePropEntity(void)
Definition: SurfacePropEntity.qc:18
virtual void Damage(entity, entity, ncDict, float, vector, vector)
Applies damage to the entity.
Definition: SurfacePropEntity.qc:303
nonvirtual bool HasSurfaceData(void)
Returns if the entity has surface data information set.
Definition: SurfacePropEntity.qc:978
nonvirtual void AddBonusHealth(float)
Adds bonus health to the entity.
Definition: SurfacePropEntity.qc:196
virtual void DamageFeedback(entity, entity, int)
Called when a different entity gets damaged by this entity.
Definition: SurfacePropEntity.qc:655
nonvirtual float GetHealth(void)
Returns the current health of the entity.
Definition: SurfacePropEntity.qc:157
virtual float predraw(void)
nonvirtual bool CanBeDamaged(vector, vector)
Returns whether this entity reacts to damage being inflicted.
Definition: SurfacePropEntity.qc:387
virtual void SetModel(string)
Sets the 3D model representation of the entity from a file path and name.
Definition: SurfacePropEntity.qc:1023
nonvirtual void SetSurfaceData(string)
Assigns the surface data of a given description onto this entity.
Definition: SurfacePropEntity.qc:946
nonvirtual bool IsOnFire(void)
Returns whether or not this entity is on fire.
Definition: SurfacePropEntity.qc:66
virtual void Restore(string, string)
Similar to ncIO::SpawnKey() but for save-game fields.
Definition: SurfacePropEntity.qc:485
nonvirtual void MakeVulnerable(void)
Makes the entity vulnerable if it wasn't already.
Definition: SurfacePropEntity.qc:100
nonvirtual void SetMaxArmor(float)
Sets the maximum amount of armor the entity can have.
Definition: SurfacePropEntity.qc:150
virtual void Spawned(void)
Called when the entity is fulled initialized.
Definition: SurfacePropEntity.qc:42
virtual void Input(entity, string, string)
Called when we are being prompted by another object/function with an input message.
Definition: SurfacePropEntity.qc:550
nonvirtual void SetMaxHealth(float)
Sets the maximum amount of health the entity can have.
Definition: SurfacePropEntity.qc:143
nonvirtual void DisableAimAssist(void)
Makes the entity invisible to other entity their aim-assists.
Definition: SurfacePropEntity.qc:93
nonvirtual float GetMaxHealth(void)
Returns the maximum health the entity can have.
Definition: SurfacePropEntity.qc:163
nonvirtual bool IsVulnerable(void)
Returns whether the entity can be damaged.
Definition: SurfacePropEntity.qc:80
nonvirtual void EnableAimAssist(void)
Makes the entity visible to other entity their aim-assists.
Definition: SurfacePropEntity.qc:86
nonvirtual void SetArmor(float)
Sets the current armor of the entity.
Definition: SurfacePropEntity.qc:175
virtual void BreakModel(int, vector, int)
Called when the health is equal or below 0.
Definition: SurfacePropEntity.qc:661
nonvirtual void Extinguish(void)
If the entity is on fire, it'll have it extinguished.
Definition: SurfacePropEntity.qc:425
virtual void ReceiveEntity(float, float)
Client: Handles network updates from the server for the associated entity.
virtual void EvaluateEntity(void)
Run each tic after physics are run to determine if we need to send updates over the network.
Definition: SurfacePropEntity.qc:726
nonvirtual __variant GetSurfaceData(int)
Returns a variable type of information about the entity's surface data.
Definition: SurfacePropEntity.qc:984
nonvirtual __variant GetPropData(int)
Returns a variable type of information about the entity's prop data.
Definition: SurfacePropEntity.qc:972
virtual void RestoreComplete(void)
Called when the entity has been successfully restored from a savegame file.
Definition: SurfacePropEntity.qc:542
nonvirtual void MakeInvulnerable(void)
Makes the entity invulnerable if it wasn't already.
Definition: SurfacePropEntity.qc:107
nonvirtual void SetPropData(string)
Assigns the prop data of a given description onto this entity.
Definition: SurfacePropEntity.qc:956
nonvirtual float TimeSinceDeath(void)
Returns how many seconds have passed since we died.
Definition: SurfacePropEntity.qc:716
virtual void Pain(entity, entity, int, vector, vector, int)
Called whenever the entity receives damage.
Definition: SurfacePropEntity.qc:638
nonvirtual void Ignite(entity, float, string)
Sets the entity on fire.
Definition: SurfacePropEntity.qc:367
nonvirtual void SetHealth(float)
Sets the current health of the entity.
Definition: SurfacePropEntity.qc:128
nonvirtual float GetArmor(void)
Returns the current armor of the entity.
Definition: SurfacePropEntity.qc:190
nonvirtual float GetBonusHealth(void)
Returns the bonus health of the entity.
Definition: SurfacePropEntity.qc:242
virtual void Respawn(void)
Server: Called when the entity first spawns or when game-logic requests the entity to return to its o...
Definition: SurfacePropEntity.qc:434
virtual bool IsAlive(void)
Returns whether or not the entity is alive.
Definition: SurfacePropEntity.qc:74
typedef enumflags
Defines the valid alignment flags for text fields.
Definition: font.h:37