weapon select tweaks added joy support

This commit is contained in:
Derek
2024-12-14 17:23:54 -06:00
parent ec75bffb70
commit a06ae6f74d
9 changed files with 6582 additions and 25 deletions

View File

@@ -0,0 +1,44 @@
[gd_scene load_steps=7 format=3 uid="uid://domhm87hbhbg1"]
[ext_resource type="Script" path="res://demo/src/Player.gd" id="1_nm1yx"]
[ext_resource type="Script" path="res://demo/src/CameraManager.gd" id="2_loos7"]
[sub_resource type="SphereShape3D" id="SphereShape3D_smq6u"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_lwhhq"]
height = 1.5
[sub_resource type="SeparationRayShape3D" id="SeparationRayShape3D_twc2s"]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_lsqiy"]
[node name="Player" type="CharacterBody3D"]
collision_layer = 2
script = ExtResource("1_nm1yx")
[node name="CameraManager" type="Node3D" parent="."]
script = ExtResource("2_loos7")
[node name="Arm" type="SpringArm3D" parent="CameraManager"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 0.906308, 0.422618, 0, -0.422618, 0.906308, 0, 2.32515, -0.0321627)
shape = SubResource("SphereShape3D_smq6u")
spring_length = 6.0
margin = 0.5
[node name="Camera3D" type="Camera3D" parent="CameraManager/Arm"]
unique_name_in_owner = true
near = 0.25
far = 16384.0
[node name="CollisionShapeBody" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25, 0)
shape = SubResource("CapsuleShape3D_lwhhq")
[node name="CollisionShapeRay" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 1, 0)
shape = SubResource("SeparationRayShape3D_twc2s")
[node name="Body" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
mesh = SubResource("CapsuleMesh_lsqiy")

81
demo/src/Player.gd Normal file
View File

@@ -0,0 +1,81 @@
extends CharacterBody3D
@export var MOVE_SPEED: float = 50.0
@export var JUMP_SPEED: float = 2.0
@export var first_person: bool = false :
set(p_value):
first_person = p_value
if first_person:
var tween: Tween = create_tween()
tween.tween_property($CameraManager/Arm, "spring_length", 0.0, .33)
tween.tween_callback($Body.set_visible.bind(false))
else:
$Body.visible = true
create_tween().tween_property($CameraManager/Arm, "spring_length", 6.0, .33)
@export var gravity_enabled: bool = true :
set(p_value):
gravity_enabled = p_value
if not gravity_enabled:
velocity.y = 0
@export var collision_enabled: bool = true :
set(p_value):
collision_enabled = p_value
$CollisionShapeBody.disabled = ! collision_enabled
$CollisionShapeRay.disabled = ! collision_enabled
func _physics_process(p_delta) -> void:
var direction: Vector3 = get_camera_relative_input()
var h_veloc: Vector2 = Vector2(direction.x, direction.z) * MOVE_SPEED
if Input.is_key_pressed(KEY_SHIFT):
h_veloc *= 2
velocity.x = h_veloc.x
velocity.z = h_veloc.y
if gravity_enabled:
velocity.y -= 40 * p_delta
move_and_slide()
# Returns the input vector relative to the camera. Forward is always the direction the camera is facing
func get_camera_relative_input() -> Vector3:
var input_dir: Vector3 = Vector3.ZERO
if Input.is_key_pressed(KEY_A): # Left
input_dir -= %Camera3D.global_transform.basis.x
if Input.is_key_pressed(KEY_D): # Right
input_dir += %Camera3D.global_transform.basis.x
if Input.is_key_pressed(KEY_W): # Forward
input_dir -= %Camera3D.global_transform.basis.z
if Input.is_key_pressed(KEY_S): # Backward
input_dir += %Camera3D.global_transform.basis.z
if Input.is_key_pressed(KEY_E) or Input.is_key_pressed(KEY_SPACE): # Up
velocity.y += JUMP_SPEED + MOVE_SPEED*.016
if Input.is_key_pressed(KEY_Q): # Down
velocity.y -= JUMP_SPEED + MOVE_SPEED*.016
if Input.is_key_pressed(KEY_KP_ADD) or Input.is_key_pressed(KEY_EQUAL):
MOVE_SPEED = clamp(MOVE_SPEED + .5, 5, 9999)
if Input.is_key_pressed(KEY_KP_SUBTRACT) or Input.is_key_pressed(KEY_MINUS):
MOVE_SPEED = clamp(MOVE_SPEED - .5, 5, 9999)
return input_dir
func _input(p_event: InputEvent) -> void:
if p_event is InputEventMouseButton and p_event.pressed:
if p_event.button_index == MOUSE_BUTTON_WHEEL_UP:
MOVE_SPEED = clamp(MOVE_SPEED + 5, 5, 9999)
elif p_event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
MOVE_SPEED = clamp(MOVE_SPEED - 5, 5, 9999)
elif p_event is InputEventKey:
if p_event.pressed:
if p_event.keycode == KEY_V:
first_person = ! first_person
elif p_event.keycode == KEY_G:
gravity_enabled = ! gravity_enabled
elif p_event.keycode == KEY_C:
collision_enabled = ! collision_enabled
# Else if up/down released
elif p_event.keycode in [ KEY_Q, KEY_E, KEY_SPACE ]:
velocity.y = 0