extends CanvasLayer var selected_button: TextureRect : set(value): if selected_button: (selected_button.material as ShaderMaterial).set_shader_parameter("adjust", 0.0) selected_button = value (selected_button.material as ShaderMaterial).set_shader_parameter("adjust", -1.0) %CurrentButton.text = selected_button.tooltip_text func _ready() -> void: Game.score_changed.connect(func(): %Score.text = str(Game.score) ) Game.speed_changed.connect(func(): %Speed.text = str(Game.speed).pad_decimals(1) + "x" ) create_minimap() func create_minimap(): var maps := get_tree().get_nodes_in_group("map") var image := Image.create_empty(%Minimap.size.x, $"%Minimap".size.y, false, Image.FORMAT_RGB8) var minimap_scale = Vector2(image.get_size()) / get_viewport().get_visible_rect().size for map: TileMapLayer in maps: for cell_coords in map.get_used_cells(): var tile = map.get_cell_tile_data(cell_coords) var tile_scale = minimap_scale * Vector2(map.tile_set.tile_size) image.fill_rect( Rect2(Vector2(cell_coords) * tile_scale, (tile_scale + Vector2(1,1)).max(Vector2(1, 1))), tile.get_custom_data("color") ) %Minimap.texture = ImageTexture.create_from_image(image) var markers := {} var timer = Timer.new() timer.wait_time = 0.5 timer.one_shot = false timer.autostart = true timer.timeout.connect(func(): for node in markers.keys(): if is_instance_valid(node): markers[node].position = ( node.global_position * minimap_scale ) ) %Minimap.add_child(timer) get_tree().current_scene.child_entered_tree.connect(func(node: Node): if node is Unit: var texture = Image.create_empty(1, 1, false, Image.FORMAT_RGB8) texture.set_pixel(0, 0, Color("#fff")) var sprite = Sprite2D.new() sprite.texture = ImageTexture.create_from_image(texture) sprite.position = Vector2.ZERO %Minimap.add_child(sprite) markers[node] = sprite node.tree_exiting.connect(func(): markers.erase(node) sprite.queue_free() ) ) func _on_button_blocker_gui_input(event: InputEvent) -> void: if event.is_action_pressed("select"): Game.selected_unit_type = preload("res://Units/Blocker.tscn") selected_button = %ButtonBlocker func _on_button_digger_gui_input(event: InputEvent) -> void: if event.is_action_pressed("select"): Game.selected_unit_type = preload("res://Units/Digger.tscn") selected_button = %ButtonDigger func _on_button_miner_gui_input(event: InputEvent) -> void: if event.is_action_pressed("select"): Game.selected_unit_type = preload("res://Units/Miner.tscn") selected_button = %ButtonMiner func _on_button_basher_gui_input(event: InputEvent) -> void: if event.is_action_pressed("select"): Game.selected_unit_type = preload("res://Units/Basher.tscn") selected_button = %ButtonBasher func _on_button_floater_gui_input(event: InputEvent) -> void: if event.is_action_pressed("select"): #Game.selected_unit_type = preload("res://Units/Floater.tscn") selected_button = %ButtonFloater func _on_button_builder_gui_input(event: InputEvent) -> void: if event.is_action_pressed("select"): #Game.selected_unit_type = preload("res://Units/Builder.tscn") selected_button = %ButtonBuilder func _on_button_climber_gui_input(event: InputEvent) -> void: if event.is_action_pressed("select"): Game.selected_unit_type = preload("res://Units/Climber.tscn") selected_button = %ButtonClimber func _on_button_plus_gui_input(event: InputEvent) -> void: if event.is_action_pressed("select"): Game.speed = min(Game.speed + 0.5, 5) func _on_button_minus_gui_input(event: InputEvent) -> void: if event.is_action_pressed("select"): Game.speed = max(Game.speed - 0.5, 0.5)