GameAction DoMove(Direction dir)
{
IntVector2 ov = dir.ToIntVector2();
if (ov.IsNull)
return new WaitAction(1);
var env = this.Worker.Environment;
for (int i = 0; i < 7; ++i)
{
var v = ov.FastRotate(((i + 1) >> 1) * (((i % 2) << 1) - 1));
var d = env.AdjustMoveDir(this.Worker.Location, v.ToDirection());
if (d != Direction.None)
return new MoveAction(d);
}
if (this.Worker.CanMoveTo(Direction.Up))
return new MoveAction(Direction.Up);
if (this.Worker.CanMoveTo(Direction.Down))
return new MoveAction(Direction.Down);
return new WaitAction(1);
}