Initial commit
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
extends CharacterBody3D
|
||||
|
||||
# How fast the player moves in meters per second.
|
||||
@export var speed = 14
|
||||
# The downward acceleration when in the air, in meters per second squared.
|
||||
@export var fall_acceleration = 75
|
||||
@export var mouse_sensitivity = 0.002
|
||||
const JUMP_VELOCITY = 25
|
||||
|
||||
var target_velocity = Vector3.ZERO
|
||||
# Reference to your camera pivot or camera
|
||||
@onready var pivot = $Pivot
|
||||
|
||||
func _ready():
|
||||
# Captures the mouse cursor so it stays in the game window
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion:
|
||||
rotate_y(-event.relative.x * mouse_sensitivity)
|
||||
pivot.rotate_x(-event.relative.y * mouse_sensitivity)
|
||||
pivot.rotation.x = clamp(pivot.rotation.x, deg_to_rad(-60), deg_to_rad(60))
|
||||
|
||||
if event.is_action_pressed("ui_cancel"):
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
|
||||
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
|
||||
if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _physics_process(delta):
|
||||
var direction = Vector3.ZERO
|
||||
|
||||
# need to map to WASD to make it work with WASD
|
||||
if Input.is_action_pressed("ui_right"):
|
||||
direction.x += 1
|
||||
if Input.is_action_pressed("ui_left"):
|
||||
direction.x -= 1
|
||||
if Input.is_action_pressed("ui_down"):
|
||||
direction.z += 1
|
||||
if Input.is_action_pressed("ui_up"):
|
||||
direction.z -= 1
|
||||
|
||||
if direction != Vector3.ZERO:
|
||||
direction = direction.normalized()
|
||||
direction = (transform.basis * direction).normalized()
|
||||
|
||||
# Ground Velocity
|
||||
target_velocity.x = direction.x * speed
|
||||
target_velocity.z = direction.z * speed
|
||||
|
||||
# Vertical Velocity
|
||||
if not is_on_floor(): # If in the air, fall towards the floor. Literally gravity
|
||||
target_velocity.y = target_velocity.y - (fall_acceleration * delta)
|
||||
|
||||
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
|
||||
target_velocity.y = JUMP_VELOCITY
|
||||
|
||||
# Moving the Character
|
||||
velocity = target_velocity
|
||||
move_and_slide()
|
||||
for i in get_slide_collision_count():
|
||||
var collision = get_slide_collision(i)
|
||||
var collided_object = collision.get_collider()
|
||||
if collided_object.is_in_group("flag_group"):
|
||||
$win_label.set_text("You Win!")
|
||||
Reference in New Issue
Block a user