From: Mircea Kitsune Date: Mon, 24 Oct 2011 23:08:42 +0000 (+0300) Subject: Use a different way to check distance and dragging requirements. This fixes a bug... X-Git-Tag: xonotic-v0.6.0~35^2~18^2~195 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=a4507f589e7a11838a63576e69b5789cb97d6815 Use a different way to check distance and dragging requirements. This fixes a bug where if a dragged object went out of range, it would be stuck floating until you looked at it again. --- diff --git a/qcsrc/server/cheats.qc b/qcsrc/server/cheats.qc index 6995b415a4..e5a78a05ed 100644 --- a/qcsrc/server/cheats.qc +++ b/qcsrc/server/cheats.qc @@ -664,7 +664,7 @@ float CheatCommand(float argc) END_CHEAT_FUNCTION(); } -float Drag(entity e, float dist); +float Drag(entity e, float candrag); void Drag_Begin(entity dragger, entity draggee, vector touchpoint); void Drag_Finish(entity dragger); float Drag_IsDraggable(entity draggee); @@ -692,9 +692,9 @@ float CheatFrame() } if(autocvar_sv_cheats) { - // only use non-sandbox dragging if cheats are enabled + // only use cheat dragging if cheats are enabled crosshair_trace_plusvisibletriggers(self); - if(Drag(trace_ent, FALSE) && !cvar("g_sandbox")) + if(Drag(trace_ent, TRUE) && !cvar("g_sandbox")) DID_CHEAT(); } break; @@ -709,12 +709,8 @@ float CheatFrame() // ENTITY DRAGGING -float Drag(entity e, float dist) +float Drag(entity e, float candrag) { - float inrange; - if(vlen(e.origin - self.origin) <= dist || !dist) - inrange = TRUE; - if(Drag_IsDragging(self)) { if(self.BUTTON_DRAG) @@ -749,7 +745,7 @@ float Drag(entity e, float dist) else { if(Drag_CanDrag(self)) - if(self.BUTTON_DRAG && inrange) + if(self.BUTTON_DRAG && candrag) { if(e) if(Drag_IsDraggable(e)) diff --git a/qcsrc/server/cheats.qh b/qcsrc/server/cheats.qh index b563c0e13b..dec12cbdb8 100644 --- a/qcsrc/server/cheats.qh +++ b/qcsrc/server/cheats.qh @@ -12,4 +12,4 @@ float CheatFrame(); void Drag_MoveDrag(entity from, entity to); // call this from CopyBody -float Drag(entity e, float dist); // used by sandbox code \ No newline at end of file +float Drag(entity e, float candrag); // used by sandbox code \ No newline at end of file diff --git a/qcsrc/server/mutators/sandbox.qc b/qcsrc/server/mutators/sandbox.qc index 6854251026..ea41dcea3b 100644 --- a/qcsrc/server/mutators/sandbox.qc +++ b/qcsrc/server/mutators/sandbox.qc @@ -110,10 +110,13 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerPreThink) return FALSE; // cheats already allow dragging all objects crosshair_trace_plusvisibletriggers(self); - if(trace_ent.classname == "object") - if(Drag(trace_ent, autocvar_g_sandbox_editor_distance_edit)) // execute the dragging - if(autocvar_g_sandbox_info) - print(strcat(self.netname, " grabbed an object at origin ", vtos(trace_ent.origin), "\n")); + + float candrag; + if(trace_ent.classname == "object" && vlen(trace_ent.origin - self.origin) <= autocvar_g_sandbox_editor_distance_edit) + candrag = TRUE; // object can be picked up + if(Drag(trace_ent, candrag)) // execute dragging + if(autocvar_g_sandbox_info) + print(strcat(self.netname, " grabbed an object at origin ", vtos(trace_ent.origin), "\n")); return FALSE; }