extends Node2D @export var area : Area2D @export var area_detect : Area2D @export var line : Line2D @export var grapple_speed : float var thing : Node2D = null var player_movement : PlayerMovement var just_released : bool = false func _ready() -> void: player_movement = get_node("../../PlayerMovement") func _input(event: InputEvent) -> void: if event is InputEventMouseMotion: var delta_pos = event.position - get_global_transform_with_canvas().origin area_detect.rotation = atan2(delta_pos.y, delta_pos.x) if Input.is_action_just_pressed("action_secondary") && event is InputEventMouseButton: var delta_pos = event.position - get_global_transform_with_canvas().origin area.rotation = atan2(delta_pos.y, delta_pos.x) area.monitoring = true if Input.is_action_just_released("action_secondary"): print("hi") area.monitoring = false thing = null var init_delta : Vector2 var x_vel func _process(_delta: float) -> void: if !thing: if just_released: player_movement.grapple_x_vel_aft = player_movement.speed player_movement.grapple_velocity = Vector2.ZERO line.points[1] = Vector2.ZERO x_vel = null just_released = false return area.monitoring = false var delta_pos = thing.global_position - global_position print(delta_pos.length(), " ", delta_pos.y, " ", delta_pos.x) line.points[1] = delta_pos var normalised = delta_pos.normalized() if !x_vel: x_vel = normalised.x if x_vel > 0.3: x_vel = .9 elif x_vel < -0.3: x_vel = -.9 if delta_pos.length() < 100 || ((x_vel > 0 && delta_pos.x < 0) || (x_vel < 0 && delta_pos.x > 0)): just_released = true thing = null player_movement.grapple_velocity = Vector2(x_vel, normalised.y * 1.1) * grapple_speed func _on_area_2d_body_entered(body: Node2D) -> void: print("grapple", body) thing = body area.monitoring = false init_delta = thing.global_position - global_position func _on_detect_area_2d_body_exited(body:Node2D) -> void: if body is Grappleable: body.dehighlight() func _on_detect_area_2d_body_entered(body:Node2D) -> void: if body is Grappleable: body.highlight()