spaceship/PaletteEntryButton.gd

56 lines
2 KiB
GDScript3
Raw Normal View History

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)