Class PlayCharacterCard
java.lang.Object
it.polimi.ingsw.Controller.Actions.PlayerAction
it.polimi.ingsw.Controller.Actions.PlayCharacterCard
- All Implemented Interfaces:
Serializable
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprivate final OptionalValue<Integer>
private final OptionalValue<PawnColour>
private final OptionalValue<List<Pair<PawnColour,
PawnColour>>> private final int
private static final long
-
Constructor Summary
ConstructorDescriptionPlayCharacterCard
(int playerBoardId, int selectedCard, OptionalValue<Integer> optTargetIsland, OptionalValue<PawnColour> optTargetPawn, OptionalValue<List<Pair<PawnColour, PawnColour>>> optTargetPawnPairs) Create a new instance of this class with the following inputs: -
Method Summary
Modifier and TypeMethodDescriptionprotected OptionalValue<InputValidationException>
customValidation
(List<PlayerAction> history, Model ctx) This function is used byPlayerAction.validate(List, Model)
to check whether or not the declaredPlayerAction
is possible.
This function will check for the following requirements:private CharacterCardInput
generateCharacterCardInput
(PlayerBoard caller, Model ctx) aCharacterCard
requires more information than the one contained in the constructor of thisPlayerAction
to be able to function.void
unsafeExecute
(Model ctx) Every class extendingPlayerAction
must implement the following method, which takes aModel
reference and applies the concrete effect of the action.Methods inherited from class it.polimi.ingsw.Controller.Actions.PlayerAction
getPlayerBoardID, validate
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
selectedCard
private final int selectedCard -
optTargetIsland
-
optTargetPawn
-
optTargetPawnPairs
-
-
Constructor Details
-
PlayCharacterCard
public PlayCharacterCard(int playerBoardId, int selectedCard, OptionalValue<Integer> optTargetIsland, OptionalValue<PawnColour> optTargetPawn, OptionalValue<List<Pair<PawnColour, PawnColour>>> optTargetPawnPairs) Create a new instance of this class with the following inputs:- Parameters:
playerBoardId
- the ID of the currentPlayerBoard
selectedCard
- the ID of theCharacterCard
to be playedoptTargetIsland
- if a target island is required as an input to the card, provide it hereoptTargetPawn
- if a target pawn is required as an input to the card, provide it hereoptTargetPawnPairs
- if a list of pawn pairs is required as an input to the card, provide it here
-
-
Method Details
-
customValidation
protected OptionalValue<InputValidationException> customValidation(List<PlayerAction> history, Model ctx) This function is used byPlayerAction.validate(List, Model)
to check whether or not the declaredPlayerAction
is possible.
This function will check for the following requirements:- The
GameMode
must beGameMode.ADVANCED
- The
GamePhase
must beGamePhase.ACTION
- The selected character card must be within bounds (index 0 to 2 included)
- The player needs to have enough coins to by the card
- The
CharacterCardInput
generated from the attributes must be correct
- Specified by:
customValidation
in classPlayerAction
- Parameters:
history
- the controller stores aList
of previousPlayerAction
s related to the player taking the current turn (at every new turn, the history is cleared). Some actions may use thisList
to check for duplicates.ctx
- a reference toModel
. Some actions may use this reference to check for consistency between what the actions declares and what the Model offers.- Returns:
- An empty
OptionalValue
in case of a successful validation. Otherwise the returnedOptionalValue
contains the relatedInputValidationException
- The
-
unsafeExecute
Description copied from class:PlayerAction
Every class extendingPlayerAction
must implement the following method, which takes aModel
reference and applies the concrete effect of the action.
Warning: this function, as implied by the name, is unsafe. it should never be called by called outside the scope of the classController
, which takes adequate precautions in order to guarantee a coherent execution of the method.- Specified by:
unsafeExecute
in classPlayerAction
- Parameters:
ctx
- theModel
reference, once the method finishes running the game state will be altered.- Throws:
Exception
- Should an error occur during the execution of the method, such error will be reported through the thrownException
. Note that anyPlayerAction
inheritor should guarantee the absence of Exceptions for any positive return value yielded byPlayerAction.validate(List, Model)
-
generateCharacterCardInput
private CharacterCardInput generateCharacterCardInput(PlayerBoard caller, Model ctx) throws InvalidContainerIndexException aCharacterCard
requires more information than the one contained in the constructor of thisPlayerAction
to be able to function. During the calls to verify the action, aCharacterCardInput
object needs to be created so the internal validation mechanism of theCharacterCard
can work.- Parameters:
caller
- instead of the id of the current player, a reference to the currentPlayerBoard
is neededctx
- theModel
object is required to allow translation of the attributes of this object into aCharacterCardInput
- Returns:
- the
CharacterCardInput
associated with this object's attributes - Throws:
InvalidContainerIndexException
- if the attribute of target island is pointing to an unidentified island-ID in the model, this exception is thrown
-