Files
Station-0/scripts/enemies/enemy_projectile.gd
T
Station 0 Dev 342175f4c3 Initial commit — Station 0 vertical slice in progress
Includes full design documentation (ARCHITECTURE, DESIGN_NOTES, CONTENT_SPEC, PRODUCTION_NOTES)
and active Godot 4 / GDScript codebase. Core systems built: player, floor generation,
room system, enemy base, body part upgrades, run manager, save system, HUD, EventBus.
2026-03-04 12:33:05 -05:00

45 lines
1.4 KiB
GDScript

extends Area2D
# ---------------------------------------------------------------------------
# Shared enemy projectile — used by Repeater (linear) and Anchor (homing)
# ---------------------------------------------------------------------------
var direction: Vector2 = Vector2.RIGHT
var speed: float = 200.0
var damage: float = 1.0
var max_range: float = 500.0
# Homing — disabled by default
var homing: bool = false
var homing_target: Node2D = null
const HOMING_STRENGTH := 2.0 # radians/second turn rate
var _distance_traveled: float = 0.0
func _ready() -> void:
rotation = direction.angle()
body_entered.connect(_on_body_entered)
func _physics_process(delta: float) -> void:
if homing and homing_target != null and is_instance_valid(homing_target):
var to_target := (homing_target.global_position - global_position).normalized()
direction = direction.lerp(to_target, HOMING_STRENGTH * delta).normalized()
rotation = direction.angle()
var move := direction * speed * delta
position += move
_distance_traveled += move.length()
if _distance_traveled >= max_range:
queue_free()
func _on_body_entered(body: Node) -> void:
if body.is_in_group("player"):
body.take_damage(damage)
queue_free()
elif body is StaticBody2D:
queue_free()
func _draw() -> void:
draw_circle(Vector2.ZERO, 4.0, Color(1.0, 0.4, 0.1))