Overall Notes: Phases might only affect the Game Class instead of Player.
%%{init: {"theme": "default"}%%
%% Draft ChanceCard
sequenceDiagram
participant Phase as :Phase
participant Player as :Player
participant Deck as :Deck
participant ChanceCard as :ChanceCard
Note over Player: Draft ChanceCard
Phase->>Player: Phase(Draft)
Player->>+Deck: DrawChanceCard()
Deck-->>-Player: ReturnChanceCard()
Player->>+ChanceCard: ApplyEffects()
ChanceCard-->>-Player: Effects
Player->>+Deck: UpdateLastChanceCard()
Deck-->>-Player: Updated last chance card
%%{init: {"theme": "default"}%%
%% Exchange Army
%% NOTE: This can change depends on the army changeing conditions.
sequenceDiagram
participant Phase as :Phase
participant Player as :Player
participant Game as :Game
participant Inventory as :Inventory
Note over Player: Fortify :Phase
Phase->>Player: Phase(Fortify)
Player->>+Game: ViewArmyOptions()
Game-->>-Player: DisplayArmyOptions()
Player->>+Game: SelectArmyChanges()
Game-->>-Player: ConfirmArmyChanges()
Player->>+Inventory: UpdateArmy()
Inventory-->>-Player: Updated army
%%{init: {"theme": "default"}%%
%% Game Setup
sequenceDiagram
participant Player as :Player
participant NameModule as :Name
participant AvatarModule as :Avatar
Note over Player: Game Setup
loop For Each Player
Player ->>+ NameModule: EnterName()
NameModule -->>- Player: Name Confirmed
Player ->>+ AvatarModule: ChooseAvatar()
AvatarModule -->>- Player: Avatar Confirmed
Player ->> Player: ChooseColor()
Player -->> Player: Color Confirmed
end
%%{init: {"theme": "default"}%%
%% Conquer Territory
%% NOTE: TerritoryCard Class Has not been used, this can be changed
sequenceDiagram
participant Player as :Player
participant Game as :Game
participant Territory as :Territory
participant Inventory as :Inventory
Note over Player: Conquer Territory
Player->>+Game: BattleResult(Win)
Game->>+Territory: ChangeOwner()
Territory-->>-Game: Owner Changed
Game->>Player: TerritoryConquered()
Game->>+Inventory: AddTerritoryCard()
Inventory-->>-Game: Territory card added
Game->>Player: Territory card added
%%{init: {"theme": "default"}%%
%% Enable/Disable Territories | BUILDING MODE
%% NOTE: The disabled territories are ejected from related Continent \\n
%% so it can be leaved as it is (the list of territories).
sequenceDiagram
participant Phase as :Phase
participant Game as :Game
participant Player as :Player
participant Territory as :Territory
participant Continent as :Continent
participant WorldMap as :WorldMap
Note over Phase: Building Mode
Phase->>+Game: Phase(Building)
loop Each Player's Turn
Game->>Player: SelectTerritories()
Player->>+Game: Chosen Territories
Game->>+Territory: EnableDisableTerritories()
Territory-->>-Game: Territories Updated
Game->>+Continent: SetContinentList()
Continent-->>-Game: New Continent List
Game->>+WorldMap: FixWorldMap()
WorldMap-->>-Game: World Map Fixed
Game->>Player: UpdateArmyNumber()
end
%%{init: {"theme": "default"}%%
%% Initial Army Placement
sequenceDiagram
participant Game as :Game
participant Player as :Player
participant Territory as :Territory
participant Inventory as :Inventory
Note over Game: Initial Army Placement
loop Each Player's Turn
Game->>Player: GetArmyNumber()
loop While Army Number > 0
Player->>+Territory: PlaceArmy()
Territory-->>-Player: Army placed
Player->>+Inventory: UpdateArmyNumber()
Inventory-->>-Player: Army number updated
end
end
%%{init: {"theme": "default"}%%
%% Grant Army
sequenceDiagram
participant Phase as :Phase
participant Player as :Player
participant Game as :Game
participant Inventory as :Inventory
participant Territory as :Territory
Note over Phase: Grant Army
Phase->>Player: Phase(Fortify)
Player->>+Game: GetTerritoryNum
Game-->>-Player: Territory Count
Game->>+Player: GiveArmy()
Player->>+Inventory: AddArmy()
Inventory-->>-Player: Army Number Updated
loop While ArmyNumber > 0
Player->>Territory: SelectTerritory()
Player->>+Territory: UpdateArmy()
Territory-->>-Player: Army Count on Territory Updated
Player->>+Inventory: PlaceArmy()
Inventory-->>-Player: Army Number Updated
end%%{init: {"theme": "default"}%%
%%{init: {"theme": "default"}%%
%% Pause/Resume Game
%% NOTE: phase paused can be canceled
sequenceDiagram
participant Player as :Player
participant Game as :Game
participant Phase as :Phase
Note over Player: :Pause/Resume
Player->>+Game: Pause/ResumaGame()
Game->>+Phase: SetPhase(Paused)
Phase-->>-Game: Phase Set to Paused
Game-->>-Player: Game Paused
Note over Phase: Paused
Note over Player, Game: No actions allowed during pause
Player->>+Game: Pause/ResumeGame
Game->>+Phase: SetPhase(Playing)
Phase-->>-Game: Phase Set to Playing
Game-->>-Player: Game Resumed
Note over Phase: Playing
%%{init: {"theme": "default"}%%
%% DEFENSE
%% NOTE: This can be included to the launch offense section.
sequenceDiagram
participant Attacker as :Player[Attacker]
participant Game as :Game
participant Defender as :Player[Defender]
participant Dice as :Dice
Attacker->>+Game: LaunchOffense()
Game->>+Defender: NotifyAttack()
loop Until one side has no armies left
Game->>+Attacker: Attacker's turn to roll dice
Attacker->>+Dice: RollDice()
Dice-->>-Attacker: DiceResult()
Game->>+Defender: Defender's turn to roll dice
Defender->>+Dice: RollDice()
Dice-->>-Defender: DiceResult()
Game->>Game: Compare dice results and update army counts
end
Game->>Game: Determine winner and update territories
%%{init: {"theme": "default"}%%
%% End Turn
sequenceDiagram
participant Player1 as :Player1
participant Player2 as :Player2
participant Game as :Game
Note over Player1: End Turn
Player1->>+Game: End Turn
Game->>Game: End Turn for Player1, Start Turn for Player2
Game->>+Player2: StartTurn()
%%Prepare For Attack
sequenceDiagram
participant Player as :Player
participant Game as :Game
Player->>+Game: DesignateTerritory()
opt Inadequate forces
Game->>Game: SwitchToFortifyPhase()
Player->>+Game: BoostArmyCount()
Game->>Game: PrepareForUpcomingAttack()
end
opt Sufficient forces
Game->>Game: LaunchOffense()
end
opt No armies for fortification
Game->>+Player: EndTurn()
end
%%End turn
sequenceDiagram
participant Player as :Player
participant Game as :Game
Player->>+Game: EndTurn()
alt Player's turn
Game->>Game: EndCurrentTurn()
Game->>Game: StartNextTurn()
else Not Player's turn
Game->>Player: DisplayErrorMessage()
end
%% Save
sequenceDiagram
participant Player as :Player
participant Game as :Game
Player->>+Game: InitiateSaveGame()
Game->>Player: RequestSaveName()
Player->>Game: AssignSaveName()
Game->>Game: SaveGame()
%% Load
sequenceDiagram
participant Player as :Player
participant Game as :Game
Player->>+Game: InitiateLoadGame()
opt Saved game exists
Game->>Game: LoadSavedGame()
end
opt No saved game exists
Game->>Game: CreateAndSaveNewGame()
end
opt Unable to retrieve saved game
Game->>Player: DisplayErrorMessage()
Game->>Game: CreateAndSaveNewGame()
end