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