Init
This commit is contained in:
66
world/world.py
Normal file
66
world/world.py
Normal file
@@ -0,0 +1,66 @@
|
||||
from dataclasses import Field
|
||||
import numpy as np
|
||||
from world.commons.other_robot import OtherRobot
|
||||
from world.commons.field import FIFAField, HLAdultField
|
||||
from world.commons.play_mode import PlayModeEnum, PlayModeGroupEnum
|
||||
|
||||
|
||||
class World:
|
||||
"""
|
||||
Represents the current simulation world, containing all relevant
|
||||
information about the environment, the ball, and the robots.
|
||||
"""
|
||||
|
||||
MAX_PLAYERS_PER_TEAM = 11
|
||||
|
||||
def __init__(self, agent, team_name: str, number: int, field_name: str):
|
||||
"""
|
||||
Initializes the world state.
|
||||
|
||||
Args:
|
||||
agent: Reference to the agent that owns this world.
|
||||
team_name (str): The name of the agent's team.
|
||||
number (int): The player's number within the team.
|
||||
field_name (str): The name of the field to initialize
|
||||
(e.g., 'fifa' or 'hl_adult').
|
||||
"""
|
||||
|
||||
from agent.base_agent import Agent # type hinting
|
||||
|
||||
self.agent: Agent = agent
|
||||
self.team_name: str = team_name
|
||||
self.number: int = number
|
||||
self.playmode: PlayModeEnum = PlayModeEnum.NOT_INITIALIZED
|
||||
self.playmode_group: PlayModeGroupEnum = PlayModeGroupEnum.NOT_INITIALIZED
|
||||
self.is_left_team: bool = None
|
||||
self.game_time: float = None
|
||||
self.server_time: float = None
|
||||
self.score_left: int = None
|
||||
self.score_right: int = None
|
||||
self.their_team_name: str = None
|
||||
self.last_server_time: str = None
|
||||
self._global_cheat_position: np.ndarray = np.zeros(3)
|
||||
self.global_position: np.ndarray = np.zeros(3)
|
||||
self.ball_pos: np.ndarray = np.zeros(3)
|
||||
self.is_ball_pos_updated: bool = False
|
||||
self.our_team_players: list[OtherRobot] = [OtherRobot() for _ in range(self.MAX_PLAYERS_PER_TEAM)]
|
||||
self.their_team_players: list[OtherRobot] = [OtherRobot(is_teammate=False) for _ in
|
||||
range(self.MAX_PLAYERS_PER_TEAM)]
|
||||
self.field: Field = self.__initialize_field(field_name=field_name)
|
||||
|
||||
def update(self) -> None:
|
||||
"""
|
||||
Updates the world state
|
||||
"""
|
||||
self.playmode_group = PlayModeGroupEnum.get_group_from_playmode(
|
||||
playmode=self.playmode, is_left_team=self.is_left_team
|
||||
)
|
||||
|
||||
def is_fallen(self) -> bool:
|
||||
return self.global_position[2] < 0.3
|
||||
|
||||
def __initialize_field(self, field_name: str) -> Field:
|
||||
if field_name in ('hl_adult', 'hl_adult_2020', 'hl_adult_2019',):
|
||||
return HLAdultField(world=self)
|
||||
else:
|
||||
return FIFAField(world=self)
|
||||
Reference in New Issue
Block a user