Randoloot/scripts/game/weapon_camera_impulse.gd
2026-10-25 22:38:13 +01:00

28 lines
969 B
GDScript

extends Node
var _strength := 0.0
var _age := 0.0
var _last := Vector2.ZERO
static func kick(ship: Node, strength := 1.2) -> void:
var camera := ship.get_node_or_null("Camera2D") as Camera2D
if camera == null or not camera.enabled: return
var impulse := camera.get_node_or_null("WeaponCameraImpulse")
if impulse == null:
impulse = Node.new()
impulse.name = "WeaponCameraImpulse"
impulse.set_script(load("res://scripts/game/weapon_camera_impulse.gd"))
camera.add_child(impulse)
impulse._strength = minf(2.0,strength)
impulse._age = 0.0
func _process(delta: float) -> void:
var camera := get_parent() as Camera2D
camera.offset -= _last
_last = Vector2.ZERO
_age += delta
if _age>=0.16 or bool(camera.get_parent().get("_is_destroyed")):
queue_free()
return
_last = Vector2(sin(_age*97),cos(_age*83))*_strength*pow(1.0-_age/0.16,2)
camera.offset += _last
func _exit_tree() -> void:
if is_instance_valid(get_parent()): get_parent().offset -= _last