62 lines
1.2 KiB
GDScript
62 lines
1.2 KiB
GDScript
extends CharacterBody3D
|
|
|
|
enum Direction {
|
|
NORTH,
|
|
SOUTH,
|
|
WEST,
|
|
EAST
|
|
}
|
|
|
|
var speed:float = 3200;
|
|
var friction:float = 7;
|
|
var gravity:float = 150;
|
|
|
|
var direction = Direction.SOUTH;
|
|
var meshInstance:MeshInstance3D;
|
|
|
|
func getDirectionVector() -> Vector3:
|
|
match direction:
|
|
Direction.NORTH:
|
|
return Vector3(0, 0, -1);
|
|
Direction.SOUTH:
|
|
return Vector3(0, 0, 1);
|
|
Direction.WEST:
|
|
return Vector3(-1, 0, 0);
|
|
Direction.EAST:
|
|
return Vector3(1, 0, 0);
|
|
return Vector3(0, 0, 0);
|
|
|
|
# Virtual Methods
|
|
func updateMovement(delta) -> void:
|
|
pass
|
|
|
|
func updateOverworldLogic(delta) -> void:
|
|
pass
|
|
|
|
# Events
|
|
func _ready() -> void:
|
|
meshInstance = get_node("MeshInstance3D")
|
|
pass
|
|
|
|
func _process(delta:float) -> void:
|
|
# Update logic
|
|
updateOverworldLogic(delta)
|
|
|
|
# Set shader direction.
|
|
var material:ShaderMaterial = meshInstance.get_surface_override_material(0)
|
|
material.set_shader_parameter("direction", direction)
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
# Gravity and friction
|
|
if !is_on_floor():
|
|
velocity.y -= gravity * delta;
|
|
else:
|
|
velocity += -(velocity * friction * delta);
|
|
|
|
# Update movement
|
|
updateMovement(delta)
|
|
|
|
# Update character controller.
|
|
move_and_slide();
|