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
52{
53public:
54 void ncSurfacePropEntity(void);
55
56 /* overrides */
57 virtual void Spawned(void);
58 virtual void SetModel(string);
59
60#ifdef SERVER
61 virtual void Save(float);
62 virtual void Restore(string,string);
63 virtual void Respawn(void);
64 virtual void Input(entity,string,string);
65 virtual void SpawnKey(string,string);
66 virtual void ParentUpdate(void);
67 virtual void EvaluateEntity(void);
68 virtual float SendEntity(entity,float);
69#endif
70
71#ifdef CLIENT
72 virtual float predraw(void);
73 virtual void ReceiveEntity(float,float);
74#endif
75
77 nonvirtual bool IsOnFire(void);
78
79 /* new */
80#ifdef SERVER
82 virtual void Damage(entity, entity, ncDict, float, vector, vector);
84 virtual void DamageFeedback(entity, entity, int);
86 virtual void Pain(entity, entity, int, vector, vector, int);
88 virtual void Death(entity, entity, int, vector, vector, int);
90 virtual void BreakModel(int, vector, int);
92 virtual bool IsAlive(void);
93
95 nonvirtual void Ignite(entity, float, int);
97 nonvirtual void Extinguish(void);
98
100 nonvirtual bool CanBleed(void);
102 nonvirtual bool IsVulnerable(void);
103
104 /* Generic Damage */
106 nonvirtual void EnableBleeding(void);
108 nonvirtual void DisableBleeding(void);
110 nonvirtual void EnableAimAssist(void);
112 nonvirtual void DisableAimAssist(void);
114 nonvirtual void MakeVulnerable(void);
116 nonvirtual void MakeInvulnerable(void);
118 nonvirtual void SetHealth(float);
120 nonvirtual void SetMaxHealth(float);
122 nonvirtual float GetHealth(void);
124 nonvirtual float GetMaxHealth(void);
125
127 nonvirtual void SetArmor(float);
129 nonvirtual float GetArmor(void);
130
132 nonvirtual void SetMaxArmor(float);
134 nonvirtual float GetMaxArmor(void);
135
137 nonvirtual float GetSpawnHealth(void);
139 nonvirtual float TimeSinceDeath(void);
140
142 nonvirtual bool CanBeDamaged(vector,vector);
143
145 nonvirtual void SetBloodColor(vector);
147 nonvirtual vector GetBloodColor(void);
148#endif
149
150
152 nonvirtual void SetSurfaceData(string);
154 nonvirtual void SetPropData(string);
156 nonvirtual bool HasPropData(void) ;
158 nonvirtual __variant GetPropData(int);
160 nonvirtual bool HasSurfaceData(void);
162 nonvirtual __variant GetSurfaceData(int);
163
164#ifdef CLIENT
166 virtual void RenderFire(void);
167#endif
168
169private:
170 float m_flBurnNext;
171
172 PREDICTED_FLOAT(armor)
173 PREDICTED_FLOAT_N(health)
174
175 /* Surface/PropKit */
176 int m_iMaterial;
177 string m_strSurfData;
178 int m_iPropData;
179 string m_strPropData;
180 nonvirtual void _SurfaceDataFinish(void);
181 nonvirtual void _PropDataFinish(void);
182
183#ifdef SERVER
184 float max_armor;
185
186 /* fire/burning */
187 entity m_eBurner;
188 int m_iBurnWeapon;
189 float m_flBurnTime;
190 float m_flBurnDmgTime; /* for whenever they touch a hot flame */
191
192 /* I/O */
193 string m_strOnBreak;
194
195 /* life, death */
196 float m_oldHealth;
197 vector m_vecBloodColor;
198
199 float m_flDeathTime;
200 bool m_bAutoAim;
201 bool m_bTakesDamage;
202
203 nonvirtual void _UpdateTakedamage(void);
204#endif
205};
206
207#ifdef CLIENT
208void ncSurfacePropEntity_ReadEntity(bool);
209#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:52
virtual void ParentUpdate(void)
Called when we need to re-align the entity to our parent entity.
Definition: SurfacePropEntity.qc:206
virtual void Death(entity, entity, int, vector, vector, int)
Called when the health is equal or below 0.
Definition: SurfacePropEntity.qc:512
nonvirtual bool HasPropData(void)
Returns if the entity has prop data information set.
Definition: SurfacePropEntity.qc:819
virtual float SendEntity(entity, float)
Called by the engine whenever we need to send a client an update about this entity.
Definition: SurfacePropEntity.qc:635
virtual void RenderFire(void)
Called every frame to render a fire effect, but will only do so if the entity is burning.
virtual void SpawnKey(string, string)
This method handles entity key/value pairs on map load.
Definition: SurfacePropEntity.qc:468
nonvirtual float GetMaxArmor(void)
Returns the maximum armor value the entity can have.
Definition: SurfacePropEntity.qc:182
virtual void Save(float)
Handles saving a copy of this entity to a given filehandle.
Definition: SurfacePropEntity.qc:375
void ncSurfacePropEntity(void)
Definition: SurfacePropEntity.qc:18
virtual void Damage(entity, entity, ncDict, float, vector, vector)
Applies damage to the entity.
Definition: SurfacePropEntity.qc:231
nonvirtual void EnableBleeding(void)
Marks the entity as capable of bleeding.
Definition: SurfacePropEntity.qc:87
nonvirtual bool HasSurfaceData(void)
Returns if the entity has surface data information set.
Definition: SurfacePropEntity.qc:831
nonvirtual void SetBloodColor(vector)
Sets the colour of the blood of this entity.
Definition: SurfacePropEntity.qc:63
virtual void DamageFeedback(entity, entity, int)
Called when a different entity gets damaged by this entity.
Definition: SurfacePropEntity.qc:524
nonvirtual float GetHealth(void)
Returns the current health of the entity.
Definition: SurfacePropEntity.qc:170
nonvirtual void Ignite(entity, float, int)
Sets the entity on fire.
Definition: SurfacePropEntity.qc:282
virtual float predraw(void)
nonvirtual bool CanBeDamaged(vector, vector)
Returns whether this entity reacts to damage being inflicted.
Definition: SurfacePropEntity.qc:301
virtual void SetModel(string)
Sets the 3D model representation of the entity from a file path and name.
Definition: SurfacePropEntity.qc:876
nonvirtual void SetSurfaceData(string)
Assigns the surface data of a given description onto this entity.
Definition: SurfacePropEntity.qc:805
nonvirtual bool IsOnFire(void)
Returns whether or not this entity is on fire.
Definition: SurfacePropEntity.qc:55
virtual void Restore(string, string)
Similar to ncIO::SpawnKey() but for save-game fields.
Definition: SurfacePropEntity.qc:394
nonvirtual void DisableBleeding(void)
Marks the entity as incapable of bleeding.
Definition: SurfacePropEntity.qc:93
nonvirtual void MakeVulnerable(void)
Makes the entity vulnerable if it wasn't already.
Definition: SurfacePropEntity.qc:113
nonvirtual void SetMaxArmor(float)
Sets the maximum amount of armor the entity can have.
Definition: SurfacePropEntity.qc:163
virtual void Spawned(void)
Called when the entity is fulled initialized.
Definition: SurfacePropEntity.qc:39
virtual void Input(entity, string, string)
Called when we are being prompted by another object/function with an input message.
Definition: SurfacePropEntity.qc:442
nonvirtual void SetMaxHealth(float)
Sets the maximum amount of health the entity can have.
Definition: SurfacePropEntity.qc:156
nonvirtual void DisableAimAssist(void)
Makes the entity invisible to other entity their aim-assists.
Definition: SurfacePropEntity.qc:106
nonvirtual float GetMaxHealth(void)
Returns the maximum health the entity can have.
Definition: SurfacePropEntity.qc:176
nonvirtual float GetSpawnHealth(void)
Returns the health the entity spawned with at map load.
Definition: SurfacePropEntity.qc:188
nonvirtual bool IsVulnerable(void)
Returns whether the entity can be damaged.
Definition: SurfacePropEntity.qc:81
nonvirtual bool CanBleed(void)
Returns whether the entity can bleed.
Definition: SurfacePropEntity.qc:141
nonvirtual void EnableAimAssist(void)
Makes the entity visible to other entity their aim-assists.
Definition: SurfacePropEntity.qc:99
nonvirtual void SetArmor(float)
Sets the current armor of the entity.
Definition: SurfacePropEntity.qc:194
virtual void BreakModel(int, vector, int)
Called when the health is equal or below 0.
Definition: SurfacePropEntity.qc:530
nonvirtual vector GetBloodColor(void)
Returns the blood color of this entity.
Definition: SurfacePropEntity.qc:69
nonvirtual void Extinguish(void)
If the entity is on fire, it'll have it extinguished.
Definition: SurfacePropEntity.qc:339
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:588
nonvirtual __variant GetSurfaceData(int)
Returns a variable type of information about the entity's surface data.
Definition: SurfacePropEntity.qc:837
nonvirtual __variant GetPropData(int)
Returns a variable type of information about the entity's prop data.
Definition: SurfacePropEntity.qc:825
nonvirtual void MakeInvulnerable(void)
Makes the entity invulnerable if it wasn't already.
Definition: SurfacePropEntity.qc:120
nonvirtual void SetPropData(string)
Assigns the prop data of a given description onto this entity.
Definition: SurfacePropEntity.qc:812
nonvirtual float TimeSinceDeath(void)
Returns how many seconds have passed since we died.
Definition: SurfacePropEntity.qc:578
virtual void Pain(entity, entity, int, vector, vector, int)
Called whenever the entity receives damage.
Definition: SurfacePropEntity.qc:506
nonvirtual void SetHealth(float)
Sets the current health of the entity.
Definition: SurfacePropEntity.qc:147
nonvirtual float GetArmor(void)
Returns the current armor of the entity.
Definition: SurfacePropEntity.qc:200
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:348
virtual bool IsAlive(void)
Returns whether or not the entity is alive.
Definition: SurfacePropEntity.qc:75
typedef enumflags
Defines the valid alignment flags for text fields.
Definition: font.h:37