55 lines
2 KiB
GDScript
55 lines
2 KiB
GDScript
extends Node2D
|
|
|
|
# Same informal interface as GasGiantVisual/RockyPlanetVisual - configure(),
|
|
# extractor_anchor(), animates via its own _process(). Deliberately angular
|
|
# and armoured rather than a natural silhouette (#63: this is an ENEMY
|
|
# installation, not a celestial body), with a rotating dish and blinking
|
|
# warning lights to read as occupied/hostile at a glance.
|
|
|
|
var phase: float = 0.0
|
|
|
|
const RADIUS: float = 108.0
|
|
const HULL_COLOR: Color = Color(0.55, 0.1, 0.08)
|
|
const CORE_COLOR: Color = Color(0.9, 0.25, 0.18)
|
|
const WARNING_COLOR: Color = Color(1.0, 0.2, 0.15)
|
|
const DARK_CORE: Color = Color(0.14, 0.02, 0.02)
|
|
|
|
|
|
func configure(_shape_seed: int) -> void:
|
|
queue_redraw()
|
|
|
|
|
|
func extractor_anchor() -> Vector2:
|
|
return Vector2(0.0, -(RADIUS + 40.0))
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
phase += delta
|
|
queue_redraw()
|
|
|
|
|
|
func _draw() -> void:
|
|
var hull: PackedVector2Array = PackedVector2Array()
|
|
for i in range(6):
|
|
var angle: float = TAU * float(i) / 6.0
|
|
hull.append(Vector2(cos(angle), sin(angle)) * RADIUS)
|
|
NeonDraw.draw_glowing_polygon(self, hull, HULL_COLOR, 0.85, DARK_CORE)
|
|
|
|
var inner: PackedVector2Array = PackedVector2Array()
|
|
for i in range(6):
|
|
var angle: float = TAU * float(i) / 6.0 + PI / 6.0
|
|
inner.append(Vector2(cos(angle), sin(angle)) * RADIUS * 0.55)
|
|
NeonDraw.draw_glowing_polygon(self, inner, CORE_COLOR, 0.9, DARK_CORE)
|
|
|
|
# A slow-rotating dish - reads as actively transmitting, not derelict.
|
|
var dish_angle: float = phase * 0.6
|
|
var dish_tip: Vector2 = Vector2(cos(dish_angle), sin(dish_angle)) * RADIUS * 1.35
|
|
NeonDraw.draw_glowing_line(self, Vector2.ZERO, dish_tip, CORE_COLOR, 0.8, 0.55, DARK_CORE)
|
|
NeonDraw.draw_glowing_circle(self, dish_tip, 11.0, CORE_COLOR, 1.0, DARK_CORE)
|
|
|
|
# Blinking hull-corner warning lights.
|
|
var blink: float = 0.4 + 0.6 * absf(sin(phase * 4.0))
|
|
for i in range(6):
|
|
var angle: float = TAU * float(i) / 6.0
|
|
var at: Vector2 = Vector2(cos(angle), sin(angle)) * RADIUS
|
|
NeonDraw.draw_glowing_circle(self, at, 5.0, WARNING_COLOR, blink, DARK_CORE)
|