From 6f64252d659ec340b8f9a258b791f5ee236d3e62 Mon Sep 17 00:00:00 2001 From: Jonathan Schleifer Date: Tue, 4 Mar 2025 00:14:25 +0000 Subject: [PATCH] Migrate vec to OFVector3D FossilOrigin-Name: 2e931ae3e1bb8a3ac23d368cfacc7394d07f295bd0bc56a40e0c70190d019d8b --- src/clients2c.mm | 6 ++--- src/command.mm | 4 ++-- src/cube.h | 15 +++++------- src/entities.mm | 18 +++++++------- src/monster.mm | 11 +++++---- src/physics.mm | 2 +- src/protos.h | 23 +++++++++--------- src/renderextras.mm | 14 +++++------ src/rendermd2.mm | 26 ++++++++++----------- src/renderparticles.mm | 40 +++++++++++++++---------------- src/savegamedemo.mm | 52 +++++++++++++++++++++-------------------- src/sound.mm | 8 +++---- src/weapon.mm | 53 ++++++++++++++++++++++-------------------- src/world.mm | 2 +- src/worldlight.mm | 3 ++- 15 files changed, 141 insertions(+), 136 deletions(-) diff --git a/src/clients2c.mm b/src/clients2c.mm index c7ce489..e9a7e84 100644 --- a/src/clients2c.mm +++ b/src/clients2c.mm @@ -201,7 +201,7 @@ localservertoclient( case SV_SHOT: { int gun = getint(p); - vec s, e; + OFVector3D s, e; s.x = getint(p) / DMF; s.y = getint(p) / DMF; s.z = getint(p) / DMF; @@ -274,8 +274,8 @@ localservertoclient( setspawn(i, true); if (i >= (uint)ents.length()) break; - vec v = {(float)ents[i].x, (float)ents[i].y, - (float)ents[i].z}; + OFVector3D v = + OFMakeVector3D(ents[i].x, ents[i].y, ents[i].z); playsound(S_ITEMSPAWN, &v); break; } diff --git a/src/command.mm b/src/command.mm index 344caaf..9a80479 100644 --- a/src/command.mm +++ b/src/command.mm @@ -54,8 +54,8 @@ alias(OFString *name, OFString *action) if (b.type == ID_ALIAS) b.action = action; else - conoutf( - @"cannot redefine builtin %s with an alias", name.UTF8String); + conoutf(@"cannot redefine builtin %s with an alias", + name.UTF8String); } } COMMAND(alias, ARG_2STR) diff --git a/src/cube.h b/src/cube.h index e1c5c60..6fb9d58 100644 --- a/src/cube.h +++ b/src/cube.h @@ -102,9 +102,6 @@ struct header // map file format header ((x) < MINBORD || (y) < MINBORD || (x) >= ssize - MINBORD || \ (y) >= ssize - MINBORD) -struct vec { - float x, y, z; -}; struct block { int x, y, xs, ys; }; @@ -128,8 +125,8 @@ enum { struct dynent // players & monsters { - vec o, vel; // origin, velocity - float yaw, pitch, roll; // used as vec in one place + OFVector3D o, vel; // origin, velocity + float yaw, pitch, roll; // used as OFVector3D in one place float maxspeed; // cubes per second, 24 for player bool outsidemap; // from his eyes bool inwater; @@ -154,8 +151,8 @@ struct dynent // players & monsters bool blocked, moving; // used by physics to signal ai int trigger; // millis at which transition to another monsterstate takes // place - vec attacktarget; // delayed attacks - int anger; // how many times already hit by fellow monster + OFVector3D attacktarget; // delayed attacks + int anger; // how many times already hit by fellow monster string name, team; }; @@ -295,7 +292,7 @@ extern dynent extern dvector players; // all the other clients (in multiplayer) extern bool editmode; extern vector ents; // map entities -extern vec worldpos; // current target of the crosshair in the world +extern OFVector3D worldpos; // current target of the crosshair in the world extern int lastmillis; // last time extern int curtime; // current frame time extern int gamemode, nextmode; @@ -341,7 +338,7 @@ extern bool demoplayback; (u).z -= (v).z; \ }; #define vdist(d, v, e, s) \ - vec v = s; \ + OFVector3D v = s; \ vsub(v, e); \ float d = (float)sqrt(dotprod(v, v)); #define vreject(v, u, max) \ diff --git a/src/entities.mm b/src/entities.mm index b19ecb6..72738a4 100644 --- a/src/entities.mm +++ b/src/entities.mm @@ -298,15 +298,15 @@ pickup(int n, dynent *d) if (lastmillis - lastjumppad < 300) break; lastjumppad = lastmillis; - vec v = {(int)(char)ents[n].attr3 / 10.0f, - (int)(char)ents[n].attr2 / 10.0f, ents[n].attr1 / 10.0f}; + OFVector3D v = OFMakeVector3D((int)(char)ents[n].attr3 / 10.0f, + (int)(char)ents[n].attr2 / 10.0f, ents[n].attr1 / 10.0f); player1->vel.z = 0; vadd(player1->vel, v); playsoundc(S_JUMPPAD); break; - }; - }; -}; + } + } +} void checkitems() @@ -322,13 +322,13 @@ checkitems() continue; if (OUTBORD(e.x, e.y)) continue; - vec v = {(float)e.x, (float)e.y, - (float)S(e.x, e.y)->floor + player1->eyeheight}; + OFVector3D v = OFMakeVector3D( + e.x, e.y, (float)S(e.x, e.y)->floor + player1->eyeheight); vdist(dist, t, player1->o, v); if (dist < (e.type == TELEPORT ? 4 : 2.5)) pickup(i, player1); - }; -}; + } +} void checkquad(int time) diff --git a/src/monster.mm b/src/monster.mm index 8d91c4d..fa9a959 100644 --- a/src/monster.mm +++ b/src/monster.mm @@ -126,7 +126,7 @@ monsterclear() // called after map start of when toggling edit mode to bool los(float lx, float ly, float lz, float bx, float by, float bz, - vec &v) // height-correct line of sight for monster shooting/seeing + OFVector3D &v) // height-correct line of sight for monster shooting/seeing { if (OUTBORD((int)lx, (int)ly) || OUTBORD((int)bx, (int)by)) return false; @@ -162,7 +162,7 @@ los(float lx, float ly, float lz, float bx, float by, float bz, }; bool -enemylos(dynent *m, vec &v) +enemylos(dynent *m, OFVector3D &v) { v = m->o; return los(m->o.x, m->o.y, m->o.z, m->enemy->o.x, m->enemy->o.y, @@ -253,7 +253,7 @@ monsteraction( case M_SLEEP: // state classic sp monster start in, wait for visual // contact { - vec target; + OFVector3D target; if (editmode || !enemylos(m, target)) return; // skip running physics normalise(m, enemyyaw); @@ -283,7 +283,7 @@ monsteraction( // and may want to shoot at any time m->targetyaw = enemyyaw; if (m->trigger < lastmillis) { - vec target; + OFVector3D target; if (!enemylos( m, target)) // no visual contact anymore, let // monster get as close as possible @@ -380,7 +380,8 @@ monsterthink() continue; if (OUTBORD(e.x, e.y)) continue; - vec v = {(float)e.x, (float)e.y, (float)S(e.x, e.y)->floor}; + OFVector3D v = + OFMakeVector3D(e.x, e.y, (float)S(e.x, e.y)->floor); loopv(monsters) if (monsters[i]->state == CS_DEAD) { if (lastmillis - monsters[i]->lastaction < 2000) { diff --git a/src/physics.mm b/src/physics.mm index 0b61458..ca51434 100644 --- a/src/physics.mm +++ b/src/physics.mm @@ -240,7 +240,7 @@ moveplayer(dynent *pl, int moveres, bool local, int curtime) const bool water = hdr.waterlevel > pl->o.z - 0.5f; const bool floating = (editmode && local) || pl->state == CS_EDITING; - vec d; // vector of direction we ideally want to move in + OFVector3D d; // vector of direction we ideally want to move in d.x = (float)(pl->move * cos(rad(pl->yaw - 90))); d.y = (float)(pl->move * sin(rad(pl->yaw - 90))); diff --git a/src/protos.h b/src/protos.h index 9a876b7..029fa61 100644 --- a/src/protos.h +++ b/src/protos.h @@ -126,7 +126,7 @@ extern entity *newentity( // worldlight extern void calclight(); extern void dodynlight( - vec &vold, vec &v, int reach, int strength, dynent *owner); + OFVector3D &vold, OFVector3D &v, int reach, int strength, dynent *owner); extern void cleardlights(); extern block *blockcopy(block &b); extern void blockpaste(block &b); @@ -167,7 +167,7 @@ extern void line(int x1, int y1, float z1, int x2, int y2, float z2); extern void box(block &b, float z1, float z2, float z3, float z4); extern void dot(int x, int y, float z); extern void linestyle(float width, int r, int g, int b); -extern void newsphere(vec &o, float max, int type); +extern void newsphere(OFVector3D &o, float max, int type); extern void renderspheres(int time); extern void gl_drawhud( int w, int h, int curfps, int nquads, int curvert, bool underwater); @@ -176,9 +176,10 @@ extern void blendbox(int x1, int y1, int x2, int y2, bool border); extern void damageblend(int n); // renderparticles -extern void setorient(vec &r, vec &u); -extern void particle_splash(int type, int num, int fade, vec &p); -extern void particle_trail(int type, int fade, vec &from, vec &to); +extern void setorient(OFVector3D &r, OFVector3D &u); +extern void particle_splash(int type, int num, int fade, OFVector3D &p); +extern void particle_trail( + int type, int fade, OFVector3D &from, OFVector3D &to); extern void render_particles(int time); // worldio @@ -191,7 +192,7 @@ extern void incomingdemodata(uchar *buf, int len, bool extras = false); extern void demoplaybackstep(); extern void stop(); extern void stopifrecording(); -extern void demodamage(int damage, vec &o); +extern void demodamage(int damage, OFVector3D &o); extern void demoblend(int damage); // physics @@ -202,7 +203,7 @@ extern void setentphysics(int mml, int mmr); extern void physicsframe(); // sound -extern void playsound(int n, vec *loc = 0); +extern void playsound(int n, OFVector3D *loc = 0); extern void playsoundc(int n); extern void initsound(); extern void cleansound(); @@ -236,10 +237,10 @@ extern ENetPacket *recvmap(int n); // weapon extern void selectgun(int a = -1, int b = -1, int c = -1); -extern void shoot(dynent *d, vec &to); -extern void shootv( - int gun, vec &from, vec &to, dynent *d = 0, bool local = false); -extern void createrays(vec &from, vec &to); +extern void shoot(dynent *d, OFVector3D &to); +extern void shootv(int gun, OFVector3D &from, OFVector3D &to, dynent *d = 0, + bool local = false); +extern void createrays(OFVector3D &from, OFVector3D &to); extern void moveprojectiles(float time); extern void projreset(); extern char *playerincrosshair(); diff --git a/src/renderextras.mm b/src/renderextras.mm index 2445392..b83cd98 100644 --- a/src/renderextras.mm +++ b/src/renderextras.mm @@ -80,7 +80,7 @@ blendbox(int x1, int y1, int x2, int y2, bool border) const int MAXSPHERES = 50; struct sphere { - vec o; + OFVector3D o; float size, max; int type; sphere *next; @@ -89,7 +89,7 @@ sphere spheres[MAXSPHERES], *slist = NULL, *sempty = NULL; bool sinit = false; void -newsphere(vec &o, float max, int type) +newsphere(OFVector3D &o, float max, int type) { if (!sinit) { loopi(MAXSPHERES) @@ -184,9 +184,9 @@ renderents() // show sparkly thingies for map entities in edit mode entity &e = ents[i]; if (e.type == NOTUSED) continue; - vec v = {(float)e.x, (float)e.y, (float)e.z}; + OFVector3D v = OFMakeVector3D(e.x, e.y, e.z); particle_splash(2, 2, 40, v); - }; + } int e = closestent(); if (e >= 0) { entity &c = ents[e]; @@ -226,7 +226,7 @@ COMMAND(loadsky, ARG_1STR) float cursordepth = 0.9f; GLint viewport[4]; GLdouble mm[16], pm[16]; -vec worldpos; +OFVector3D worldpos; void readmatrices() @@ -262,8 +262,8 @@ readdepth(int w, int h) worldpos.x = (float)worldx; worldpos.y = (float)worldy; worldpos.z = (float)worldz; - vec r = {(float)mm[0], (float)mm[4], (float)mm[8]}; - vec u = {(float)mm[1], (float)mm[5], (float)mm[9]}; + OFVector3D r = OFMakeVector3D(mm[0], mm[4], mm[8]); + OFVector3D u = OFMakeVector3D(mm[1], mm[5], mm[9]); setorient(r, u); }; diff --git a/src/rendermd2.mm b/src/rendermd2.mm index 47761a7..5308c18 100644 --- a/src/rendermd2.mm +++ b/src/rendermd2.mm @@ -32,7 +32,7 @@ struct md2 { int numFrames; int numVerts; char *frames; - vec **mverts; + OFVector3D **mverts; int displaylist; int displaylistverts; @@ -42,9 +42,9 @@ struct md2 { bool loaded; bool load(char *filename); - void render(vec &light, int numFrame, int range, float x, float y, - float z, float yaw, float pitch, float scale, float speed, int snap, - int basetime); + void render(OFVector3D &light, int numFrame, int range, float x, + float y, float z, float yaw, float pitch, float scale, float speed, + int snap, int basetime); void scale(int frame, float scale, int sn); md2() @@ -103,7 +103,7 @@ md2::load(char *filename) fclose(file); - mverts = new vec *[numFrames]; + mverts = new OFVector3D *[numFrames]; loopj(numFrames) mverts[j] = NULL; return true; @@ -118,13 +118,13 @@ snap(int sn, float f) void md2::scale(int frame, float scale, int sn) { - mverts[frame] = new vec[numVerts]; + mverts[frame] = new OFVector3D[numVerts]; md2_frame *cf = (md2_frame *)((char *)frames + frameSize * frame); float sc = 16.0f / scale; loop(vi, numVerts) { uchar *cv = (uchar *)&cf->vertices[vi].vertex; - vec *v = &(mverts[frame])[vi]; + OFVector3D *v = &(mverts[frame])[vi]; v->x = (snap(sn, cv[0] * cf->scale[0]) + cf->translate[0]) / sc; v->y = -(snap(sn, cv[1] * cf->scale[1]) + cf->translate[1]) / sc; @@ -133,7 +133,7 @@ md2::scale(int frame, float scale, int sn) }; void -md2::render(vec &light, int frame, int range, float x, float y, float z, +md2::render(OFVector3D &light, int frame, int range, float x, float y, float z, float yaw, float pitch, float sc, float speed, int snap, int basetime) { loopi(range) if (!mverts[frame + i]) scale(frame + i, sc, snap); @@ -163,8 +163,8 @@ md2::render(vec &light, int frame, int range, float x, float y, float z, int fr2 = fr1 + 1; if (fr2 >= frame + range) fr2 = frame; - vec *verts1 = mverts[fr1]; - vec *verts2 = mverts[fr2]; + OFVector3D *verts1 = mverts[fr1]; + OFVector3D *verts2 = mverts[fr2]; for (int *command = glCommands; (*command) != 0;) { int numVertex = *command++; @@ -181,8 +181,8 @@ md2::render(vec &light, int frame, int range, float x, float y, float z, float tv = *((float *)command++); glTexCoord2f(tu, tv); int vn = *command++; - vec &v1 = verts1[vn]; - vec &v2 = verts2[vn]; + OFVector3D &v1 = verts1[vn]; + OFVector3D &v2 = verts2[vn]; #define ip(c) v1.c *frac2 + v2.c *frac1 glVertex3f(ip(x), ip(z), ip(y)); }; @@ -283,7 +283,7 @@ rendermodel(OFString *mdl, int frame, int range, int tex, float rad, float x, int ix = (int)x; int iy = (int)z; - vec light = {1.0f, 1.0f, 1.0f}; + OFVector3D light = OFMakeVector3D(1, 1, 1); if (!OUTBORD(ix, iy)) { sqr *s = S(ix, iy); diff --git a/src/renderparticles.mm b/src/renderparticles.mm index 9fcf040..21ff794 100644 --- a/src/renderparticles.mm +++ b/src/renderparticles.mm @@ -5,7 +5,7 @@ const int MAXPARTICLES = 10500; const int NUMPARTCUTOFF = 20; struct particle { - vec o, d; + OFVector3D o, d; int fade, type; int millis; particle *next; @@ -16,7 +16,7 @@ bool parinit = false; VARP(maxparticles, 100, 2000, MAXPARTICLES - 500); void -newparticle(vec &o, vec &d, int fade, int type) +newparticle(OFVector3D &o, OFVector3D &d, int fade, int type) { if (!parinit) { loopi(MAXPARTICLES) @@ -42,22 +42,22 @@ newparticle(vec &o, vec &d, int fade, int type) VAR(demotracking, 0, 0, 1); VARP(particlesize, 20, 100, 500); -vec right, up; +OFVector3D right, up; void -setorient(vec &r, vec &u) +setorient(OFVector3D &r, OFVector3D &u) { right = r; up = u; -}; +} void render_particles(int time) { if (demoplayback && demotracking) { - vec nom = {0, 0, 0}; + OFVector3D nom = OFMakeVector3D(0, 0, 0); newparticle(player1->o, nom, 100000000, 8); - }; + } glDepthMask(GL_FALSE); glEnable(GL_BLEND); @@ -118,13 +118,13 @@ render_particles(int time) if (pt->gr) p->o.z -= ((lastmillis - p->millis) / 3.0f) * curtime / (pt->gr * 10000); - vec a = p->d; + OFVector3D a = p->d; vmul(a, time); vdiv(a, 20000.0f); vadd(p->o, a); pp = &p->next; - }; - }; + } + } glEnable(GL_FOG); glDisable(GL_BLEND); @@ -132,7 +132,7 @@ render_particles(int time) }; void -particle_splash(int type, int num, int fade, vec &p) +particle_splash(int type, int num, int fade, OFVector3D &p) { loopi(num) { @@ -143,22 +143,22 @@ particle_splash(int type, int num, int fade, vec &p) y = rnd(radius * 2) - radius; z = rnd(radius * 2) - radius; } while (x * x + y * y + z * z > radius * radius); - vec d = {(float)x, (float)y, (float)z}; + OFVector3D d = OFMakeVector3D(x, y, z); newparticle(p, d, rnd(fade * 3), type); - }; -}; + } +} void -particle_trail(int type, int fade, vec &s, vec &e) +particle_trail(int type, int fade, OFVector3D &s, OFVector3D &e) { vdist(d, v, s, e); vdiv(v, d * 2 + 0.1f); - vec p = s; + OFVector3D p = s; loopi((int)d * 2) { vadd(p, v); - vec d = { - float(rnd(11) - 5), float(rnd(11) - 5), float(rnd(11) - 5)}; + OFVector3D d = + OFMakeVector3D(rnd(11) - 5, rnd(11) - 5, rnd(11) - 5); newparticle(p, d, rnd(fade) + fade, type); - }; -}; + } +} diff --git a/src/savegamedemo.mm b/src/savegamedemo.mm index bea2b4f..a011d23 100644 --- a/src/savegamedemo.mm +++ b/src/savegamedemo.mm @@ -31,9 +31,9 @@ gzputi(int i) } void -gzputv(vec &v) +gzputv(OFVector3D &v) { - gzwrite(f, &v, sizeof(vec)); + gzwrite(f, &v, sizeof(OFVector3D)); } void @@ -59,9 +59,9 @@ gzgeti() } void -gzgetv(vec &v) +gzgetv(OFVector3D &v) { - gzcheck(gzread(f, &v, sizeof(vec)), sizeof(vec)); + gzcheck(gzread(f, &v, sizeof(OFVector3D)), sizeof(OFVector3D)); } void @@ -244,7 +244,7 @@ loadgamerest() int starttime = 0; int playbacktime = 0; int ddamage, bdamage; -vec dorig; +OFVector3D dorig; void record(OFString *name) @@ -269,7 +269,7 @@ record(OFString *name) COMMAND(record, ARG_1STR) void -demodamage(int damage, vec &o) +demodamage(int damage, OFVector3D &o) { ddamage = damage; dorig = o; @@ -363,11 +363,12 @@ startdemo() VAR(demodelaymsec, 0, 120, 500); +// spline interpolation void -catmulrom( - vec &z, vec &a, vec &b, vec &c, float s, vec &dest) // spline interpolation +catmulrom(OFVector3D &z, OFVector3D &a, OFVector3D &b, OFVector3D &c, float s, + OFVector3D &dest) { - vec t1 = b, t2 = c; + OFVector3D t1 = b, t2 = c; vsub(t1, z); vmul(t1, 0.5f) vsub(t2, a); @@ -377,7 +378,7 @@ catmulrom( float s3 = s * s2; dest = a; - vec t = b; + OFVector3D t = b; vmul(dest, 2 * s3 - 3 * s2 + 1); vmul(t, -2 * s3 + 3 * s2); @@ -407,7 +408,7 @@ demoplaybackstep() @"error: huge packet during demo play (%d)", len); stopreset(); return; - }; + } uchar buf[MAXTRANS]; gzread(f, buf, len); localservertoclient(buf, len); // update game state @@ -434,9 +435,9 @@ demoplaybackstep() if (ddamage = gzgeti()) { gzgetv(dorig); particle_splash(3, ddamage, 1000, dorig); - }; + } // FIXME: set more client state here - }; + } // insert latest copy of player into history if (extras && @@ -449,11 +450,11 @@ demoplaybackstep() if (playerhistory.length() > 20) { zapdynent(playerhistory[0]); playerhistory.remove(0); - }; - }; + } + } readdemotime(); - }; + } if (demoplayback) { int itime = lastmillis - demodelaymsec; @@ -489,18 +490,19 @@ demoplaybackstep() { catmulrom(z->o, a->o, b->o, c->o, bf, player1->o); - catmulrom(*(vec *)&z->yaw, - *(vec *)&a->yaw, *(vec *)&b->yaw, - *(vec *)&c->yaw, bf, - *(vec *)&player1->yaw); - }; + catmulrom(*(OFVector3D *)&z->yaw, + *(OFVector3D *)&a->yaw, + *(OFVector3D *)&b->yaw, + *(OFVector3D *)&c->yaw, bf, + *(OFVector3D *)&player1->yaw); + } fixplayer1range(); - }; + } break; - }; + } // if(player1->state!=CS_DEAD) showscores(false); - }; -}; + } +} void stopn() diff --git a/src/sound.mm b/src/sound.mm index 22b759a..8ef7aa8 100644 --- a/src/sound.mm +++ b/src/sound.mm @@ -16,7 +16,7 @@ bool nosound = false; #define SOUNDFREQ 22050 struct soundloc { - vec loc; + OFVector3D loc; bool inuse; } soundlocs[MAXCHAN]; @@ -150,7 +150,7 @@ cleansound() VAR(stereo, 0, 1, 1); void -updatechanvol(int chan, vec *loc) +updatechanvol(int chan, OFVector3D *loc) { int vol = soundvol, pan = 255 / 2; if (loc) { @@ -178,7 +178,7 @@ updatechanvol(int chan, vec *loc) }; void -newsoundloc(int chan, vec *loc) +newsoundloc(int chan, OFVector3D *loc) { assert(chan >= 0 && chan < MAXCHAN); soundlocs[chan].loc = *loc; @@ -213,7 +213,7 @@ playsoundc(int n) int soundsatonce = 0, lastsoundmillis = 0; void -playsound(int n, vec *loc) +playsound(int n, OFVector3D *loc) { if (nosound) return; diff --git a/src/weapon.mm b/src/weapon.mm index 18ea821..12b95ec 100644 --- a/src/weapon.mm +++ b/src/weapon.mm @@ -10,7 +10,7 @@ struct guninfo { const int MONSTERDAMAGEFACTOR = 4; const int SGRAYS = 20; const float SGSPREAD = 2; -vec sg[SGRAYS]; +OFVector3D sg[SGRAYS]; guninfo guns[NUMGUNS] = { {S_PUNCH1, 250, 50, 0, 0, 1, "fist"}, @@ -71,23 +71,25 @@ weapon(OFString *a1, OFString *a2, OFString *a3) COMMAND(weapon, ARG_3STR) void -createrays(vec &from, vec &to) // create random spread of rays for the shotgun +createrays(OFVector3D &from, + OFVector3D &to) // create random spread of rays for the shotgun { vdist(dist, dvec, from, to); float f = dist * SGSPREAD / 1000; loopi(SGRAYS) { #define RNDD (rnd(101) - 50) * f - vec r = {RNDD, RNDD, RNDD}; + OFVector3D r = OFMakeVector3D(RNDD, RNDD, RNDD); sg[i] = to; vadd(sg[i], r); }; }; bool -intersect(dynent *d, vec &from, vec &to) // if lineseg hits entity bounding box +intersect(dynent *d, OFVector3D &from, + OFVector3D &to) // if lineseg hits entity bounding box { - vec v = to, w = d->o, *p; + OFVector3D v = to, w = d->o, *p; vsub(v, from); vsub(w, from); float c1 = dotprod(w, v); @@ -129,7 +131,7 @@ playerincrosshair() const int MAXPROJ = 100; struct projectile { - vec o, to; + OFVector3D o, to; float speed; dynent *owner; int gun; @@ -144,8 +146,8 @@ projreset() }; void -newprojectile( - vec &from, vec &to, float speed, bool local, dynent *owner, int gun) +newprojectile(OFVector3D &from, OFVector3D &to, float speed, bool local, + dynent *owner, int gun) { loopi(MAXPROJ) { @@ -182,7 +184,7 @@ const float RL_RADIUS = 5; const float RL_DAMRAD = 7; // hack void -radialeffect(dynent *o, vec &v, int cn, int qdam, dynent *at) +radialeffect(dynent *o, OFVector3D &v, int cn, int qdam, dynent *at) { if (o->state != CS_ALIVE) return; @@ -199,8 +201,8 @@ radialeffect(dynent *o, vec &v, int cn, int qdam, dynent *at) }; void -splash(projectile *p, vec &v, vec &vold, int notthisplayer, int notthismonster, - int qdam) +splash(projectile *p, OFVector3D &v, OFVector3D &vold, int notthisplayer, + int notthismonster, int qdam) { particle_splash(0, 50, 300, v); p->inuse = false; @@ -230,7 +232,7 @@ splash(projectile *p, vec &v, vec &vold, int notthisplayer, int notthismonster, }; inline void -projdamage(dynent *o, projectile *p, vec &v, int i, int im, int qdam) +projdamage(dynent *o, projectile *p, OFVector3D &v, int i, int im, int qdam) { if (o->state != CS_ALIVE) return; @@ -264,14 +266,14 @@ moveprojectiles(float time) if (!o) continue; projdamage(o, p, v, i, -1, qdam); - }; + } if (p->owner != player1) projdamage(player1, p, v, -1, -1, qdam); dvector &mv = getmonsters(); loopv(mv) if (!vreject(mv[i]->o, v, 10.0f) && mv[i] != p->owner) projdamage(mv[i], p, v, -1, i, qdam); - }; + } if (p->inuse) { if (time == dtime) splash(p, v, p->o, -1, -1, qdam); @@ -283,15 +285,15 @@ moveprojectiles(float time) particle_splash(1, 1, 200, v); particle_splash( guns[p->gun].part, 1, 1, v); - }; - }; - }; + } + } + } p->o = v; }; }; void -shootv(int gun, vec &from, vec &to, dynent *d, +shootv(int gun, OFVector3D &from, OFVector3D &to, dynent *d, bool local) // create visual effect from a shot { playsound(guns[gun].sound, d == player1 ? NULL : &d->o); @@ -328,16 +330,17 @@ shootv(int gun, vec &from, vec &to, dynent *d, }; void -hitpush(int target, int damage, dynent *d, dynent *at, vec &from, vec &to) +hitpush(int target, int damage, dynent *d, dynent *at, OFVector3D &from, + OFVector3D &to) { hit(target, damage, d, at); vdist(dist, v, from, to); vmul(v, damage / dist / 50); vadd(d->vel, v); -}; +} void -raydamage(dynent *o, vec &from, vec &to, dynent *d, int i) +raydamage(dynent *o, OFVector3D &from, OFVector3D &to, dynent *d, int i) { if (o->state != CS_ALIVE) return; @@ -356,7 +359,7 @@ raydamage(dynent *o, vec &from, vec &to, dynent *d, int i) }; void -shoot(dynent *d, vec &targ) +shoot(dynent *d, OFVector3D &targ) { int attacktime = lastmillis - d->lastaction; if (attacktime < d->gunwait) @@ -374,13 +377,13 @@ shoot(dynent *d, vec &targ) }; if (d->gunselect) d->ammo[d->gunselect]--; - vec from = d->o; - vec to = targ; + OFVector3D from = d->o; + OFVector3D to = targ; from.z -= 0.2f; // below eye vdist(dist, unitv, from, to); vdiv(unitv, dist); - vec kickback = unitv; + OFVector3D kickback = unitv; vmul(kickback, guns[d->gunselect].kickamount * -0.01f); vadd(d->vel, kickback); if (d->pitch < 80.0f) diff --git a/src/world.mm b/src/world.mm index cc9b875..edc0ac2 100644 --- a/src/world.mm +++ b/src/world.mm @@ -267,7 +267,7 @@ closestent() // used for delent and edit mode ent display entity &e = ents[i]; if (e.type == NOTUSED) continue; - vec v = {(float)e.x, (float)e.y, (float)e.z}; + OFVector3D v = OFMakeVector3D(e.x, e.y, e.z); vdist(dist, t, player1->o, v); if (dist < bdist) { best = i; diff --git a/src/worldlight.mm b/src/worldlight.mm index fd2fe9a..ab72c01 100644 --- a/src/worldlight.mm +++ b/src/worldlight.mm @@ -200,7 +200,8 @@ cleardlights() } void -dodynlight(vec &vold, vec &v, int reach, int strength, dynent *owner) +dodynlight( + OFVector3D &vold, OFVector3D &v, int reach, int strength, dynent *owner) { if (!reach) reach = dynlight;