]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/warpzonelib/common.qc
Listbox / Picker: Implement item fading in a different way so that it gets influenced...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / warpzonelib / common.qc
index 7bbebdc9c2a707ad0cd5366d2f1de44456db6838..aa0de911963a9bc700e6aa3167b2181633d7b7b6 100644 (file)
@@ -1,5 +1,14 @@
-float trace_dphitcontents;
-.float dphitcontentsmask;
+#if defined(CSQC)
+       #include "../dpdefs/csprogsdefs.qh"
+    #include "common.qh"
+    #include "../server/t_items.qh"
+#elif defined(MENUQC)
+#elif defined(SVQC)
+       #include "../dpdefs/progsdefs.qh"
+    #include "../dpdefs/dpextensions.qh"
+    #include "common.qh"
+    #include "../common/weapons/weapons.qh"
+#endif
 
 void WarpZone_Accumulator_Clear(entity acc)
 {
@@ -16,15 +25,23 @@ void WarpZone_Accumulator_AddTransform(entity acc, vector t, vector s)
 }
 void WarpZone_Accumulator_Add(entity acc, entity wz)
 {
-       vector t, st;
-       t = AnglesTransform_Multiply(wz.warpzone_transform, acc.warpzone_transform);
-       st = AnglesTransform_Multiply_GetPostShift(wz.warpzone_transform, wz.warpzone_shift, acc.warpzone_transform, acc.warpzone_shift);
-       acc.warpzone_transform = t;
-       acc.warpzone_shift = st;
+       WarpZone_Accumulator_AddTransform(acc, wz.warpzone_transform, wz.warpzone_shift);
+}
+void WarpZone_Accumulator_AddInverseTransform(entity acc, vector t, vector s)
+{
+       vector tt, ss;
+       tt = AnglesTransform_Invert(t);
+       ss = AnglesTransform_PrePostShift_GetPostShift(s, tt, '0 0 0');
+       WarpZone_Accumulator_AddTransform(acc, tt, ss);
+       // yes, this probably can be done simpler... but this way is "obvious" :)
+}
+void WarpZone_Accumulator_AddInverse(entity acc, entity wz)
+{
+       WarpZone_Accumulator_AddInverseTransform(acc, wz.warpzone_transform, wz.warpzone_shift);
 }
 
 .vector(vector, vector) camera_transform;
-var float autocvar_cl_warpzone_usetrace = 1;
+float autocvar_cl_warpzone_usetrace = 1;
 vector WarpZone_camera_transform(vector org, vector ang)
 {
        vector vf, vr, vu;
@@ -105,7 +122,7 @@ float WarpZoneLib_BoxTouchesBrush_Recurse()
                return 0;
        }
 #endif
-       if not(trace_ent)
+       if (!trace_ent)
                return 0;
        if (trace_ent == WarpZoneLib_BoxTouchesBrush_ent)
                return 1;
@@ -255,7 +272,7 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end,
        sol = -1;
        frac = 0;
        i = 16;
