Lots of little tweaks and fixes
This commit is contained in:
@@ -42,7 +42,15 @@ var _freeTimer:float = 0.0
|
||||
var _mouseDelta:Vector2 = Vector2.ZERO
|
||||
var _rightMouseHeld:bool = false
|
||||
|
||||
func _canOrbit() -> bool:
|
||||
return not UI.activeConversation
|
||||
|
||||
func _input(event:InputEvent) -> void:
|
||||
if not _canOrbit():
|
||||
if _rightMouseHeld:
|
||||
_rightMouseHeld = false
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
return
|
||||
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_RIGHT:
|
||||
_rightMouseHeld = event.pressed
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED if _rightMouseHeld else Input.MOUSE_MODE_VISIBLE
|
||||
@@ -56,13 +64,17 @@ func _process(delta:float) -> void:
|
||||
var xMult:float = -1.0 if SETTINGS.invertCameraX else 1.0
|
||||
var yMult:float = 1.0 if SETTINGS.invertCameraY else -1.0
|
||||
|
||||
var orbitInput:Vector2 = Input.get_vector(
|
||||
"camera_orbit_left", "camera_orbit_right",
|
||||
"camera_orbit_up", "camera_orbit_down"
|
||||
)
|
||||
var orbitInput:Vector2 = Vector2.ZERO
|
||||
var mouseActive:bool = false
|
||||
|
||||
if _canOrbit():
|
||||
orbitInput = Input.get_vector(
|
||||
"camera_orbit_left", "camera_orbit_right",
|
||||
"camera_orbit_up", "camera_orbit_down"
|
||||
)
|
||||
mouseActive = _mouseDelta.length_squared() > 0.0
|
||||
|
||||
var controllerActive:bool = orbitInput.length() > 0.01
|
||||
var mouseActive:bool = _mouseDelta.length_squared() > 0.0
|
||||
|
||||
# Any manual camera input returns to FREE and resets the centering timer
|
||||
if controllerActive or mouseActive:
|
||||
@@ -83,10 +95,10 @@ func _process(delta:float) -> void:
|
||||
if mouseActive:
|
||||
_yaw += _mouseDelta.x * mouseSensitivity * SETTINGS.cameraSpeedMouse * xMult
|
||||
_pitch += _mouseDelta.y * mouseSensitivity * SETTINGS.cameraSpeedMouse * yMult
|
||||
_mouseDelta = Vector2.ZERO
|
||||
_mouseDelta = Vector2.ZERO
|
||||
|
||||
# center_camera input → switch to MANUAL_CENTER immediately
|
||||
if Input.is_action_just_pressed("center_camera"):
|
||||
if _canOrbit() and Input.is_action_just_pressed("center_camera"):
|
||||
_mode = CameraMode.MANUAL_CENTER
|
||||
|
||||
# In FREE mode, accumulate time toward auto-centering while the player is moving
|
||||
|
||||
@@ -22,11 +22,36 @@ func _exit_tree() -> void:
|
||||
self.area_entered.disconnect(_onAreaEntered)
|
||||
self.area_exited.disconnect(_onAreaExited)
|
||||
|
||||
func _process(_delta:float) -> void:
|
||||
if entity.movementType != Entity.MovementType.PLAYER:
|
||||
return
|
||||
if UI.INTERACT_INDICATOR and UI.INTERACT_INDICATOR.visible:
|
||||
UI.INTERACT_INDICATOR.updateWorldPosition()
|
||||
|
||||
func _getBestInteractable() -> Entity:
|
||||
for area in interactableAreas:
|
||||
if area.isInteractable():
|
||||
return area.entity
|
||||
return null
|
||||
|
||||
func _updateIndicator() -> void:
|
||||
if entity.movementType != Entity.MovementType.PLAYER:
|
||||
return
|
||||
if UI.INTERACT_INDICATOR == null:
|
||||
return
|
||||
var best:Entity = _getBestInteractable()
|
||||
if best:
|
||||
UI.INTERACT_INDICATOR.setEntity(best)
|
||||
else:
|
||||
UI.INTERACT_INDICATOR.clear()
|
||||
|
||||
func _onAreaEntered(area:Area3D) -> void:
|
||||
if area is EntityInteractableArea:
|
||||
if area.entity == entity:
|
||||
return
|
||||
interactableAreas.append(area)
|
||||
_updateIndicator()
|
||||
|
||||
func _onAreaExited(area:Area3D) -> void:
|
||||
interactableAreas.erase(area)
|
||||
_updateIndicator()
|
||||
|
||||
Reference in New Issue
Block a user