public void Loop()
{
LoopResultStates.Clear();
// update input.
controller.Loop(this);
// position and angle memory.
ox = x;
oy = y;
odx = dx;
ody = dy;
oa = a;
oda = da;
// overridable control and friction physics.
LoopControlPhysics();
LoopFrictionPhysics();
LoopCollisionPhysics();
// advance position.
x += dx;
y += dy;
oa = a % 360 + oa - a;
a = a % 360 + da;
}