@startuml img/sequence_complete.png hide footbox participant view as "view\n: View" participant handPanel as "handPanel\n: HandPanel" participant playerPanel as "playerPanel\n: PlayerPanel" participant tablePanel as "tablePanel\n: TablePanel" participant roundControl as "roundControl\n: RoundControl" participant ITurnControlFactory participant humanTurnControlFactory as "humanTurnControlFactory\n: ITurnControlFactory" participant turnControl as "turnControl\n: HumanTurnControl" participant humanTurnControlFactory2 as "humanTurnControlFactory\n: ITurnControlFactory" participant turnControl2 as "turnControl\n: HumanTurnControl" participant humanTurnControlFactory3 as "humanTurnControlFactory\n: ITurnControlFactory" participant turnControl3 as "turnControl\n: HumanTurnControl" participant humanTurnControlFactory4 as "humanTurnControlFactory\n: ITurnControlFactory" participant turnControl4 as "turnControl\n: HumanTurnControl" participant roundState as "roundState\n: RoundState" participant table as "table\n: Table" participant clonedTable as "clonedTable\n: Table" participant clonedTable2 as "clonedTable2\n: Table" participant clonedTable3 as "clonedTable3\n: Table" participant clonedTable4 as "clonedTable4\n: Table" participant playerA as "playerA\n: Player" participant playerASettings as "playerASettings\n: PlayerSettings" participant playerAHand as "playerAHand\n: Hand" participant playerB as "playerB\n: Player" participant playerBSettings as "playerBSettings\n: PlayerSettings" participant playerBHand as "playerBHand\n: Hand" participant gameHeap as "gameHeap\n: StoneHeap" == Initialize player B's turn == [-> view activate view view -> roundControl : startTurn() : void activate roundControl roundControl -> roundState : getActivePlayer() : Player activate roundState roundControl <<-- roundState : playerB deactivate roundState roundControl -> playerB : getPlayerSettings() : PlayerSettings activate playerB roundControl <<-- playerB : playerBSettings deactivate playerB roundControl -> playerBSettings : getTurnControlType() : ITurnControlFactory.Type activate playerBSettings roundControl <<-- playerBSettings : HUMAN deactivate playerBSettings roundControl -> ITurnControlFactory : getFactory(HUMAN) : ITurnControlFactory activate ITurnControlFactory create humanTurnControlFactory ITurnControlFactory -> humanTurnControlFactory : <> activate humanTurnControlFactory humanTurnControlFactory -->> ITurnControlFactory deactivate humanTurnControlFactory ITurnControlFactory -->> roundControl : humanTurnControlFactory : ITurnControlFactory deactivate ITurnControlFactory roundControl -> humanTurnControlFactory : create() : ITurnControl activate humanTurnControlFactory create turnControl humanTurnControlFactory -> turnControl : <> activate turnControl turnControl -->> humanTurnControlFactory deactivate turnControl humanTurnControlFactory -->> roundControl : turnControl deactivate humanTurnControlFactory ' roundControl -> table : clone() ' activate table ' create clonedTable ' table -> clonedTable : <> ' activate clonedTable ' table <<-- clonedTable ' deactivate clonedTable ' roundControl <<-- table : clonedTable ' deactivate table roundControl -> turnControl : setup(player, clonedTable, view, false, false) : void activate turnControl turnControl -->> roundControl deactivate turnControl roundControl -> turnControl : startTurn() : void activate turnControl turnControl -> handPanel : setStones(hand.clone()) : void activate handPanel handPanel -->> turnControl deactivate handPanel turnControl -> view : setBottomPanel(HUMAN_HAND_PANEL) : void activate view view -->> turnControl deactivate view turnControl -->> roundControl deactivate turnControl view <<-- roundControl deactivate roundControl [<<-- view deactivate view == Player B appends stone to set == [-> handPanel activate handPanel handPanel -> turnControl : stoneClick(stone1, false) : void activate turnControl turnControl -> view : setSelectedStones({stone1}) : void activate view turnControl <<- view deactivate view handPanel <<-- turnControl deactivate turnControl [<<-- handPanel deactivate handPanel [-> tablePanel activate tablePanel tablePanel -> turnControl : connectorClick(stoneSet1, true) : void activate turnControl ' TODO self calls? turnControl -> turnControl : pickUpSelectedStones() : void activate turnControl turnControl -> playerBHand : pickUp(stone1) : boolean activate playerBHand turnControl <<-- playerBHand : true deactivate playerBHand turnControl <<-- turnControl deactivate turnControl turnControl -> clonedTable : getPosition(stoneSet1) : Position activate clonedTable turnControl <<-- clonedTable : position deactivate clonedTable turnControl -> clonedTable : pickUp(stoneSet1) : boolean activate clonedTable turnControl <<-- clonedTable : true deactivate clonedTable turnControl -> clonedTable : drop(joinedStoneSet, newPosition) : void activate clonedTable turnControl <<-- clonedTable deactivate clonedTable turnControl -> tablePanel : setStoneSets(clonedTable) : void activate tablePanel turnControl <<- tablePanel deactivate tablePanel turnControl -> handPanel : setStones(playerBHand) : void activate handPanel turnControl <<- handPanel deactivate handPanel turnControl -> view : setSelectedStones({}) : void activate view turnControl <<- view deactivate view tablePanel <<-- turnControl deactivate turnControl [<<-- tablePanel deactivate tablePanel == End of player B's turn == [-> playerPanel activate playerPanel playerPanel -> turnControl : endOfTurn() : void activate turnControl turnControl -> roundControl : endOfTurn() : void activate roundControl roundControl -> roundControl : checkTurn() : void activate roundControl roundControl -> clonedTable : isValid() : boolean activate clonedTable roundControl <<-- clonedTable : false deactivate clonedTable destroy clonedTable roundControl -> roundControl : rejectMove() : void activate roundControl roundControl -> gameHeap : putBack({stone1}) : void activate gameHeap roundControl <<-- gameHeap deactivate gameHeap loop 4 times roundControl -> gameHeap : drawStone() : Stone activate gameHeap roundControl <<-- gameHeap : stone deactivate gameHeap roundControl -> playerBHand : drop(stone) : void activate playerBHand roundControl <<-- playerBHand deactivate playerBHand end ' reject move roundControl <<-- roundControl deactivate roundControl ' check turn roundControl <<-- roundControl deactivate roundControl roundControl -> roundControl : prepareTurn() : void activate roundControl roundControl -> table : clone() activate table create clonedTable2 table -> clonedTable2 : <> activate clonedTable2 table <<-- clonedTable2 deactivate clonedTable2 roundControl <<-- table : clonedTable2 deactivate table roundControl -> view : setBottomPanel(START_TURN_PANEL) : void activate view roundControl <<-- view deactivate view roundControl -> tablePanel : setStoneSets(clonedTable2) : void activate tablePanel roundControl <<- tablePanel deactivate tablePanel roundControl <<-- roundControl deactivate roundControl turnControl <<-- roundControl deactivate roundControl playerPanel <<-- turnControl deactivate turnControl destroy turnControl [<<-- playerPanel deactivate playerPanel == Initialize player A's turn == [-> view activate view view -> roundControl : startTurn() : void activate roundControl roundControl -> roundState : getActivePlayer() : Player activate roundState roundControl <<-- roundState : playerA deactivate roundState roundControl -> playerA : getPlayerSettings() : PlayerSettings activate playerA roundControl <<-- playerA : playerASettings deactivate playerA roundControl -> playerASettings : getTurnControlType() : ITurnControlFactory.Type activate playerASettings roundControl <<-- playerASettings : HUMAN deactivate playerASettings roundControl -> ITurnControlFactory : getFactory(HUMAN) : ITurnControlFactory activate ITurnControlFactory create humanTurnControlFactory ITurnControlFactory -> humanTurnControlFactory2 : <> activate humanTurnControlFactory2 humanTurnControlFactory2 -->> ITurnControlFactory deactivate humanTurnControlFactory2 ITurnControlFactory -->> roundControl : humanTurnControlFactory2 : ITurnControlFactory deactivate ITurnControlFactory roundControl -> humanTurnControlFactory2 : create() : ITurnControl activate humanTurnControlFactory2 create turnControl2 humanTurnControlFactory -> turnControl2 : <> activate turnControl2 turnControl2 -->> humanTurnControlFactory deactivate turnControl2 humanTurnControlFactory2 -->> roundControl : turnControl2 deactivate humanTurnControlFactory2 roundControl -> turnControl2 : setup(player, clonedTable2, view, false, false) : void activate turnControl2 turnControl2 -->> roundControl deactivate turnControl2 roundControl -> turnControl2 : startTurn() : void activate turnControl2 turnControl2 -> handPanel : setStones(hand.clone()) : void activate handPanel handPanel -->> turnControl2 deactivate handPanel turnControl2 -> view : setBottomPanel(HUMAN_HAND_PANEL) : void activate view view -->> turnControl2 deactivate view turnControl2 -->> roundControl deactivate turnControl2 view <<-- roundControl deactivate roundControl [<<-- view deactivate view == End of player A's turn == [-> playerPanel activate playerPanel playerPanel -> turnControl : endOfTurn() : void activate turnControl turnControl -> roundControl : endOfTurn() : void activate roundControl roundControl -> roundControl : checkTurn() : void activate roundControl roundControl -> clonedTable2 : isValid() : boolean activate clonedTable2 roundControl <<-- clonedTable2 : true deactivate clonedTable2 destroy clonedTable2 roundControl -> roundControl : dealStone() : void activate roundControl roundControl -> gameHeap : drawStone() : Stone activate gameHeap roundControl <<-- gameHeap : stone deactivate gameHeap roundControl -> playerAHand : drop(stone) : void activate playerAHand roundControl <<-- playerAHand deactivate playerAHand ' deal stone roundControl <<-- roundControl deactivate roundControl ' check turn roundControl <<-- roundControl deactivate roundControl roundControl -> roundControl : prepareTurn() : void activate roundControl roundControl -> table : clone() activate table create clonedTable3 table -> clonedTable3 : <> activate clonedTable3 table <<-- clonedTable3 deactivate clonedTable3 roundControl <<-- table : clonedTable3 deactivate table roundControl -> view : setBottomPanel(START_TURN_PANEL) : void activate view roundControl <<-- view deactivate view roundControl -> tablePanel : setStoneSets(clonedTable3) : void activate tablePanel roundControl <<- tablePanel deactivate tablePanel roundControl <<-- roundControl deactivate roundControl turnControl <<-- roundControl deactivate roundControl playerPanel <<-- turnControl deactivate turnControl destroy turnControl [<<-- playerPanel deactivate playerPanel == Initialize player B's 2nd turn == [-> view activate view view -> roundControl : startTurn() : void activate roundControl roundControl -> roundState : getActivePlayer() : Player activate roundState roundControl <<-- roundState : playerB deactivate roundState roundControl -> playerB : getPlayerSettings() : PlayerSettings activate playerB roundControl <<-- playerB : playerBSettings deactivate playerB roundControl -> playerBSettings : getTurnControlType() : ITurnControlFactory.Type activate playerBSettings roundControl <<-- playerBSettings : HUMAN deactivate playerBSettings roundControl -> ITurnControlFactory : getFactory(HUMAN) : ITurnControlFactory activate ITurnControlFactory create humanTurnControlFactory3 ITurnControlFactory -> humanTurnControlFactory3 : <> activate humanTurnControlFactory3 humanTurnControlFactory3 -->> ITurnControlFactory deactivate humanTurnControlFactory3 ITurnControlFactory -->> roundControl : humanTurnControlFactory3 : ITurnControlFactory deactivate ITurnControlFactory roundControl -> humanTurnControlFactory3 : create() : ITurnControl activate humanTurnControlFactory3 create turnControl3 humanTurnControlFactory3 -> turnControl3 : <> activate turnControl3 turnControl3 -->> humanTurnControlFactory3 deactivate turnControl3 humanTurnControlFactory3 -->> roundControl : turnControl3 deactivate humanTurnControlFactory3 roundControl -> turnControl3 : setup(player, clonedTable3, view, false, false) : void activate turnControl3 turnControl3 -->> roundControl deactivate turnControl3 roundControl -> turnControl3 : startTurn() : void activate turnControl3 turnControl3 -> handPanel : setStones(hand.clone()) : void activate handPanel handPanel -->> turnControl3 deactivate handPanel turnControl3 -> view : setBottomPanel(HUMAN_HAND_PANEL) : void activate view view -->> turnControl3 deactivate view turnControl3 -->> roundControl deactivate turnControl3 view <<-- roundControl deactivate roundControl [<<-- view deactivate view == Player B's three stone set == ' first stone [-> handPanel activate handPanel handPanel -> turnControl3 : stoneClick(stone2, false) : void activate turnControl3 turnControl3 -> view : setSelectedStones({stone2}) : void activate view turnControl3 <<- view deactivate view handPanel <<-- turnControl3 deactivate turnControl3 [<<-- handPanel deactivate handPanel ' second stone [-> handPanel activate handPanel handPanel -> turnControl3 : stoneClick(stone3, true) : void activate turnControl3 turnControl3 -> view : setSelectedStones({stone2, stone3}) : void activate view turnControl3 <<- view deactivate view handPanel <<-- turnControl3 deactivate turnControl3 [<<-- handPanel deactivate handPanel ' third stone [-> handPanel activate handPanel handPanel -> turnControl3 : stoneClick(stone4, true) : void activate turnControl3 turnControl3 -> view : setSelectedStones({stone2, stone3, stone4}) : void activate view turnControl3 <<- view deactivate view handPanel <<-- turnControl3 deactivate turnControl3 [<<-- handPanel deactivate handPanel ' put down [-> tablePanel activate tablePanel tablePanel -> turnControl3 : tableClick(newPosition2) activate turnControl3 'pickups turnControl3 -> turnControl3 : pickUpSelectedStones() : void activate turnControl3 turnControl3 -> playerBHand : pickUp(stone2) : boolean activate playerBHand turnControl3 <<-- playerBHand : true deactivate playerBHand turnControl3 -> playerBHand : pickUp(stone3) : boolean activate playerBHand turnControl3 <<-- playerBHand : true deactivate playerBHand turnControl3 -> playerBHand : pickUp(stone4) : boolean activate playerBHand turnControl3 <<-- playerBHand : true deactivate playerBHand turnControl3 <<-- turnControl3 deactivate turnControl3 turnControl3 -> clonedTable3 : drop(stoneSet2, newPosition2) : void activate clonedTable3 turnControl3 <<-- clonedTable3 deactivate clonedTable3 turnControl3 -> tablePanel : setStoneSets(clonedTable3) : void activate tablePanel turnControl3 <<- tablePanel deactivate tablePanel turnControl3 -> handPanel : setStones(playerBHand) : void activate handPanel turnControl3 <<- handPanel deactivate handPanel turnControl3 -> view : setSelectedStones({}) : void activate view turnControl3 <<- view deactivate view tablePanel <<-- turnControl3 deactivate turnControl3 [<<-- tablePanel deactivate tablePanel == Player B ends the 2nd turn == [-> playerPanel activate playerPanel playerPanel -> turnControl3 : endOfTurn() : void activate turnControl3 turnControl3 -> roundControl : endOfTurn() : void activate roundControl roundControl -> roundControl : checkTurn() : void activate roundControl roundControl -> clonedTable3 : isValid() : boolean activate clonedTable3 roundControl <<-- clonedTable3 : true deactivate clonedTable3 ' check turn roundControl <<-- roundControl deactivate roundControl roundControl -> playerBHand : getSize() : int activate playerBHand roundControl <<-- playerBHand : 10 deactivate playerBHand roundControl -> roundControl : prepareTurn() : void activate roundControl roundControl -> clonedTable3 : clone() activate clonedTable3 create clonedTable4 table -> clonedTable4 : <> activate clonedTable4 table <<-- clonedTable4 deactivate clonedTable4 roundControl <<-- clonedTable3 : clonedTable4 deactivate clonedTable3 roundControl -> view : setBottomPanel(START_TURN_PANEL) : void activate view roundControl <<-- view deactivate view roundControl -> tablePanel : setStoneSets(clonedTable4) : void activate tablePanel roundControl <<- tablePanel deactivate tablePanel roundControl <<-- roundControl deactivate roundControl turnControl3 <<-- roundControl deactivate roundControl playerPanel <<-- turnControl3 deactivate turnControl3 destroy turnControl3 [<<-- playerPanel deactivate playerPanel == Initialize player A's 2nd turn == [-> view activate view view -> roundControl : startTurn() : void activate roundControl roundControl -> roundState : getActivePlayer() : Player activate roundState roundControl <<-- roundState : playerA deactivate roundState roundControl -> playerA : getPlayerSettings() : PlayerSettings activate playerA roundControl <<-- playerA : playerASettings deactivate playerA roundControl -> playerASettings : getTurnControlType() : ITurnControlFactory.Type activate playerASettings roundControl <<-- playerASettings : HUMAN deactivate playerASettings roundControl -> ITurnControlFactory : getFactory(HUMAN) : ITurnControlFactory activate ITurnControlFactory create humanTurnControlFactory ITurnControlFactory -> humanTurnControlFactory4 : <> activate humanTurnControlFactory4 humanTurnControlFactory4 -->> ITurnControlFactory deactivate humanTurnControlFactory4 ITurnControlFactory -->> roundControl : humanTurnControlFactory4 : ITurnControlFactory deactivate ITurnControlFactory roundControl -> humanTurnControlFactory4 : create() : ITurnControl activate humanTurnControlFactory4 create turnControl4 humanTurnControlFactory -> turnControl4 : <> activate turnControl4 turnControl4 -->> humanTurnControlFactory deactivate turnControl4 humanTurnControlFactory4 -->> roundControl : turnControl4 deactivate humanTurnControlFactory4 roundControl -> turnControl4 : setup(player, clonedTable4, view, false, false) : void activate turnControl4 turnControl4 -->> roundControl deactivate turnControl4 roundControl -> turnControl4 : startTurn() : void activate turnControl4 turnControl4 -> handPanel : setStones(hand.clone()) : void activate handPanel handPanel -->> turnControl4 deactivate handPanel turnControl4 -> view : setBottomPanel(HUMAN_HAND_PANEL) : void activate view view -->> turnControl4 deactivate view turnControl4 -->> roundControl deactivate turnControl4 view <<-- roundControl deactivate roundControl [<<-- view deactivate view == Player A appends two stones to set == [-> handPanel activate handPanel handPanel -> turnControl4 : stoneClick(stone5, false) : void activate turnControl4 turnControl4 -> view : setSelectedStones({stone5}) : void activate view turnControl4 <<- view deactivate view handPanel <<-- turnControl4 deactivate turnControl4 [<<-- handPanel deactivate handPanel [-> handPanel activate handPanel handPanel -> turnControl4 : stoneClick(stone6, true) : void activate turnControl4 turnControl4 -> view : setSelectedStones({stone5, stone6}) : void activate view turnControl4 <<- view deactivate view handPanel <<-- turnControl4 deactivate turnControl4 [<<-- handPanel deactivate handPanel [-> tablePanel activate tablePanel tablePanel -> turnControl4 : connectorClick(stoneSet3, true) : void activate turnControl4 ' TODO self calls? turnControl4 -> turnControl4 : pickUpSelectedStones() : void activate turnControl4 turnControl4 -> playerAHand : pickUp(stone5) : boolean activate playerAHand turnControl4 <<-- playerAHand : true deactivate playerAHand turnControl4 -> playerAHand : pickUp(stone6) : boolean activate playerAHand turnControl4 <<-- playerAHand : true deactivate playerAHand turnControl4 <<-- turnControl4 deactivate turnControl4 turnControl4 -> clonedTable4 : getPosition(stoneSet3) : Position activate clonedTable4 turnControl4 <<-- clonedTable4 : position2 deactivate clonedTable4 turnControl4 -> clonedTable4 : pickUp(stoneSet3) : boolean activate clonedTable4 turnControl4 <<-- clonedTable4 : true deactivate clonedTable4 turnControl4 -> clonedTable4 : drop(joinedStoneSet2, newPosition2) : void activate clonedTable4 turnControl4 <<-- clonedTable4 deactivate clonedTable4 turnControl4 -> tablePanel : setStoneSets(clonedTable4) : void activate tablePanel turnControl4 <<- tablePanel deactivate tablePanel turnControl4 -> handPanel : setStones(playerAHand) : void activate handPanel turnControl4 <<- handPanel deactivate handPanel turnControl4 -> view : setSelectedStones({}) : void activate view turnControl4 <<- view deactivate view tablePanel <<-- turnControl4 deactivate turnControl4 [<<-- tablePanel deactivate tablePanel == Player A ends the 2nd turn == [-> playerPanel activate playerPanel playerPanel -> turnControl4 : endOfTurn() : void activate turnControl4 turnControl4 -> roundControl : endOfTurn() : void activate roundControl roundControl -> roundControl : checkTurn() : void activate roundControl roundControl -> clonedTable4 : isValid() : boolean activate clonedTable4 roundControl <<-- clonedTable4 : true deactivate clonedTable4 ' check turn roundControl <<-- roundControl deactivate roundControl roundControl -> playerAHand : getSize() : int activate playerAHand roundControl <<-- playerAHand : 0 deactivate playerAHand roundControl -> roundControl : score() activate roundControl roundControl -> playerAHand : getSize() : int activate playerAHand roundControl <<-- playerAHand : 0 deactivate playerAHand roundControl -> playerAHand : getStonePoints() : int activate playerAHand roundControl <<-- playerAHand : 0 deactivate playerAHand roundControl -> playerBHand : getSize() : int activate playerBHand roundControl <<-- playerBHand : 10 deactivate playerBHand roundControl -> playerBHand : getStonePoints() : int activate playerBHand roundControl <<-- playerBHand : 42 deactivate playerBHand roundControl <<-- roundControl deactivate roundControl [<- roundControl : endOfRoundEvent.emit(score) [-->> roundControl turnControl4 <<-- roundControl deactivate roundControl playerPanel <<-- turnControl4 deactivate turnControl4 [<<-- playerPanel deactivate playerPanel @enduml @startuml img/sequence_01.png hide footbox participant view as "view\n: View" participant handPanel as "handPanel\n: HandPanel" participant roundControl as "roundControl\n: RoundControl" participant ITurnControlFactory participant humanTurnControlFactory as "humanTurnControlFactory\n: ITurnControlFactory" participant turnControl as "turnControl\n: HumanTurnControl" participant roundState as "roundState\n: RoundState" participant playerB as "playerB\n: Player" participant playerBSettings as "playerBSettings\n: PlayerSettings" == Initialize player B's turn == [-> view activate view view -> roundControl : startTurn() : void activate roundControl roundControl -> roundState : getActivePlayer() : Player activate roundState roundControl <<-- roundState : playerB deactivate roundState roundControl -> playerB : getPlayerSettings() : PlayerSettings activate playerB roundControl <<-- playerB : playerBSettings deactivate playerB roundControl -> playerBSettings : getTurnControlType() : ITurnControlFactory.Type activate playerBSettings roundControl <<-- playerBSettings : HUMAN deactivate playerBSettings roundControl -> ITurnControlFactory : getFactory(HUMAN) : ITurnControlFactory activate ITurnControlFactory create humanTurnControlFactory ITurnControlFactory -> humanTurnControlFactory : <> activate humanTurnControlFactory humanTurnControlFactory -->> ITurnControlFactory deactivate humanTurnControlFactory ITurnControlFactory -->> roundControl : humanTurnControlFactory : ITurnControlFactory deactivate ITurnControlFactory roundControl -> humanTurnControlFactory : create() : ITurnControl activate humanTurnControlFactory create turnControl humanTurnControlFactory -> turnControl : <> activate turnControl turnControl -->> humanTurnControlFactory deactivate turnControl humanTurnControlFactory -->> roundControl : turnControl deactivate humanTurnControlFactory ' roundControl -> table : clone() ' activate table ' create clonedTable ' table -> clonedTable : <> ' activate clonedTable ' table <<-- clonedTable ' deactivate clonedTable ' roundControl <<-- table : clonedTable ' deactivate table roundControl -> turnControl : setup(player, clonedTable, view, false, false) : void activate turnControl turnControl -->> roundControl deactivate turnControl roundControl -> turnControl : startTurn() : void activate turnControl turnControl -> handPanel : setStones(hand.clone()) : void activate handPanel handPanel -->> turnControl deactivate handPanel turnControl -> view : setBottomPanel(HUMAN_HAND_PANEL) : void activate view view -->> turnControl deactivate view turnControl -->> roundControl deactivate turnControl view <<-- roundControl deactivate roundControl [<<-- view deactivate view @enduml @startuml img/sequence_02.png hide footbox participant view as "view\n: View" participant handPanel as "handPanel\n: HandPanel" participant playerPanel as "playerPanel\n: PlayerPanel" participant tablePanel as "tablePanel\n: TablePanel" participant turnControl as "turnControl\n: HumanTurnControl" participant clonedTable as "clonedTable\n: Table" participant playerBHand as "playerBHand\n: Hand" == Player B appends stone to set == [-> handPanel activate handPanel handPanel -> turnControl : stoneClick(stone1, false) : void activate turnControl turnControl -> view : setSelectedStones({stone1}) : void activate view turnControl <<- view deactivate view handPanel <<-- turnControl deactivate turnControl [<<-- handPanel deactivate handPanel [-> tablePanel activate tablePanel tablePanel -> turnControl : connectorClick(stoneSet1, true) : void activate turnControl ' TODO self calls? turnControl -> turnControl : pickUpSelectedStones() : void activate turnControl turnControl -> playerBHand : pickUp(stone1) : boolean activate playerBHand turnControl <<-- playerBHand : true deactivate playerBHand turnControl <<-- turnControl deactivate turnControl turnControl -> clonedTable : getPosition(stoneSet1) : Position activate clonedTable turnControl <<-- clonedTable : position deactivate clonedTable turnControl -> clonedTable : pickUp(stoneSet1) : boolean activate clonedTable turnControl <<-- clonedTable : true deactivate clonedTable turnControl -> clonedTable : drop(joinedStoneSet, newPosition) : void activate clonedTable turnControl <<-- clonedTable deactivate clonedTable turnControl -> tablePanel : setStoneSets(clonedTable) : void activate tablePanel turnControl <<- tablePanel deactivate tablePanel turnControl -> handPanel : setStones(playerBHand) : void activate handPanel turnControl <<- handPanel deactivate handPanel turnControl -> view : setSelectedStones({}) : void activate view turnControl <<- view deactivate view tablePanel <<-- turnControl deactivate turnControl [<<-- tablePanel deactivate tablePanel @enduml @startuml img/sequence_03.png hide footbox == End of player B's turn == participant view as "view\n: View" participant playerPanel as "playerPanel\n: PlayerPanel" participant tablePanel as "tablePanel\n: TablePanel" participant roundControl as "roundControl\n: RoundControl" participant turnControl as "turnControl\n: HumanTurnControl" participant table as "table\n: Table" participant clonedTable as "clonedTable\n: Table" participant clonedTable2 as "clonedTable2\n: Table" participant playerBHand as "playerBHand\n: Hand" participant gameHeap as "gameHeap\n: StoneHeap" [-> playerPanel activate playerPanel playerPanel -> turnControl : endOfTurn() : void activate turnControl turnControl -> roundControl : endOfTurn() : void activate roundControl roundControl -> roundControl : checkTurn() : void activate roundControl roundControl -> clonedTable : isValid() : boolean activate clonedTable roundControl <<-- clonedTable : false deactivate clonedTable destroy clonedTable roundControl -> roundControl : rejectMove() : void activate roundControl roundControl -> gameHeap : putBack({stone1}) : void activate gameHeap roundControl <<-- gameHeap deactivate gameHeap loop 4 times roundControl -> gameHeap : drawStone() : Stone activate gameHeap roundControl <<-- gameHeap : stone deactivate gameHeap roundControl -> playerBHand : drop(stone) : void activate playerBHand roundControl <<-- playerBHand deactivate playerBHand end ' reject move roundControl <<-- roundControl deactivate roundControl ' check turn roundControl <<-- roundControl deactivate roundControl roundControl -> roundControl : prepareTurn() : void activate roundControl roundControl -> table : clone() activate table create clonedTable2 table -> clonedTable2 : <> activate clonedTable2 table <<-- clonedTable2 deactivate clonedTable2 roundControl <<-- table : clonedTable2 deactivate table roundControl -> view : setBottomPanel(START_TURN_PANEL) : void activate view roundControl <<-- view deactivate view roundControl -> tablePanel : setStoneSets(clonedTable2) : void activate tablePanel roundControl <<- tablePanel deactivate tablePanel roundControl <<-- roundControl deactivate roundControl turnControl <<-- roundControl deactivate roundControl playerPanel <<-- turnControl deactivate turnControl destroy turnControl [<<-- playerPanel deactivate playerPanel @enduml @startuml img/sequence_04.png hide footbox participant view as "view\n: View" participant handPanel as "handPanel\n: HandPanel" participant roundControl as "roundControl\n: RoundControl" participant ITurnControlFactory participant humanTurnControlFactory as "humanTurnControlFactory\n: ITurnControlFactory" participant humanTurnControlFactory2 as "humanTurnControlFactory\n: ITurnControlFactory" participant turnControl2 as "turnControl\n: HumanTurnControl" participant roundState as "roundState\n: RoundState" participant clonedTable2 as "clonedTable2\n: Table" participant playerA as "playerA\n: Player" participant playerASettings as "playerASettings\n: PlayerSettings" == Initialize player A's turn == [-> view activate view view -> roundControl : startTurn() : void activate roundControl roundControl -> roundState : getActivePlayer() : Player activate roundState roundControl <<-- roundState : playerA deactivate roundState roundControl -> playerA : getPlayerSettings() : PlayerSettings activate playerA roundControl <<-- playerA : playerASettings deactivate playerA roundControl -> playerASettings : getTurnControlType() : ITurnControlFactory.Type activate playerASettings roundControl <<-- playerASettings : HUMAN deactivate playerASettings roundControl -> ITurnControlFactory : getFactory(HUMAN) : ITurnControlFactory activate ITurnControlFactory create humanTurnControlFactory ITurnControlFactory -> humanTurnControlFactory2 : <> activate humanTurnControlFactory2 humanTurnControlFactory2 -->> ITurnControlFactory deactivate humanTurnControlFactory2 ITurnControlFactory -->> roundControl : humanTurnControlFactory2 : ITurnControlFactory deactivate ITurnControlFactory roundControl -> humanTurnControlFactory2 : create() : ITurnControl activate humanTurnControlFactory2 create turnControl2 humanTurnControlFactory -> turnControl2 : <> activate turnControl2 turnControl2 -->> humanTurnControlFactory deactivate turnControl2 humanTurnControlFactory2 -->> roundControl : turnControl2 deactivate humanTurnControlFactory2 roundControl -> turnControl2 : setup(player, clonedTable2, view, false, false) : void activate turnControl2 turnControl2 -->> roundControl deactivate turnControl2 roundControl -> turnControl2 : startTurn() : void activate turnControl2 turnControl2 -> handPanel : setStones(hand.clone()) : void activate handPanel handPanel -->> turnControl2 deactivate handPanel turnControl2 -> view : setBottomPanel(HUMAN_HAND_PANEL) : void activate view view -->> turnControl2 deactivate view turnControl2 -->> roundControl deactivate turnControl2 view <<-- roundControl deactivate roundControl [<<-- view deactivate view @enduml @startuml img/sequence_05.png hide footbox participant view as "view\n: View" participant playerPanel as "playerPanel\n: PlayerPanel" participant tablePanel as "tablePanel\n: TablePanel" participant roundControl as "roundControl\n: RoundControl" participant turnControl as "turnControl\n: HumanTurnControl" participant table as "table\n: Table" participant clonedTable2 as "clonedTable2\n: Table" participant clonedTable3 as "clonedTable3\n: Table" participant playerAHand as "playerAHand\n: Hand" participant gameHeap as "gameHeap\n: StoneHeap" == End of player A's turn == [-> playerPanel activate playerPanel playerPanel -> turnControl : endOfTurn() : void activate turnControl turnControl -> roundControl : endOfTurn() : void activate roundControl roundControl -> roundControl : checkTurn() : void activate roundControl roundControl -> clonedTable2 : isValid() : boolean activate clonedTable2 roundControl <<-- clonedTable2 : true deactivate clonedTable2 destroy clonedTable2 roundControl -> roundControl : dealStone() : void activate roundControl roundControl -> gameHeap : drawStone() : Stone activate gameHeap roundControl <<-- gameHeap : stone deactivate gameHeap roundControl -> playerAHand : drop(stone) : void activate playerAHand roundControl <<-- playerAHand deactivate playerAHand ' deal stone roundControl <<-- roundControl deactivate roundControl ' check turn roundControl <<-- roundControl deactivate roundControl roundControl -> roundControl : prepareTurn() : void activate roundControl roundControl -> table : clone() activate table create clonedTable3 table -> clonedTable3 : <> activate clonedTable3 table <<-- clonedTable3 deactivate clonedTable3 roundControl <<-- table : clonedTable3 deactivate table roundControl -> view : setBottomPanel(START_TURN_PANEL) : void activate view roundControl <<-- view deactivate view roundControl -> tablePanel : setStoneSets(clonedTable3) : void activate tablePanel roundControl <<- tablePanel deactivate tablePanel roundControl <<-- roundControl deactivate roundControl turnControl <<-- roundControl deactivate roundControl playerPanel <<-- turnControl deactivate turnControl destroy turnControl [<<-- playerPanel deactivate playerPanel @enduml @startuml img/sequence_06.png hide footbox participant view as "view\n: View" participant handPanel as "handPanel\n: HandPanel" participant roundControl as "roundControl\n: RoundControl" participant ITurnControlFactory participant humanTurnControlFactory3 as "humanTurnControlFactory\n: ITurnControlFactory" participant turnControl3 as "turnControl\n: HumanTurnControl" participant roundState as "roundState\n: RoundState" participant clonedTable3 as "clonedTable3\n: Table" participant playerB as "playerB\n: Player" participant playerBSettings as "playerBSettings\n: PlayerSettings" == Initialize player B's 2nd turn == [-> view activate view view -> roundControl : startTurn() : void activate roundControl roundControl -> roundState : getActivePlayer() : Player activate roundState roundControl <<-- roundState : playerB deactivate roundState roundControl -> playerB : getPlayerSettings() : PlayerSettings activate playerB roundControl <<-- playerB : playerBSettings deactivate playerB roundControl -> playerBSettings : getTurnControlType() : ITurnControlFactory.Type activate playerBSettings roundControl <<-- playerBSettings : HUMAN deactivate playerBSettings roundControl -> ITurnControlFactory : getFactory(HUMAN) : ITurnControlFactory activate ITurnControlFactory create humanTurnControlFactory3 ITurnControlFactory -> humanTurnControlFactory3 : <> activate humanTurnControlFactory3 humanTurnControlFactory3 -->> ITurnControlFactory deactivate humanTurnControlFactory3 ITurnControlFactory -->> roundControl : humanTurnControlFactory3 : ITurnControlFactory deactivate ITurnControlFactory roundControl -> humanTurnControlFactory3 : create() : ITurnControl activate humanTurnControlFactory3 create turnControl3 humanTurnControlFactory3 -> turnControl3 : <> activate turnControl3 turnControl3 -->> humanTurnControlFactory3 deactivate turnControl3 humanTurnControlFactory3 -->> roundControl : turnControl3 deactivate humanTurnControlFactory3 roundControl -> turnControl3 : setup(player, clonedTable3, view, false, false) : void activate turnControl3 turnControl3 -->> roundControl deactivate turnControl3 roundControl -> turnControl3 : startTurn() : void activate turnControl3 turnControl3 -> handPanel : setStones(hand.clone()) : void activate handPanel handPanel -->> turnControl3 deactivate handPanel turnControl3 -> view : setBottomPanel(HUMAN_HAND_PANEL) : void activate view view -->> turnControl3 deactivate view turnControl3 -->> roundControl deactivate turnControl3 view <<-- roundControl deactivate roundControl [<<-- view deactivate view @enduml @startuml img/sequence_07.png hide footbox participant view as "view\n: View" participant handPanel as "handPanel\n: HandPanel" participant tablePanel as "tablePanel\n: TablePanel" participant turnControl3 as "turnControl\n: HumanTurnControl" participant table as "table\n: Table" participant clonedTable3 as "clonedTable3\n: Table" participant playerBHand as "playerBHand\n: Hand" == Player B's three stone set == ' first stone [-> handPanel activate handPanel handPanel -> turnControl3 : stoneClick(stone2, false) : void activate turnControl3 turnControl3 -> view : setSelectedStones({stone2}) : void activate view turnControl3 <<- view deactivate view handPanel <<-- turnControl3 deactivate turnControl3 [<<-- handPanel deactivate handPanel ' second stone [-> handPanel activate handPanel handPanel -> turnControl3 : stoneClick(stone3, true) : void activate turnControl3 turnControl3 -> view : setSelectedStones({stone2, stone3}) : void activate view turnControl3 <<- view deactivate view handPanel <<-- turnControl3 deactivate turnControl3 [<<-- handPanel deactivate handPanel ' third stone [-> handPanel activate handPanel handPanel -> turnControl3 : stoneClick(stone4, true) : void activate turnControl3 turnControl3 -> view : setSelectedStones({stone2, stone3, stone4}) : void activate view turnControl3 <<- view deactivate view handPanel <<-- turnControl3 deactivate turnControl3 [<<-- handPanel deactivate handPanel ' put down [-> tablePanel activate tablePanel tablePanel -> turnControl3 : tableClick(newPosition2) activate turnControl3 'pickups turnControl3 -> turnControl3 : pickUpSelectedStones() : void activate turnControl3 turnControl3 -> playerBHand : pickUp(stone2) : boolean activate playerBHand turnControl3 <<-- playerBHand : true deactivate playerBHand turnControl3 -> playerBHand : pickUp(stone3) : boolean activate playerBHand turnControl3 <<-- playerBHand : true deactivate playerBHand turnControl3 -> playerBHand : pickUp(stone4) : boolean activate playerBHand turnControl3 <<-- playerBHand : true deactivate playerBHand turnControl3 <<-- turnControl3 deactivate turnControl3 turnControl3 -> clonedTable3 : drop(stoneSet2, newPosition2) : void activate clonedTable3 turnControl3 <<-- clonedTable3 deactivate clonedTable3 turnControl3 -> tablePanel : setStoneSets(clonedTable3) : void activate tablePanel turnControl3 <<- tablePanel deactivate tablePanel turnControl3 -> handPanel : setStones(playerBHand) : void activate handPanel turnControl3 <<- handPanel deactivate handPanel turnControl3 -> view : setSelectedStones({}) : void activate view turnControl3 <<- view deactivate view tablePanel <<-- turnControl3 deactivate turnControl3 [<<-- tablePanel deactivate tablePanel @enduml @startuml img/sequence_08.png hide footbox participant view as "view\n: View" participant playerPanel as "playerPanel\n: PlayerPanel" participant tablePanel as "tablePanel\n: TablePanel" participant roundControl as "roundControl\n: RoundControl" participant turnControl3 as "turnControl\n: HumanTurnControl" participant table as "table\n: Table" participant clonedTable3 as "clonedTable3\n: Table" participant clonedTable4 as "clonedTable4\n: Table" participant playerBHand as "playerBHand\n: Hand" == Player B ends the 2nd turn == [-> playerPanel activate playerPanel playerPanel -> turnControl3 : endOfTurn() : void activate turnControl3 turnControl3 -> roundControl : endOfTurn() : void activate roundControl roundControl -> roundControl : checkTurn() : void activate roundControl roundControl -> clonedTable3 : isValid() : boolean activate clonedTable3 roundControl <<-- clonedTable3 : true deactivate clonedTable3 ' check turn roundControl <<-- roundControl deactivate roundControl roundControl -> playerBHand : getSize() : int activate playerBHand roundControl <<-- playerBHand : 10 deactivate playerBHand roundControl -> roundControl : prepareTurn() : void activate roundControl roundControl -> clonedTable3 : clone() activate clonedTable3 create clonedTable4 table -> clonedTable4 : <> activate clonedTable4 table <<-- clonedTable4 deactivate clonedTable4 roundControl <<-- clonedTable3 : clonedTable4 deactivate clonedTable3 roundControl -> view : setBottomPanel(START_TURN_PANEL) : void activate view roundControl <<-- view deactivate view roundControl -> tablePanel : setStoneSets(clonedTable4) : void activate tablePanel roundControl <<- tablePanel deactivate tablePanel roundControl <<-- roundControl deactivate roundControl turnControl3 <<-- roundControl deactivate roundControl playerPanel <<-- turnControl3 deactivate turnControl3 destroy turnControl3 [<<-- playerPanel deactivate playerPanel @enduml @startuml img/sequence_09.png hide footbox participant view as "view\n: View" participant handPanel as "handPanel\n: HandPanel" participant roundControl as "roundControl\n: RoundControl" participant ITurnControlFactory participant humanTurnControlFactory as "humanTurnControlFactory\n: ITurnControlFactory" participant humanTurnControlFactory4 as "humanTurnControlFactory\n: ITurnControlFactory" participant turnControl4 as "turnControl\n: HumanTurnControl" participant roundState as "roundState\n: RoundState" participant clonedTable4 as "clonedTable4\n: Table" participant playerA as "playerA\n: Player" participant playerASettings as "playerASettings\n: PlayerSettings" == Initialize player A's 2nd turn == [-> view activate view view -> roundControl : startTurn() : void activate roundControl roundControl -> roundState : getActivePlayer() : Player activate roundState roundControl <<-- roundState : playerA deactivate roundState roundControl -> playerA : getPlayerSettings() : PlayerSettings activate playerA roundControl <<-- playerA : playerASettings deactivate playerA roundControl -> playerASettings : getTurnControlType() : ITurnControlFactory.Type activate playerASettings roundControl <<-- playerASettings : HUMAN deactivate playerASettings roundControl -> ITurnControlFactory : getFactory(HUMAN) : ITurnControlFactory activate ITurnControlFactory create humanTurnControlFactory ITurnControlFactory -> humanTurnControlFactory4 : <> activate humanTurnControlFactory4 humanTurnControlFactory4 -->> ITurnControlFactory deactivate humanTurnControlFactory4 ITurnControlFactory -->> roundControl : humanTurnControlFactory4 : ITurnControlFactory deactivate ITurnControlFactory roundControl -> humanTurnControlFactory4 : create() : ITurnControl activate humanTurnControlFactory4 create turnControl4 humanTurnControlFactory -> turnControl4 : <> activate turnControl4 turnControl4 -->> humanTurnControlFactory deactivate turnControl4 humanTurnControlFactory4 -->> roundControl : turnControl4 deactivate humanTurnControlFactory4 roundControl -> turnControl4 : setup(player, clonedTable4, view, false, false) : void activate turnControl4 turnControl4 -->> roundControl deactivate turnControl4 roundControl -> turnControl4 : startTurn() : void activate turnControl4 turnControl4 -> handPanel : setStones(hand.clone()) : void activate handPanel handPanel -->> turnControl4 deactivate handPanel turnControl4 -> view : setBottomPanel(HUMAN_HAND_PANEL) : void activate view view -->> turnControl4 deactivate view turnControl4 -->> roundControl deactivate turnControl4 view <<-- roundControl deactivate roundControl [<<-- view deactivate view @enduml @startuml img/sequence_10.png hide footbox participant view as "view\n: View" participant handPanel as "handPanel\n: HandPanel" participant tablePanel as "tablePanel\n: TablePanel" participant turnControl4 as "turnControl\n: HumanTurnControl" participant clonedTable4 as "clonedTable4\n: Table" participant playerAHand as "playerAHand\n: Hand" == Player A appends two stones to set == [-> handPanel activate handPanel handPanel -> turnControl4 : stoneClick(stone5, false) : void activate turnControl4 turnControl4 -> view : setSelectedStones({stone5}) : void activate view turnControl4 <<- view deactivate view handPanel <<-- turnControl4 deactivate turnControl4 [<<-- handPanel deactivate handPanel [-> handPanel activate handPanel handPanel -> turnControl4 : stoneClick(stone6, true) : void activate turnControl4 turnControl4 -> view : setSelectedStones({stone5, stone6}) : void activate view turnControl4 <<- view deactivate view handPanel <<-- turnControl4 deactivate turnControl4 [<<-- handPanel deactivate handPanel [-> tablePanel activate tablePanel tablePanel -> turnControl4 : connectorClick(stoneSet3, true) : void activate turnControl4 ' TODO self calls? turnControl4 -> turnControl4 : pickUpSelectedStones() : void activate turnControl4 turnControl4 -> playerAHand : pickUp(stone5) : boolean activate playerAHand turnControl4 <<-- playerAHand : true deactivate playerAHand turnControl4 -> playerAHand : pickUp(stone6) : boolean activate playerAHand turnControl4 <<-- playerAHand : true deactivate playerAHand turnControl4 <<-- turnControl4 deactivate turnControl4 turnControl4 -> clonedTable4 : getPosition(stoneSet3) : Position activate clonedTable4 turnControl4 <<-- clonedTable4 : position2 deactivate clonedTable4 turnControl4 -> clonedTable4 : pickUp(stoneSet3) : boolean activate clonedTable4 turnControl4 <<-- clonedTable4 : true deactivate clonedTable4 turnControl4 -> clonedTable4 : drop(joinedStoneSet2, newPosition2) : void activate clonedTable4 turnControl4 <<-- clonedTable4 deactivate clonedTable4 turnControl4 -> tablePanel : setStoneSets(clonedTable4) : void activate tablePanel turnControl4 <<- tablePanel deactivate tablePanel turnControl4 -> handPanel : setStones(playerAHand) : void activate handPanel turnControl4 <<- handPanel deactivate handPanel turnControl4 -> view : setSelectedStones({}) : void activate view turnControl4 <<- view deactivate view tablePanel <<-- turnControl4 deactivate turnControl4 [<<-- tablePanel deactivate tablePanel @enduml @startuml img/sequence_11.png hide footbox participant playerPanel as "playerPanel\n: PlayerPanel" participant roundControl as "roundControl\n: RoundControl" participant turnControl4 as "turnControl\n: HumanTurnControl" participant clonedTable4 as "clonedTable4\n: Table" participant playerAHand as "playerAHand\n: Hand" participant playerBHand as "playerBHand\n: Hand" == Player A ends the 2nd turn == [-> playerPanel activate playerPanel playerPanel -> turnControl4 : endOfTurn() : void activate turnControl4 turnControl4 -> roundControl : endOfTurn() : void activate roundControl roundControl -> roundControl : checkTurn() : void activate roundControl roundControl -> clonedTable4 : isValid() : boolean activate clonedTable4 roundControl <<-- clonedTable4 : true deactivate clonedTable4 ' check turn roundControl <<-- roundControl deactivate roundControl roundControl -> playerAHand : getSize() : int activate playerAHand roundControl <<-- playerAHand : 0 deactivate playerAHand roundControl -> roundControl : score() activate roundControl roundControl -> playerAHand : getSize() : int activate playerAHand roundControl <<-- playerAHand : 0 deactivate playerAHand roundControl -> playerAHand : getStonePoints() : int activate playerAHand roundControl <<-- playerAHand : 0 deactivate playerAHand roundControl -> playerBHand : getSize() : int activate playerBHand roundControl <<-- playerBHand : 10 deactivate playerBHand roundControl -> playerBHand : getStonePoints() : int activate playerBHand roundControl <<-- playerBHand : 42 deactivate playerBHand roundControl <<-- roundControl deactivate roundControl [<- roundControl : endOfRoundEvent.emit(score) [-->> roundControl turnControl4 <<-- roundControl deactivate roundControl playerPanel <<-- turnControl4 deactivate turnControl4 [<<-- playerPanel deactivate playerPanel @enduml