52 lines
1.5 KiB
GDScript
52 lines
1.5 KiB
GDScript
class_name RosaController extends "res://scripts/Entities/OverworldEntity.gd"
|
|
|
|
var interactRange = 0.7;
|
|
|
|
func updateOverworldLogic(delta) -> void:
|
|
# Check if interact button is pressed
|
|
if(Input.is_action_just_pressed("interact")):
|
|
var rayDirection = getDirectionVector();
|
|
# cast ray
|
|
|
|
var query = PhysicsRayQueryParameters3D.create(
|
|
position,
|
|
position + (rayDirection * interactRange)
|
|
)
|
|
query.collide_with_areas = true
|
|
query.exclude = [self]
|
|
|
|
var result = get_world_3d().direct_space_state.intersect_ray(query)
|
|
if result and result.collider:
|
|
var collider = result.collider
|
|
if(collider.has_method("interact")):
|
|
collider.interact(self)
|
|
|
|
if Input.is_action_just_pressed("pause"):
|
|
getSystems().PAUSE.playerPauseToggle();
|
|
|
|
func updateMovement(delta) -> void:
|
|
# User movement
|
|
var dir:Vector2 = Input.get_vector("left", "right", "up", "down");
|
|
if(dir.x != 0 or dir.y != 0):
|
|
velocity.x = dir.x * speed * delta;
|
|
velocity.z = dir.y * speed * delta;
|
|
|
|
# Update direction
|
|
if(dir.x >= abs(dir.y) and(
|
|
dir.y == 0 or
|
|
(dir.y > 0 and direction != Direction.SOUTH) or
|
|
(dir.y < 0 and direction != Direction.NORTH)
|
|
)):
|
|
direction = Direction.EAST;
|
|
elif (dir.x <= -abs(dir.y) and (
|
|
dir.y == 0 or
|
|
(dir.y > 0 and direction != Direction.SOUTH) or
|
|
(dir.y < 0 and direction != Direction.NORTH)
|
|
)):
|
|
direction = Direction.WEST;
|
|
elif (dir.y > 0):
|
|
direction = Direction.SOUTH;
|
|
elif (dir.y < 0):
|
|
direction = Direction.NORTH;
|
|
pass
|