diff options
author | mikatomik <mikec_2007@hotmail.com> | 2022-09-09 23:56:34 -0400 |
---|---|---|
committer | mikatomik <mikec_2007@hotmail.com> | 2022-09-09 23:56:34 -0400 |
commit | 8199603264cb1e4649e52cb1ae8a5b800104a1c1 (patch) | |
tree | 2b0c68cb275f4a97ebf90ffdfcc9623a1f3c4b6a /character | |
parent | 941ec1c9ed595ef8b039ddf083e5bc910a8c4ecb (diff) | |
download | godot_wildjam_49-8199603264cb1e4649e52cb1ae8a5b800104a1c1.tar.gz godot_wildjam_49-8199603264cb1e4649e52cb1ae8a5b800104a1c1.zip |
Implement basic FPS controller
Diffstat (limited to 'character')
-rw-r--r-- | character/fps_controller/fps_controller.gd | 58 | ||||
-rw-r--r-- | character/fps_controller/fps_controller.tscn | 20 |
2 files changed, 78 insertions, 0 deletions
diff --git a/character/fps_controller/fps_controller.gd b/character/fps_controller/fps_controller.gd new file mode 100644 index 0000000..e5f119b --- /dev/null +++ b/character/fps_controller/fps_controller.gd @@ -0,0 +1,58 @@ +extends KinematicBody + +onready var camera = $Camera +onready var ray = $Camera/RayCast + +export var walk_speed : int = 5 +export var accel : float = 0.2 +export var gravity : int = -1 +export var term_velocity : int = -35 + +var velocity : Vector3 + +func _ready(): + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + +func _process(_delta): + get_input() + +func _physics_process(_delta): + handle_movement() + +func get_input(): + var dir : Vector3 = Vector3.ZERO + + #Get base movement input + + if Input.is_action_pressed("forward"): + dir += -global_transform.basis.z + if Input.is_action_pressed("backward"): + dir += global_transform.basis.z + if Input.is_action_pressed("left"): + dir += -global_transform.basis.x + if Input.is_action_pressed("right"): + dir += global_transform.basis.x + + dir = dir.normalized() + + #Pull X and Z values from directional input. Velocity.y will be handled in physics loop + + velocity.x = lerp(velocity.x, dir.x * walk_speed, accel) + velocity.z = lerp(velocity.z, dir.z * walk_speed, accel) + +func handle_movement(): + #Apply gravity + velocity.y += gravity + if velocity.y < term_velocity: + velocity.y = term_velocity + + velocity = move_and_slide(velocity, Vector3.UP) + +func _input(event): + #Handle mouse movement for camera + if event is InputEventMouseMotion: + self.rotate_y(-event.relative.x * Settings.mouse_sens) + camera.rotate_x(-event.relative.y * Settings.mouse_sens) + camera.rotation.x = clamp(camera.rotation.x, -1.2, 1.2) + + diff --git a/character/fps_controller/fps_controller.tscn b/character/fps_controller/fps_controller.tscn new file mode 100644 index 0000000..c0009d5 --- /dev/null +++ b/character/fps_controller/fps_controller.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://character/fps_controller/fps_controller.gd" type="Script" id=1] + +[sub_resource type="CapsuleShape" id=1] +radius = 0.3 + +[node name="fps_controller" type="KinematicBody"] +script = ExtResource( 1 ) + +[node name="CollisionShape" type="CollisionShape" parent="."] +transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0 ) +shape = SubResource( 1 ) + +[node name="Camera" type="Camera" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.796127, 0 ) + +[node name="RayCast" type="RayCast" parent="Camera"] +cast_to = Vector3( 0, 0, -3 ) +collision_mask = 2 |