2024-03-13 16:15:55 -05:00
|
|
|
extends AnimatableBody2D
|
|
|
|
|
|
|
|
@onready var tip = $"Tip"
|
2024-03-17 21:56:16 -05:00
|
|
|
@onready var warnSign = $"../WarnSign"
|
|
|
|
@onready var warnBorder = $"../WarnBorder"
|
|
|
|
|
|
|
|
@export var once = false
|
2024-03-13 16:15:55 -05:00
|
|
|
|
|
|
|
var detecting = true
|
|
|
|
|
|
|
|
var velocity = Vector2.ZERO
|
|
|
|
|
|
|
|
@onready var startPos = global_position
|
|
|
|
|
2024-03-17 21:56:16 -05:00
|
|
|
func _on_anim_trigger_body_shape_entered(_body_rid, _body, _body_shape_index, _local_shape_index):
|
2024-03-13 16:15:55 -05:00
|
|
|
if detecting:
|
2024-03-17 21:56:16 -05:00
|
|
|
|
2024-03-13 16:15:55 -05:00
|
|
|
detecting = false
|
|
|
|
var tween = get_tree().create_tween()
|
|
|
|
var space_state = get_world_2d().direct_space_state
|
|
|
|
|
|
|
|
var query = PhysicsRayQueryParameters2D.create(tip.global_position, tip.global_position + Vector2(0, 500).rotated(global_rotation))
|
|
|
|
var result = space_state.intersect_ray(query)
|
|
|
|
|
|
|
|
var finalPos = Vector2(0, 400).rotated(global_rotation)
|
|
|
|
if result:
|
|
|
|
finalPos = result.position - tip.global_position
|
|
|
|
|
2024-03-17 21:56:16 -05:00
|
|
|
warnBorder.points[0] = Vector2(15.5, -0.25)
|
|
|
|
warnBorder.points[1] = Vector2(-15.5, -0.25)
|
|
|
|
warnBorder.points[3] = Vector2(15.5, (finalPos.length() / $"../".scale.y) + 4.5)
|
|
|
|
warnBorder.points[2] = Vector2(-15.5, (finalPos.length() / $"../".scale.y) + 4.5)
|
2024-03-13 16:15:55 -05:00
|
|
|
|
2024-03-17 21:56:16 -05:00
|
|
|
warnSign.global_rotation = 0
|
|
|
|
warnSign.global_position = tip.global_position + (finalPos / 2) + Vector2(0, 4.5).rotated(global_rotation)
|
2024-03-13 16:15:55 -05:00
|
|
|
|
2024-03-17 21:56:16 -05:00
|
|
|
tween.set_trans(Tween.TRANS_CUBIC)
|
|
|
|
tween.set_ease(Tween.EASE_IN)
|
2024-03-13 16:15:55 -05:00
|
|
|
|
|
|
|
tween.set_parallel(true)
|
2024-03-17 21:56:16 -05:00
|
|
|
tween.tween_property(self, "global_position", global_position + finalPos, 0.4).set_delay(0.05)
|
|
|
|
tween.tween_property(self, "velocity", Vector2(0, 400).rotated(global_rotation), 0.4).set_ease(Tween.EASE_OUT)
|
2024-03-13 16:15:55 -05:00
|
|
|
|
2024-03-17 21:56:16 -05:00
|
|
|
tween.tween_property(warnSign, "modulate", Color8(255, 255, 255, 255), 0.3).set_ease(Tween.EASE_OUT)
|
|
|
|
tween.tween_property(warnBorder, "modulate", Color8(255, 0, 0, 255), 0.3).set_ease(Tween.EASE_OUT)
|
|
|
|
tween.chain()
|
|
|
|
tween.tween_property(warnSign, "modulate", Color8(255, 255, 255, 0), 0.5).set_ease(Tween.EASE_IN)
|
|
|
|
tween.tween_property(warnBorder, "modulate", Color8(255, 0, 0, 0), 0.5).set_ease(Tween.EASE_IN)
|
2024-03-13 16:15:55 -05:00
|
|
|
|
2024-03-17 21:56:16 -05:00
|
|
|
if not once:
|
|
|
|
await get_tree().create_timer(0.5).timeout
|
2024-03-13 16:15:55 -05:00
|
|
|
|
2024-03-17 21:56:16 -05:00
|
|
|
var launcherHitbox = $Tip/LauncherHitbox
|
|
|
|
var hitTable = launcherHitbox.get_overlapping_bodies()
|
|
|
|
for object in hitTable:
|
|
|
|
if object is CharacterBody2D and "velocity" in object and object.has_method("forceLaunch"):
|
|
|
|
object.forceLaunch(velocity.x * 3)
|
|
|
|
#object.velocity.y = velocity.y * 1.5
|
|
|
|
if velocity.x < 5:
|
|
|
|
object.forceLowGrav = true
|
|
|
|
|
|
|
|
tween = get_tree().create_tween()
|
|
|
|
tween.set_parallel(true)
|
|
|
|
tween.set_trans(Tween.TRANS_SINE)
|
|
|
|
tween.set_ease(Tween.EASE_IN)
|
|
|
|
|
|
|
|
tween.tween_property(warnSign, "modulate", Color8(255, 255, 255, 0), 0.6)
|
|
|
|
|
|
|
|
tween.tween_property(self, "global_position", startPos, 1).set_delay(0.5)
|
|
|
|
tween.tween_property(self, "velocity", Vector2.ZERO, 0.5).set_delay(0.25)
|
|
|
|
|
|
|
|
#await get_tree().create_timer(0.25).timeout
|
|
|
|
|
|
|
|
#constant_linear_velocity = Vector2.ZERO
|
2024-03-13 16:15:55 -05:00
|
|
|
|
2024-03-17 21:56:16 -05:00
|
|
|
await tween.finished
|
|
|
|
|
|
|
|
detecting = true
|
|
|
|
|
|
|
|
#func _on_launcher_hitbox_body_shape_entered(body_rid, body, body_shape_index, local_shape_index):
|
|
|
|
#if "velocity" in body:
|
|
|
|
#body.velocity /= 10
|