using System.Threading.Tasks; using Opsive.BehaviorDesigner.Runtime; using UnityEngine; using UnityEngine.AddressableAssets; namespace DDD { public class CustomerCharacter : RestaurantNpcCharacter, ICustomerInitializer { private CustomerData _customerData; public async void Initialize(CustomerData customerData) { _customerData = customerData; // 스킨 설정 _spineController.SetSkin(_customerData.SpineSkinKey); // CustomerType에 따른 behavior tree subtree 할당 await InitializeBehaviorTree(); } private async Task InitializeBehaviorTree() { var customerData = RestaurantData.Instance.CustomerData; if (customerData?.CustomerBehaviorData?.TryGetValue(_customerData.CustomerType, out var subtreeReference) != true) { Debug.LogError($"[CustomerCharacter] No behavior data found for CustomerType: {_customerData.CustomerType}"); return; } try { var subtree = await subtreeReference.LoadAssetAsync().Task; if (subtree != null) { _behaviorTree.Subgraph = subtree; _behaviorTree.StartBehavior(); } else { Debug.LogError($"[CustomerCharacter] Failed to load subtree for CustomerType: {_customerData.CustomerType}"); } } catch (System.Exception e) { Debug.LogError($"[CustomerCharacter] Error loading subtree for CustomerType {_customerData.CustomerType}: {e.Message}"); } } } }