diff options
| author | xolatile | 2025-08-06 22:54:55 +0200 |
|---|---|---|
| committer | xolatile | 2025-08-06 22:54:55 +0200 |
| commit | 0a1172b75f571685c264a8b9d8ee224bbf11381f (patch) | |
| tree | d041fdc68a60f0ebb48a3852bbcce6d9432f83d5 /src/shared/ents.h | |
| parent | affde05dc07a94643f1fd2751b2b441f57f73d7d (diff) | |
| download | xolatile-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.h | 76 |
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)); } }; - - |
