From 95dace2a8153b40c243e58324ce48ef0556f007a Mon Sep 17 00:00:00 2001 From: Jeroen van Dijk Date: Sat, 5 Oct 2019 17:41:39 +0200 Subject: [PATCH 1/5] Updated silver_goalie so that the bot is always placed on the ground with proper velocity and angular velocity --- .../common_exercises/silver_goalie.py | 83 ++++++++++++------- 1 file changed, 55 insertions(+), 28 deletions(-) diff --git a/rlbottraining/common_exercises/silver_goalie.py b/rlbottraining/common_exercises/silver_goalie.py index c4f1c61..a82f68c 100644 --- a/rlbottraining/common_exercises/silver_goalie.py +++ b/rlbottraining/common_exercises/silver_goalie.py @@ -11,47 +11,74 @@ @dataclass class DefendBallRollingTowardsGoal(GoalieExercise): """You are placed in the center while the ball rolls towards your goal""" + def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: - car_pos = Vector3(0, 2500, 25) - ball_pos = Vector3(rng.uniform(-200, 200), rng.uniform(0, -1500), 100) - ball_state = BallState( - Physics(location=ball_pos, velocity=Vector3(0, -1250, 0), angular_velocity=Vector3(0, 0, 0))) - car_state = CarState(boost_amount=87, jumped=True, double_jumped=True, - physics=Physics(location=car_pos, rotation=Rotator(0, -pi / 2, 0), - velocity=Vector3(0, 0, 0), - angular_velocity=Vector3(0, 0, 0))) - enemy_car = CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) - game_state = GameState(ball=ball_state, cars={0: car_state, 1: enemy_car}) - return game_state + return GameState( + ball=BallState(physics=Physics( + location=Vector3(rng.uniform(-200, 200), rng.uniform(0, -1500), 93), + velocity=Vector3(0, -1300, 0), + angular_velocity=Vector3(0, 0, 0))), + cars={ + 0: CarState( + physics=Physics( + location=Vector3(0, 2500, 18), + rotation=Rotator(0, -pi / 2, 0), + velocity=Vector3(0, -1000, 0), + angular_velocity=Vector3(0, 0, 0)), + boost_amount=87), + 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) + }, + boosts={i: BoostState(0) for i in range(34)}, + ) @dataclass class LineSave(GoalieExercise): """A test where the ball is put on the line and the player in the middle of the field""" + def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: - car_pos = Vector3(0, 2500, 25) - ball_pos = Vector3(0, -5000, 100) - ball_state = BallState(Physics(location=ball_pos, velocity=Vector3(0, 0, 0), angular_velocity=Vector3(0, 0, 0))) - car_state = CarState(boost_amount=87, jumped=True, double_jumped=True, - physics=Physics(location=car_pos, rotation=Rotator(0, -pi / 2, 0))) - enemy_car = CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) - game_state = GameState(ball=ball_state, cars={0: car_state, 1: enemy_car}) - return game_state + return GameState( + ball=BallState(physics=Physics( + location=Vector3(0, -5000, 93), + velocity=Vector3(0, 0, 0), + angular_velocity=Vector3(0, 0, 0))), + cars={ + 0: CarState( + physics=Physics( + location=Vector3(0, 2500, 18), + rotation=Rotator(0, -pi / 2, 0), + velocity=Vector3(0, -1000, 0), + angular_velocity=Vector3(0, 0, 0)), + boost_amount=87), + 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) + }, + boosts={i: BoostState(0) for i in range(34)}, + ) @dataclass class TryNotToOwnGoal(GoalieExercise): """A test where your driving at speed towards your own goal with the ball right in front of you""" + def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: - car_pos = Vector3(0, 2500, 25) - ball_pos = Vector3(0, 2000, 100) - ball_state = BallState(Physics(location=ball_pos, velocity=Vector3(0, -1300, 0))) - car_state = CarState(boost_amount=0, jumped=True, double_jumped=True, - physics=Physics(location=car_pos, velocity=Vector3(0, -1000, 0), - rotation=Rotator(0, -pi / 2, 0))) - enemy_car = CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) - game_state = GameState(ball=ball_state, cars={0: car_state, 1: enemy_car}) - return game_state + return GameState( + ball=BallState(physics=Physics( + location=Vector3(0, 2000, 93), + velocity=Vector3(0, -1300, 0), + angular_velocity=Vector3(0, 0, 0))), + cars={ + 0: CarState( + physics=Physics( + location=Vector3(0, 2500, 18), + rotation=Rotator(0, -pi / 2, 0), + velocity=Vector3(0, -1000, 0), + angular_velocity=Vector3(0, 0, 0)), + boost_amount=0), + 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) + }, + boosts={i: BoostState(0) for i in range(34)}, + ) + def make_default_playlist() -> Playlist: return [ From 74c625e608133a9ee6ad81290ae662073a2ffdbe Mon Sep 17 00:00:00 2001 From: Jeroen van Dijk Date: Sat, 5 Oct 2019 17:45:16 +0200 Subject: [PATCH 2/5] Updated silver striker in the same way --- .../common_exercises/silver_striker.py | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/rlbottraining/common_exercises/silver_striker.py b/rlbottraining/common_exercises/silver_striker.py index 9359824..60fe955 100644 --- a/rlbottraining/common_exercises/silver_striker.py +++ b/rlbottraining/common_exercises/silver_striker.py @@ -1,6 +1,7 @@ from dataclasses import dataclass from math import pi +from rlbot.utils.game_state_util import BoostState from rlbot.utils.game_state_util import GameState, BallState, CarState, Physics, Vector3, Rotator from rlbottraining.common_exercises.common_base_exercises import StrikerExercise @@ -13,15 +14,24 @@ class HookShot(StrikerExercise): """A shot where you have to hook it to score""" def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: - car_pos = Vector3(2000, 500, 25) - ball_pos = Vector3(2000, 1000, 100) - ball_state = BallState(Physics(location=ball_pos, velocity=Vector3(0, 1000, 0))) - car_state = CarState(boost_amount=0, jumped=True, double_jumped=True, - physics=Physics(location=car_pos, velocity=Vector3(0, 1000, 0), - rotation=Rotator(0, pi / 2, 0))) - enemy_car = CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) - game_state = GameState(ball=ball_state, cars={0: car_state, 1: enemy_car}) - return game_state + return GameState( + ball=BallState(physics=Physics( + location=Vector3(2000, 1000, 93), + velocity=Vector3(0, 1000, 0), + angular_velocity=Vector3(0, 0, 0))), + cars={ + 0: CarState( + physics=Physics( + location=Vector3(2000, 500, 25), + rotation=Rotator(0, pi / 2, 0), + velocity=Vector3(0, 1000, 0), + angular_velocity=Vector3(0, 0, 0)), + boost_amount=87), + 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) + }, + boosts={i: BoostState(0) for i in range(34)}, + ) + def make_default_playlist() -> Playlist: return [ From 9cc5287ea4ff91ad40a3eec26f12760a95bb4cf6 Mon Sep 17 00:00:00 2001 From: Jeroen van Dijk Date: Sat, 5 Oct 2019 17:51:52 +0200 Subject: [PATCH 3/5] Updated dribbling as well --- rlbottraining/common_exercises/dribbling.py | 26 +++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/rlbottraining/common_exercises/dribbling.py b/rlbottraining/common_exercises/dribbling.py index afe8f5c..3f46154 100644 --- a/rlbottraining/common_exercises/dribbling.py +++ b/rlbottraining/common_exercises/dribbling.py @@ -1,6 +1,7 @@ from dataclasses import dataclass from math import pi +from rlbot.utils.game_state_util import BoostState from rlbot.utils.game_state_util import GameState, BallState, CarState, Physics, Vector3, Rotator from rlbottraining.common_exercises.common_base_exercises import StrikerExercise @@ -17,13 +18,24 @@ class Dribbling(StrikerExercise): def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: car_pos = Vector3(3500 * rng.n11(), rng.uniform(0, -4000), 25) ball_pos = Vector3(car_pos.x, car_pos.y + 500, 500) - ball_state = BallState(Physics(location=ball_pos, velocity=Vector3(0, 0, 500))) - car_state = CarState(boost_amount=87, jumped=True, double_jumped=True, - physics=Physics(location=car_pos, velocity=Vector3(0, 0, 0), - rotation=Rotator(0, pi / 2, 0))) - enemy_car = CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) - game_state = GameState(ball=ball_state, cars={0: car_state, 1: enemy_car}) - return game_state + return GameState( + ball=BallState(physics=Physics( + location=ball_pos, + velocity=Vector3(0, 0, 500), + angular_velocity=Vector3(0, 0, 0))), + cars={ + 0: CarState( + physics=Physics( + location=car_pos, + rotation=Rotator(0, pi / 2, 0), + velocity=Vector3(0, 0, 0), + angular_velocity=Vector3(0, 0, 0)), + boost_amount=87), + 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) + }, + boosts={i: BoostState(0) for i in range(34)}, + ) + def make_default_playlist() -> Playlist: return [ From cf53301dd6c8593f921c174f42fb7ca0a797a4e3 Mon Sep 17 00:00:00 2001 From: Jeroen van Dijk Date: Sun, 6 Oct 2019 12:52:13 +0200 Subject: [PATCH 4/5] Removed the boost state setting, since it doesnt work anymore. --- .../common_exercises/bronze_goalie.py | 5 ++- .../common_exercises/bronze_striker.py | 37 ++++++++++--------- rlbottraining/common_exercises/dribbling.py | 2 - .../common_exercises/silver_goalie.py | 5 +-- .../common_exercises/silver_striker.py | 2 - 5 files changed, 23 insertions(+), 28 deletions(-) diff --git a/rlbottraining/common_exercises/bronze_goalie.py b/rlbottraining/common_exercises/bronze_goalie.py index 61cfd95..a8b07ba 100644 --- a/rlbottraining/common_exercises/bronze_goalie.py +++ b/rlbottraining/common_exercises/bronze_goalie.py @@ -1,12 +1,13 @@ from dataclasses import dataclass from math import pi -from rlbot.utils.game_state_util import GameState, BoostState, BallState, CarState, Physics, Vector3, Rotator +from rlbot.utils.game_state_util import GameState, BallState, CarState, Physics, Vector3, Rotator from rlbottraining.common_exercises.common_base_exercises import GoalieExercise from rlbottraining.rng import SeededRandomNumberGenerator from rlbottraining.training_exercise import Playlist + @dataclass class BallRollingToGoalie(GoalieExercise): @@ -27,9 +28,9 @@ def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: double_jumped=False, boost_amount=0) }, - boosts={i: BoostState(0) for i in range(34)}, ) + def make_default_playlist() -> Playlist: return [ BallRollingToGoalie('BallRollingToGoalie'), diff --git a/rlbottraining/common_exercises/bronze_striker.py b/rlbottraining/common_exercises/bronze_striker.py index f750be7..e84bf49 100644 --- a/rlbottraining/common_exercises/bronze_striker.py +++ b/rlbottraining/common_exercises/bronze_striker.py @@ -1,12 +1,13 @@ -from dataclasses import dataclass, field +from dataclasses import dataclass from math import pi -from rlbot.utils.game_state_util import GameState, BoostState, BallState, CarState, Physics, Vector3, Rotator +from rlbot.utils.game_state_util import GameState, BallState, CarState, Physics, Vector3, Rotator from rlbottraining.common_exercises.common_base_exercises import StrikerExercise from rlbottraining.rng import SeededRandomNumberGenerator from rlbottraining.training_exercise import Playlist + @dataclass class BallInFrontOfGoal(StrikerExercise): def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: @@ -26,13 +27,11 @@ def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: double_jumped=False, boost_amount=0) }, - boosts={i: BoostState(0) for i in range(34)}, ) @dataclass class FacingAwayFromBallInFrontOfGoal(StrikerExercise): - car_start_x: float = 0 car_start_y: float = 2400 @@ -53,26 +52,28 @@ def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: double_jumped=True, boost_amount=20) }, - boosts={i: BoostState(0) for i in range(34)}, ) # The ball is rolling towards goal but you still need to put it in class RollingTowardsGoalShot(StrikerExercise): def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: - car_pos = Vector3(0, -2500, 25) - ball_pos = Vector3(1000*rng.n11(), rng.uniform(0, 1500), 100) - ball_state = BallState(Physics(location=ball_pos, velocity=Vector3(0, 550, 0))) - car_state = CarState(boost_amount=87, jumped=True, double_jumped=True, - physics=Physics( - location=car_pos, - rotation=Rotator(0, pi / 2, 0), - velocity=Vector3(0, 0, 0), - angular_velocity=Vector3(0, 0, 0), - )) - enemy_car = CarState(physics=Physics(location=Vector3(0, 5120, 25))) - game_state = GameState(ball=ball_state, cars={0: car_state}) - return game_state + return GameState( + ball=BallState(physics=Physics( + location=Vector3(1000 * rng.n11(), rng.uniform(0, 1500), 100), + velocity=Vector3(0, 550, 0), + angular_velocity=Vector3(0, 0, 0))), + cars={ + 0: CarState( + physics=Physics( + location=Vector3(0, -2500, 18), + rotation=Rotator(0, pi / 2, 0), + velocity=Vector3(0, 0, 0), + angular_velocity=Vector3(0, 0, 0)), + boost_amount=87), + 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) + }, + ) def make_default_playlist() -> Playlist: diff --git a/rlbottraining/common_exercises/dribbling.py b/rlbottraining/common_exercises/dribbling.py index 3f46154..265257d 100644 --- a/rlbottraining/common_exercises/dribbling.py +++ b/rlbottraining/common_exercises/dribbling.py @@ -1,7 +1,6 @@ from dataclasses import dataclass from math import pi -from rlbot.utils.game_state_util import BoostState from rlbot.utils.game_state_util import GameState, BallState, CarState, Physics, Vector3, Rotator from rlbottraining.common_exercises.common_base_exercises import StrikerExercise @@ -33,7 +32,6 @@ def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: boost_amount=87), 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) }, - boosts={i: BoostState(0) for i in range(34)}, ) diff --git a/rlbottraining/common_exercises/silver_goalie.py b/rlbottraining/common_exercises/silver_goalie.py index a82f68c..88c7f8c 100644 --- a/rlbottraining/common_exercises/silver_goalie.py +++ b/rlbottraining/common_exercises/silver_goalie.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from math import pi -from rlbot.utils.game_state_util import GameState, BoostState, BallState, CarState, Physics, Vector3, Rotator +from rlbot.utils.game_state_util import GameState, BallState, CarState, Physics, Vector3, Rotator from rlbottraining.common_exercises.common_base_exercises import GoalieExercise from rlbottraining.rng import SeededRandomNumberGenerator @@ -28,7 +28,6 @@ def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: boost_amount=87), 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) }, - boosts={i: BoostState(0) for i in range(34)}, ) @@ -52,7 +51,6 @@ def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: boost_amount=87), 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) }, - boosts={i: BoostState(0) for i in range(34)}, ) @@ -76,7 +74,6 @@ def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: boost_amount=0), 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) }, - boosts={i: BoostState(0) for i in range(34)}, ) diff --git a/rlbottraining/common_exercises/silver_striker.py b/rlbottraining/common_exercises/silver_striker.py index 60fe955..fb0bd71 100644 --- a/rlbottraining/common_exercises/silver_striker.py +++ b/rlbottraining/common_exercises/silver_striker.py @@ -1,7 +1,6 @@ from dataclasses import dataclass from math import pi -from rlbot.utils.game_state_util import BoostState from rlbot.utils.game_state_util import GameState, BallState, CarState, Physics, Vector3, Rotator from rlbottraining.common_exercises.common_base_exercises import StrikerExercise @@ -29,7 +28,6 @@ def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: boost_amount=87), 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) }, - boosts={i: BoostState(0) for i in range(34)}, ) From 79e0787ecf6ce9d97cc1da8ef1b7cf18c8943f6a Mon Sep 17 00:00:00 2001 From: Jeroen van Dijk Date: Mon, 7 Oct 2019 23:58:56 +0200 Subject: [PATCH 5/5] Added 3 exercises for training bounce shots --- .../common_exercises/bounce_shots.py | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 rlbottraining/common_exercises/bounce_shots.py diff --git a/rlbottraining/common_exercises/bounce_shots.py b/rlbottraining/common_exercises/bounce_shots.py new file mode 100644 index 0000000..0402d6c --- /dev/null +++ b/rlbottraining/common_exercises/bounce_shots.py @@ -0,0 +1,77 @@ +import math + +from rlbot.utils.game_state_util import GameState, BallState, CarState, Physics, Vector3, Rotator +from rlbottraining.common_exercises.common_base_exercises import StrikerExercise +from rlbottraining.rng import SeededRandomNumberGenerator +from rlbottraining.training_exercise import Playlist + + +# The ball is bouncings towards you +class BouncingShotTowardsAgent(StrikerExercise): + def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: + return GameState( + ball=BallState(physics=Physics( + location=Vector3(0, 2500, 93), + velocity=Vector3(0, -250, 700), + angular_velocity=Vector3(0, 0, 0))), + cars={ + 0: CarState( + physics=Physics( + location=Vector3(0, 0, 18), + velocity=Vector3(0, 0, 0), + rotation=Rotator(0, math.pi / 2, 0), + angular_velocity=Vector3(0, 0, 0)), + boost_amount=87), + 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) + }, + ) + + +# The ball is bouncings away from you +class BouncingShotAwayFromAgent(StrikerExercise): + def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: + return GameState( + ball=BallState(physics=Physics( + location=Vector3(0, 1500, 93), + velocity=Vector3(0, 650, 750), + angular_velocity=Vector3(0, 0, 0))), + cars={ + 0: CarState( + physics=Physics( + location=Vector3(0, -1000, 18), + velocity=Vector3(0, 0, 0), + rotation=Rotator(0, math.pi / 2, 0), + angular_velocity=Vector3(0, 0, 0)), + boost_amount=87), + 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) + }, + ) + + +# You need to turn or use a air roll shot +class BouncingShotAngled(StrikerExercise): + def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: + return GameState( + ball=BallState(physics=Physics( + location=Vector3(0, 0, 750), + velocity=Vector3(0, 0, 1), + angular_velocity=Vector3(0, 0, 0))), + cars={ + 0: CarState( + physics=Physics( + location=Vector3(-1000, -1500, 18), + velocity=Vector3(0, 0, 0), + rotation=Rotator(0, math.pi / 8, 0), + angular_velocity=Vector3(0, 0, 0)), + boost_amount=87), + 1: CarState(physics=Physics(location=Vector3(10000, 10000, 10000))) + }, + ) + + +def make_default_playlist() -> Playlist: + return [ + BouncingShotTowardsAgent('Bouncing towards'), + BouncingShotAwayFromAgent('Bouncing away'), + BouncingShotAngled('Angled bounce shot') + ]