FPS Controller

This commit is contained in:
2025-11-13 08:05:46 -05:00
parent c6e4d4f725
commit 14000f0096
177 changed files with 6311 additions and 7 deletions

View File

@@ -0,0 +1,249 @@
[gd_scene load_steps=15 format=3 uid="uid://yr0ymw4fpseu"]
[ext_resource type="Texture2D" uid="uid://dwhdp7spars2b" path="res://assets/textures/texture.png" id="1_htrvu"]
[ext_resource type="Texture2D" uid="uid://doknmohl75xnp" path="res://assets/textures/t_floormetal1.png" id="2_6lfjr"]
[ext_resource type="PackedScene" uid="uid://bm4jq3rokgbn2" path="res://scenes/environment/world_environment.tscn" id="3_qd0o6"]
[ext_resource type="PackedScene" uid="uid://dh8v00nh02l1" path="res://scenes/player/player_controller.tscn" id="4_6lfjr"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_i5e4g"]
albedo_texture = ExtResource("1_htrvu")
uv1_triplanar = true
[sub_resource type="BoxMesh" id="BoxMesh_pvbb1"]
size = Vector3(50, 1, 50)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_0bul0"]
data = PackedVector3Array(-25, 0.5, 25, 25, 0.5, 25, -25, -0.5, 25, 25, 0.5, 25, 25, -0.5, 25, -25, -0.5, 25, 25, 0.5, -25, -25, 0.5, -25, 25, -0.5, -25, -25, 0.5, -25, -25, -0.5, -25, 25, -0.5, -25, 25, 0.5, 25, 25, 0.5, -25, 25, -0.5, 25, 25, 0.5, -25, 25, -0.5, -25, 25, -0.5, 25, -25, 0.5, -25, -25, 0.5, 25, -25, -0.5, -25, -25, 0.5, 25, -25, -0.5, 25, -25, -0.5, -25, 25, 0.5, 25, -25, 0.5, 25, 25, 0.5, -25, -25, 0.5, 25, -25, 0.5, -25, 25, 0.5, -25, -25, -0.5, 25, 25, -0.5, 25, -25, -0.5, -25, 25, -0.5, 25, 25, -0.5, -25, -25, -0.5, -25)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_rl8gb"]
albedo_texture = ExtResource("2_6lfjr")
[sub_resource type="BoxMesh" id="BoxMesh_3sjje"]
size = Vector3(4, 1, 4)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_1wlit"]
data = PackedVector3Array(-2, 0.5, 2, 2, 0.5, 2, -2, -0.5, 2, 2, 0.5, 2, 2, -0.5, 2, -2, -0.5, 2, 2, 0.5, -2, -2, 0.5, -2, 2, -0.5, -2, -2, 0.5, -2, -2, -0.5, -2, 2, -0.5, -2, 2, 0.5, 2, 2, 0.5, -2, 2, -0.5, 2, 2, 0.5, -2, 2, -0.5, -2, 2, -0.5, 2, -2, 0.5, -2, -2, 0.5, 2, -2, -0.5, -2, -2, 0.5, 2, -2, -0.5, 2, -2, -0.5, -2, 2, 0.5, 2, -2, 0.5, 2, 2, 0.5, -2, -2, 0.5, 2, -2, 0.5, -2, 2, 0.5, -2, -2, -0.5, 2, 2, -0.5, 2, -2, -0.5, -2, 2, -0.5, 2, 2, -0.5, -2, -2, -0.5, -2)
[sub_resource type="GDScript" id="GDScript_i5e4g"]
script/source = "@tool
extends Line2D
@export var camera : Camera3D
@export var start_position : Vector3
@export var end_position: Vector3
@export var line_color : Color
@export var target : Node
@export var offset : Vector3
@export_range(0.0, 1.0) var alpha : float
var start_point
var end_point
var line_points : PackedVector2Array
var direction : int = 0
func _ready() -> void:
default_color = line_color
func _process(delta: float) -> void:
var pos = target.global_position
start_point = camera.unproject_position(pos)
end_point = camera.unproject_position(pos + offset)
if start_point and end_point:
var a = start_point
var b = lerp(start_point, end_point, alpha)
line_points = [a, b]
set_points(line_points)
func enter() -> void:
var tween = get_tree().create_tween()
tween.tween_property(self, \"alpha\", 1.0, 1.0).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_CUBIC)
func exit() -> void:
var tween = get_tree().create_tween()
tween.tween_property(self, \"alpha\", 0.0, 1.0).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_CUBIC)
"
[sub_resource type="Animation" id="Animation_q6206"]
resource_name = "Camera_Pan"
length = 2.0
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = false
tracks/0/path = NodePath("Camera3D:position")
tracks/0/interp = 2
tracks/0/loop_wrap = false
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 0.6, 0), Vector3(2.864, 0.6, -5.781)]
}
tracks/1/type = "method"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("CanvasLayer/TutLine")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.1, 1.66667),
"transitions": PackedFloat32Array(1, 1),
"values": [{
"args": [],
"method": &"enter"
}, {
"args": [],
"method": &"exit"
}]
}
[sub_resource type="Animation" id="Animation_6aore"]
length = 0.001
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Camera3D:position:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Camera3D:position:y")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(1.84113, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/2/type = "bezier"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Camera3D:position:z")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Camera3D:position")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 1.84113, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_i0w0i"]
_data = {
&"Camera_Pan": SubResource("Animation_q6206"),
&"RESET": SubResource("Animation_6aore")
}
[node name="PrototypeLevel" type="Node3D"]
[node name="Geometry" type="Node3D" parent="."]
[node name="Floor" type="StaticBody3D" parent="Geometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/Floor"]
material_override = SubResource("StandardMaterial3D_i5e4g")
mesh = SubResource("BoxMesh_pvbb1")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/Floor"]
shape = SubResource("ConcavePolygonShape3D_0bul0")
[node name="CrouchCheck" type="StaticBody3D" parent="Geometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -7)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/CrouchCheck"]
material_override = SubResource("StandardMaterial3D_rl8gb")
mesh = SubResource("BoxMesh_3sjje")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/CrouchCheck"]
shape = SubResource("ConcavePolygonShape3D_1wlit")
[node name="CrouchCheck2" type="StaticBody3D" parent="Geometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 0.5, -7)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/CrouchCheck2"]
material_override = SubResource("StandardMaterial3D_rl8gb")
mesh = SubResource("BoxMesh_3sjje")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/CrouchCheck2"]
shape = SubResource("ConcavePolygonShape3D_1wlit")
[node name="CrouchCheck3" type="StaticBody3D" parent="Geometry"]
transform = Transform3D(0.3, 0, 0, 0, 0.3, 0, 0, 0, 0.3, 0, 0.17173958, 0)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/CrouchCheck3"]
material_override = SubResource("StandardMaterial3D_rl8gb")
mesh = SubResource("BoxMesh_3sjje")
skeleton = NodePath("../../CrouchCheck3")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/CrouchCheck3"]
shape = SubResource("ConcavePolygonShape3D_1wlit")
[node name="CrouchCheck4" type="StaticBody3D" parent="Geometry"]
transform = Transform3D(0.3, 0, 0, 0, 0.3, 0, 0, 0, 0.3, -1.1974242, 0.45065737, 0)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Geometry/CrouchCheck4"]
material_override = SubResource("StandardMaterial3D_rl8gb")
mesh = SubResource("BoxMesh_3sjje")
skeleton = NodePath("../../CrouchCheck3")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Geometry/CrouchCheck4"]
shape = SubResource("ConcavePolygonShape3D_1wlit")
[node name="PlayerController" parent="." instance=ExtResource("4_6lfjr")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.84185, 1, -3.5)
[node name="WorldEnvironment" parent="." instance=ExtResource("3_qd0o6")]
[node name="Animator" type="Node" parent="."]
[node name="CanvasLayer" type="CanvasLayer" parent="Animator"]
follow_viewport_enabled = true
[node name="TutLine" type="Line2D" parent="Animator/CanvasLayer" node_paths=PackedStringArray("camera", "target")]
visible = false
points = PackedVector2Array(998, 477.933, 998, 477.933)
joint_mode = 2
begin_cap_mode = 2
end_cap_mode = 2
round_precision = 32
antialiased = true
script = SubResource("GDScript_i5e4g")
camera = NodePath("../../Camera3D")
line_color = Color(1, 1, 1, 1)
target = NodePath("../../../Geometry/CrouchCheck")
offset = Vector3(0, -2, 0)
[node name="Camera3D" type="Camera3D" parent="Animator"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.84113, 0)
[node name="AnimationPlayer" type="AnimationPlayer" parent="Animator"]
libraries = {
&"": SubResource("AnimationLibrary_i0w0i")
}
autoplay = "Camera_Pan"
speed_scale = 0.5