public override TurnState HandleInput(PlayerAction action) { if (action.Type != ActionType.Path) { PromptError(Resources.TurnState_GeneralInvalidInput); return(this); } if (ActivePlayer.CanTransfer(roadContainer) && placedRoads < 2 && Board.CanPlaceRoadSomewhere(ActivePlayer)) { ActivePlayer.Transfer(roadContainer, Bank); if (!Board.PlaceRoad(Model, action.Index)) { PromptError(Resources.PlaceRoad_Failed); return(this); } Presenter.ColorRoad(ActivePlayer, action.Index); if (placedRoads == 0) { PromptUser(Resources.PlayRoadBuilding_SecondInstruction); placedRoads++; return(this); } return(ReturnState); } PromptError(Resources.PlayRoadBuilding_NoRoads); return(ReturnState); }
public override TurnState HandleInput(PlayerAction action) { if (action.Type != ActionType.Hex || action.Value == Item.Desert) { PromptError(Resources.TurnState_GeneralInvalidInput); return(this); } var requestedResource = Board.GetHex(action.Index).Resource; if (ExchangeTypeSelected && exchangeType != requestedResource) { var tradeAway = new ItemContainer(new Dictionary <Item, int> { { exchangeType, exchangeRate } }); var tradeGet = new ItemContainer(new Dictionary <Item, int> { { requestedResource, 1 } }); if (!Bank.CanTransfer(tradeGet)) { PromptError(Resources.PlayYearOfPlenty_OutOfAResource); return(this); } ActivePlayer.Transfer(tradeAway, Bank); Bank.Transfer(tradeGet, ActivePlayer); Presenter.DisplayPlayerResources(ActivePlayer); ExchangeTypeSelected = false; return(State <Trade>()); } else { var tradeAway = new ItemContainer(new Dictionary <Item, int> { { requestedResource, exchangeRate } }); if (ActivePlayer.CanTransfer(tradeAway)) { exchangeType = requestedResource; ExchangeTypeSelected = true; PromptUser(Resources.DoTrade_SelectWant); } else { PromptError(Resources.DoTrade_NotEnough); } } return(this); }