added ladder script
This commit is contained in:
@@ -6,8 +6,8 @@
|
||||
size = Vector3(1, 10, 1)
|
||||
|
||||
[node name="LadderCollisionCheck" type="Area3D"]
|
||||
collision_layer = 2
|
||||
collision_mask = 2
|
||||
collision_layer = 6
|
||||
collision_mask = 6
|
||||
script = ExtResource("1_ugi45")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
@@ -17,5 +17,8 @@ shape = SubResource("BoxShape3D_gxu3i")
|
||||
[node name="CollisionMidpoint" type="Node3D" parent="."]
|
||||
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_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://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://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="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="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"]
|
||||
@@ -140,36 +141,39 @@ script = ExtResource("1_x7wms")
|
||||
SENSITIVITY = 0.008
|
||||
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")
|
||||
character = NodePath("..")
|
||||
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")
|
||||
metadata/_custom_type_script = "uid://dk0vg5btak80a"
|
||||
|
||||
[node name="Crouched" type="Node" parent="States"]
|
||||
[node name="Crouched" type="Node" parent="StateMachine"]
|
||||
script = ExtResource("4_67mtf")
|
||||
move_speed = 5.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")
|
||||
|
||||
[node name="Wall Running" type="Node" parent="States"]
|
||||
[node name="Wall Running" type="Node" parent="StateMachine"]
|
||||
script = ExtResource("6_1npgd")
|
||||
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")
|
||||
|
||||
[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="."]
|
||||
material = SubResource("CanvasItemMaterial_l5ga0")
|
||||
|
||||
@@ -12,7 +12,7 @@ config_version=5
|
||||
|
||||
config/name="First Person Test"
|
||||
config/tags=PackedStringArray("fps")
|
||||
run/main_scene="uid://dsw00ml8rv6xo"
|
||||
run/main_scene="uid://c6fykssf7paft"
|
||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||
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_transition_speed : float = 7
|
||||
@export var can_climb_new_ladder = true
|
||||
|
||||
@onready var character = get_parent().character
|
||||
|
||||
@@ -29,8 +30,15 @@ func enable_wall_rays():
|
||||
|
||||
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.velocity.length() > 5.0:
|
||||
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():
|
||||
var running_surface_normal
|
||||
var wall_run_direction
|
||||
|
||||
@@ -1,39 +1,13 @@
|
||||
extends Area3D
|
||||
|
||||
@onready var collision_midpoint: Node3D = $CollisionMidpoint
|
||||
|
||||
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
|
||||
class_name Ladder
|
||||
@onready var ladder_player_pos: Marker3D = $LadderPlayerPos
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
#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_entered(body: Node3D) -> void:
|
||||
if body is Player:
|
||||
body.start_ladder_climb(ladder_player_pos)
|
||||
|
||||
|
||||
func _on_body_exited(body):
|
||||
if body.is_in_group("player"):
|
||||
body.is_climbing = false
|
||||
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)
|
||||
func _on_body_exited(body: Node3D) -> void:
|
||||
if body is Player:
|
||||
body.end_ladder_climb()
|
||||
|
||||
@@ -62,6 +62,9 @@ var input_dir
|
||||
var wall_run_surface_normal
|
||||
var wall_run_direction
|
||||
|
||||
# Ladder
|
||||
var current_ladder
|
||||
|
||||
## GUNS AND AMMO
|
||||
var gun : Node
|
||||
var holstered_gun_id : int
|
||||
@@ -87,6 +90,7 @@ var weapon_holder_start_rot
|
||||
var weapon_holder_start_pos
|
||||
var controlled_elsewhere = false
|
||||
|
||||
@onready var state_machine: PlayerStateMachine = $StateMachine
|
||||
@onready var dead_player : Resource = load("res://assets/dead_cam.tscn")
|
||||
@onready var pause_menu: Control = $Head/Recoil/Camera3D/PauseMenu
|
||||
@onready var gun_ray = $Head/Recoil/Camera3D/GunRay
|
||||
@@ -431,11 +435,11 @@ func _headbob(time) -> Vector3:
|
||||
|
||||
return pos
|
||||
|
||||
func ladder_collide():
|
||||
if is_climbing == true:
|
||||
gravity = 0.0
|
||||
else:
|
||||
gravity = level_control.gamemode.gravity
|
||||
func start_ladder_climb(ladder):
|
||||
state_machine.current_state.try_climbing_ladder(ladder)
|
||||
|
||||
func end_ladder_climb():
|
||||
state_machine.on_child_transition(state_machine.current_state,"in air")
|
||||
|
||||
func _on_wall_jump_timer_timeout() -> void:
|
||||
can_wall_jump = true
|
||||
@@ -623,7 +627,6 @@ func hit(damage, fired_by, target_type):
|
||||
await get_tree().create_timer(.15).timeout
|
||||
health_indicator.color = Color(0.471, 0, 0, 0)
|
||||
|
||||
|
||||
func save():
|
||||
var save_dict = {
|
||||
"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