public Route GetSubRoute(Route route) { Route sub = new Route(); sub.Firefighter = route.Firefighter; sub.Steps = new List<Room>(route.Steps); sub.Steps.RemoveAt(route.Steps.Count - 1); sub.Doors = route.Doors; Room last = route.Steps[route.Steps.Count - 1]; Room secondToLast = route.Steps[route.Steps.Count - 2]; sub.Cost = route.Cost - GetMoveCost(route.Firefighter, secondToLast, last); int wallRow = (last.Row + secondToLast.Row) / 2; int wallColumn = (last.Column + secondToLast.Column) / 2; if(map.Field(wallRow, wallColumn) != null && map.Field(wallRow, wallColumn) is Door) { sub.Cost -= route.Firefighter.ActionCosts[ActionName.OpenDoors]; sub.Doors.Remove(map.Field(wallRow, wallColumn) as Door); } return sub; }
private Route CheapestRoute(Firefighter firefigher, Room start, Room end) { int cost = 1; List<Room> steps = new List<Room>(); List<Door> doors = new List<Door>(); steps.Add(start); //To DO: Znaleźć drogę. Każdy ruch pomiędzy sąsiednimi polami dodać do steps, a jego koszt do cost. steps.Add(end); //Koniec - przypisanie i zwrócenie wyniku; Route route = new Route(); route.Steps = steps; route.Doors = doors; route.Cost = cost; route.Firefighter = firefigher; return route; }
public Action GetMoveAction(Route route) { Action move; Firefighter firefighter = route.Firefighter; Room destination = route.Steps[route.Steps.Count - 1]; //if doors if (route.Doors.Count > 0) { move = new Action(ActionName.Move, route.Cost, () => { Jump(firefighter, destination); CloseAllDoors(route.Doors); }); } else { move = new Action(ActionName.Move, route.Cost, () => { Jump(firefighter, destination); }); } return move; }