Files
Dawn-Godot/scripts/OverworldEntity.gd
2025-01-02 13:28:04 -06:00

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();