ref: a274d4d1fafc06576c039ab16551c80491749851
parent: 97914a3f07abd4bd71d0a54ca11cd9693d22a081
author: qwx <qwx@sciops.net>
date: Tue Nov 23 17:48:28 EST 2021
sim.move: add turning half-state when move towards target done
--- a/sim.move.c
+++ b/sim.move.c
@@ -53,6 +53,16 @@
return θ256;
}
+static double
+facemobj(Mobj *mo, Mobj *tgt)
+{
+ Point p;
+
+ p.x = tgt->px + tgt->o->w * Nodewidth / 2;
+ p.y = tgt->py + tgt->o->h * Nodeheight / 2;
+ return facegoal(p, mo);
+}
+
static void
nextpathnode(Mobj *mo)
{
@@ -79,10 +89,27 @@
}
static void
+movereallyreallyreallydone(Mobj *mo)
+{
+ dprint("%M really really really successfully reached goal\n", mo);
+ nextstate(mo);
+}
+
+static void turnstep(Mobj*);
+
+static void
movedone(Mobj *mo)
{
+ Command *c;
+
dprint("%M successfully reached goal\n", mo);
- nextstate(mo);
+ c = mo->cmds;
+ if(c->target1 == nil){
+ nextstate(mo);
+ return;
+ }
+ facemobj(mo, c->target1);
+ c->stepfn = turnstep;
}
static void
@@ -92,6 +119,8 @@
abortcommands(mo);
}
+/* FIXME: kind of weird to mix up argument order,
+ * mo should be first like elsewhere */
static int
repath(Point p, Mobj *mo)
{
@@ -229,6 +258,13 @@
mo->θ -= 256;
mo->Δθ -= Δθ;
return r;
+}
+
+static void
+turnstep(Mobj *mo)
+{
+ if(!tryturn(mo))
+ movereallyreallyreallydone(mo);
}
static int