From fb1544dbd6b99ea6498586d051c25fcd08a963e4 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Tue, 22 May 2012 15:37:32 +0200 Subject: [PATCH] add lots of TSPEED_ constants and use them :P --- qcsrc/server/g_subs.qc | 71 ++++++++++++++++++++++++++++++++--------- qcsrc/server/t_plats.qc | 34 ++++++++++---------- 2 files changed, 73 insertions(+), 32 deletions(-) diff --git a/qcsrc/server/g_subs.qc b/qcsrc/server/g_subs.qc index 049ba797e..05e5153f1 100644 --- a/qcsrc/server/g_subs.qc +++ b/qcsrc/server/g_subs.qc @@ -2,7 +2,6 @@ void SUB_Null() {} float SUB_True() { return 1; } float SUB_False() { return 0; } -void(vector destangle, float tspeed, void() func) SUB_CalcAngleMove; void() SUB_CalcMoveDone; void() SUB_CalcAngleMoveDone; //void() SUB_UseTargets; @@ -254,7 +253,13 @@ void SUB_CalcMove_controller_setlinear (entity controller, vector org, vector de controller.destvec2 = '0 0 0'; } -void SUB_CalcMove_Bezier (vector tcontrol, vector tdest, float tspeed, void() func) +float TSPEED_TIME = -1; +float TSPEED_LINEAR = 0; +float TSPEED_START = 1; +float TSPEED_END = 2; +// TODO average too? + +void SUB_CalcMove_Bezier (vector tcontrol, vector tdest, float tspeedtype, float tspeed, void() func) { float traveltime; entity controller; @@ -266,10 +271,22 @@ void SUB_CalcMove_Bezier (vector tcontrol, vector tdest, float tspeed, void() fu self.finaldest = tdest; self.think = SUB_CalcMoveDone; - if(tspeed > 0) // positive: start speed - traveltime = 2 * vlen(tcontrol - self.origin) / tspeed; - else // negative: end speed - traveltime = 2 * vlen(tcontrol - tdest) / -tspeed; + switch(tspeedtype) + { + default: + case TSPEED_START: + traveltime = 2 * vlen(tcontrol - self.origin) / tspeed; + break; + case TSPEED_END: + traveltime = 2 * vlen(tcontrol - tdest) / tspeed; + break; + case TSPEED_LINEAR: + traveltime = vlen(tdest - self.origin) / tspeed; + break; + case TSPEED_TIME: + traveltime = tspeed; + break; + } if (traveltime < 0.1) // useless anim { @@ -299,7 +316,7 @@ void SUB_CalcMove_Bezier (vector tcontrol, vector tdest, float tspeed, void() fu self = self.owner; } -void SUB_CalcMove (vector tdest, float tspeed, void() func) +void SUB_CalcMove (vector tdest, float tspeedtype, float tspeed, void() func) { vector delta; float traveltime; @@ -319,7 +336,19 @@ void SUB_CalcMove (vector tdest, float tspeed, void() func) } delta = tdest - self.origin; - traveltime = vlen (delta) / tspeed; + + switch(tspeedtype) + { + default: + case TSPEED_START: + case TSPEED_END: + case TSPEED_LINEAR: + traveltime = vlen (delta) / tspeed; + break; + case TSPEED_TIME: + traveltime = tspeed; + break; + } // Very short animations don't really show off the effect // of controlled animation, so let's just use linear movement. @@ -333,17 +362,17 @@ void SUB_CalcMove (vector tdest, float tspeed, void() func) } // now just run like a bezier curve... - SUB_CalcMove_Bezier((self.origin + tdest) * 0.5, tdest, tspeed, func); + SUB_CalcMove_Bezier((self.origin + tdest) * 0.5, tdest, tspeedtype, tspeed, func); } -void SUB_CalcMoveEnt (entity ent, vector tdest, float tspeed, void() func) +void SUB_CalcMoveEnt (entity ent, vector tdest, float tspeedtype, float tspeed, void() func) { entity oldself; oldself = self; self = ent; - SUB_CalcMove (tdest, tspeed, func); + SUB_CalcMove (tdest, tspeedtype, tspeed, func); self = oldself; } @@ -369,7 +398,7 @@ void SUB_CalcAngleMoveDone (void) } // FIXME: I fixed this function only for rotation around the main axes -void SUB_CalcAngleMove (vector destangle, float tspeed, void() func) +void SUB_CalcAngleMove (vector destangle, float tspeedtype, float tspeed, void() func) { vector delta; float traveltime; @@ -382,7 +411,19 @@ void SUB_CalcAngleMove (vector destangle, float tspeed, void() func) self.angles_y -= 360 * floor((self.angles_y - destangle_y) / 360 + 0.5); self.angles_z -= 360 * floor((self.angles_z - destangle_z) / 360 + 0.5); delta = destangle - self.angles; - traveltime = vlen (delta) / tspeed; + + switch(tspeedtype) + { + default: + case TSPEED_START: + case TSPEED_END: + case TSPEED_LINEAR: + traveltime = vlen (delta) / tspeed; + break; + case TSPEED_TIME: + traveltime = tspeed; + break; + } self.think1 = func; self.finalangle = destangle; @@ -399,14 +440,14 @@ void SUB_CalcAngleMove (vector destangle, float tspeed, void() func) self.nextthink = self.ltime + traveltime; } -void SUB_CalcAngleMoveEnt (entity ent, vector destangle, float tspeed, void() func) +void SUB_CalcAngleMoveEnt (entity ent, vector destangle, float tspeedtype, float tspeed, void() func) { entity oldself; oldself = self; self = ent; - SUB_CalcAngleMove (destangle, tspeed, func); + SUB_CalcAngleMove (destangle, tspeedtype, tspeed, func); self = oldself; } diff --git a/qcsrc/server/t_plats.qc b/qcsrc/server/t_plats.qc index 1fa075e15..cd0ce71b6 100644 --- a/qcsrc/server/t_plats.qc +++ b/qcsrc/server/t_plats.qc @@ -88,14 +88,14 @@ void plat_go_down() { sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM); self.state = 3; - SUB_CalcMove (self.pos2, self.speed, plat_hit_bottom); + SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, plat_hit_bottom); } void plat_go_up() { sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM); self.state = 4; - SUB_CalcMove (self.pos1, self.speed, plat_hit_top); + SUB_CalcMove (self.pos1, TSPEED_LINEAR, self.speed, plat_hit_top); } void plat_center_touch() @@ -261,7 +261,7 @@ void train_wait() { entity targ; targ = find(world, targetname, self.target); - SUB_CalcAngleMove(targ.origin, self.ltime + self.wait, train_wait); + SUB_CalcAngleMove(targ.origin, TSPEED_TIME, self.ltime + self.wait, train_wait); self.train_wait_turning = TRUE; return; } @@ -313,16 +313,16 @@ void train_next() if (targ.speed) { if (self.spawnflags & 1) - SUB_CalcMove_Bezier(cp_org, targ.origin - self.mins, targ.speed, train_wait); + SUB_CalcMove_Bezier(cp_org, targ.origin - self.mins, TSPEED_LINEAR, targ.speed, train_wait); else - SUB_CalcMove(targ.origin - self.mins, targ.speed, train_wait); + SUB_CalcMove(targ.origin - self.mins, TSPEED_LINEAR, targ.speed, train_wait); } else { if (self.spawnflags & 1) - SUB_CalcMove_Bezier(cp_org, targ.origin - self.mins, self.speed, train_wait); + SUB_CalcMove_Bezier(cp_org, targ.origin - self.mins, TSPEED_LINEAR, self.speed, train_wait); else - SUB_CalcMove(targ.origin - self.mins, self.speed, train_wait); + SUB_CalcMove(targ.origin - self.mins, TSPEED_LINEAR, self.speed, train_wait); } if(self.noise != "") @@ -636,7 +636,7 @@ void button_done() void button_return() { self.state = STATE_DOWN; - SUB_CalcMove (self.pos1, self.speed, button_done); + SUB_CalcMove (self.pos1, TSPEED_LINEAR, self.speed, button_done); self.frame = 0; // use normal textures if (self.health) self.takedamage = DAMAGE_YES; // can be shot again @@ -661,7 +661,7 @@ void button_fire() sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM); self.state = STATE_UP; - SUB_CalcMove (self.pos2, self.speed, button_wait); + SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, button_wait); } void button_reset() @@ -901,7 +901,7 @@ void door_go_down() } self.state = STATE_DOWN; - SUB_CalcMove (self.pos1, self.speed, door_hit_bottom); + SUB_CalcMove (self.pos1, TSPEED_LINEAR, self.speed, door_hit_bottom); } void door_go_up() @@ -918,7 +918,7 @@ void door_go_up() if (self.noise2 != "") sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM); self.state = STATE_UP; - SUB_CalcMove (self.pos2, self.speed, door_hit_top); + SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, door_hit_top); string oldmessage; oldmessage = self.message; @@ -1203,7 +1203,7 @@ void door_rotating_go_down() } self.state = STATE_DOWN; - SUB_CalcAngleMove (self.pos1, self.speed, door_rotating_hit_bottom); + SUB_CalcAngleMove (self.pos1, TSPEED_LINEAR, self.speed, door_rotating_hit_bottom); } void door_rotating_go_up() @@ -1219,7 +1219,7 @@ void door_rotating_go_up() if (self.noise2 != "") sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM); self.state = STATE_UP; - SUB_CalcAngleMove (self.pos2, self.speed, door_rotating_hit_top); + SUB_CalcAngleMove (self.pos2, TSPEED_LINEAR, self.speed, door_rotating_hit_top); string oldmessage; oldmessage = self.message; @@ -1683,7 +1683,7 @@ void fd_secret_use() self.dest1 = self.origin + v_right * (self.t_width * temp); self.dest2 = self.dest1 + v_forward * self.t_length; - SUB_CalcMove(self.dest1, self.speed, fd_secret_move1); + SUB_CalcMove(self.dest1, TSPEED_LINEAR, self.speed, fd_secret_move1); if (self.noise2 != "") sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM); } @@ -1702,7 +1702,7 @@ void fd_secret_move2() { if (self.noise2 != "") sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM); - SUB_CalcMove(self.dest2, self.speed, fd_secret_move3); + SUB_CalcMove(self.dest2, TSPEED_LINEAR, self.speed, fd_secret_move3); } // Wait here until time to go back... @@ -1722,7 +1722,7 @@ void fd_secret_move4() { if (self.noise2 != "") sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM); - SUB_CalcMove(self.dest1, self.speed, fd_secret_move5); + SUB_CalcMove(self.dest1, TSPEED_LINEAR, self.speed, fd_secret_move5); } // Wait 1 second... @@ -1738,7 +1738,7 @@ void fd_secret_move6() { if (self.noise2 != "") sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM); - SUB_CalcMove(self.oldorigin, self.speed, fd_secret_done); + SUB_CalcMove(self.oldorigin, TSPEED_LINEAR, self.speed, fd_secret_done); } void fd_secret_done() -- 2.39.2