]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/turrets/util.qc
Merge branch 'master' into martin-t/dmgtext
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / turrets / util.qc
index 53c5fb74df629f2628d3e97216b1ff948b3f2a9a..5201f4751c9ee14df84cec520e313c959cc5b7c7 100644 (file)
-/*
-* Return a angle within +/- 360.
-*/
-float anglemods(float v)
-{
-       v = v - 360 * floor(v / 360);
-
-       if(v >= 180)
-               return v - 360;
-       else if(v <= -180)
-               return v + 360;
-       else
-               return v;
-}
-
-/*
-* Return the short angle
-*/
-float shortangle_f(float ang1, float ang2)
-{
-       if(ang1 > ang2)
-       {
-               if(ang1 > 180)
-                       return ang1 - 360;
-       }
-       else
-       {
-               if(ang1 < -180)
-                       return ang1 + 360;
-       }
-
-       return ang1;
-}
-
-vector shortangle_v(vector ang1, vector ang2)
-{
-       vector vtmp;
-
-       vtmp_x = shortangle_f(ang1_x,ang2_x);
-       vtmp_y = shortangle_f(ang1_y,ang2_y);
-       vtmp_z = shortangle_f(ang1_z,ang2_z);
-
-       return vtmp;
-}
-
-vector shortangle_vxy(vector ang1, vector ang2)
-{
-       vector vtmp = '0 0 0';
-
-       vtmp_x = shortangle_f(ang1_x,ang2_x);
-       vtmp_y = shortangle_f(ang1_y,ang2_y);
-
-       return vtmp;
-}
-
-
-/*
-* Get "real" origin, in worldspace, even if ent is attached to something else.
-*/
-vector real_origin(entity ent)
-{
-       entity e;
-       vector v = ((ent.absmin + ent.absmax) * 0.5);
-
-       e = ent.tag_entity;
-       while(e)
-       {
-               v = v + ((e.absmin + e.absmax) * 0.5);
-               e = e.tag_entity;
-       }
+#include "util.qh"
 
-       return v;
-}
+#ifdef SVQC
 
 /*
-* Return the angle between two enteties
-*/
-vector angleofs(entity from, entity to)
-{
-       vector v_res;
-
-       v_res = normalize(to.origin - from.origin);
-       v_res = vectoangles(v_res);
-       v_res = v_res - from.angles;
-
-       if (v_res_x < 0)        v_res_x += 360;
-       if (v_res_x > 180)      v_res_x -= 360;
-
-       if (v_res_y < 0)        v_res_y += 360;
-       if (v_res_y > 180)      v_res_y -= 360;
-
-       return v_res;
-}
-
-vector angleofs3(vector from, vector from_a, entity to)
-{
-       vector v_res;
-
-       v_res = normalize(to.origin - from);
-       v_res = vectoangles(v_res);
-       v_res = v_res - from_a;
-
-       if (v_res_x < 0)        v_res_x += 360;
-       if (v_res_x > 180)      v_res_x -= 360;
-
-       if (v_res_y < 0)        v_res_y += 360;
-       if (v_res_y > 180)      v_res_y -= 360;
-
-       return v_res;
-}
-
-/*
-* Update self.tur_shotorg by getting up2date bone info
+* Update this.tur_shotorg by getting up2date bone info
 * NOTICE this func overwrites the global v_forward, v_right and v_up vectors.
 */
