X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fwarpzonelib%2Fcommon.qh;h=3e2b7c7c63eacae9b1dfd93c4dfc55feb77bef3c;hp=c2f36bea868d8baf7ad06c37294b3b7bb2316a24;hb=86c9dc7c3696c329496b06375c1e79fb407401ce;hpb=1c2bdc1f0012349f80906e05902ce19bed35be16 diff --git a/qcsrc/warpzonelib/common.qh b/qcsrc/warpzonelib/common.qh index c2f36bea86..3e2b7c7c63 100644 --- a/qcsrc/warpzonelib/common.qh +++ b/qcsrc/warpzonelib/common.qh @@ -1,3 +1,6 @@ +#ifndef WARPZONELIB_COMMON_H +#define WARPZONELIB_COMMON_H + // uncomment this if your mod uses the roll angle in fixangle // #define KEEP_ROLL @@ -16,6 +19,7 @@ float warpzone_cameras_exist; .float warpzone_fadestart; .float warpzone_fadeend; void WarpZone_SetUp(entity e, vector my_org, vector my_ang, vector other_org, vector other_ang); +void WarpZone_Camera_SetUp(entity e, vector my_org, vector my_ang); float WarpZoneLib_BoxTouchesBrush(vector mi, vector ma, entity e, entity ig); vector WarpZoneLib_NearestPointOnBox(vector mi, vector ma, vector org); @@ -27,7 +31,7 @@ void WarpZone_MakeAllOther(); #define MOVE_NOTHING -1 entity WarpZone_trace_forent; // temp, callback is allowed to change it typedef void(vector start, vector hit, vector end) WarpZone_trace_callback_t; // called on every elementary trace -const var WarpZone_trace_callback_t WarpZone_trace_callback_t_null; +var WarpZone_trace_callback_t WarpZone_trace_callback_t_null; entity WarpZone_trace_transform; // transform accumulator during a trace entity WarpZone_trace_firstzone; // first warpzone hit by a trace (can differ from the requested zone in case of _ThroughZone, the trace is aborted then) entity WarpZone_trace_lastzone; // first warpzone hit by a trace (can differ from the requested zone in case of _ThroughZone, the trace is aborted then) @@ -62,14 +66,25 @@ vector WarpZone_UnTransformAngles(entity wz, vector v); vector WarpZone_UnTransformVAngles(entity wz, vector v); // reference systems (chained warpzone transforms) -void WarpZone_RefSys_Add(entity me, entity wz); -void WarpZone_RefSys_AddIncrementally(entity me, entity ref); -void WarpZone_RefSys_BeginAddingIncrementally(entity me, entity ref); -vector WarpZone_RefSys_TransformOrigin(entity from, entity to, vector org); -vector WarpZone_RefSys_TransformVelocity(entity from, entity to, vector vel); -vector WarpZone_RefSys_TransformAngles(entity from, entity to, vector ang); -vector WarpZone_RefSys_TransformVAngles(entity from, entity to, vector ang); -entity WarpZone_RefSys_SpawnSameRefSys(entity me); +void WarpZone_RefSys_Clear(entity me); // R := id +void WarpZone_RefSys_Add(entity me, entity wz); // me.R := wz me.R +void WarpZone_RefSys_AddInverse(entity me, entity wz); // me.R := wz^-1 me.R +void WarpZone_RefSys_AddTransform(entity me, vector t, vector s); // me.R := [t s] me.R +void WarpZone_RefSys_AddInverseTransform(entity me, vector t, vector s); // me.R := [t s]^-1 me.R + +// makes this reference system track ref's changes +// NOTE: this is ONLY sensible if WarpZone_RefSys_Add is no longer called on "me" while doing this +// To achieve this, make sure no touch events on warpzone are raised by this entity +// or set a movetype that causes no warpzoning (e.g. MOVETYPE_NONE, MOVETYPE_FOLLOW) +void WarpZone_RefSys_AddIncrementally(entity me, entity ref); // me.R := ref.R me.Rref^-1 me.R; me.Rref := ref.R +void WarpZone_RefSys_BeginAddingIncrementally(entity me, entity ref); // me.Rref := ref.R + +vector WarpZone_RefSys_TransformOrigin(entity from, entity to, vector org); // return to.R from.R^-1 org +vector WarpZone_RefSys_TransformVelocity(entity from, entity to, vector vel); // return to.R from.R^-1 vel +vector WarpZone_RefSys_TransformAngles(entity from, entity to, vector ang); // return to.R from.R^-1 ang +vector WarpZone_RefSys_TransformVAngles(entity from, entity to, vector ang); // return to.R from.R^-1 ang +void WarpZone_RefSys_Copy(entity me, entity from); // to.R := from.R +entity WarpZone_RefSys_SpawnSameRefSys(entity me); // spawn().R = me.R #ifndef BITCLR # define BITCLR(a,b) ((a) - ((a) & (b))) @@ -89,3 +104,13 @@ entity WarpZone_RefSys_SpawnSameRefSys(entity me); #ifndef BITXOR_ASSIGN # define BITXOR_ASSIGN(a,b) ((a) = ((a) | (b)) - ((a) & (b))) #endif +float WarpZoneLib_MoveOutOfSolid(entity e); +#define move_out_of_solid(e) WarpZoneLib_MoveOutOfSolid(e) + +float WarpZoneLib_ExactTrigger_Touch(); +void WarpZoneLib_ExactTrigger_Init(); + +// WARNING: this kills the trace globals +#define EXACTTRIGGER_TOUCH if(WarpZoneLib_ExactTrigger_Touch()) return +#define EXACTTRIGGER_INIT WarpZoneLib_ExactTrigger_Init() +#endif