added ladder script
This commit is contained in:
@@ -6,8 +6,8 @@
|
|||||||
size = Vector3(1, 10, 1)
|
size = Vector3(1, 10, 1)
|
||||||
|
|
||||||
[node name="LadderCollisionCheck" type="Area3D"]
|
[node name="LadderCollisionCheck" type="Area3D"]
|
||||||
collision_layer = 2
|
collision_layer = 6
|
||||||
collision_mask = 2
|
collision_mask = 6
|
||||||
script = ExtResource("1_ugi45")
|
script = ExtResource("1_ugi45")
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
@@ -17,5 +17,8 @@ shape = SubResource("BoxShape3D_gxu3i")
|
|||||||
[node name="CollisionMidpoint" type="Node3D" parent="."]
|
[node name="CollisionMidpoint" type="Node3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
|
||||||
|
|
||||||
|
[node name="LadderPlayerPos" type="Marker3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.435783)
|
||||||
|
|
||||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||||
[connection signal="body_exited" from="." to="." method="_on_body_exited"]
|
[connection signal="body_exited" from="." to="." method="_on_body_exited"]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=43 format=3 uid="uid://drwae3loscbw7"]
|
[gd_scene load_steps=44 format=3 uid="uid://drwae3loscbw7"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bieeh1iro4ji1" path="res://scripts/player.gd" id="1_x7wms"]
|
[ext_resource type="Script" uid="uid://bieeh1iro4ji1" path="res://scripts/player.gd" id="1_x7wms"]
|
||||||
[ext_resource type="Script" uid="uid://linvnr16djav" path="res://scripts/PlayerStateMachine.gd" id="2_1npgd"]
|
[ext_resource type="Script" uid="uid://linvnr16djav" path="res://scripts/PlayerStateMachine.gd" id="2_1npgd"]
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
[ext_resource type="Script" uid="uid://bgj2bqb5dys41" path="res://scripts/player_wall_running.gd" id="6_1npgd"]
|
[ext_resource type="Script" uid="uid://bgj2bqb5dys41" path="res://scripts/player_wall_running.gd" id="6_1npgd"]
|
||||||
[ext_resource type="Script" uid="uid://boyl3qkg4j4vc" path="res://scripts/player_ground_pound.gd" id="7_2asft"]
|
[ext_resource type="Script" uid="uid://boyl3qkg4j4vc" path="res://scripts/player_ground_pound.gd" id="7_2asft"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bki17g7j4kqn4" path="res://assets/Audio/PickupSound Mixdown 3.wav" id="8_dwqsx"]
|
[ext_resource type="AudioStream" uid="uid://bki17g7j4kqn4" path="res://assets/Audio/PickupSound Mixdown 3.wav" id="8_dwqsx"]
|
||||||
|
[ext_resource type="Script" uid="uid://bb7u0nnktowwp" path="res://scripts/player_on_ladder.gd" id="8_vgdha"]
|
||||||
[ext_resource type="Shader" uid="uid://djbvmc8hurccm" path="res://assets/Shaders/speedlines.gdshader" id="10_5hu7c"]
|
[ext_resource type="Shader" uid="uid://djbvmc8hurccm" path="res://assets/Shaders/speedlines.gdshader" id="10_5hu7c"]
|
||||||
[ext_resource type="AudioStream" uid="uid://dyd272r7n2ecd" path="res://assets/Audio/footsteps-shoes-jump-land-beach-sand-SBA-300118001.wav" id="10_tn0pn"]
|
[ext_resource type="AudioStream" uid="uid://dyd272r7n2ecd" path="res://assets/Audio/footsteps-shoes-jump-land-beach-sand-SBA-300118001.wav" id="10_tn0pn"]
|
||||||
[ext_resource type="AudioStream" uid="uid://cjpvibojo13qv" path="res://assets/Audio/clock-ticking-exact-looping-SBA-300062891.wav" id="11_6k4fy"]
|
[ext_resource type="AudioStream" uid="uid://cjpvibojo13qv" path="res://assets/Audio/clock-ticking-exact-looping-SBA-300062891.wav" id="11_6k4fy"]
|
||||||
@@ -140,36 +141,39 @@ script = ExtResource("1_x7wms")
|
|||||||
SENSITIVITY = 0.008
|
SENSITIVITY = 0.008
|
||||||
weapon_holder = NodePath("Head/Recoil/Camera3D/WeaponHolder")
|
weapon_holder = NodePath("Head/Recoil/Camera3D/WeaponHolder")
|
||||||
|
|
||||||
[node name="States" type="Node" parent="." node_paths=PackedStringArray("character", "initial_state")]
|
[node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("character", "initial_state")]
|
||||||
script = ExtResource("2_1npgd")
|
script = ExtResource("2_1npgd")
|
||||||
character = NodePath("..")
|
character = NodePath("..")
|
||||||
initial_state = NodePath("On Foot")
|
initial_state = NodePath("On Foot")
|
||||||
|
|
||||||
[node name="On Foot" type="Node" parent="States"]
|
[node name="On Foot" type="Node" parent="StateMachine"]
|
||||||
script = ExtResource("3_ib4e7")
|
script = ExtResource("3_ib4e7")
|
||||||
metadata/_custom_type_script = "uid://dk0vg5btak80a"
|
metadata/_custom_type_script = "uid://dk0vg5btak80a"
|
||||||
|
|
||||||
[node name="Crouched" type="Node" parent="States"]
|
[node name="Crouched" type="Node" parent="StateMachine"]
|
||||||
script = ExtResource("4_67mtf")
|
script = ExtResource("4_67mtf")
|
||||||
move_speed = 5.0
|
move_speed = 5.0
|
||||||
move_transition_speed = 4.0
|
move_transition_speed = 4.0
|
||||||
|
|
||||||
[node name="In Air" type="Node" parent="States"]
|
[node name="In Air" type="Node" parent="StateMachine"]
|
||||||
script = ExtResource("5_m0ick")
|
script = ExtResource("5_m0ick")
|
||||||
|
|
||||||
[node name="Wall Running" type="Node" parent="States"]
|
[node name="Wall Running" type="Node" parent="StateMachine"]
|
||||||
script = ExtResource("6_1npgd")
|
script = ExtResource("6_1npgd")
|
||||||
move_speed = 15.0
|
move_speed = 15.0
|
||||||
move_transition_speed = 15.0
|
|
||||||
|
|
||||||
[node name="Ground Pound" type="Node" parent="States"]
|
[node name="Ground Pound" type="Node" parent="StateMachine"]
|
||||||
script = ExtResource("7_2asft")
|
script = ExtResource("7_2asft")
|
||||||
|
|
||||||
[node name="Knocked" type="Node" parent="States"]
|
[node name="Knocked" type="Node" parent="StateMachine"]
|
||||||
|
|
||||||
[node name="Stunned" type="Node" parent="States"]
|
[node name="Stunned" type="Node" parent="StateMachine"]
|
||||||
|
|
||||||
[node name="On Ladder" type="Node" parent="States"]
|
[node name="On Ladder" type="Node" parent="StateMachine"]
|
||||||
|
script = ExtResource("8_vgdha")
|
||||||
|
move_speed = 5.0
|
||||||
|
move_transition_speed = 3.0
|
||||||
|
can_climb_new_ladder = false
|
||||||
|
|
||||||
[node name="HealthIndicator" type="ColorRect" parent="."]
|
[node name="HealthIndicator" type="ColorRect" parent="."]
|
||||||
material = SubResource("CanvasItemMaterial_l5ga0")
|
material = SubResource("CanvasItemMaterial_l5ga0")
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ config_version=5
|
|||||||
|
|
||||||
config/name="First Person Test"
|
config/name="First Person Test"
|
||||||
config/tags=PackedStringArray("fps")
|
config/tags=PackedStringArray("fps")
|
||||||
run/main_scene="uid://dsw00ml8rv6xo"
|
run/main_scene="uid://c6fykssf7paft"
|
||||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||||
config/icon="uid://6svuq1l83al5"
|
config/icon="uid://6svuq1l83al5"
|
||||||
|
|
||||||
|
|||||||
548
scenes/02_scene_tester.tscn
Normal file
548
scenes/02_scene_tester.tscn
Normal file
File diff suppressed because one or more lines are too long
@@ -3,6 +3,7 @@ class_name PlayerState
|
|||||||
|
|
||||||
@export var move_speed: float = 12
|
@export var move_speed: float = 12
|
||||||
@export var move_transition_speed : float = 7
|
@export var move_transition_speed : float = 7
|
||||||
|
@export var can_climb_new_ladder = true
|
||||||
|
|
||||||
@onready var character = get_parent().character
|
@onready var character = get_parent().character
|
||||||
|
|
||||||
@@ -29,8 +30,15 @@ func enable_wall_rays():
|
|||||||
|
|
||||||
func can_wall_run():
|
func can_wall_run():
|
||||||
if character.wall_ray_1.is_colliding() or character.wall_ray_2.is_colliding() or character.wall_ray_3.is_colliding():
|
if character.wall_ray_1.is_colliding() or character.wall_ray_2.is_colliding() or character.wall_ray_3.is_colliding():
|
||||||
|
if character.velocity.length() > 5.0:
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
func try_climbing_ladder(ladder):
|
||||||
|
print("LADDERRR")
|
||||||
|
if can_climb_new_ladder:
|
||||||
|
character.current_ladder = ladder
|
||||||
|
Transitioned.emit(self,"on ladder")
|
||||||
|
|
||||||
func start_wall_running():
|
func start_wall_running():
|
||||||
var running_surface_normal
|
var running_surface_normal
|
||||||
var wall_run_direction
|
var wall_run_direction
|
||||||
|
|||||||
@@ -1,39 +1,13 @@
|
|||||||
extends Area3D
|
extends Area3D
|
||||||
|
class_name Ladder
|
||||||
@onready var collision_midpoint: Node3D = $CollisionMidpoint
|
@onready var ladder_player_pos: Marker3D = $LadderPlayerPos
|
||||||
|
|
||||||
var player
|
|
||||||
var player_on_ladder = false
|
|
||||||
@onready var level_control = get_tree().current_scene
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
|
||||||
func _ready():
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
func _on_body_entered(body: Node3D) -> void:
|
||||||
func _process(delta):
|
if body is Player:
|
||||||
pass
|
body.start_ladder_climb(ladder_player_pos)
|
||||||
#if player != null:
|
|
||||||
#if player.is_climbing:
|
|
||||||
#hold_player()
|
|
||||||
|
|
||||||
func _on_body_entered(body):
|
|
||||||
if body.is_in_group("player"):
|
|
||||||
body.is_climbing = true
|
|
||||||
if body.global_position.y < collision_midpoint.global_position.y:
|
|
||||||
body.global_position.y += .2
|
|
||||||
#else:
|
|
||||||
#body.velocity = Vector3(0,0,0)
|
|
||||||
#body.global_position = Vector3(global_position.x,body.global_position.y,global_position.z)
|
|
||||||
|
|
||||||
|
|
||||||
func _on_body_exited(body):
|
func _on_body_exited(body: Node3D) -> void:
|
||||||
if body.is_in_group("player"):
|
if body is Player:
|
||||||
body.is_climbing = false
|
body.end_ladder_climb()
|
||||||
player_on_ladder = false
|
|
||||||
body.velocity.y = .1
|
|
||||||
|
|
||||||
func hold_player():
|
|
||||||
var direction_to_ladder = player.global_position.direction_to(self.global_position)
|
|
||||||
player.velocity = Vector3(direction_to_ladder.x * 10,player.velocity.y,direction_to_ladder.z * 10)
|
|
||||||
|
|||||||
@@ -62,6 +62,9 @@ var input_dir
|
|||||||
var wall_run_surface_normal
|
var wall_run_surface_normal
|
||||||
var wall_run_direction
|
var wall_run_direction
|
||||||
|
|
||||||
|
# Ladder
|
||||||
|
var current_ladder
|
||||||
|
|
||||||
## GUNS AND AMMO
|
## GUNS AND AMMO
|
||||||
var gun : Node
|
var gun : Node
|
||||||
var holstered_gun_id : int
|
var holstered_gun_id : int
|
||||||
@@ -87,6 +90,7 @@ var weapon_holder_start_rot
|
|||||||
var weapon_holder_start_pos
|
var weapon_holder_start_pos
|
||||||
var controlled_elsewhere = false
|
var controlled_elsewhere = false
|
||||||
|
|
||||||
|
@onready var state_machine: PlayerStateMachine = $StateMachine
|
||||||
@onready var dead_player : Resource = load("res://assets/dead_cam.tscn")
|
@onready var dead_player : Resource = load("res://assets/dead_cam.tscn")
|
||||||
@onready var pause_menu: Control = $Head/Recoil/Camera3D/PauseMenu
|
@onready var pause_menu: Control = $Head/Recoil/Camera3D/PauseMenu
|
||||||
@onready var gun_ray = $Head/Recoil/Camera3D/GunRay
|
@onready var gun_ray = $Head/Recoil/Camera3D/GunRay
|
||||||
@@ -431,11 +435,11 @@ func _headbob(time) -> Vector3:
|
|||||||
|
|
||||||
return pos
|
return pos
|
||||||
|
|
||||||
func ladder_collide():
|
func start_ladder_climb(ladder):
|
||||||
if is_climbing == true:
|
state_machine.current_state.try_climbing_ladder(ladder)
|
||||||
gravity = 0.0
|
|
||||||
else:
|
func end_ladder_climb():
|
||||||
gravity = level_control.gamemode.gravity
|
state_machine.on_child_transition(state_machine.current_state,"in air")
|
||||||
|
|
||||||
func _on_wall_jump_timer_timeout() -> void:
|
func _on_wall_jump_timer_timeout() -> void:
|
||||||
can_wall_jump = true
|
can_wall_jump = true
|
||||||
@@ -623,7 +627,6 @@ func hit(damage, fired_by, target_type):
|
|||||||
await get_tree().create_timer(.15).timeout
|
await get_tree().create_timer(.15).timeout
|
||||||
health_indicator.color = Color(0.471, 0, 0, 0)
|
health_indicator.color = Color(0.471, 0, 0, 0)
|
||||||
|
|
||||||
|
|
||||||
func save():
|
func save():
|
||||||
var save_dict = {
|
var save_dict = {
|
||||||
"filename" : get_scene_file_path(),
|
"filename" : get_scene_file_path(),
|
||||||
|
|||||||
12
scripts/player_on_ladder.gd
Normal file
12
scripts/player_on_ladder.gd
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
extends PlayerState
|
||||||
|
class_name PlayerOnLadder
|
||||||
|
|
||||||
|
func Physics_Update(delta):
|
||||||
|
character.global_position.x = lerp(character.global_position.x,character.current_ladder.global_position.x,delta * 8)
|
||||||
|
character.global_position.z = lerp(character.global_position.z,character.current_ladder.global_position.z,delta * 8)
|
||||||
|
|
||||||
|
ladder_movement(delta)
|
||||||
|
|
||||||
|
func ladder_movement(delta):
|
||||||
|
var direction = Input.get_vector("move_down","move_up","move_left","move_right").x
|
||||||
|
character.velocity.y = lerp(character.velocity.y, direction * move_speed,delta * move_transition_speed)
|
||||||
1
scripts/player_on_ladder.gd.uid
Normal file
1
scripts/player_on_ladder.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://bb7u0nnktowwp
|
||||||
Reference in New Issue
Block a user