TIGERs Sumatra
Attackerの状態機械
https://github.com/TIGERs-Mannheim/Sumatra/blob/master/modules/moduli-ai/src/main/java/edu/tigers/sumatra/ai/pandora/roles/offense/attacker/AttackerRole.java
stateDiagram-v2
Protect --> ApproachBallLine: ballMoves
Protect --> Kick : switchToKick
Dribble --> DribbleKick: switchToDribbleKick
Dribble --> Kick: switchToKick
Dribble --> Protect: FAILURE
ApproachBallLine --> Receive: SUCCESS
ApproachBallLine --> approachAndStopBall: FAILURE
ApproachBallLine --> approachAndStopBall: closeToBall
approachAndStopBall --> Protect: SUCCESS
approachAndStopBall --> Protect: FAILURE
Kick --> Receive: SUCCESS
Kick --> Protect: FAILURE / INVALID
Kick --> FreeKick: waitForKick
Kick --> FreeKick: useSingleTouch
FreeKick --> ApproachBallLine: SUCCESS
FreeKick --> Protect: FAILURE
Receive --> Protect: SUCCESS
Receive --> Protect: FAILURE
Receive --> Redirect: SwitchToRedirect
Redirect --> ApproachBallLine: SUCCESS
Redirect --> Protect: FAILURE
Redirect --> Receive: switchToReceive
DribbleKick --> Protect: dribblingKickIsBlocked
DribbleKick --> Protect: FAILUR
Keeperの状態機械
stateDiagram-v2
Stop --> Defend: !stoped
PreparePenalty --> Defend: !isPreparePenalty
MoveToPenaltyArea --> Defend: SUCCESS
MoveToPenaltyArea --> Defend: isKeeperWellInsidePenaltyArea
MoveToPenaltyArea --> Stop: isStopped
MoveToPenaltyArea --> PreparePenalty: isPreparePenalty
Defend --> Pass: ballCanBePassedOutOfPenaltyArea
Defend --> Rambo: canGoOut
Defend --> GetBallContact: isBallBetweenGoalyAndGoal
Defend --> MoveToPenaltyArea: isOutsidePenaltyArea
Defend --> Stop: isStopped
Defend --> PreparePenalty: isPreparePenalty
Defend --> Intercept: canInterceptSafely
Pass --> Defend: isBallMoving
Pass --> MoveInFrontOfBall: ballPlacementRequired
Pass --> Stop: isStopped
Pass --> PreparePenalty: isPreparePenalty
Intercept --> Defend: hasInterceptionFailed
Intercept --> Pass: ballPlacementRequired
Intercept --> Stop: isStopped
Intercept --> PreparePenalty: isPreparePenalty
Rambo --> Defend: isBallInPenaltyArea(0) || isGoalKick()
Rambo --> Stop: isStopped
Rambo --> PreparePenalty: isPreparePenalty
MoveInFrontOfBall --> Defend: isBallMoving
MoveInFrontOfBall --> Defend: ballPlaced
MoveInFrontOfBall --> GetBallContact: SUCCESS
MoveInFrontOfBall --> Stop: isStopped
MoveInFrontOfBall --> PreparePenalty: isPreparePenalty
GetBallContact --> MoveWithBall: SUCCESS
GetBallContact --> MoveInFrontOfBall: FAILURE
GetBallContact --> Stop: isStopped
GetBallContact --> PreparePenalty: isPreparePenalty
MoveWithBall --> Defend: SUCCESS
MoveWithBall --> MoveInFrontOfBall: FAILURE
MoveWithBall --> Stop: isStopped
MoveWithBall --> PreparePenalty: isPreparePenalty
BallPlacementの状態機械
stateDiagram-v2
Receive --> Prepare: SUCCESS
Receive --> StopBall: FAILURE
Prepare --> DropBall: ballIsPlaced
Prepare --> GetBallContact: success
Prepare --> Receive: ballMoving
Prepare --> Pass: ballNeedsToBePassed
Prepare --> GetBallContact: skipPrepare
StopBall --> Prepare: SUCCESS
StopBall --> Prepare: FAILURE
GetBallContact --> MoveWithBall: SUCCESS
GetBallContact --> DropBall: FAILURE
MoveWithBall --> DropBall: SUCCESS
MoveWithBall --> Receive: FAILURE
Pass --> ClearBall: FAILURE
Pass --> ClearBall: SUCCESS
Pass --> ClearBall: pass mode is NONE
DropBall --> ClearBall: FAILURE
DropBall --> ClearBall: SUCCESS