ProjectDDD/Assets/_DDD/_Scripts/RestaurantCharacter/AI/RestaurantCustomerAiComponent.cs

57 lines
1.9 KiB
C#
Raw Normal View History

using System;
using System.Threading.Tasks;
using Opsive.BehaviorDesigner.Runtime;
using Unity.Entities;
using UnityEngine;
using UnityEngine.AddressableAssets;
namespace DDD
{
[RequireComponent(typeof(BehaviorTree))]
[RequireComponent(typeof(RestaurantCustomerBlackboardComponent))]
public class RestaurantCustomerAiComponent : MonoBehaviour, IRestaurantCustomerAi
{
protected BehaviorTree _behaviorTree;
protected RestaurantCustomerBlackboardComponent _blackboardComponent;
private void Awake()
{
_behaviorTree = GetComponent<BehaviorTree>();
_blackboardComponent = GetComponent<RestaurantCustomerBlackboardComponent>();
}
public void InitializeAi(CustomerData inCustomerData)
{
try
{
InitializeAiInternal(inCustomerData);
}
catch (Exception e)
{
// Log
Debug.LogError(e);
throw; // TODO 예외 처리
}
}
private async Task InitializeAiInternal(CustomerData inCustomerData)
{
var customerState = RestaurantState.Instance.CustomerState;
var subtree = customerState.GetLoadedSubtree(inCustomerData.CustomerType);
if (subtree == null)
{
Debug.LogError(
$"[CustomerCharacter] No preloaded subtree found for CustomerType: {inCustomerData.CustomerType}. Make sure CustomerBehaviorData is loaded.");
subtree = await customerState.GetOrLoadSubtree(inCustomerData.CustomerType);
}
_behaviorTree.Subgraph = subtree;
_blackboardComponent.InitializeWithBehaviorTree(subtree);
_blackboardComponent.SetCustomerData(inCustomerData);
// TODO : 1. Subtree - Action, Condition
// TODO : 2. Blackboard
_behaviorTree.StartBehavior();
}
}
}