start wip freeroam
This commit is contained in:
parent
24790d0cb3
commit
9bd94304fe
18 changed files with 872 additions and 7 deletions
12
Scripts/Configs/FreeRoamMaps.gd
Normal file
12
Scripts/Configs/FreeRoamMaps.gd
Normal file
|
@ -0,0 +1,12 @@
|
|||
extends Node
|
||||
|
||||
var Generic1Stage = {
|
||||
"name": "Generic 1 Stage",
|
||||
"scene": "res://Scenes/FreeRoam/Generic/Generic1Stage.tscn",
|
||||
"stage": Stages.Cyber1Stage,
|
||||
"stage_base_path": "Generic1Stage/StageAssets"
|
||||
}
|
||||
|
||||
var MapIndex = {
|
||||
"Generic 1 Stage": Generic1Stage
|
||||
}
|
1
Scripts/Configs/FreeRoamMaps.gd.uid
Normal file
1
Scripts/Configs/FreeRoamMaps.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://bicum1ifw4mph
|
|
@ -49,6 +49,7 @@ func _on_controls_button_pressed() -> void:
|
|||
$ControlsScreen.visible = true
|
||||
|
||||
func _on_free_roam_button_pressed() -> void:
|
||||
get_tree().change_scene_to_file(FreeRoamMaps.Generic1Stage["scene"])
|
||||
$FreeRoamChooseScreen.visible = true
|
||||
|
||||
func _on_mods_button_pressed() -> void:
|
||||
|
|
101
Scripts/Player/player.gd
Normal file
101
Scripts/Player/player.gd
Normal file
|
@ -0,0 +1,101 @@
|
|||
class_name Player extends CharacterBody3D
|
||||
|
||||
var SPEED_BASE: float = 4
|
||||
var SPEED_CROUCHED: float = 2
|
||||
var SPEED_RUNNING: float = 7
|
||||
var SPEED_CROUCH_RUN: float = 3
|
||||
|
||||
var speed: float = SPEED_BASE # m/s
|
||||
var acceleration: float = 100 # m/s^2
|
||||
|
||||
var jump_height: float = 1 # m
|
||||
var camera_sens: float = 3
|
||||
|
||||
var jumping: bool = false
|
||||
var crouched: bool = false
|
||||
var running: bool = false
|
||||
var mouse_captured: bool = false
|
||||
|
||||
var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||
|
||||
var move_dir: Vector2 # Input direction for movement
|
||||
var look_dir: Vector2 # Input direction for look/aim
|
||||
|
||||
var walk_vel: Vector3 # Walking velocity
|
||||
var grav_vel: Vector3 # Gravity velocity
|
||||
var jump_vel: Vector3 # Jumping velocity
|
||||
|
||||
@onready var camera: Camera3D = $Camera
|
||||
|
||||
func _ready() -> void:
|
||||
capture_mouse()
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseMotion:
|
||||
look_dir = event.relative * 0.001
|
||||
if mouse_captured: _rotate_camera()
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if Input.is_action_just_pressed(&"freeroam_jump"): jumping = true
|
||||
elif Input.is_action_just_pressed(&"freeroam_crouch"):
|
||||
$CShape.shape.height = 1.0
|
||||
$Camera.position.y = 1.0
|
||||
if (running): speed = SPEED_CROUCH_RUN
|
||||
else: speed = SPEED_CROUCHED
|
||||
crouched = true
|
||||
elif Input.is_action_just_released(&"freeroam_crouch"):
|
||||
$CShape.shape.height = 1.8
|
||||
$Camera.position.y = 1.7
|
||||
if (running): speed = SPEED_RUNNING
|
||||
else: speed = SPEED_BASE
|
||||
crouched = false
|
||||
elif Input.is_action_just_pressed(&"freeroam_run"):
|
||||
if (crouched): speed = SPEED_CROUCH_RUN
|
||||
else: speed = SPEED_RUNNING
|
||||
running = true
|
||||
elif Input.is_action_just_released(&"freeroam_run"):
|
||||
if (crouched): speed = SPEED_CROUCHED
|
||||
else: speed = SPEED_BASE
|
||||
running = false
|
||||
|
||||
if mouse_captured: _handle_joypad_camera_rotation(delta)
|
||||
velocity = _walk(delta) + _gravity(delta) + _jump(delta)
|
||||
move_and_slide()
|
||||
|
||||
func capture_mouse() -> void:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
mouse_captured = true
|
||||
|
||||
func release_mouse() -> void:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
mouse_captured = false
|
||||
|
||||
func _rotate_camera(sens_mod: float = 1.0) -> void:
|
||||
camera.rotation.y -= look_dir.x * camera_sens * sens_mod
|
||||
camera.rotation.x = clamp(camera.rotation.x - look_dir.y * camera_sens * sens_mod, -1.5, 1.5)
|
||||
|
||||
func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void:
|
||||
var joypad_dir: Vector2 = Input.get_vector(&"freeroam_look_left", &"freeroam_look_right", &"freeroam_look_up", &"freeroam_look_down")
|
||||
if joypad_dir.length() > 0:
|
||||
look_dir += joypad_dir * delta
|
||||
_rotate_camera(sens_mod)
|
||||
look_dir = Vector2.ZERO
|
||||
|
||||
func _walk(delta: float) -> Vector3:
|
||||
move_dir = Input.get_vector(&"freeroam_move_left", &"freeroam_move_right", &"freeroam_move_forward", &"freeroam_move_backward")
|
||||
var _forward: Vector3 = camera.global_transform.basis * Vector3(move_dir.x, 0, move_dir.y)
|
||||
var walk_dir: Vector3 = Vector3(_forward.x, 0, _forward.z).normalized()
|
||||
walk_vel = walk_vel.move_toward(walk_dir * speed * move_dir.length(), acceleration * delta)
|
||||
return walk_vel
|
||||
|
||||
func _gravity(delta: float) -> Vector3:
|
||||
grav_vel = Vector3.ZERO if is_on_floor() else grav_vel.move_toward(Vector3(0, velocity.y - gravity, 0), gravity * delta)
|
||||
return grav_vel
|
||||
|
||||
func _jump(delta: float) -> Vector3:
|
||||
if jumping:
|
||||
if is_on_floor(): jump_vel = Vector3(0, sqrt(4 * jump_height * gravity), 0)
|
||||
jumping = false
|
||||
return jump_vel
|
||||
jump_vel = Vector3.ZERO if is_on_floor() or is_on_ceiling_only() else jump_vel.move_toward(Vector3.ZERO, gravity * delta)
|
||||
return jump_vel
|
1
Scripts/Player/player.gd.uid
Normal file
1
Scripts/Player/player.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://b0c02p6ckmpdq
|
19
Scripts/Player/player.tscn
Normal file
19
Scripts/Player/player.tscn
Normal file
|
@ -0,0 +1,19 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://cdk6hwb4hi2wc"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b0c02p6ckmpdq" path="res://Scripts/Player/player.gd" id="1_2f8j2"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_3rsb5"]
|
||||
radius = 0.3
|
||||
height = 1.8
|
||||
|
||||
[node name="Player" type="CharacterBody3D"]
|
||||
script = ExtResource("1_2f8j2")
|
||||
|
||||
[node name="CShape" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 0)
|
||||
shape = SubResource("CapsuleShape3D_3rsb5")
|
||||
debug_color = Color(0.141176, 0.427451, 0.92549, 0.784314)
|
||||
|
||||
[node name="Camera" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.7, 0)
|
||||
fov = 80.0
|
Loading…
Add table
Add a link
Reference in a new issue