summaryrefslogtreecommitdiff
path: root/Scripts/Mask/GrappleMask.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Scripts/Mask/GrappleMask.gd')
-rw-r--r--Scripts/Mask/GrappleMask.gd78
1 files changed, 78 insertions, 0 deletions
diff --git a/Scripts/Mask/GrappleMask.gd b/Scripts/Mask/GrappleMask.gd
new file mode 100644
index 0000000..35df89a
--- /dev/null
+++ b/Scripts/Mask/GrappleMask.gd
@@ -0,0 +1,78 @@
+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()
+