From f263cf53d55c9da266bbf99c6e4f9aba4494b533 Mon Sep 17 00:00:00 2001 From: Kamil Krawiec Date: Mon, 19 Jan 2026 12:21:45 +0100 Subject: [PATCH 1/2] added slider in ui to manage simulation speed --- src/environment.py | 7 ++++++- src/ui.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/environment.py b/src/environment.py index 9f8ea68..d9fc431 100644 --- a/src/environment.py +++ b/src/environment.py @@ -5,6 +5,7 @@ import random from typing import List, Tuple import pygame +from tomlkit import value from food import FoodSource, SimpleGrassPatch, Food, BerryBush, FertileFruitTree, CactusPads from agent import Agent from area import Area @@ -23,6 +24,7 @@ def __init__(self, grid_width: int, grid_height: int, pixel_width: int, pixel_he self.tick_counter = 0 self.running = True self.pause_sim = False + self.sim_speed = 1.0 self.grid_width = grid_width self.grid_height = grid_height @@ -166,9 +168,12 @@ def _spawn_initial_agents(self): agent = Agent((pos_x, pos_y), self) self.agents.append(agent) + def set_speed(self, value: float): + self.sim_speed = max(0.1, value) + def _simulation_loop(self): while self.running: - time.sleep(0.01) + time.sleep(0.01 / self.sim_speed) if self.pause_sim: continue diff --git a/src/ui.py b/src/ui.py index 0192f02..713d4b8 100644 --- a/src/ui.py +++ b/src/ui.py @@ -135,6 +135,29 @@ def __init__(self, manager: pygame_gui.UIManager, x: int, y: int, width: int, he self.set_area_btns[btn] = area y_offset += margin + btn_height + # speed control ui section + self.speed_ctrl_container = pygame_gui.elements.UIAutoResizingContainer( + relative_rect=pygame.Rect(0, margin, self.panel.get_abs_rect().width - 2 * margin, 0), + manager=self.manager, + container=self.panel, + anchors={'top_target': self.area_ctrl_container} + ) + + self.speed_label = pygame_gui.elements.UILabel( + relative_rect=pygame.Rect(0, 0, -1, -1), + text='Sim Speed: 1.0x', + manager=self.manager, + container=self.speed_ctrl_container + ) + + self.speed_slider = pygame_gui.elements.UIHorizontalSlider( + relative_rect=pygame.Rect(0, 5, self.speed_ctrl_container.get_abs_rect().width, 20), + start_value=1.0, + value_range=(0.1, 10.0), + manager=self.manager, + container=self.speed_ctrl_container, + anchors={'top_target': self.speed_label} + ) # sim control ui section self.sim_ctrl_container = pygame_gui.core.UIContainer( @@ -218,6 +241,12 @@ def process_events(self, event: pygame.Event, env: Environment): food_source = self.spawn_food_source_btns[event.ui_element] self.change_brush(food_source, food_source.__name__) + elif event.type == pygame_gui.UI_HORIZONTAL_SLIDER_MOVED: + if event.ui_element == self.speed_slider: + new_speed = event.value + env.set_speed(new_speed) + self.speed_label.set_text(f'Sim Speed: {new_speed:.1f}x') + def change_brush(self, new_brush, brush_name: str): self.current_brush = new_brush self.action_value.set_text(brush_name) From d99c0f86c0bec43be266df149faf9813d19e24c8 Mon Sep 17 00:00:00 2001 From: Kamil Krawiec Date: Mon, 19 Jan 2026 12:24:49 +0100 Subject: [PATCH 2/2] added slider in ui to manage simulation speed --- src/environment.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/environment.py b/src/environment.py index d9fc431..27575ec 100644 --- a/src/environment.py +++ b/src/environment.py @@ -5,7 +5,6 @@ import random from typing import List, Tuple import pygame -from tomlkit import value from food import FoodSource, SimpleGrassPatch, Food, BerryBush, FertileFruitTree, CactusPads from agent import Agent from area import Area