28 lines
969 B
GDScript
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
|