Add RestaurantTrash interaction and refactor interaction handling logic
This commit is contained in:
parent
190fa64f45
commit
e27d9bb7bf
@ -426,7 +426,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 81e01dd8c1cc3404d805400eba1bb4ae, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_availableInteractions: 15
|
||||
_availableInteractions: 31
|
||||
_nearColliders:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
|
@ -12,6 +12,7 @@ public enum InteractionType : uint
|
||||
RestaurantManagement = 1u << 0,
|
||||
RestaurantOrder = 1u << 1,
|
||||
RestaurantCook = 1u << 3,
|
||||
RestaurantTrash = 1u << 4,
|
||||
All = 0xFFFFFFFFu
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,7 @@ public interface ICarrier
|
||||
bool IsCarrying();
|
||||
bool CanCarryTo(ICarriable carriable);
|
||||
void Carry(ICarriable carriable);
|
||||
void Use(ICarriable carriable);
|
||||
void Use();
|
||||
}
|
||||
|
||||
public interface ICarriable
|
||||
@ -78,7 +78,7 @@ public void Carry(ICarriable carriable)
|
||||
EventBus.Broadcast(evt);
|
||||
}
|
||||
|
||||
public void Use(ICarriable carriable)
|
||||
public void Use()
|
||||
{
|
||||
_currentCarriable = null;
|
||||
_speechBubble?.Hide();
|
||||
|
@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Sirenix.Serialization;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
@ -49,7 +51,7 @@ public class InteractionSubsystem_Order : MonoBehaviour, IInteractionSubsystemOb
|
||||
{
|
||||
[SerializeField] private RestaurantOrderType _currentRestaurantOrderType = RestaurantOrderType.Wait;
|
||||
[SerializeField] private RestaurantOrderObjectState _orderObjectState = new();
|
||||
|
||||
|
||||
public bool CanInteract()
|
||||
{
|
||||
if (GetInteractionSubsystemType() == RestaurantOrderType.Wait)
|
||||
|
@ -134,16 +134,41 @@ private bool TryGetSubsystem(InteractionType interactionType, out IInteractionSu
|
||||
return _subsystems.TryGetValue(interactionType, out subsystem);
|
||||
}
|
||||
|
||||
private bool FindCurrentInteractionDataEntry(out InteractionDataEntry interactionDataEntry)
|
||||
{
|
||||
string interactionType = _interactionType.ToString();
|
||||
string subsystemType = string.Empty;
|
||||
if (HasSubsystem(_interactionType) && GetSubsystem(_interactionType) != null)
|
||||
{
|
||||
subsystemType = GetSubsystem(_interactionType).GetCurrentSubsystemTypeName();
|
||||
}
|
||||
|
||||
bool dataFound = DataManager.Instance.GetDataAsset<InteractionDataAsset>().TryGetValueByTypeName(interactionType,
|
||||
subsystemType, out interactionDataEntry);
|
||||
if (!dataFound)
|
||||
{
|
||||
interactionDataEntry = new InteractionDataEntry();
|
||||
}
|
||||
return dataFound;
|
||||
}
|
||||
|
||||
// 새로운 스트럭트 기반 메서드들
|
||||
public virtual InteractionExecutionParameters GetExecutionParameters()
|
||||
{
|
||||
bool dataFound = FindCurrentInteractionDataEntry(out var interactionDataEntry);
|
||||
if (!dataFound)
|
||||
{
|
||||
return new InteractionExecutionParameters();
|
||||
}
|
||||
|
||||
_executionParameters = new InteractionExecutionParameters(interactionDataEntry.HoldTime);
|
||||
return _executionParameters;
|
||||
}
|
||||
|
||||
public virtual InteractionDisplayParameters GetDisplayParameters()
|
||||
{
|
||||
if (DataManager.Instance.GetDataAsset<InteractionDataAsset>().TryGetValueByTypeName(_interactionType.ToString(),
|
||||
_subsystems[_interactionType].GetCurrentSubsystemTypeName(), out var interactionDataEntry) == false)
|
||||
bool dataFound = FindCurrentInteractionDataEntry(out var interactionDataEntry);
|
||||
if (!dataFound)
|
||||
{
|
||||
return new InteractionDisplayParameters();
|
||||
}
|
||||
|
@ -11,7 +11,8 @@ public static class RestaurantInteractionEventSolvers
|
||||
{
|
||||
{InteractionType.RestaurantManagement, typeof(RestaurantManagementSolver)},
|
||||
{InteractionType.RestaurantOrder, typeof(RestaurantOrderSolver)},
|
||||
{InteractionType.RestaurantCook, typeof(RestaurantCookSolver)}
|
||||
{InteractionType.RestaurantCook, typeof(RestaurantCookSolver)},
|
||||
{InteractionType.RestaurantTrash, typeof(RestaurantTrashSolver)}
|
||||
};
|
||||
public static readonly Dictionary<InteractionType, Type> TypeToPlayerSolver = new()
|
||||
{
|
||||
|
@ -11,6 +11,11 @@ public override bool ExecuteInteractionSubsystem(IInteractor interactor, IIntera
|
||||
|
||||
public override bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject payload = null)
|
||||
{
|
||||
// Check carrying state
|
||||
var carrier = interactor?.GetInteractorGameObject()?.GetComponent<ICarrier>();
|
||||
if (carrier != null)
|
||||
return !carrier.IsCarrying();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ public override bool ExecuteInteractionSubsystem(IInteractor interactor, IIntera
|
||||
bool result = base.ExecuteInteractionSubsystem(interactor, interactable, payload);
|
||||
|
||||
// ExecuteInteractionSubsystem 이후에 음식 제거 - 미리 제거하면 CanExecute 통과 못 함
|
||||
carrier.Use(carrier.GetCurrentCarriable());
|
||||
carrier.Use();
|
||||
|
||||
// OnFoodServed (Consume Bill Hud item)
|
||||
RestaurantOrderEvent evt = new RestaurantOrderEvent
|
||||
|
@ -92,9 +92,8 @@ protected override int GetDisplayLayer()
|
||||
}
|
||||
else
|
||||
{
|
||||
return LayerMask.NameToLayer(LayerConstants.WorldUi);
|
||||
return base.GetDisplayLayer();
|
||||
}
|
||||
return base.GetDisplayLayer();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user