diff options
author | Baitinq <you@example.com> | 2022-02-07 15:39:30 +0000 |
---|---|---|
committer | Baitinq <you@example.com> | 2022-02-07 15:39:30 +0000 |
commit | b616302038e6b1a32333c2a6c5339c20be548cf2 (patch) | |
tree | 4cbaa1f7c8979e765cee6656a5d5dcee904f1057 /main.py | |
parent | Initial Commit (diff) | |
download | OSLS-b616302038e6b1a32333c2a6c5339c20be548cf2.tar.gz OSLS-b616302038e6b1a32333c2a6c5339c20be548cf2.tar.bz2 OSLS-b616302038e6b1a32333c2a6c5339c20be548cf2.zip |
Add initial pygame gui
Diffstat (limited to 'main.py')
-rw-r--r-- | main.py | 79 |
1 files changed, 60 insertions, 19 deletions
diff --git a/main.py b/main.py index d322193..1860672 100644 --- a/main.py +++ b/main.py @@ -42,43 +42,84 @@ def main(argv): simulation = Simulation(universe, body, rocket) pygame.init() - simulation_display = pygame.display.set_mode((400,500)) + clock = pygame.time.Clock() + + SCREEN_WIDTH = 1024 + SCREEN_HEIGHT = 720 + + simulation_display = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT)) while(True): - delta = 0.01 - sleep(delta) + draw_simulation(simulation_display, simulation) + pygame.display.update() for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() elif event.type == pygame.KEYDOWN: - if event.key == pygame.K_SPACE: - simulation.rocket.engines_on = not simulation.rocket.engines_on - elif event.key == pygame.K_LEFT: - sys.exit(0) - elif event.key == pygame.K_RIGHT: - sys.exit(0) + if event.key == pygame.K_q: + quit() + else: + handle_key_press(simulation, event.key) + delta = clock.tick(60) / 1000 #60fps #are we using delta in the simulation tick everywhere needed? + print("delta: " + str(delta)) simulation.tick(delta=delta) - draw_simulation(simulation_display, simulation) - - pygame.display.update() + #TODO: draw floor, flame + #TODO: add support for rocket stages #TODO: do max load on rocket so it blows up - #TODO: display sim info on screen #TODO: allow for x movement, speed, accel etc - #TODO: draw floor, flame #TODO: allow multilanguage api for landing algorithms etc def draw_simulation(simulation_display: type[pygame.Surface], simulation: type[Simulation]) -> None: + + font = pygame.font.SysFont("Comic Sans MS", 30) + + #draw background + def get_color_for_height(height: int) -> (int, int, int): + return (255, 255, 255) + simulation_display.fill(get_color_for_height(simulation.y)) #gradient for atmosphere TODO - pygame.draw.rect(simulation_display, (0, 125, 255), pygame.Rect(30, 30, 60, 60)) - if simulation.rocket.engines_on: - pygame.draw.circle(simulation_display, (255, 125, 100), (60, 100), 10) + #draw stats text + simulation_display.blit(font.render("Altitude: {:.0f}m".format(simulation.y), False, (0, 0, 0)),(0,0)) + simulation_display.blit(font.render("Speed: {:.0f}m/s".format(simulation.speed_y), False, (0, 0, 0)),(0,40)) + simulation_display.blit(font.render("Acceleration: {:.2f}m/s2".format(simulation.acceleration_y), False, (0, 0, 0)),(0,80)) + simulation_display.blit(font.render("Fuel: {:.0f}kg".format(simulation.rocket.fuel_mass), False, (0, 0, 0)),(0,120)) + + #draw rocket + rocket_height = 90 + rocket_width = 60 + + def calculate_rocket_y_based_on_y_speed_accel(display_height: int, rocket_height: int, speed_y: float, accel_y: float) -> int: + top = display_height / 5 - (rocket_height / 2) #in the case we are accelerating positively + bottom = display_height - (top * 2) + + return bottom + + def calculate_rocket_x_based_on_x_speed_accel(display_width: int, rocket_width: int, speed_x: float, accel_x: float) -> int: + return display_width / 2 - (rocket_width / 2) + + rocket_x = calculate_rocket_x_based_on_x_speed_accel(simulation_display.get_width(), rocket_width, None, None) + rocket_y = calculate_rocket_y_based_on_y_speed_accel(simulation_display.get_height(), rocket_height, simulation.speed_y, simulation.acceleration_y) + + rocket_color = (0, 125, 255) + + flame_radius = 10 + flame_color = (255, 125, 100) + + pygame.draw.rect(simulation_display, rocket_color, pygame.Rect(rocket_x, rocket_y, rocket_width, rocket_height)) + if simulation.rocket.engines_on and simulation.rocket.fuel_mass > 0: + pygame.draw.circle(simulation_display, flame_color, (rocket_x + (rocket_width / 2), rocket_y + rocket_height + flame_radius), flame_radius) -def get_color_for_height(height: int) -> (int, int, int): - return (255, 255, 255) +def handle_key_press(simulation, key): + if key == pygame.K_SPACE: + simulation.rocket.engines_on = not simulation.rocket.engines_on + elif key == pygame.K_LEFT: + sys.exit(0) + elif key == pygame.K_RIGHT: + sys.exit(0) if __name__ == "__main__": main(sys.argv) \ No newline at end of file |