@@ -28,7 +28,6 @@ def __init__(self, robot):
2828 self .turret_rotation_velocity = 0.0
2929 self .radar_rotation_velocity = 0.0
3030
31- 3231 def flush_state (self ):
3332 """Push read only values back to the Robot class"""
3433 self .robot .energy = self .energy
@@ -73,14 +72,26 @@ def acceleration(r):
7372 return 0.0
7473
7574
75+ def bullet_damage (bullet ):
76+ damage = 4 * bullet .power
77+ if bullet .power > 1 :
78+ damage += 2 * (bullet .power - 1 )
79+ return damage
80+ 81+ 82+ def energy_on_hit (bullet ):
83+ return
84+ 85+ 7686class Engine (object ):
77- def __init__ (self , robots , size , bullet_self_collisions = True , rate = - 1 ):
87+ def __init__ (self , robots , size , bullet_collisions_enabled = True , gun_heat_enabled = True , rate = - 1 ):
7888 self .robots = robots
7989 self .size = size
8090
81- # Collision settings
82- self .bullet_self_collisions = bullet_self_collisions
83- self .robot_collisions = True
91+ # Options
92+ self .gun_heat_enabled = gun_heat_enabled
93+ self .bullet_collisions_enabled = bullet_collisions_enabled
94+ self .robot_collisions_enabled = True
8495
8596 # Stores
8697 self .data = None
@@ -91,6 +102,7 @@ def __init__(self, robots, size, bullet_self_collisions=True, rate=-1):
91102 self .bounds = (offset , offset ), (self .size [0 ] - offset , self .size [1 ] - offset )
92103
93104 def set_rate (self , rate ):
105+ print (f"Set rate to { rate } sims/s." )
94106 self .interval = 1 / rate
95107
96108 def init (self ):
@@ -108,10 +120,10 @@ def init(self):
108120 def run (self ):
109121 while not self .is_finished ():
110122 if time .time () > self .next_sim :
111- self .next_sim = time .time () + self .interval
112123 self .step ()
113124
114125 def step (self ):
126+ self .next_sim = time .time () + self .interval
115127 self .update_robots ()
116128 self .flush_robot_state ()
117129
@@ -177,9 +189,7 @@ def update_robots(self):
177189 colls = test_circle_to_circles (r .position , ROBOT_RADIUS , cs , 3 )
178190 for bullet in bs [colls ]:
179191 # Damage calculation
180- damage = 4 * bullet .power
181- if bullet .power > 1 :
182- damage += 2 * (bullet .power - 1 )
192+ damage = bullet_damage (bullet )
183193 r .energy -= damage
184194 bullet .robot_data .energy += 3 * bullet .power
185195 self .bullets .remove (bullet )
@@ -208,7 +218,7 @@ def update_robots(self):
208218 r .radar_rotation = (r .radar_rotation + r .radar_rotation_velocity ) % 360
209219
210220 # Should fire and can fire
211- if r .robot .should_fire and (r .turret_heat <= 0.0 ):
221+ if r .robot .should_fire and (( r .turret_heat <= 0.0 ) or not self . gun_heat_enabled ):
212222 fire_power = r .robot .fire_power
213223 r .turret_heat = 1 + fire_power / 5
214224 r .energy = np .maximum (0.0 , r .energy - fire_power )
0 commit comments