From: Maik Merten Date: Mon, 22 Nov 2010 19:09:06 +0000 (+0100) Subject: properly compute velocity to go into final position X-Git-Tag: xonotic-v0.5.0~311^2~37^2^2~7 X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=49205b35c27f6f7bb9e476aa7759dbb6661a23b6 properly compute velocity to go into final position --- diff --git a/qcsrc/server/g_subs.qc b/qcsrc/server/g_subs.qc index 88e5fa1fd3..180dee305a 100644 --- a/qcsrc/server/g_subs.qc +++ b/qcsrc/server/g_subs.qc @@ -180,35 +180,35 @@ void SUB_CalcMoveDone (void) void SUB_CalcMove_controller_think (void) { entity oldself; - float movephase; float traveltime; float phasepos; - float remaining; + float nexttick; vector delta; vector veloc; vector nextpos; if(time < self.animstate_endtime) { delta = self.destvec; + nexttick = time + 0.1; - if((time + 0.1) < self.animstate_endtime) { - + if(nexttick < self.animstate_endtime) { traveltime = self.animstate_endtime - self.animstate_starttime; - movephase = ((time + 0.1) - self.animstate_starttime) / traveltime; - phasepos = sin(movephase * 3.14159265 / 2); + phasepos = (nexttick - self.animstate_starttime) / traveltime; // range: [0, 1] + phasepos = 3.14159265 + (phasepos * 3.14159265); // range: [pi, 2pi] + phasepos = cos(phasepos); // cos [pi, 2pi] is in [-1, 1] + phasepos = phasepos + 1; // correct range to [0, 2] + phasepos = phasepos / 2; // correct range to [0, 1] nextpos = self.origin + (delta * phasepos); veloc = nextpos - self.owner.origin; veloc = veloc * 10; // so it arrives in 0.1 seconds - self.nextthink = time + 0.1; + } else { - remaining = self.animstate_endtime - time; veloc = self.finaldest - self.owner.origin; - veloc = veloc * (1 / remaining); // so it'll arrive in the remaining time + veloc = veloc * 10; // so it arrives in 0.1 seconds self.nextthink = self.animstate_endtime; } - self.owner.velocity = veloc; - + self.nextthink = nexttick; } else { oldself = self; self.owner.think = self.think1;