Skip to content
Snippets Groups Projects
Commit 39272a2b authored by Fabian Heinrich's avatar Fabian Heinrich
Browse files

Remaining game time is displayed from state

parent d2e7af03
No related branches found
No related tags found
1 merge request!28Resolve "Game time limit"
Pipeline #43810 passed
......@@ -4,4 +4,4 @@ plates:
plate_delay: [ 5, 10 ]
game:
time_limit_seconds: 10.0
time_limit_seconds: 5.0
......@@ -3,6 +3,7 @@ import logging
import math
import sys
from collections import deque
from datetime import timedelta
from enum import Enum
import numpy as np
......@@ -484,6 +485,16 @@ class PyGameGUI:
if SHOW_COUNTER_CENTERS:
pygame.draw.circle(self.game_screen, colors["green1"], counter.pos, 3)
def update_score_label(self, state):
score = state["score"]
self.score_label.set_text(f"Your Score is {score}")
def draw_time(self, remaining_time: timedelta):
hours, rem = divmod(remaining_time.seconds, 3600)
minutes, seconds = divmod(rem, 60)
display_time = f"{minutes}:{'%02d' % seconds}"
self.timer_label.set_text(f"Time remaining: {display_time}")
def draw(self, state):
"""Main visualization function.
......@@ -495,7 +506,8 @@ class PyGameGUI:
self.draw_counters(state)
self.draw_players(state)
self.manager.draw_ui(self.game_screen)
self.manager.draw_ui(self.main_window)
self.draw_time(state["passed_time"])
def init_ui_elements(self):
self.manager = pygame_gui.UIManager((self.window_width, self.window_height))
......@@ -588,6 +600,16 @@ class PyGameGUI:
starting_option=layout_file_paths[-1],
)
self.timer_label = pygame_gui.elements.UILabel(
text="GAMETIME",
relative_rect=pygame.Rect(
(0, 0),
(button_width, button_height),
),
manager=self.manager,
object_id="#timer_label",
)
def setup_windows(self):
(
self.window_width,
......@@ -629,21 +651,21 @@ class PyGameGUI:
self.score_label.hide()
self.finished_button.hide()
self.layout_selection.show()
self.timer_label.hide()
case MenuStates.Game:
self.start_button.hide()
self.back_button.show()
self.score_label.hide()
self.finished_button.show()
self.layout_selection.hide()
self.timer_label.show()
case MenuStates.End:
self.start_button.hide()
self.back_button.show()
self.score_label.show()
self.score_label.set_text(
f"Your Score is {self.simulator.env.game_score.score}"
)
self.finished_button.hide()
self.layout_selection.hide()
self.timer_label.hide()
def start_button_press(self):
self.menu_state = MenuStates.Game
......@@ -696,6 +718,7 @@ class PyGameGUI:
while self.running:
try:
time_delta = clock.tick(self.FPS) / 1000.0
state = self.simulator.get_state()
for event in pygame.event.get():
if event.type == pygame.QUIT:
......@@ -734,7 +757,6 @@ class PyGameGUI:
self.handle_keys()
state = self.simulator.get_state()
if state["ended"]:
self.finished_button_press()
self.manage_button_visibility()
......@@ -749,9 +771,7 @@ class PyGameGUI:
self.main_window.blit(self.game_screen, game_screen_rect)
case MenuStates.End:
pygame.draw.rect(
self.game_screen, colors["cornsilk1"], self.score_rect
)
self.update_score_label(state)
self.manager.update(time_delta)
pygame.display.flip()
......
......@@ -134,6 +134,7 @@ class Environment:
self.score: int = 0
self.env_time = create_init_env_time()
self.beginning_time = self.env_time
self.env_time_end = self.env_time + timedelta(
seconds=environment_config["game"]["time_limit_seconds"]
)
......@@ -462,6 +463,7 @@ class Environment:
"counters": self.counters,
"score": self.score,
"ended": self.game_ended,
"passed_time": self.env_time_end - self.env_time,
}
def get_state_json(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment