]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Turn self.platmovetype into a string so it can accept either two values or one. Partl...
authorMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Thu, 24 May 2012 12:23:13 +0000 (15:23 +0300)
committerMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Thu, 24 May 2012 12:23:13 +0000 (15:23 +0300)
qcsrc/server/defs.qh
qcsrc/server/g_subs.qc
qcsrc/server/t_plats.qc

index de814316c638370579189f2f61c0e03c42c9b8e1..71620c9dcecb0d86d9a41208f56817ede5f07875 100644 (file)
@@ -78,7 +78,8 @@ float maxclients;
 //.float       style;
 //.float       skill;
 .float sounds;
-.float  platmovetype;
+.string  platmovetype;
+.float platmovetype_start, platmovetype_end;
 
 .string killtarget;
 
index 4b8ca48b38640c8617e0f04bb8d4e9d97375dc99..6ce77d5f5ae7984afe5b4ac940891feffcb1b0fd 100644 (file)
@@ -188,21 +188,16 @@ void SUB_CalcMove_controller_think (void)
 
                traveltime = self.animstate_endtime - self.animstate_starttime;
                phasepos = (nexttick - self.animstate_starttime) / traveltime; // range: [0, 1]
-               if(!self.platmovetype)
-                       self.platmovetype = 2; // default
+
+               //phasepos = cubic_speedfunc(self.platmovetype_start, self.platmovetype_end, phasepos);
+
+/*
                switch(self.platmovetype)
                {
                        case 1: // linear
                                break;
                                // phasepos = cubic_speedfunc(1, 1, phasepos); // identity
                        case 2: // cosine
-                               /* old version, good for mathematical reference
-                               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]
-                               */
-
                                // phasepos = (1 - cos(phasepos * 3.14159265)) / 2;
                                phasepos = cubic_speedfunc(0, 0, phasepos);
                                break;
@@ -219,6 +214,7 @@ void SUB_CalcMove_controller_think (void)
                                phasepos = cubic_speedfunc(1.5, 0, phasepos);
                                break;
                }
+*/
                nextpos = self.origin + (delta * phasepos) + (delta2 * phasepos * phasepos);
                // derivative: delta + 2 * delta2 * phasepos (e.g. for angle positioning)
 
@@ -323,6 +319,8 @@ void SUB_CalcMove_Bezier (vector tcontrol, vector tdest, float tspeedtype, float
        controller.classname = "SUB_CalcMove_controller";
        controller.owner = self;
        controller.platmovetype = self.platmovetype;
+       controller.platmovetype_start = self.platmovetype_start;
+       controller.platmovetype_end = self.platmovetype_end;
        SUB_CalcMove_controller_setbezier(controller, self.origin, tcontrol, tdest);
        controller.finaldest = (tdest + '0 0 0.125'); // where do we want to end? Offset to overshoot a bit.
        controller.animstate_starttime = time;
@@ -378,7 +376,7 @@ void SUB_CalcMove (vector tdest, float tspeedtype, float tspeed, void() func)
        // of controlled animation, so let's just use linear movement.
        // Alternatively entities can choose to specify non-controlled movement.
         // The only currently implemented alternative movement is linear (value 1)
-       if (traveltime < 0.15 || self.platmovetype < 2)
+       if (traveltime < 0.15 || self.platmovetype_start || self.platmovetype_end) // is this correct?
        {
                self.velocity = delta * (1/traveltime); // QuakeC doesn't allow vector/float division
                self.nextthink = self.ltime + traveltime;
index 753ab02fa8729c14b6270079e4960af7f3c52db3..bf8ee01eec5644f212e2b3271754a45714ea9258 100644 (file)
@@ -182,7 +182,20 @@ void plat_reset()
        }
 }
 
-void spawnfunc_path_corner() { }
+void spawnfunc_path_corner()
+{
+       if(self.platmovetype && self.platmovetype != "")
+       {
+               // setup values for overriding train movement
+               // if a second value does not exist, both start and end speeds are the single value specified
+               float n;
+               n = tokenize_console(self.platmovetype);
+               self.platmovetype_start = stof(argv(0));
+               self.platmovetype_end = stof(argv(0));
+               if(n > 1)
+                       self.platmovetype_end = stof(argv(1));
+       }
+}
 void spawnfunc_func_plat()
 {
        if (self.sounds == 0)
@@ -252,7 +265,6 @@ void spawnfunc_func_plat()
 }
 
 .float train_wait_turning;
-.float platmovetype_default;
 void() train_next;
 void train_wait()
 {
@@ -313,17 +325,11 @@ void train_next()
        if (!self.wait)
                self.wait = 0.1;
 
-       switch(targ.platmovetype)
+       if(targ.platmovetype_start || targ.platmovetype_end)
        {
-               case 0: // no override
-                       self.platmovetype = self.platmovetype_default;
-                       break;
-               case 1: // linear
-                       self.platmovetype = 0;
-                       break;
-               case 2: // cosine
-                       self.platmovetype = 1;
-                       break;
+               // override train movement type
+               self.platmovetype_start = targ.platmovetype_start;
+               self.platmovetype_end = targ.platmovetype_end;
        }
 
        if (targ.speed)
@@ -389,7 +395,6 @@ void spawnfunc_func_train()
        if(self.dmg && (!self.dmgtime))
                self.dmgtime = 0.25;
        self.dmgtime2 = time;
-       self.platmovetype_default = self.platmovetype; // used for path_corner overrides
 
        // TODO make a reset function for this one
 }