Init
This commit is contained in:
232
world/commons/play_mode.py
Normal file
232
world/commons/play_mode.py
Normal file
@@ -0,0 +1,232 @@
|
||||
from enum import Enum, auto
|
||||
|
||||
|
||||
class PlayModeEnum(Enum):
|
||||
NOT_INITIALIZED = auto()
|
||||
|
||||
"""Enum specifying possible play modes."""
|
||||
|
||||
BEFORE_KICK_OFF = auto()
|
||||
"""The game hasn't started yet."""
|
||||
|
||||
OUR_KICK_OFF = auto()
|
||||
"""Our team has kick off."""
|
||||
|
||||
THEIR_KICK_OFF = auto()
|
||||
"""Their team has kick off."""
|
||||
|
||||
PLAY_ON = auto()
|
||||
"""The game is running normal."""
|
||||
|
||||
OUR_THROW_IN = auto()
|
||||
"""The ball left the field and our team has throw in."""
|
||||
|
||||
THEIR_THROW_IN = auto()
|
||||
"""The ball left the field and their team has throw in."""
|
||||
|
||||
OUR_CORNER_KICK = auto()
|
||||
"""Our team has corner kick."""
|
||||
|
||||
THEIR_CORNER_KICK = auto()
|
||||
"""Their team has corner kick."""
|
||||
|
||||
OUR_GOAL_KICK = auto()
|
||||
"""Our team has goal kick."""
|
||||
|
||||
THEIR_GOAL_KICK = auto()
|
||||
"""Their team has goal kick."""
|
||||
|
||||
OUR_OFFSIDE = auto()
|
||||
"""Their team violated the offside rule."""
|
||||
|
||||
THEIR_OFFSIDE = auto()
|
||||
"""Our team violated the offside rule."""
|
||||
|
||||
GAME_OVER = auto()
|
||||
"""The game has ended."""
|
||||
|
||||
OUR_GOAL = auto()
|
||||
"""Our team scored a goal."""
|
||||
|
||||
THEIR_GOAL = auto()
|
||||
"""Their team scored a goal."""
|
||||
|
||||
OUR_FREE_KICK = auto()
|
||||
"""Our team has a free kick."""
|
||||
|
||||
THEIR_FREE_KICK = auto()
|
||||
"""Their team has a free kick."""
|
||||
|
||||
OUR_DIRECT_FREE_KICK = auto()
|
||||
"""Our team has a direct free kick."""
|
||||
|
||||
THEIR_DIRECT_FREE_KICK = auto()
|
||||
"""Their team has a direct free kick."""
|
||||
|
||||
OUR_PENALTY_KICK = auto()
|
||||
"""Our team has a penalty kick (from the penalty spot)."""
|
||||
|
||||
THEIR_PENALTY_KICK = auto()
|
||||
"""Their team has a penalty kick (from the penalty spot)."""
|
||||
|
||||
OUR_PENALTY_SHOOT = auto()
|
||||
"""Our team has a penalty shoot (starting from somewhere on the field, allowed to touch the ball more than once)."""
|
||||
|
||||
THEIR_PENALTY_SHOOT = auto()
|
||||
"""Their team has a penalty shoot (starting from somewhere on the field, allowed to touch the ball more than once)."""
|
||||
|
||||
@classmethod
|
||||
def get_playmode_from_string(
|
||||
cls, playmode: str, is_left_team: bool
|
||||
) -> "PlayModeEnum":
|
||||
assert isinstance(is_left_team, bool)
|
||||
|
||||
playmode_ids = {
|
||||
"BeforeKickOff": (PlayModeEnum.BEFORE_KICK_OFF,),
|
||||
"KickOff_Left": (
|
||||
PlayModeEnum.OUR_KICK_OFF,
|
||||
PlayModeEnum.THEIR_KICK_OFF,
|
||||
),
|
||||
"KickOff_Right": (
|
||||
PlayModeEnum.THEIR_KICK_OFF,
|
||||
PlayModeEnum.OUR_KICK_OFF,
|
||||
),
|
||||
"PlayOn": (PlayModeEnum.PLAY_ON,),
|
||||
"KickIn_Left": (
|
||||
PlayModeEnum.OUR_THROW_IN,
|
||||
PlayModeEnum.THEIR_THROW_IN,
|
||||
),
|
||||
"KickIn_Right": (
|
||||
PlayModeEnum.THEIR_THROW_IN,
|
||||
PlayModeEnum.OUR_THROW_IN,
|
||||
),
|
||||
"corner_kick_left": (
|
||||
PlayModeEnum.OUR_CORNER_KICK,
|
||||
PlayModeEnum.THEIR_CORNER_KICK,
|
||||
),
|
||||
"corner_kick_right": (
|
||||
PlayModeEnum.THEIR_CORNER_KICK,
|
||||
PlayModeEnum.OUR_CORNER_KICK,
|
||||
),
|
||||
"goal_kick_left": (
|
||||
PlayModeEnum.OUR_GOAL_KICK,
|
||||
PlayModeEnum.THEIR_GOAL_KICK,
|
||||
),
|
||||
"goal_kick_right": (
|
||||
PlayModeEnum.THEIR_GOAL_KICK,
|
||||
PlayModeEnum.OUR_GOAL_KICK,
|
||||
),
|
||||
"offside_left": (
|
||||
PlayModeEnum.OUR_OFFSIDE,
|
||||
PlayModeEnum.THEIR_OFFSIDE,
|
||||
),
|
||||
"offside_right": (
|
||||
PlayModeEnum.THEIR_OFFSIDE,
|
||||
PlayModeEnum.OUR_OFFSIDE,
|
||||
),
|
||||
"GameOver": (PlayModeEnum.GAME_OVER,),
|
||||
"Goal_Left": (
|
||||
PlayModeEnum.OUR_GOAL,
|
||||
PlayModeEnum.THEIR_GOAL,
|
||||
),
|
||||
"Goal_Right": (
|
||||
PlayModeEnum.THEIR_GOAL,
|
||||
PlayModeEnum.OUR_GOAL,
|
||||
),
|
||||
"free_kick_left": (
|
||||
PlayModeEnum.OUR_FREE_KICK,
|
||||
PlayModeEnum.THEIR_FREE_KICK,
|
||||
),
|
||||
"free_kick_right": (
|
||||
PlayModeEnum.THEIR_FREE_KICK,
|
||||
PlayModeEnum.OUR_FREE_KICK,
|
||||
),
|
||||
"direct_free_kick_left": (
|
||||
PlayModeEnum.OUR_DIRECT_FREE_KICK,
|
||||
PlayModeEnum.THEIR_DIRECT_FREE_KICK,
|
||||
),
|
||||
"direct_free_kick_right": (
|
||||
PlayModeEnum.THEIR_DIRECT_FREE_KICK,
|
||||
PlayModeEnum.OUR_DIRECT_FREE_KICK,
|
||||
),
|
||||
"penalty_kick_left": (
|
||||
PlayModeEnum.OUR_PENALTY_KICK,
|
||||
PlayModeEnum.THEIR_PENALTY_KICK,
|
||||
),
|
||||
"penalty_kick_right": (
|
||||
PlayModeEnum.THEIR_PENALTY_KICK,
|
||||
PlayModeEnum.OUR_PENALTY_KICK,
|
||||
),
|
||||
"penalty_shoot_left": (
|
||||
PlayModeEnum.OUR_PENALTY_SHOOT,
|
||||
PlayModeEnum.THEIR_PENALTY_SHOOT,
|
||||
),
|
||||
"penalty_shoot_right": (
|
||||
PlayModeEnum.THEIR_PENALTY_SHOOT,
|
||||
PlayModeEnum.OUR_PENALTY_SHOOT,
|
||||
),
|
||||
}[playmode]
|
||||
|
||||
playmode = None
|
||||
if len(playmode_ids) > 1:
|
||||
playmode = playmode_ids[0 if is_left_team else 1]
|
||||
else:
|
||||
playmode = playmode_ids[0]
|
||||
|
||||
return playmode
|
||||
|
||||
|
||||
class PlayModeGroupEnum(Enum):
|
||||
NOT_INITIALIZED = auto()
|
||||
OTHER = auto()
|
||||
OUR_KICK = auto()
|
||||
THEIR_KICK = auto()
|
||||
ACTIVE_BEAM = auto()
|
||||
PASSIVE_BEAM = auto()
|
||||
|
||||
@classmethod
|
||||
def get_group_from_playmode(
|
||||
cls, playmode: PlayModeEnum, is_left_team: bool
|
||||
) -> "PlayModeGroupEnum":
|
||||
playmode_group: PlayModeGroupEnum = None
|
||||
|
||||
if playmode in (PlayModeEnum.PLAY_ON, PlayModeEnum.GAME_OVER):
|
||||
playmode_group = cls.OTHER
|
||||
elif playmode in (
|
||||
PlayModeEnum.OUR_CORNER_KICK,
|
||||
PlayModeEnum.OUR_DIRECT_FREE_KICK,
|
||||
PlayModeEnum.OUR_FREE_KICK,
|
||||
PlayModeEnum.OUR_GOAL_KICK,
|
||||
PlayModeEnum.OUR_KICK_OFF,
|
||||
PlayModeEnum.OUR_OFFSIDE,
|
||||
PlayModeEnum.OUR_PENALTY_KICK,
|
||||
PlayModeEnum.OUR_PENALTY_SHOOT,
|
||||
PlayModeEnum.OUR_THROW_IN,
|
||||
):
|
||||
playmode_group = cls.OUR_KICK
|
||||
elif playmode in (
|
||||
PlayModeEnum.THEIR_CORNER_KICK,
|
||||
PlayModeEnum.THEIR_DIRECT_FREE_KICK,
|
||||
PlayModeEnum.THEIR_FREE_KICK,
|
||||
PlayModeEnum.THEIR_GOAL_KICK,
|
||||
PlayModeEnum.THEIR_KICK_OFF,
|
||||
PlayModeEnum.THEIR_OFFSIDE,
|
||||
PlayModeEnum.THEIR_PENALTY_KICK,
|
||||
PlayModeEnum.THEIR_PENALTY_SHOOT,
|
||||
PlayModeEnum.THEIR_THROW_IN,
|
||||
):
|
||||
playmode_group = cls.THEIR_KICK
|
||||
elif (playmode is PlayModeEnum.THEIR_GOAL) or (
|
||||
is_left_team and playmode is PlayModeEnum.BEFORE_KICK_OFF
|
||||
):
|
||||
playmode_group = cls.ACTIVE_BEAM
|
||||
elif (playmode is PlayModeEnum.OUR_GOAL) or (
|
||||
not is_left_team and playmode is PlayModeEnum.BEFORE_KICK_OFF
|
||||
):
|
||||
playmode_group = cls.PASSIVE_BEAM
|
||||
else:
|
||||
raise NotImplementedError(
|
||||
f"Not implemented playmode group for playmode {playmode}"
|
||||
)
|
||||
|
||||
return playmode_group
|
||||
Reference in New Issue
Block a user