-float turret_tag_fire_update()
-{SELFPARAM();
-       if(!self.tur_head)
+float turret_tag_fire_update(entity this)
+{
+       if(!this.tur_head)
        {
-               error("Call to turret_tag_fire_update with self.tur_head missing!\n");
-               self.tur_shotorg = '0 0 0';
+               LOG_DEBUG("Call to turret_tag_fire_update with this.tur_head missing!");
+               this.tur_shotorg = '0 0 0';
                return false;
        }
 
-       self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire"));
+       this.tur_shotorg = gettaginfo(this.tur_head, gettagindex(this.tur_head, "tag_fire"));
        v_forward = normalize(v_forward);
 
        return true;
@@ -131,10 +24,10 @@ float turret_tag_fire_update()
 /*
 * Railgun-like beam, but has thickness and suppots slowing of target
 */
-void FireImoBeam (vector start, vector end, vector smin, vector smax,
+void FireImoBeam(entity this, vector start, vector end, vector smin, vector smax,
                                  float bforce, float f_dmg, float f_velfactor, int deathtype)
 
-{SELFPARAM();
+{
        vector hitloc, force, endpoint, dir;
        entity ent;
 
@@ -148,10 +41,10 @@ void FireImoBeam (vector start, vector end, vector smin, vector smax,
        // note down which entities were hit so we can damage them later
        while (1)
        {
-               tracebox(start, smin, smax, end, false, self);
+               tracebox(start, smin, smax, end, false, this);
 
-               // if it is world we can't hurt it so stop now
-               if (trace_ent == world || trace_fraction == 1)
+               // if it is NULL we can't hurt it so stop now
+               if (trace_ent == NULL || trace_fraction == 1)
                        break;
 
                if (trace_ent.solid == SOLID_BSP)
@@ -171,7 +64,7 @@ void FireImoBeam (vector start, vector end, vector smin, vector smax,
        endpoint = trace_endpos;
 
        // find all the entities the railgun hit and restore their solid state
-       ent = findfloat(world, railgunhit, true);
+       ent = findfloat(NULL, railgunhit, true);
        while (ent)
        {
                // restore their solid type
@@ -180,7 +73,7 @@ void FireImoBeam (vector start, vector end, vector smin, vector smax,
        }
 
        // find all the entities the railgun hit and hurt them
-       ent = findfloat(world, railgunhit, true);
+       ent = findfloat(NULL, railgunhit, true);
        while (ent)
        {
                // get the details we need to call the damage function
@@ -192,7 +85,7 @@ void FireImoBeam (vector start, vector end, vector smin, vector smax,
                // apply the damage
                if (ent.takedamage)
                {
-                       Damage (ent, self, self, f_dmg, deathtype, hitloc, force);
+                       Damage (ent, this, this, f_dmg, deathtype, DMG_NOWEP, hitloc, force);
                        ent.velocity = ent.velocity * f_velfactor;
                        //ent.alpha = 0.25 + random() * 0.75;
                }
@@ -204,34 +97,30 @@ void FireImoBeam (vector start, vector end, vector smin, vector smax,
 }
 
 #ifdef TURRET_DEBUG
-void SUB_Remove();
-void marker_think()
-{SELFPARAM();
-       if(self.cnt)
-       if(self.cnt < time)
+void marker_think(entity this, )
+{
+       if(this.cnt)
+       if(this.cnt < time)
        {
-               self.think = SUB_Remove;
-               self.nextthink = time;
+               setthink(this, SUB_Remove);
+               this.nextthink = time;
                return;
        }
 
-       self.frame += 1;
-       if(self.frame > 29)
-               self.frame = 0;
+       this.frame += 1;
+       if(this.frame > 29)
+               this.frame = 0;
 
-       self.nextthink = time;
+       this.nextthink = time;
 }
 
 void mark_error(vector where,float lifetime)
 {
-       entity err;
-
-       err = spawn();
-       err.classname = "error_marker";
+       entity err = new(error_marker);
        setmodel(err, MDL_MARKER);
-       setorigin(err,where);
-       err.movetype = MOVETYPE_NONE;
-       err.think = marker_think;
+       setorigin(err, where);
+       set_movetype(err, MOVETYPE_NONE);
+       setthink(err, marker_think);
        err.nextthink = time;
        err.skin = 0;
        if(lifetime)
@@ -240,14 +129,11 @@ void mark_error(vector where,float lifetime)
 
 void mark_info(vector where,float lifetime)
 {
-       entity err;
-
-       err = spawn();
-       err.classname = "info_marker";
+       entity err = spawn(info_marker);
        setmodel(err, MDL_MARKER);
-       setorigin(err,where);
-       err.movetype = MOVETYPE_NONE;
-       err.think = marker_think;
+       setorigin(err, where);
+       set_movetype(err, MOVETYPE_NONE);
+       setthink(err, marker_think);
        err.nextthink = time;
        err.skin = 1;
        if(lifetime)
@@ -256,14 +142,11 @@ void mark_info(vector where,float lifetime)
 
 entity mark_misc(vector where,float lifetime)
 {
-       entity err;
-
-       err = spawn();
-       err.classname = "mark_misc";
+       entity err = spawn(mark_misc);
        setmodel(err, MDL_MARKER);
-       setorigin(err,where);
-       err.movetype = MOVETYPE_NONE;
-       err.think = marker_think;
+       setorigin(err, where);
+       set_movetype(err, MOVETYPE_NONE);
+       setthink(err, marker_think);
        err.nextthink = time;
        err.skin = 3;
        if(lifetime)
@@ -286,9 +169,9 @@ void paint_target(entity onwho, float f_size, vector v_color, float f_time)
        e.scale = (f_size/512);
        //setsize(e, '0 0 0', '0 0 0');
        //setattachment(e,onwho,"");
-       setorigin(e,onwho.origin + '0 0 1');
+       setorigin(e, onwho.origin + '0 0 1');
        e.alpha = 0.15;
-       e.movetype = MOVETYPE_FLY;
+       set_movetype(e, MOVETYPE_FLY);
 
        e.velocity = (v_color * 32); // + '0 0 1' * 64;
 
@@ -305,9 +188,9 @@ void paint_target2(entity onwho, float f_size, vector v_color, float f_time)
        e.scale = (f_size/512);
        setsize(e, '0 0 0', '0 0 0');
 
-       setorigin(e,onwho.origin + '0 0 1');
+       setorigin(e, onwho.origin + '0 0 1');
        e.alpha = 0.15;
-       e.movetype = MOVETYPE_FLY;
+       set_movetype(e, MOVETYPE_FLY);
 
        e.velocity = (v_color * 32); // + '0 0 1' * 64;
        e.avelocity_x = -128;
@@ -323,10 +206,12 @@ void paint_target3(vector where, float f_size, vector v_color, float f_time)
        setmodel(e, MDL_TUR_C512); // precision set above
        e.scale = (f_size/512);
        setsize(e, '0 0 0', '0 0 0');
-       setorigin(e,where+ '0 0 1');
-       e.movetype = MOVETYPE_NONE;
+       setorigin(e, where + '0 0 1');
+       set_movetype(e, MOVETYPE_NONE);
        e.velocity = '0 0 0';
        e.colormod = v_color;
        SUB_SetFade(e,time,f_time);
 }
 #endif
+
+#endif