From 13f7e852458f1fa239fc1662a337e27b96e28ccc Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 19 Mar 2009 11:12:27 +0000 Subject: [PATCH] some drag cursor improvements :P git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6217 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_client.qc | 96 ++++++++++++++++++++++++---------- data/qcsrc/server/defs.qh | 2 + 2 files changed, 71 insertions(+), 27 deletions(-) diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index ac23e6b21..d19c32092 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -2377,35 +2377,21 @@ void PlayerPreThink (void) } target_voicescript_next(self); - - if(sv_cheats) - if(self.BUTTON_DRAG) - if(!self.dragentity) - if(self.cursor_trace_ent) - if(!self.cursor_trace_ent.tag_index) - { - self.dragentity = self.cursor_trace_ent; - if(cvar("chase_active")) - { - if(gettagindex(self, "tag_weapon")) - attach_sameorigin(self.dragentity, self, "tag_weapon"); - else - attach_sameorigin(self.dragentity, self, ""); - } - else - attach_sameorigin(self.dragentity, self.weaponentity, ""); - self.dragentity.effects |= EF_FLAME; - } - - if(!self.BUTTON_DRAG) - if(self.dragentity) - { - self.dragentity.effects &~= EF_FLAME; - detach_sameorigin(self.dragentity); - self.dragentity = world; - } } +void DragCursor_Think() +{ + self.model = self.owner.dragentity.model; + self.modelindex = self.owner.dragentity.modelindex; + self.origin = self.owner.dragentity.origin; + self.angles = self.owner.dragentity.angles; + self.tag_entity = self.owner.dragentity.tag_entity; + self.tag_index = self.owner.dragentity.tag_index; + self.scale = self.owner.dragentity.scale; + detach_sameorigin(self); + + self.nextthink = time; +} /* ============= @@ -2453,6 +2439,62 @@ void PlayerPostThink (void) self.idlekick_lasttimeleft = timeleft; } + if(sv_cheats) + if(self.BUTTON_DRAG) + if(!self.dragentity) + if(self.cursor_trace_ent) + if(!self.cursor_trace_ent.tag_index) + { + self.dragentity = self.cursor_trace_ent; + self.dragcursor = spawn(); + self.dragcursor.owner = self; + self.dragcursor.think = DragCursor_Think; + self.dragcursor.nextthink = time; + self.dragcursor.exteriormodeltoclient = self; + attach_sameorigin(self.dragentity, self.weaponentity, ""); + self.dragentity.effects |= EF_FLAME; + } + + if(self.dragentity) + { + if(self.BUTTON_DRAG) + { + float f; + if(self.dragspeed == 0) + self.dragspeed = 16; + if(self.impulse == 10 || self.impulse == 15 || self.impulse == 18) + { + f = 1 + self.dragspeed / vlen(self.dragentity.origin); + self.dragentity.origin = self.dragentity.origin * f; + self.impulse = 0; + } + else if(self.impulse == 12 || self.impulse == 16 || self.impulse == 19) + { + f = 1 - self.dragspeed / vlen(self.dragentity.origin); + self.dragentity.origin = self.dragentity.origin * f; + self.impulse = 0; + } + else if(self.impulse >= 1 && self.impulse <= 9) + { + self.dragspeed = pow(2, self.impulse); + self.impulse = 0; + } + else if(self.impulse == 14) + { + self.dragspeed = pow(2, 10); + self.impulse = 0; + } + } + else + { + self.dragentity.effects &~= EF_FLAME; + detach_sameorigin(self.dragentity); + self.dragentity = world; + remove(self.dragcursor); + self.dragcursor = world; + } + } + if(self.classname == "player") { CheckRules_Player(); UpdateChatBubble(); diff --git a/data/qcsrc/server/defs.qh b/data/qcsrc/server/defs.qh index add93bf30..eaefece4a 100644 --- a/data/qcsrc/server/defs.qh +++ b/data/qcsrc/server/defs.qh @@ -554,3 +554,5 @@ vector debug_shotorg; // if non-zero, overrides the shot origin of all weapons float servertime, serverprevtime, serverframetime; .entity dragentity; +.float dragspeed; +.entity dragcursor; -- 2.39.2