public void SendFleet(int sourcePlanetId, int destinationPlanetId, int numShips) { var moveRequest = new MoveRequest() { AuthToken = AuthToken, GameId = GameId, SourcePlanetId = sourcePlanetId, DestinationPlanetId = destinationPlanetId, NumberOfShips = numShips }; _pendingMoveRequests.Add(moveRequest); }
public MoveResult Execute(MoveRequest request) { var game = Games[request.GameId]; var result = game.MoveFleet(request); result.Success = true; return result; }
public MoveResult MoveFleet(MoveRequest request) { var result = new MoveResult(); // non-zero ships if(request.NumberOfShips <= 0) { result.Success = false; result.Message = "Can't send a zero fleet"; return result; } var validSourcePlanets = _getPlanetsForPlayer(request.AuthToken); // A planet of the requested source ID exists, belongs to that planer, AND it has enough ships var sourceValid = validSourcePlanets.FirstOrDefault(p => p.Id == request.SourcePlanetId && request.NumberOfShips <= p.NumberOfShips); // A planet of the requested destination ID exists var destinationValid = _planets.FirstOrDefault(p => p.Id == request.DestinationPlanetId); if (sourceValid != null && destinationValid != null) { lock (synclock) { // Subtract ships from planet sourceValid.NumberOfShips -= request.NumberOfShips; // Build fleet var newFleet = new Fleet() { Id = _MAXFLEETID++, OwnerId = _authTokenToId(request.AuthToken), Source = sourceValid, Destination = destinationValid, NumberOfShips = request.NumberOfShips, NumberOfTurnsToDestination = (int)Math.Ceiling(sourceValid.Position.Distance(destinationValid.Position)) }; _fleets.Add(newFleet); result.Fleet = Mapper.Map<Shared.Fleet>(newFleet); result.Success = true; } } else { result.Success = false; result.Message = "Invalid move command, check if the planet of the requested source/dest ID exists, belongs to that player, AND it has enough ships."; } return result; }
public MoveResult Execute(MoveRequest request) { var game = Games[request.GameId]; return game.MoveFleet(request); }