Player : DraftChanceCard() Player --> ChanceCard : 1-pickChanceCard Player --> ChanceCard : 2-getEffect"> Player : DraftChanceCard() Player --> ChanceCard : 1-pickChanceCard Player --> ChanceCard : 2-getEffect"> Player : DraftChanceCard() Player --> ChanceCard : 1-pickChanceCard Player --> ChanceCard : 2-getEffect">
%%{init: {"theme": "default"}%%
%% Chance Card Draft and Usage
stateDiagram-v2
		state ":Player" as Player
		state ":ChanceCard" as ChanceCard
    [*] --> Player : DraftChanceCard()
    Player --> ChanceCard : 1-pickChanceCard
    Player --> ChanceCard : 2-getEffect
%%{init: {"theme": "default"}%%
%% Exchange Army
stateDiagram-v2
	state ":Player" as Player
	state ":ButtonController" as ButtonController
	state ":GameInterface" as GameInterface
	state ":OptionsMenu" as OptionsMenu

  [*] --> Player :  ExchangeArmy()
  Player --> ButtonController : 1. DetermineButtonVisibilityAndDisplay()
  ButtonController --> GameInterface : 2. Button Clicked
  state GAMEINTERFACE {
    GameInterface --> ChangeArmy : 3.1. Yes
    GameInterface --> NoAction : 3.2. No
  }
  ChangeArmy --> OptionsMenu : 4. ViewArmyOptions()
  OptionsMenu --> ApplyChanges : 5. Select Option
  NoAction --> [*] : 6. No Action
%%{init: {"theme": "default"}%%
%%Help Button
stateDiagram-v2
	state ":Player" as Player
	state ":DisplayHelpPopup" as DisplayHelpPopup
  [*] --> Player : HelpButton()
  Player --> HelpButtonClicked : HelpButtonClicked()
  HelpButtonClicked --> DisplayHelpPopup : DisplayHelpPopup()
  DisplayHelpPopup --> ViewHelpDocument : ViewHelpDocument()
%%{init: {"theme": "default"}%%
%% Conquer the Territory
stateDiagram-v2
	state ":Player" as Player
	state ":Inventory" as Inventory
  [*] --> Player : ConquerTerritory()
  Player --> ClickTerritory : 1. Result(Won)
  ClickTerritory --> CaptureTerritory : 2. CaptureTerritory()
  CaptureTerritory --> GainTerritoryCard : 3. GainTerritoryCard()
  GainTerritoryCard --> Inventory : 4. AddTerritoryCardInventory()
%%{init: {"theme": "default"}%%
%% Pause/Resume Game
stateDiagram-v2
state ":Player" as Player
state ":Game" as Game
[*] --> Player : Pause/ResumeGame()
Player --> Game : 1. ClikedPause/ReButton()
Game --> Game : 2. ChangeGameStatus()
Player
%%{init: {"theme": "default"}%%
%% Decide Player Order
stateDiagram-v2
	state ":Player" as Player
	state ":Dice" as Dice
  [*] --> Player : SetPlayerOrder()
  Player --> Dice : 1. RollDice()
  Dice --> ShowDiceResult : 2. DisplayDiceResult()
  ShowDiceResult --> CompareResults : 3. CompareDiceResults()
%%{init: {"theme": "default"}%%
%% Territory Selection
stateDiagram-v2
state ":Player[i=0]" as Player[i=0]
state ":Player[i+1]" as Player[i+1]
[*] --> Player[i=0] :  TerritorySelection()
State Untill_all_territories_selected{
Player[i=0] --> SelectTerritory : 1. ClickedTerritory
SelectTerritory --> Player[i+1] : 2. TerritoryCaptured
Player[i+1] --> SelectTerritory : 3.1 While i<6 -> ClikedTerritoryOnMap
Player[i+1] --> Player[i=0] : 3.2 i>=6 ->Back to first player
}

%%{init: {"theme": "default"}%%
%% Building Mode Territory Separation
stateDiagram-v2
state ":Player" as Player
[*] --> Player : Phase(Building)
Player --> CheckTerritory : DisplayTerritoryStatus()
CheckTerritory --> EnabledTerritory : EnableTerritory()
CheckTerritory --> DisabledTerritory : DisableTerritory()

%%{init: {"theme": "default"}%%
%%Game setup
stateDiagram-v2
	state ":Game" as Game
	state ":Player" as Player
    [*] --> Game : 1. GameSetup()
    Game --> Player : 2. addPlayer()
    Player --> SelectAvatar : 3. ChooseAvatar()
    Player --> SelectColor : 4. ChooseColor()
    Player --> SelectName : 5. ChooseName()
%%{init: {"theme": "default"}%%
%%Launch Offensive
stateDiagram-v2
	state ":GameInterface" as GameInterface
	state ":Dice" as Dice
    [*] --> CheckArmySize : LaunchOffensive()
    CheckArmySize --> GameInterface : 1. ButtonClicked()
    state GAMEINTERFACE {
        GameInterface --> LaunchOffense : 2.1. AttackTerritory()
        GameInterface --> NoAction : 2.2. No Action
    }
    LaunchOffense --> SelectTerritory : 3. SelectTerritory()
    SelectTerritory --> PerformAttack : 4. Perform the Attack
    PerformAttack --> Dice : 5. RollDice()
    state ROLLDICE {
        Dice --> AdjustArmies : 6.1. AdjustArmySize()
        Dice --> RollAgain : 6.2. RollDice()
        AdjustArmies --> CheckArmyCount : 7. Check Army Count
    }
    CheckArmyCount --> DetermineWinner : 8.1. DetermineWinner()
    CheckArmyCount --> Dice : 8.2. Attacking continues
    DetermineWinner --> [*] : 9. Result()
    NoAction --> [*] : 10. No Action
%%Prepare For Attack
stateDiagram-v2
    state ":Player" as Player
    state ":GameSystem" as GameSystem
    state ":FortifyPhase" as FortifyPhase
    state ":AttackPhase" as AttackPhase

    [*] --> Player :  PrepareForAttack()
    Player --> GameSystem : 1. EvaluateArmyCount()
    state GAMESYSTEM {
        GameSystem --> InsufficientForces : 1.1. Insufficient
        GameSystem --> SufficientForces : 1.2. Sufficient
    }
    InsufficientForces --> FortifyPhase : 2.1. InitiateFortification()
    SufficientForces --> AttackPhase : 2.2. LaunchOffense()
    FortifyPhase --> Player : 3. IncreaseArmyCount()
%% End Turn

stateDiagram-v2
    state ":Player" as Player
    state ":GameSystem" as GameSystem

    [*] --> Player : EndTurn()
    Player --> GameSystem : 1. SelectEndTurn()
    state GAMESYSTEM {
        GameSystem --> TurnEnd : 2.1. EndCurrentTurn
        GameSystem --> Error : 2.2. NotPlayerTurn
    }
    TurnEnd --> [*] : 3. NextPlayerTurn()
    Error --> [*] : DisplayErrorMessage()
%% Save
stateDiagram-v2
    state ":Player" as Player
    state ":GameSystem" as GameSystem

    [*] --> Player : SaveGame()
    Player --> GameSystem : 1. SelectSaveGame()
    GameSystem --> [*] : 2. SaveGame()
%% Load 

stateDiagram-v2
    state ":Player" as Player
    state ":GameSystem" as GameSystem

    [*] --> Player : LoadGame()
    Player --> GameSystem : 1. SelectLoadGame()
    GameSystem --> [*] : 2. LoadGame()