-       for(;;)
+       for (;;)
        {
                if(--i < 1)
                {
@@ -378,7 +395,7 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo
        }
        WarpZone_MakeAllSolid();
        i = 16;
-       for(;;)
+       for (;;)
        {
                if(--i < 1)
                {
@@ -461,12 +478,12 @@ void WarpZone_TrailParticles_WithMultiplier_trace_callback(vector from, vector e
        boxparticles(WarpZone_TrailParticles_trace_callback_eff, WarpZone_TrailParticles_trace_callback_own, from, endpos, WarpZone_TrailParticles_trace_callback_own.velocity, WarpZone_TrailParticles_trace_callback_own.velocity, WarpZone_TrailParticles_trace_callback_f, WarpZone_TrailParticles_trace_callback_flags);
 }
 
-void WarpZone_TrailParticles_WithMultiplier(entity own, float eff, vector org, vector end, float f, float boxflags)
+void WarpZone_TrailParticles_WithMultiplier(entity own, float eff, vector org, vector end, float f, int boxflags)
 {
        WarpZone_TrailParticles_trace_callback_own = own;
        WarpZone_TrailParticles_trace_callback_eff = eff;
        WarpZone_TrailParticles_trace_callback_f = f;
-       WarpZone_TrailParticles_trace_callback_flags = boxflags;
+       WarpZone_TrailParticles_trace_callback_flags = boxflags | PARTICLES_DRAWASTRAIL;
        WarpZone_TraceBox_ThroughZone(org, '0 0 0', '0 0 0', end, MOVE_NOMONSTERS, world, world, WarpZone_TrailParticles_WithMultiplier_trace_callback);
 }
 #endif
@@ -500,18 +517,18 @@ vector WarpZone_TransformVAngles(entity wz, vector ang)
 {
 #ifdef KEEP_ROLL
        float roll;
-       roll = ang_z;
-       ang_z = 0;
+       roll = ang.z;
+       ang.z = 0;
 #endif
 
        ang = AnglesTransform_ApplyToVAngles(wz.warpzone_transform, ang);
 
 #ifdef KEEP_ROLL
-       ang = AnglesTransform_Normalize(ang, TRUE);
+       ang = AnglesTransform_Normalize(ang, true);
        ang = AnglesTransform_CancelRoll(ang);
-       ang_z = roll;
+       ang.z = roll;
 #else
-       ang = AnglesTransform_Normalize(ang, FALSE);
+       ang = AnglesTransform_Normalize(ang, false);
 #endif
 
        return ang;
@@ -536,23 +553,23 @@ vector WarpZone_UnTransformVAngles(entity wz, vector ang)
 {
        float roll;
 
-       roll = ang_z;
-       ang_z = 0;
+       roll = ang.z;
+       ang.z = 0;
 
        ang = AnglesTransform_ApplyToVAngles(AnglesTransform_Invert(wz.warpzone_transform), ang);
-       ang = AnglesTransform_Normalize(ang, TRUE);
+       ang = AnglesTransform_Normalize(ang, true);
        ang = AnglesTransform_CancelRoll(ang);
 
-       ang_z = roll;
+       ang.z = roll;
        return ang;
 }
 
 vector WarpZoneLib_NearestPointOnBox(vector mi, vector ma, vector org)
 {
        vector nearest;
-       nearest_x = bound(mi_x, org_x, ma_x);
-       nearest_y = bound(mi_y, org_y, ma_y);
-       nearest_z = bound(mi_z, org_z, ma_z);
+       nearest.x = bound(mi.x, org.x, ma.x);
+       nearest.y = bound(mi.y, org.y, ma.y);
+       nearest.z = bound(mi.z, org.z, ma.z);
        return nearest;
 }
 
@@ -643,7 +660,7 @@ void WarpZone_RefSys_GC()
        if(self.owner.WarpZone_refsys != self)
                remove(self);
 }
-void WarpZone_RefSys_Add(entity me, entity wz)
+void WarpZone_RefSys_CheckCreate(entity me)
 {
        if(me.WarpZone_refsys.owner != me)
        {
@@ -654,29 +671,48 @@ void WarpZone_RefSys_Add(entity me, entity wz)
                me.WarpZone_refsys.nextthink = time + 1;
                WarpZone_Accumulator_Clear(me.WarpZone_refsys);
        }
-       if(wz)
-               WarpZone_Accumulator_Add(me.WarpZone_refsys, wz);
+}
+void WarpZone_RefSys_Clear(entity me)
+{
+       if(me.WarpZone_refsys)
+       {
+               remove(me.WarpZone_refsys);
+               me.WarpZone_refsys = world;
+       }
+}
+void WarpZone_RefSys_AddTransform(entity me, vector t, vector s)
+{
+       if(t != '0 0 0' || s != '0 0 0')
+       {
+               WarpZone_RefSys_CheckCreate(me);
+               WarpZone_Accumulator_AddTransform(me.WarpZone_refsys, t, s);
+       }
+}
+void WarpZone_RefSys_Add(entity me, entity wz)
+{
+       WarpZone_RefSys_AddTransform(me, wz.warpzone_transform, wz.warpzone_shift);
+}
+void WarpZone_RefSys_AddInverseTransform(entity me, vector t, vector s)
+{
+       if(t != '0 0 0' || s != '0 0 0')
+       {
+               WarpZone_RefSys_CheckCreate(me);
+               WarpZone_Accumulator_AddInverseTransform(me.WarpZone_refsys, t, s);
+       }
+}
+void WarpZone_RefSys_AddInverse(entity me, entity wz)
+{
+       WarpZone_RefSys_AddInverseTransform(me, wz.warpzone_transform, wz.warpzone_shift);
 }
 .vector WarpZone_refsys_incremental_shift;
 .vector WarpZone_refsys_incremental_transform;
 void WarpZone_RefSys_AddIncrementally(entity me, entity ref)
 {
-       vector t, s;
+       //vector t, s;
        if(me.WarpZone_refsys_incremental_transform == ref.WarpZone_refsys.warpzone_transform)
        if(me.WarpZone_refsys_incremental_shift == ref.WarpZone_refsys.warpzone_shift)
                return;
-       if(me.WarpZone_refsys.owner != me)
-       {
-               me.WarpZone_refsys = spawn();
-               me.WarpZone_refsys.classname = "warpzone_refsys";
-               me.WarpZone_refsys.owner = me;
-               me.WarpZone_refsys.think = WarpZone_RefSys_GC;
-               me.WarpZone_refsys.nextthink = time + 1;
-               WarpZone_Accumulator_Clear(me.WarpZone_refsys);
-       }
-       t = AnglesTransform_Invert(me.WarpZone_refsys_incremental_transform);
-       s = AnglesTransform_PrePostShift_GetPostShift(me.WarpZone_refsys_incremental_shift, t, '0 0 0');
-       WarpZone_Accumulator_AddTransform(me.WarpZone_refsys, t, s);
+       WarpZone_Accumulator_AddInverseTransform(me.WarpZone_refsys, me.WarpZone_refsys_incremental_transform, me.WarpZone_refsys_incremental_shift);
        WarpZone_Accumulator_Add(me.WarpZone_refsys, ref.WarpZone_refsys);
        me.WarpZone_refsys_incremental_shift = ref.WarpZone_refsys.warpzone_shift;
        me.WarpZone_refsys_incremental_transform = ref.WarpZone_refsys.warpzone_transform;
@@ -718,19 +754,21 @@ vector WarpZone_RefSys_TransformVAngles(entity from, entity to, vector ang)
                ang = WarpZone_TransformVAngles(to.WarpZone_refsys, ang);
        return ang;
 }
+void WarpZone_RefSys_Copy(entity me, entity from)
+{
+       if(from.WarpZone_refsys)
+       {
+               WarpZone_RefSys_CheckCreate(me);
+               me.WarpZone_refsys.warpzone_shift = from.WarpZone_refsys.warpzone_shift;
+               me.WarpZone_refsys.warpzone_transform = from.WarpZone_refsys.warpzone_transform;
+       }
+       else
+               WarpZone_RefSys_Clear(me);
+}
 entity WarpZone_RefSys_SpawnSameRefSys(entity me)
 {
        entity e;
        e = spawn();
-       if(me.WarpZone_refsys)
-       {
-               e.WarpZone_refsys = spawn();
-               e.WarpZone_refsys.classname = "warpzone_refsys";
-               e.WarpZone_refsys.owner = e;
-               e.WarpZone_refsys.think = WarpZone_RefSys_GC;
-               e.WarpZone_refsys.nextthink = time + 1;
-               e.WarpZone_refsys.warpzone_shift = me.WarpZone_refsys.warpzone_shift;
-               e.WarpZone_refsys.warpzone_transform = me.WarpZone_refsys.warpzone_transform;
-       }
+       WarpZone_RefSys_Copy(e, me);
        return e;
 }