void train_next()
{
entity targ, cp;
+ vector cp_org;
+
targ = find(world, targetname, self.target);
self.target = targ.target;
if (self.spawnflags & 1)
{
entity prev;
prev = find(world, target, targ.targetname); // get the previous corner first
- cp = find(world, targetname, prev.target2); // now get its second target
+ cp = find(world, targetname, prev.target2); // now get its second target (the control point)
if(cp.targetname == "") // none found
{
- // when using bezier curves, you must have a control point for each corner in the train's path
+ // when using bezier curves, you must have a control point for each corner in the path
if(autocvar_developer)
dprint(strcat("Warning: func_train using beizer curves reached the path_corner '", prev.targetname, "' which does not have a control point. Please add a target2 for each path_corner used by this train!\n"));
- cp = spawn();
- setorigin(cp, targ.origin - self.mins); // assume a straight line to the destination as fallback
+ cp_org = targ.origin - self.mins; // assume a straight line to the destination as fallback
}
+ else
+ cp_org = cp.origin;
}
if (!self.target)
objerror("train_next: no next target");
if (targ.speed)
{
if (self.spawnflags & 1)
- SUB_CalcMove_Bezier(cp.origin, targ.origin - self.mins, targ.speed, train_wait);
+ SUB_CalcMove_Bezier(cp_org, targ.origin - self.mins, targ.speed, train_wait);
else
SUB_CalcMove(targ.origin - self.mins, targ.speed, train_wait);
}
else
{
if (self.spawnflags & 1)
- SUB_CalcMove_Bezier(cp.origin, targ.origin - self.mins, self.speed, train_wait);
+ SUB_CalcMove_Bezier(cp_org, targ.origin - self.mins, self.speed, train_wait);
else
SUB_CalcMove(targ.origin - self.mins, self.speed, train_wait);
}