From 01d896c7dca49f35f8640f139e64bd53671d43dd Mon Sep 17 00:00:00 2001 From: Antti Hakkarainen Date: Sat, 18 Feb 2023 16:17:04 +0200 Subject: [PATCH] implement infolayer drawing, support for other types too --- scenes/Main.tscn | 6 ++++++ source/EventBus.gd | 21 +++++++++++++-------- source/Globals.gd | 1 + source/infolayer/InfoLayer.gd | 13 ++++++------- source/uilayer/Control.gd | 22 ++++++++++++++-------- 5 files changed, 40 insertions(+), 23 deletions(-) diff --git a/scenes/Main.tscn b/scenes/Main.tscn index 9c56aed..f7eee56 100644 --- a/scenes/Main.tscn +++ b/scenes/Main.tscn @@ -119,6 +119,10 @@ layout_mode = 0 offset_right = 8.0 offset_bottom = 8.0 +[node name="button_infolayer_parcels" type="Button" parent="EventBus/UILayer/Control/ConstructionPanel"] +offset_right = 8.0 +offset_bottom = 8.0 + [node name="DebugContainer" type="GridContainer" parent="EventBus/UILayer/Control"] layout_mode = 1 anchors_preset = 1 @@ -159,6 +163,7 @@ texture_repeat = 1 centered = false [connection signal="chunk_stats" from="EventBus/Game/ChunkHandler" to="EventBus/UILayer/Control" method="_on_chunk_handler_chunk_stats"] +[connection signal="infolayer_button_pressed" from="EventBus/UILayer/Control" to="EventBus" method="_on_control_infolayer_button_pressed"] [connection signal="pressed" from="EventBus/UILayer/Control/ConstructionPanel/button_residental" to="EventBus/UILayer/Control" method="_on_button_residental_pressed"] [connection signal="pressed" from="EventBus/UILayer/Control/ConstructionPanel/button_commercial" to="EventBus/UILayer/Control" method="_on_button_commercial_pressed"] [connection signal="pressed" from="EventBus/UILayer/Control/ConstructionPanel/button_industrial" to="EventBus/UILayer/Control" method="_on_button_industrial_pressed"] @@ -166,6 +171,7 @@ centered = false [connection signal="pressed" from="EventBus/UILayer/Control/ConstructionPanel/button_demolish" to="EventBus/UILayer/Control" method="_on_button_demolish_pressed"] [connection signal="pressed" from="EventBus/UILayer/Control/ConstructionPanel/button_services" to="EventBus/UILayer/Control" method="_on_button_services_pressed"] [connection signal="pressed" from="EventBus/UILayer/Control/ConstructionPanel/button_social" to="EventBus/UILayer/Control" method="_on_button_social_pressed"] +[connection signal="pressed" from="EventBus/UILayer/Control/ConstructionPanel/button_infolayer_parcels" to="EventBus/UILayer/Control" method="_on_button_infolayer_parcels_pressed"] [connection signal="mouse_entered" from="EventBus/UILayer/Control/Minimap" to="EventBus/UILayer/Control/Minimap" method="_on_mouse_entered"] [connection signal="mouse_exited" from="EventBus/UILayer/Control/Minimap" to="EventBus/UILayer/Control/Minimap" method="_on_mouse_exited"] [connection signal="set_camera_position" from="EventBus/UILayer/Control/Minimap" to="EventBus" method="set_camera_position"] diff --git a/source/EventBus.gd b/source/EventBus.gd index c852b9d..07cbb2a 100644 --- a/source/EventBus.gd +++ b/source/EventBus.gd @@ -5,6 +5,7 @@ extends Node @onready var node_mainmenu:MainMenu @onready var node_game:Game @onready var node_camera:Camera +@onready var node_infolayer:InfoLayer @onready var node_uilayer:UILayer @@ -34,6 +35,7 @@ func _ready(): node_mainmenu = find_child("MainMenu") node_game = find_child("Game") node_camera = find_child("Camera") + node_infolayer = find_child("InfoLayer") node_uilayer = find_child("UILayer") @@ -94,6 +96,17 @@ func _unhandled_input(event) -> void: node_camera.clamp_camera_position() +func _on_control_infolayer_button_pressed(button_type): + var current_layer:int = node_infolayer.get_draw_mode() + + if current_layer == button_type: + node_infolayer.set_draw_mode(Globals.INFLAYER_LAYERS_HIDDEN) + node_infolayer.set_visible(false) + else: + node_infolayer.set_draw_mode(button_type) + node_infolayer.set_visible(true) + + func _on_mainmenu_button_pressed(button:int): match button: Globals.MAINMENU_NEW_GAME: @@ -153,11 +166,6 @@ func start_new_game(): node_game.set_visible(true) node_uilayer.set_visible(true) - var node_infolayer:InfoLayer - node_infolayer = find_child("InfoLayer") - node_infolayer.set_draw_mode(0) - node_infolayer.set_visible(true) - # set camera to center of the map node_camera.camera_reset_rotation() node_camera.set_camera_position( @@ -165,8 +173,5 @@ func start_new_game(): Globals.map_size / 2.0 * Globals.TILE_SIZE_Y) ) - - - diff --git a/source/Globals.gd b/source/Globals.gd index 51863e1..4e78985 100644 --- a/source/Globals.gd +++ b/source/Globals.gd @@ -188,6 +188,7 @@ enum { INFOLAYER_DISTRICTS, } +const INFLAYER_LAYERS_HIDDEN:int = -1 ################################### # UI ELEMENT SETTINGS # diff --git a/source/infolayer/InfoLayer.gd b/source/infolayer/InfoLayer.gd index dc94566..c45bdc9 100644 --- a/source/infolayer/InfoLayer.gd +++ b/source/infolayer/InfoLayer.gd @@ -1,15 +1,11 @@ class_name InfoLayer extends Node2D -var draw_mode:int = -1 +var draw_mode:int -# displays various info layers of the game - -# Called when the node enters the scene tree for the first time. func _ready(): - pass # Replace with function body. - - + #no layer disible by default + draw_mode = Globals.INFLAYER_LAYERS_HIDDEN func _draw(): @@ -31,6 +27,8 @@ func _draw(): Globals.INFOLAYER_WATER:pass Globals.INFOLAYER_SNOW:pass Globals.INFOLAYER_DISTRICTS:pass + _: #default + push_error("InfoLayer: invalid draw mode '%s' specified!" % draw_mode) # Called every frame. 'delta' is the elapsed time since the previous frame. @@ -67,6 +65,7 @@ func get_draw_mode() -> int: func set_draw_mode(mode:int) -> void: + # change draw mode and redraw if it is not used self.draw_mode = mode if self.draw_mode >= 0: queue_redraw() diff --git a/source/uilayer/Control.gd b/source/uilayer/Control.gd index db8f04e..1aec601 100644 --- a/source/uilayer/Control.gd +++ b/source/uilayer/Control.gd @@ -2,7 +2,8 @@ extends Control # var view = get_node("../View") -signal button_pressed(button_name) +signal construction_button_pressed(button_name, button_type) +signal infolayer_button_pressed(button_type) @onready var debug_info = get_node("DebugContainer/" + Globals.DEBUGINFO_NODE) @onready var minimap:Minimap @@ -20,6 +21,7 @@ var buttons = { "button_demolish": [Vector2(50,50), "Dm"], "button_services": [Vector2(100,50), "Sv"], "button_social": [Vector2(150,50), "So"], + "button_infolayer_parcels": [Vector2(200,50), "Prc"], } func _on_chunk_handler_chunk_stats(chunks, removal_queue): @@ -40,31 +42,35 @@ func _process(_delta): # sends signals which View catches and places selected type of buildings func _on_button_residental_pressed(): - emit_signal("button_pressed", Globals.TYPE_RESIDENTIAL) + emit_signal("construction_button_pressed", Globals.TYPE_RESIDENTIAL, 0) func _on_button_commercial_pressed(): - emit_signal("button_pressed", Globals.TYPE_COMMERCIAL) + emit_signal("construction_button_pressed", Globals.TYPE_COMMERCIAL, 0) func _on_button_industrial_pressed(): - emit_signal("button_pressed", Globals.TYPE_INDUSTRIAL) + emit_signal("construction_button_pressed", Globals.TYPE_INDUSTRIAL, 0) func _on_button_roads_pressed(): - emit_signal("button_pressed", Globals.TYPE_ROADS) + emit_signal("construction_button_pressed", Globals.TYPE_ROADS, 0) func _on_button_demolish_pressed(): - emit_signal("button_pressed", Globals.TYPE_DEMOLISH) + emit_signal("construction_button_pressed", Globals.TYPE_DEMOLISH, 0) func _on_button_services_pressed(): - emit_signal("button_pressed", Globals.TYPE_SERVICES) + emit_signal("construction_button_pressed", Globals.TYPE_SERVICES, 0) func _on_button_social_pressed(): - emit_signal("button_pressed", Globals.TYPE_SOCIAL) + emit_signal("construction_button_pressed", Globals.TYPE_SOCIAL, 0) + + +func _on_button_infolayer_parcels_pressed(): + emit_signal("infolayer_button_pressed", Globals.INFOLAYER_PARCELS) func _on_main_worldgen_ready():