class_name PaletteEntryButton extends Control # One selectable tile in the setup editor's palette: one enemy definition's # own hull and colour. Drawn directly from the definition rather than a fixed # icon set, so a new EnemyDefinitions entry shows up automatically with no # editor code change. #211 removed the capture-point tile that used to sit # alongside them. signal pressed const ENEMY_DEFINITIONS = preload("res://enemies/EnemyDefinitions.gd") @export var enemy_definition: Resource @export var selected: bool = false: set = set_selected func set_selected(value: bool) -> void: selected = value queue_redraw() func _ready() -> void: queue_redraw() func _gui_input(event: InputEvent) -> void: if event is InputEventScreenTouch and not event.pressed \ and Rect2(Vector2.ZERO, size).has_point(event.position): pressed.emit() elif event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and not event.pressed: pressed.emit() func _draw() -> void: var center: Vector2 = size / 2.0 var margin: float = 4.0 var frame: PackedVector2Array = PackedVector2Array([ Vector2(margin, margin), Vector2(size.x - margin, margin), Vector2(size.x - margin, size.y - margin), Vector2(margin, size.y - margin), ]) var frame_color: Color = Color(1.0, 0.95, 0.9) if selected else Color(0.4, 0.45, 0.5) NeonDraw.draw_glowing_polygon(self, frame, frame_color, 0.85 if selected else 0.5) if enemy_definition != null: # Same routine as the marker and the enemy, so the button previews # what will actually be placed. var scale_factor: float = (size.x * 0.5) / 28.0 * 0.6 ENEMY_DEFINITIONS.draw_definition(self, enemy_definition, enemy_definition.glow_color, scale_factor, center)