summaryrefslogtreecommitdiff
path: root/src/shared/ents.h
diff options
context:
space:
mode:
authorxolatile2025-08-06 22:54:55 +0200
committerxolatile2025-08-06 22:54:55 +0200
commit0a1172b75f571685c264a8b9d8ee224bbf11381f (patch)
treed041fdc68a60f0ebb48a3852bbcce6d9432f83d5 /src/shared/ents.h
parentaffde05dc07a94643f1fd2751b2b441f57f73d7d (diff)
downloadxolatile-badassbug-0a1172b75f571685c264a8b9d8ee224bbf11381f.tar.xz
xolatile-badassbug-0a1172b75f571685c264a8b9d8ee224bbf11381f.tar.zst
Please do not hate me, it makes sense...
Diffstat (limited to 'src/shared/ents.h')
-rw-r--r--src/shared/ents.h76
1 files changed, 19 insertions, 57 deletions
diff --git a/src/shared/ents.h b/src/shared/ents.h
index 3ceccf4..6b1dfca 100644
--- a/src/shared/ents.h
+++ b/src/shared/ents.h
@@ -5,24 +5,21 @@
enum { ET_EMPTY=0, ET_LIGHT, ET_MAPMODEL, ET_PLAYERSTART, ET_PARTICLES, ET_SOUND, ET_SPOTLIGHT, ET_GAMESPECIFIC };
-struct entity // persistent map entity
-{
+// persistent map entity
+struct entity {
vec o; // position
short attr1, attr2, attr3, attr4, attr5;
uchar type; // type is one of the above
uchar reserved;
};
-struct entitylight
-{
+struct entitylight {
vec color, dir;
int millis;
-
entitylight() : color(1, 1, 1), dir(0, 0, 1), millis(-1) {}
};
-enum
-{
+enum {
EF_NOVIS = 1<<0,
EF_NOSHADOW = 1<<1,
EF_NOCOLLIDE = 1<<2,
@@ -34,19 +31,16 @@ enum
EF_NOPICKUP = 1<<8
};
-struct extentity : entity // part of the entity that doesn't get saved to disk
-{
+// part of the entity that doesn't get saved to disk
+struct extentity : entity {
int flags; // the only dynamic state of a map entity
entitylight light;
extentity *attached;
-
extentity() : flags(0), attached(NULL) {}
-
bool spawned() const { return (flags&EF_SPAWNED) != 0; }
void setspawned(bool val) { if(val) flags |= EF_SPAWNED; else flags &= ~EF_SPAWNED; }
void setspawned() { flags |= EF_SPAWNED; }
void clearspawned() { flags &= ~EF_SPAWNED; }
-
bool nopickup() const { return (flags&EF_NOPICKUP) != 0; }
void setnopickup(bool val) { if(val) flags |= EF_NOPICKUP; else flags &= ~EF_NOPICKUP; }
void setnopickup() { flags |= EF_NOPICKUP; }
@@ -65,8 +59,7 @@ enum { ENT_PLAYER = 0, ENT_AI, ENT_INANIMATE, ENT_CAMERA, ENT_BOUNCE };
enum { COLLIDE_NONE = 0, COLLIDE_ELLIPSE, COLLIDE_OBB, COLLIDE_ELLIPSE_PRECISE };
-struct physent // base entity type, can be affected by physics
-{
+struct physent { // base entity type, can be affected by physics {
vec o, vel, falling; // origin, velocity
vec deltapos, newpos; // movement interpolation
float yaw, pitch, roll;
@@ -74,34 +67,26 @@ struct physent // base entity type, can be affected by physics
float radius, eyeheight, aboveeye; // bounding box size
float xradius, yradius, zmargin;
vec floor; // the normal of floor the dynent is on
-
ushort timeinair;
uchar inwater;
bool jumping;
schar move, strafe;
-
uchar physstate; // one of PHYS_* above
uchar state, editstate; // one of CS_* above
uchar type; // one of ENT_* above
uchar collidetype; // one of COLLIDE_* above
-
bool blocked; // used by physics to signal ai
-
physent() : o(0, 0, 0), deltapos(0, 0, 0), newpos(0, 0, 0), yaw(0), pitch(0), roll(0), maxspeed(100),
radius(4.1f), eyeheight(14), aboveeye(1), xradius(4.1f), yradius(4.1f), zmargin(0),
state(CS_ALIVE), editstate(CS_ALIVE), type(ENT_PLAYER),
collidetype(COLLIDE_ELLIPSE),
blocked(false)
- { reset(); }
-
- void resetinterp()
- {
+ { reset(); }
+ void resetinterp() {
newpos = o;
deltapos = vec(0, 0, 0);
}
-
- void reset()
- {
+ void reset() {
inwater = 0;
timeinair = 0;
jumping = false;
@@ -110,15 +95,12 @@ struct physent // base entity type, can be affected by physics
vel = falling = vec(0, 0, 0);
floor = vec(0, 0, 1);
}
-
vec feetpos(float offset = 0) const { return vec(o).add(vec(0, 0, offset - eyeheight)); }
vec headpos(float offset = 0) const { return vec(o).add(vec(0, 0, offset)); }
-
bool maymove() const { return timeinair || physstate < PHYS_FLOOR || vel.squaredlen() > 1e-4f || deltapos.squaredlen() > 1e-4f; }
};
-enum
-{
+enum {
ANIM_DEAD = 0, ANIM_DYING, ANIM_IDLE,
ANIM_FORWARD, ANIM_BACKWARD, ANIM_LEFT, ANIM_RIGHT,
ANIM_HOLD1, ANIM_HOLD2, ANIM_HOLD3, ANIM_HOLD4, ANIM_HOLD5, ANIM_HOLD6, ANIM_HOLD7,
@@ -132,8 +114,7 @@ enum
NUMANIMS
};
-static const char * const animnames[] =
-{
+static const char * const animnames[] = {
"dead", "dying", "idle",
"forward", "backward", "left", "right",
"hold 1", "hold 2", "hold 3", "hold 4", "hold 5", "hold 6", "hold 7",
@@ -166,26 +147,20 @@ static const char * const animnames[] =
#define ANIM_GHOST (1<<30)
#define ANIM_FLAGS (0x1FF<<22)
-struct animinfo // description of a character's animation
-{
+struct animinfo { // description of a character's animation {
int anim, frame, range, basetime;
float speed;
uint varseed;
-
animinfo() : anim(0), frame(0), range(0), basetime(0), speed(100.0f), varseed(0) { }
-
bool operator==(const animinfo &o) const { return frame==o.frame && range==o.range && (anim&(ANIM_SETTIME|ANIM_DIR))==(o.anim&(ANIM_SETTIME|ANIM_DIR)) && (anim&ANIM_SETTIME || basetime==o.basetime) && speed==o.speed; }
bool operator!=(const animinfo &o) const { return frame!=o.frame || range!=o.range || (anim&(ANIM_SETTIME|ANIM_DIR))!=(o.anim&(ANIM_SETTIME|ANIM_DIR)) || (!(anim&ANIM_SETTIME) && basetime!=o.basetime) || speed!=o.speed; }
};
-struct animinterpinfo // used for animation blending of animated characters
-{
+struct animinterpinfo { // used for animation blending of animated characters {
animinfo prev, cur;
int lastswitch;
void *lastmodel;
-
animinterpinfo() : lastswitch(-1), lastmodel(NULL) {}
-
void reset() { lastswitch = -1; }
};
@@ -194,44 +169,31 @@ struct animinterpinfo // used for animation blending of animated characters
struct occludequery;
struct ragdolldata;
-struct dynent : physent // animated characters, or characters that can receive input
-{
+struct dynent : physent { // animated characters, or characters that can receive input {
bool k_left, k_right, k_up, k_down; // see input code
-
entitylight light;
animinterpinfo animinterp[MAXANIMPARTS];
ragdolldata *ragdoll;
occludequery *query;
int lastrendered;
uchar occluded;
-
- dynent() : ragdoll(NULL), query(NULL), lastrendered(0), occluded(0)
- {
+ dynent() : ragdoll(NULL), query(NULL), lastrendered(0), occluded(0) {
reset();
}
-
- ~dynent()
- {
+ ~dynent() {
#ifndef STANDALONE
extern void cleanragdoll(dynent *d);
if(ragdoll) cleanragdoll(this);
#endif
}
-
- void stopmoving()
- {
+ void stopmoving() {
k_left = k_right = k_up = k_down = jumping = false;
move = strafe = 0;
}
-
- void reset()
- {
+ void reset() {
physent::reset();
stopmoving();
loopi(MAXANIMPARTS) animinterp[i].reset();
}
-
vec abovehead() { return vec(o).add(vec(0, 0, aboveeye+4)); }
};
-
-