summaryrefslogtreecommitdiff
path: root/modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd
diff options
context:
space:
mode:
authorfabriceci <fabricecipolla@gmail.com>2021-10-11 11:30:59 +0200
committerjmb462 <jmb462@gmail.com>2022-01-02 21:52:09 +0100
commit9d5b80705912d85c3c7301ac0ea0afbf9372a660 (patch)
treee9528ac06fcfc29bc43846713d1c3ddb94becc22 /modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd
parent28174d531b7128f0281fc2b88da2f4962fd3513e (diff)
Improve editor template workflow
Co-Authored-By: jmb462 <jmb462@gmail.com>
Diffstat (limited to 'modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd')
-rw-r--r--modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd32
1 files changed, 32 insertions, 0 deletions
diff --git a/modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd b/modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd
new file mode 100644
index 0000000000..ce6d67ae84
--- /dev/null
+++ b/modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd
@@ -0,0 +1,32 @@
+# meta-description: Classic movement for gravity games (FPS, TPS, ...)
+
+extends _BASE_
+
+const SPEED: float = 5.0
+const JUMP_FORCE: float = 4.5
+
+# Get the gravity from the project settings to be synced with RigidDynamicBody nodes.
+var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
+
+
+func _physics_process(delta: float) -> void:
+ # Add the gravity.
+ if not is_on_floor():
+ motion_velocity.y -= gravity * delta
+
+ # Handle Jump.
+ if Input.is_action_just_pressed("ui_accept") and is_on_floor():
+ motion_velocity.y = JUMP_FORCE
+
+ # Get the input direction and handle the movement/deceleration.
+ # As good practice, you should replace UI actions with custom gameplay actions.
+ var input_dir := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
+ var direction := (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
+ if direction:
+ motion_velocity.x = direction.x * SPEED
+ motion_velocity.z = direction.z * SPEED
+ else:
+ motion_velocity.x = move_toward(motion_velocity.x, 0, SPEED)
+ motion_velocity.z = move_toward(motion_velocity.z, 0, SPEED)
+
+ move_and_slide()