feat(*): Add default bot code

This commit is contained in:
Josh Creek
2023-09-25 20:37:02 +01:00
parent a5ac72216b
commit d12d42f114
11 changed files with 448 additions and 0 deletions
+78
View File
@@ -0,0 +1,78 @@
import math
import numpy as np
from typing import Any, List
from rlgym_compat import common_values
from rlgym_compat import PlayerData, GameState
class DefaultObs:
def __init__(self, pos_coef=1/2300, ang_coef=1/math.pi, lin_vel_coef=1/2300, ang_vel_coef=1/math.pi):
"""
:param pos_coef: Position normalization coefficient
:param ang_coef: Rotation angle normalization coefficient
:param lin_vel_coef: Linear velocity normalization coefficient
:param ang_vel_coef: Angular velocity normalization coefficient
"""
super().__init__()
self.POS_COEF = pos_coef
self.ANG_COEF = ang_coef
self.LIN_VEL_COEF = lin_vel_coef
self.ANG_VEL_COEF = ang_vel_coef
def reset(self, initial_state: GameState):
pass
def build_obs(self, player: PlayerData, state: GameState, previous_action: np.ndarray) -> Any:
if player.team_num == common_values.ORANGE_TEAM:
inverted = True
ball = state.inverted_ball
pads = state.inverted_boost_pads
else:
inverted = False
ball = state.ball
pads = state.boost_pads
obs = [ball.position * self.POS_COEF,
ball.linear_velocity * self.LIN_VEL_COEF,
ball.angular_velocity * self.ANG_VEL_COEF,
previous_action,
pads]
self._add_player_to_obs(obs, player, inverted)
allies = []
enemies = []
for other in state.players:
if other.car_id == player.car_id:
continue
if other.team_num == player.team_num:
team_obs = allies
else:
team_obs = enemies
self._add_player_to_obs(team_obs, other, inverted)
obs.extend(allies)
obs.extend(enemies)
return np.concatenate(obs)
def _add_player_to_obs(self, obs: List, player: PlayerData, inverted: bool):
if inverted:
player_car = player.inverted_car_data
else:
player_car = player.car_data
obs.extend([
player_car.position * self.POS_COEF,
player_car.forward(),
player_car.up(),
player_car.linear_velocity * self.LIN_VEL_COEF,
player_car.angular_velocity * self.ANG_VEL_COEF,
[player.boost_amount,
int(player.on_ground),
int(player.has_flip),
int(player.is_demoed)]])
return player_car