weapon select tweaks added joy support
This commit is contained in:
44
demo/components/Player.tscn
Normal file
44
demo/components/Player.tscn
Normal 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
81
demo/src/Player.gd
Normal 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
|
||||
Reference in New Issue
Block a user