summaryrefslogtreecommitdiff
path: root/Scripts/Player
diff options
context:
space:
mode:
Diffstat (limited to 'Scripts/Player')
-rw-r--r--Scripts/Player/PlayerAction.gd46
-rw-r--r--Scripts/Player/PlayerAction.gd.uid1
-rw-r--r--Scripts/Player/PlayerDeath.gd8
-rw-r--r--Scripts/Player/PlayerDeath.gd.uid1
-rw-r--r--Scripts/Player/PlayerInventory.gd89
-rw-r--r--Scripts/Player/PlayerInventory.gd.uid1
-rw-r--r--Scripts/Player/PlayerMovement.gd146
-rw-r--r--Scripts/Player/PlayerMovement.gd.uid1
8 files changed, 293 insertions, 0 deletions
diff --git a/Scripts/Player/PlayerAction.gd b/Scripts/Player/PlayerAction.gd
new file mode 100644
index 0000000..989823a
--- /dev/null
+++ b/Scripts/Player/PlayerAction.gd
@@ -0,0 +1,46 @@
+extends Node
+class_name PlayerAction
+
+@export var plr_sprite : Sprite2D
+@export var hand_pivot : Node2D
+@export var curr_weapon : Node2D
+@export var machette_pivot : Node2D
+@export var machette : Node2D
+
+var can_attack : bool = true
+
+var delta_pos : Vector2
+
+func _process(_delta: float) -> void:
+ if UIConnector.is_inv_open:
+ return
+
+ var hpos : Vector2 = hand_pivot.get_global_transform_with_canvas().get_origin()
+ var mouse_position : Vector2 = get_viewport().get_mouse_position()
+ delta_pos = mouse_position - hpos
+
+ var angle = rad_to_deg(atan2(delta_pos.y, delta_pos.x)) - 90
+ hand_pivot.rotation_degrees = angle
+ if angle <= 0 && angle >= -180:
+ if machette_pivot.rotation_degrees < 0: machette_pivot.rotation_degrees *= -1
+ if machette.scale.x < 0: machette.scale.x *= -1
+ elif (angle <= -180 && angle >= -270) || (angle >= 0 && angle <= 90):
+ if machette_pivot.rotation_degrees > 0: machette_pivot.rotation_degrees *= -1
+ if machette.scale.x > 0: machette.scale.x *= -1
+
+func _input(_event: InputEvent) -> void:
+ if UIConnector.is_inv_open:
+ return
+
+ if Input.is_action_just_pressed("action") && can_attack:
+ if delta_pos.x < 0 && !plr_sprite.flip_h:
+ $"../PlayerMovement".look_left(true)
+ elif delta_pos.x > 0 && plr_sprite.flip_h:
+ $"../PlayerMovement".look_right(true)
+
+ curr_weapon.action()
+ can_attack = false
+ $"Cooldown".start()
+
+func _on_cooldown_timeout() -> void:
+ can_attack = true
diff --git a/Scripts/Player/PlayerAction.gd.uid b/Scripts/Player/PlayerAction.gd.uid
new file mode 100644
index 0000000..00777f8
--- /dev/null
+++ b/Scripts/Player/PlayerAction.gd.uid
@@ -0,0 +1 @@
+uid://f4kopug5xiuj
diff --git a/Scripts/Player/PlayerDeath.gd b/Scripts/Player/PlayerDeath.gd
new file mode 100644
index 0000000..5df4fbf
--- /dev/null
+++ b/Scripts/Player/PlayerDeath.gd
@@ -0,0 +1,8 @@
+extends Node
+
+@export var player : CharacterBody2D
+
+func _on_player_entity_death() -> void:
+ player.visible = false
+ player.process_mode = Node.PROCESS_MODE_DISABLED
+ UIConnector.death()
diff --git a/Scripts/Player/PlayerDeath.gd.uid b/Scripts/Player/PlayerDeath.gd.uid
new file mode 100644
index 0000000..1d6d4b1
--- /dev/null
+++ b/Scripts/Player/PlayerDeath.gd.uid
@@ -0,0 +1 @@
+uid://dovejm1jxwfrp
diff --git a/Scripts/Player/PlayerInventory.gd b/Scripts/Player/PlayerInventory.gd
new file mode 100644
index 0000000..76ad2ec
--- /dev/null
+++ b/Scripts/Player/PlayerInventory.gd
@@ -0,0 +1,89 @@
+extends Node
+class_name PlayerInventory
+
+@export var action : PlayerAction
+@export var machette_pivot : Node2D
+
+@export var bow : Node2D
+@export var bow_cooldown : float = 0.35
+@export var machette : Node2D
+@export var machette_cooldown : float = 0.2
+
+@export var masks : Array[Node2D]
+
+
+enum MaskType {
+ Dash = 0,
+ Grapple = 1,
+ Freeze = 3,
+ Minions = 2,
+}
+
+var prev_inv : Array[int] = [-1, -1, -1, -1, -1, -1]
+
+@export var mask_inventory : Array[int] = [-1, -1, -1, -1, -1, -1]
+
+var has_machette : bool = false
+var using_bow : bool = true
+
+func _ready():
+ UIConnector.update_masks(mask_inventory)
+
+func _input(_event: InputEvent) -> void:
+ if Input.is_action_just_pressed("switch_tool") && has_machette:
+ UIConnector.switch_tool()
+
+ if using_bow:
+ action.curr_weapon = machette
+ machette_pivot.visible = true
+ bow.visible = false
+ machette.process_mode = Node.PROCESS_MODE_INHERIT
+ bow.process_mode = Node.PROCESS_MODE_DISABLED
+ action.get_node("Cooldown").wait_time = machette_cooldown
+ else:
+ action.curr_weapon = bow
+ machette_pivot.visible = false
+ bow.visible = true
+ machette.process_mode = Node.PROCESS_MODE_DISABLED
+ bow.process_mode = Node.PROCESS_MODE_INHERIT
+ action.get_node("Cooldown").wait_time = bow_cooldown
+
+ using_bow = !using_bow
+
+ if Input.is_action_just_pressed("switch_mask"):
+ var curr_mask = mask_inventory[0]
+ mask_inventory[0] = mask_inventory[1]
+ mask_inventory[1] = curr_mask
+ UIConnector.update_masks(mask_inventory)
+ $"../PlayerMovement".grapple_velocity = Vector2.ZERO
+
+func _process(_delta: float) -> void:
+ if prev_inv.hash() != mask_inventory.hash():
+ print("changed")
+ for mask in masks:
+ mask.visible = false
+ mask.process_mode = Node.PROCESS_MODE_DISABLED
+ if mask_inventory[0] != -1:
+ print("YEAH")
+ masks[mask_inventory[0]].visible = true
+ masks[mask_inventory[0]].process_mode = Node.PROCESS_MODE_INHERIT
+
+ prev_inv = mask_inventory.duplicate()
+
+func give_machette() -> void:
+ has_machette = true
+ UIConnector.add_machette()
+
+func ungive_machette() -> void:
+ has_machette = false
+ UIConnector.remove_machette()
+
+func add_mask(mask : MaskType):
+ print("the mask is ", mask)
+ if !(mask in mask_inventory):
+ for i in range(2, 6):
+ if mask_inventory[i] == -1:
+ mask_inventory[i] = mask
+ break
+ UIConnector.update_masks(mask_inventory)
+ UIConnector.show_mask_bubble()
diff --git a/Scripts/Player/PlayerInventory.gd.uid b/Scripts/Player/PlayerInventory.gd.uid
new file mode 100644
index 0000000..e1d5bbd
--- /dev/null
+++ b/Scripts/Player/PlayerInventory.gd.uid
@@ -0,0 +1 @@
+uid://bmx4fy618slwb
diff --git a/Scripts/Player/PlayerMovement.gd b/Scripts/Player/PlayerMovement.gd
new file mode 100644
index 0000000..648a5e6
--- /dev/null
+++ b/Scripts/Player/PlayerMovement.gd
@@ -0,0 +1,146 @@
+extends Node
+class_name PlayerMovement
+
+@export var character : CharacterBody2D
+
+@export var speed = 300.0
+@export var jump_vel = -400.0
+
+@export var plr_sprite : Sprite2D
+@export var mask_node : Node2D
+@export var hand_pivot : Node2D
+
+@export var cape : Sprite2D
+@export var skew_min : float
+@export var skew_max : float
+@export var skew_maxmax : float
+@export var lerp_step_on : float
+@export var lerp_step_off : float
+
+var target_skew = 0.0
+var curr_step = 0.0
+
+@export var min_knock = 100
+@export var knockback_decay = 1.3
+var knockback : Vector2
+
+var dir_manipulated : bool = false
+
+var dash_timer : Timer
+var dashing : bool = false
+var dash_dir : int = 0
+@export var dash_time : float = 0.2
+@export var dash_speed : float = 1500
+
+var grapple_velocity : Vector2 = Vector2.ZERO
+var grapple_x_vel_aft : float = 0
+
+func _ready() -> void:
+ dash_timer = Timer.new()
+ dash_timer.wait_time = dash_time
+ dash_timer.one_shot = true
+ dash_timer.timeout.connect(_on_dash_end)
+ add_child(dash_timer)
+
+ manipulate_timer = Timer.new()
+ add_child(manipulate_timer)
+ manipulate_timer.wait_time = 0.5
+ manipulate_timer.one_shot = true
+ manipulate_timer.timeout.connect(_on_manipulate_end)
+
+
+func _physics_process(delta: float) -> void:
+ if knockback.length_squared() > min_knock**2:
+ knockback /= knockback_decay
+ character.velocity = knockback
+ character.move_and_slide()
+ return
+
+ if grapple_velocity != Vector2.ZERO:
+ character.velocity = grapple_velocity
+ character.move_and_slide()
+ return
+
+ # Add the gravity.
+ if not character.is_on_floor():
+ character.velocity += character.get_gravity() * delta
+
+ if dashing:
+ character.velocity.x = 1000 * dash_dir
+ character.move_and_slide()
+ return
+
+ # Handle jump.
+ if Input.is_action_just_pressed("jump") and character.is_on_floor():
+ character.velocity.y = jump_vel
+
+ # Get the input direction and handle the movement/deceleration.
+ # As good practice, you should replace UI actions with custom gameplay actions.
+ var direction := Input.get_axis("left", "right")
+ if direction:
+ grapple_x_vel_aft = 0
+ character.velocity.x = direction * speed
+ if character.velocity.y < 0:
+ target_skew = skew_min
+ elif character.is_on_floor():
+ target_skew = skew_max
+ curr_step = lerp_step_on
+ else:
+ if grapple_x_vel_aft != 0:
+ grapple_x_vel_aft = move_toward(character.velocity.x, 0, speed * delta)
+ character.velocity.x = grapple_x_vel_aft
+ else:
+ character.velocity.x = move_toward(character.velocity.x, 0, speed)
+ target_skew = skew_min
+ curr_step = lerp_step_off
+
+ if character.velocity.y > 0:
+ target_skew = skew_maxmax
+ curr_step = lerp_step_off
+
+ cape.skew = lerp_angle(cape.skew, deg_to_rad(target_skew), curr_step)
+
+ if direction == -1 && !dir_manipulated: look_left()
+ elif direction == 1 && !dir_manipulated: look_right()
+
+ character.move_and_slide()
+
+var manipulate_timer : Timer
+
+func look_left(manipulate : bool = false) -> void:
+ if manipulate:
+ dir_manipulated = true
+ manipulate_timer.start()
+
+ if cape.skew > 0: cape.skew = -cape.skew
+ if skew_min > 0: skew_min = -skew_min
+ if skew_max > 0: skew_max = -skew_max
+ if skew_maxmax > 0: skew_maxmax = -skew_maxmax
+ if mask_node.position.x > 0: mask_node.position.x *= -1
+ if hand_pivot.position.x > 0: hand_pivot.position.x *= -1
+ plr_sprite.flip_h = true
+
+
+func look_right(manipulate : bool = false) -> void:
+ if manipulate:
+ dir_manipulated = true
+ manipulate_timer.start()
+
+ if cape.skew < 0: cape.skew = -cape.skew
+ if skew_min < 0: skew_min = -skew_min
+ if skew_max < 0: skew_max = -skew_max
+ if skew_maxmax < 0: skew_maxmax = -skew_maxmax
+ if mask_node.position.x < 0: mask_node.position.x *= -1
+ if hand_pivot.position.x < 0: hand_pivot.position.x *= -1
+ plr_sprite.flip_h = false
+
+func dash(dir):
+ dashing = true
+ dash_dir = dir
+ dash_timer.start()
+
+func _on_manipulate_end() -> void:
+ dir_manipulated = false
+
+func _on_dash_end() -> void:
+ dashing = false
diff --git a/Scripts/Player/PlayerMovement.gd.uid b/Scripts/Player/PlayerMovement.gd.uid
new file mode 100644
index 0000000..8636702
--- /dev/null
+++ b/Scripts/Player/PlayerMovement.gd.uid
@@ -0,0 +1 @@
+uid://d1e1dfcab58lk