refactor: throw on uninitialized PlayerInteractionController instead of logging
This commit is contained in:
@@ -3,9 +3,9 @@ using Game.Features.Interactions.Application;
|
||||
using Game.Features.Interactions.Contracts;
|
||||
using Game.Features.Interactions.Domain;
|
||||
using Game.Features.Items.Contracts;
|
||||
using Game.Features.Logging.Contracts;
|
||||
using Game.Features.Players.Contracts;
|
||||
using Game.Godot;
|
||||
using Game.Godot.Exceptions;
|
||||
using Game.Godot.Extensions;
|
||||
using Game.Godot.Mappings;
|
||||
using Godot;
|
||||
@@ -35,10 +35,8 @@ public partial class PlayerInteractionController : Node, IItemSpawnPoint
|
||||
[Export]
|
||||
public Node3D RightHandAnchor;
|
||||
|
||||
private const string LogCategory = "PlayerInteraction";
|
||||
private IItemInteractionService _items;
|
||||
private IInteractionHandler _interactions;
|
||||
private ILogger _logger;
|
||||
private PlayerId _playerId;
|
||||
private readonly HashSet<Hand> _dropActions = [];
|
||||
private readonly ResolvePickupAvailability _resolvePickupAvailability = new();
|
||||
@@ -158,14 +156,12 @@ public partial class PlayerInteractionController : Node, IItemSpawnPoint
|
||||
public void Initialize(
|
||||
PlayerId playerId,
|
||||
IItemInteractionService items,
|
||||
IInteractionHandler interactions,
|
||||
ILogger logger
|
||||
IInteractionHandler interactions
|
||||
)
|
||||
{
|
||||
_playerId = playerId;
|
||||
_items = items;
|
||||
_interactions = interactions;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public Vector3 GetItemSpawnPosition() => CalculateDropPosition();
|
||||
@@ -179,9 +175,7 @@ public partial class PlayerInteractionController : Node, IItemSpawnPoint
|
||||
{
|
||||
if (_items is null || _interactions is null)
|
||||
{
|
||||
_logger?.Warning(LogCategory, "Skipped frame: controller not yet initialized.");
|
||||
PromptController.Clear();
|
||||
return;
|
||||
throw new ControllerNotInitializedException(Name);
|
||||
}
|
||||
|
||||
if (GamePause.IsPaused || !MouseCapture.IsCaptured)
|
||||
@@ -197,8 +191,7 @@ public partial class PlayerInteractionController : Node, IItemSpawnPoint
|
||||
{
|
||||
if (_items is null || _interactions is null)
|
||||
{
|
||||
_logger?.Warning(LogCategory, "Ignored input: controller not yet initialized.");
|
||||
return;
|
||||
throw new ControllerNotInitializedException(Name);
|
||||
}
|
||||
|
||||
if (GamePause.IsPaused || !MouseCapture.IsCaptured)
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
|
||||
namespace Game.Godot.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Thrown when a controller is used before it has been initialized.
|
||||
/// </summary>
|
||||
public sealed class ControllerNotInitializedException(string nodeName)
|
||||
: Exception(BuildMessage(nodeName))
|
||||
{
|
||||
public string NodeName { get; } = nodeName;
|
||||
|
||||
private static string BuildMessage(string nodeName)
|
||||
=> $"{nodeName}: controller was used before it was initialized.";
|
||||
}
|
||||
@@ -82,7 +82,7 @@ public partial class GameBootstrap : Node
|
||||
);
|
||||
ItemInteractionService itemInteractions = new(new HandsInventory(), ItemWorld, presenter);
|
||||
Interact interactions = new(interactionRegistry);
|
||||
PlayerInteraction.Initialize(new PlayerId(Guid.NewGuid()), itemInteractions, interactions, _logger);
|
||||
PlayerInteraction.Initialize(new PlayerId(Guid.NewGuid()), itemInteractions, interactions);
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
|
||||
Reference in New Issue
Block a user