class_name PaletteEntryButton extends Control # One selectable tile in the setup editor's palette: either the generic # capture-point marker, or one enemy definition's own hull/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. signal pressed @export var is_capture_point: bool = false @export var enemy_definition: Resource @export var selected: bool = false: set = set_selected const RING_COLOR: Color = Color(0.55, 0.85, 1.0) 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 is_capture_point: var points: PackedVector2Array = PackedVector2Array() for i in range(16): var angle: float = float(i) / 16.0 * TAU points.append(center + Vector2(cos(angle), sin(angle)) * (size.x * 0.28)) NeonDraw.draw_glowing_polygon(self, points, RING_COLOR, 0.8) elif enemy_definition != null: var scale_factor: float = (size.x * 0.5) / 28.0 var points: PackedVector2Array = PackedVector2Array() for p in enemy_definition.hull_points: points.append(center + p * scale_factor * 0.6) NeonDraw.draw_glowing_polygon(self, points, enemy_definition.glow_color, 0.9)