diff --git a/main.py b/main.py index b9cb26cbacb69021528bfde9b2d57da53910b2ad..c695e6a3489d9642feb72b4123ef143362237983 100644 --- a/main.py +++ b/main.py @@ -23,10 +23,10 @@ RESOURCES = sdl2.ext.Resources(__file__, './src/images/') # Initialize window width/height. WINDOW_WIDTH = 640 WINDOW_HEIGHT = 480 -# WINDOW_WIDTH = 400 -# WINDOW_HEIGHT = 200 -WINDOW_WIDTH_MIN = 400 -WINDOW_HEIGHT_MIN = 200 +# WINDOW_WIDTH = 500 +# WINDOW_HEIGHT = 450 +WINDOW_WIDTH_MIN = 500 +WINDOW_HEIGHT_MIN = 450 def main(): @@ -168,6 +168,8 @@ def initialize_data(): 'gui_h_end': gui_h_end, 'gui_center_w': gui_center_w, 'gui_center_h': gui_center_h, + 'optimal_counter': 999999, + 'total_move_counter': -1, } tile_data = { 'tile_w_start': tile_w_start, diff --git a/src/entities/gui_entities.py b/src/entities/gui_entities.py index 0ea5811d63a85dc1eca5a90d7e32e248a54ed7c6..f1d3417442904aa9d94cedfab946caf816de79a4 100644 --- a/src/entities/gui_entities.py +++ b/src/entities/gui_entities.py @@ -49,6 +49,12 @@ class GuiCore: 5, data_manager.gui_data['gui_h_start'] + 5, ) + self.total_move_counter_text = GuiText( + data_manager, + 'Moves:', + data_manager.gui_data['gui_w_start'] - 80, + data_manager.gui_data['gui_h_start'] + 5, + ) self.settings_header_text = GuiText( data_manager, 'Settings:', @@ -253,9 +259,9 @@ class GuiText: self.font = fcmatch('monospace').file # Initialize text sprite. - self.update_text(text) + self.update(text) - def update_text(self, text): + def update(self, text): """ Update's text entity to display new text value. :param text: Text string to display. @@ -267,7 +273,7 @@ class GuiText: # Initialize button text. text_color = sdl2.SDL_Color(250, 250, 250) # White text. font_manager = sdl2.ext.FontManager(self.font, size=12, color=text_color) - text_sprite = self.data_manager.sprite_factory.from_text(text, fontmanager=font_manager) + text_sprite = self.data_manager.sprite_factory.from_text(str(text), fontmanager=font_manager) # Create sprite entity to display text value. self.text_entity = self.Text(self.data_manager.world, text_sprite, self.data_manager, self.pos_x, self.pos_y) diff --git a/src/misc.py b/src/misc.py index 5b0beb41a9175c81f47940a77677950509962b23..0c09333eabebb76726e9c78178f4f0d8b3f8cc62 100644 --- a/src/misc.py +++ b/src/misc.py @@ -62,6 +62,9 @@ class DataManager: 'inactive': 0, } + # Also make the Sprite Renderer aware of current Data Manager object. + sprite_renderer.data_manager = self + # endregion Data Structures @@ -822,9 +825,12 @@ def calc_traveling_salesman(data_manager, debug=False): if swapped_total_dist < curr_total_dist: calculated_path['ordering'][conn_1_index_1] = conn_2_id_1 calculated_path['ordering'][conn_2_index_1] = conn_1_id_1 + calculated_path['total_cost'] = swapped_total_dist # Save found path. data_manager.ideal_overall_path = calculated_path + data_manager.gui_data['optimal_counter'] = calculated_path['total_cost'] + data_manager.gui_data['total_move_counter'] += 1 # Optionally display debug tile sprites. if debug: diff --git a/src/systems.py b/src/systems.py index da571e106bc96bfc5a494928689ae3bb4047cba9..a182fcb91b4cf3211234b11a7c34de4b35b810ec 100644 --- a/src/systems.py +++ b/src/systems.py @@ -23,12 +23,22 @@ class SoftwareRendererSystem(sdl2.ext.SoftwareSpriteRenderSystem): System that handles displaying sprites to renderer window. """ def __init__(self, window): + self.data_manager = None super(SoftwareRendererSystem, self).__init__(window) def render(self, components): + # Run tick to update general interface. sdl2.ext.fill(self.surface, sdl2.ext.Color(0, 0, 0)) super(SoftwareRendererSystem, self).render(components) + # Also update dynamic GUI text elements. + self.data_manager.gui.optimal_counter_text.update( + 'Optimal Solution Cost: {0}'.format(self.data_manager.gui_data['optimal_counter']), + ) + self.data_manager.gui.total_move_counter_text.update( + 'Moves: {0}'.format(self.data_manager.gui_data['total_move_counter']), + ) + class AbstractMovementSystem(ABC): """