public virtual bool CanMove(Robot robot) { if (_position == robot) return true; return Routes.Any(route => route.CanNavigate(_position, robot)); }
public virtual bool MoveTo(Robot robot) { if (!CanMove(robot)) return false; _position = robot; return true; }
public bool CanNavigate(Robot robot1, Robot robot2) { // routes are bi-directionally navigatable return ((Robot1 == robot1 && Robot2 == robot2) || (Robot1 == robot2 && Robot2 == robot1)) && !IsBlocked; }
public Route(Robot robot1, Robot robot2) { Robot1 = robot1; Robot2 = robot2; }
public override bool CanMove(Robot robot) => false;
public override bool MoveTo(Robot robot) => false;
public bool IsPositionedAt(Robot robot) { return _position == robot; }
public Cart(Robot startPosition, params Route[] routes) { Routes = routes; _position = startPosition; }
public override bool MoveTo(Robot robot) { _position = Choose(Routes.SelectMany(route => new[] { route.Robot1, route.Robot2 })); return true; }