0.3.2.5 버전 업데이트

This commit is contained in:
Nam Tae Gun 2024-10-27 18:44:22 +09:00
parent b54b4a8b43
commit 87f6ddf1ea
32 changed files with 326 additions and 172 deletions

View File

@ -20747,7 +20747,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
version: 1073741824
data:
dataString: UEsDBBQAAAgIAABIIeyASX/muwIAAAEGAAALACQAZ3JhcGgwLmpzb24KACAAAAAAAAEAGAAAgD7V3rGdAQCAPtXesZ0BAIA+1d6xnQFlVE1v4jAQ/SvI56VKoKVlb7tA2z20RaWrHjY9OPGEWBg78keBVvz3HTuGBEBIid58vXkzk2/CpamhsEo/aM6eFAPys0f8O/nRa42PsKVLJRf8Cw4+75zZyjvR4PNKLVeIpz7MqDVYzYtfcim8c4Kgk7xUej1jS5goYw3CJRUG0KSV9dESoe8e2caAXXx++Wdvj28FSAv60qufXKXRsZ8Or8bhFyKcLARd18A88zZwcIgcNIkl9hQ9kqsbX0kJwU2kROyuDi1PaG0cNoQOjFNsMZBpilfAl5W9TPBSlgYaPPEGTXdTrlGwJjn5rRoV19SsGoKfVDhfbnh3Hcg1mZ8u7KPGXGq1fjwUTxPfma14sXqlu4Ia25G5C09b/mnQaUPFiuYC3iuQz+pBKycZGq12PtQZGEw7qY7tTSooVq1fw/UMdPXlyNJ2sPvQ/XZhoX5sRbxu0b8GzEKoMIOY0lsiMvYpQeME/2A/YY9MLISo54jxb3TZXbhouOfaWDRFPhH1vnOcEDCQBUTd+95Benq5ctrnIrPA1Yvh7ERpCQGOBGuQVNjdHDPaky24tHV4nVnuqb+9yC7aDid1FhLg1j9JzkxztTkOW+MOm7DYh7d/H34IplKbJzDVi7OCy47a3vCMAk+UlM3mdsU8hC2cLmnRCbOwtU7DlFoaqiEdXDDWDUUtQ4R0QvhdDg0ERtiA/394fSuKdUWAybOS4QBPnoH+0nF2eiEkobd0zPLyZpDmo9u7vD/Mh5AXMMyTEYPROCXhhLhEuamYN3rFKeF2ybYXiefiM76CsdRpKsPkmaabB/61Vp3Jc1mqRaEB5EuT4dgsaCyCXxk2YxzbXIC1XIa9JN8ZEapYAcuOibIg7GxrNc3aLBmp+aeyHsnIJHwPM+Lh40Xi6n5y2PjiJ8lA4OiAvXEBa1p7U7In+/9QSwMEFAAACAgAAEgh7P2jyVJrAAAAdwAAAAkAJABtZXRhLmpzb24KACAAAAAAAAEAGAAAgD7V3rGdAQCAPtXesZ0BAIA+1d6xnQGrVipLLSrOzM9TslIw1TPUM9RRUEovSizIKAYKgDmlmSkgdrSSQaJ5omVKUpqpkWGSmblFkq5xknFqUnKqcZKBWUqqmaWhUixQfUllQapfYm4qRE9AYklGWmZeSmZeup57UWaKO8hopdhaAFBLAQItABQAAAgIAABIIeyASX/muwIAAAEGAAALACQAAAAAAAAAAAAAAAAAAABncmFwaDAuanNvbgoAIAAAAAAAAQAYAACAPtXesZ0BAIA+1d6xnQEAgD7V3rGdAVBLAQItABQAAAgIAABIIez9o8lSawAAAHcAAAAJACQAAAAAAAAAAAAAAAgDAABtZXRhLmpzb24KACAAAAAAAAEAGAAAgD7V3rGdAQCAPtXesZ0BAIA+1d6xnQFQSwUGAAAAAAIAAgC4AAAAvgMAAAAA
dataString: UEsDBBQAAAgIAABIIeyIBIXztwIAAPUFAAALACQAZ3JhcGgwLmpzb24KACAAAAAAAAEAGAAAgD7V3rGdAQCAPtXesZ0BAIA+1d6xnQFlVE1v4jAQ/SvI56WC0tKyt12g7R7aotJVD0sPTjwhFsaO/FGgFf99ZxxDApUiJXrzZubNV76Y1K6C3Bt7b6V4NALYzw6jb/aj0xgfYMuXRs/lJxw4b1L4kkg8cl64lwbxPrk5swZvZf5LLxWRewgGLQtj11OxhLFx3iFccOUATdZ48tYIfXXYNjns0vuT3p09fuWgPdjvrG7vop+I3dHFdeQGnSu+rkCQ5salf5N8RpGlsZhEqGPkRinpkhbmd1WsdcwrF7ASJAjJsbaogvglyGXpo/t12/25KBz4pNHy3URabFIdl/02defW3K1qaR9cBco0uL2Kuuqwj9/sw9pcWLN+OGTu9yiHL2W+euG7nDvfam0bnpxKD3rD1YpnCt5K0E/m3pqgBRq9DeQaHFxOWqGOtY1LyFcNr9Z6Bobq+5j6zTD3sfrt3EP10HTwqkH/OnBzZWL7U0iyJGREIcHi8P5gPXF3XEqEKGlE/1e+bC9ZMtxJ6zyakp6EEneGEwIBOofU9y4RNMnLTLAUi02jVmpG8GNjNUQ4CaxAc+V3M4zoz1fgzNbSdWa543RvSV2yHc7ozCXCDb/XOzPNzOY4bIvr6+JOH77+vdMQXGk2j+DK5+CV1K1uk+EJGzw2Wteb227mwW0ebMHzlpuHrQ8WJtzzmA3l4IKJtiv2MnrooBTtciwgKsIC6Hmn/pYc86oIsyej4+2dvKP8ZZDi9EJYj9/wkciK68t+Nry5zbqDbABZDoOsNxQwHPVZPCGpsd1czep+pSnhdummFo3nQhFfwHkeLNdx8sLyzb38XJvW5KUuzDy3APq5jnAsFiwmwR+MmAqJZc7Be6njXrKvBVMmX4FYHAMtYmOnW2/5oomyYJX8MJ6QBRvHf+CCEXy8SFzdDwkbSn4SDBSODsSrVLDmFZl6e7b/D1BLAwQUAAAICAAASCHs/aPJUmsAAAB3AAAACQAkAG1ldGEuanNvbgoAIAAAAAAAAQAYAACAPtXesZ0BAIA+1d6xnQEAgD7V3rGdAatWKkstKs7Mz1OyUjDVM9Qz1FFQSi9KLMgoBgqAOaWZKSB2tJJBonmiZUpSmqmRYZKZuUWSrnGScWpScqpxkoFZSqqZpaFSLFB9SWVBql9ibipET0BiSUZaZl5KZl66nntRZoo7yGil2FoAUEsBAi0AFAAACAgAAEgh7IgEhfO3AgAA9QUAAAsAJAAAAAAAAAAAAAAAAAAAAGdyYXBoMC5qc29uCgAgAAAAAAABABgAAIA+1d6xnQEAgD7V3rGdAQCAPtXesZ0BUEsBAi0AFAAACAgAAEgh7P2jyVJrAAAAdwAAAAkAJAAAAAAAAAAAAAAABAMAAG1ldGEuanNvbgoAIAAAAAAAAQAYAACAPtXesZ0BAIA+1d6xnQEAgD7V3rGdAVBLBQYAAAAAAgACALgAAAC6AwAAAAA=
file_cachedStartup: {fileID: 0}
cacheStartup: 0
showNavGraphs: 1

View File

@ -21,7 +21,7 @@ namespace BlueWater.BehaviorTrees.Actions
var orderedCustomer = tycoonManager.CustomerController.FindCustomerMatchingItem(_serverCrew.CurrentPickupItem);
if (orderedCustomer)
{
_serverCrew.OnMission(orderedCustomer, orderedCustomer);
_serverCrew.OnMission(orderedCustomer, orderedCustomer, ActionType.ServingToCustomer);
return TaskStatus.Success;
}
@ -29,8 +29,7 @@ namespace BlueWater.BehaviorTrees.Actions
var emptyServingTable = tycoonManager.ServingTableController.FindEmptyServingTable();
if (emptyServingTable)
{
_serverCrew.OnMission(emptyServingTable);
_serverCrew.AIMovement.Move(emptyServingTable.CenterTransform.position);
_serverCrew.OnMission(emptyServingTable, null, ActionType.PlaceOnServingTable);
return TaskStatus.Success;
}

View File

@ -23,7 +23,7 @@ namespace BlueWater.BehaviorTrees.Actions
public override TaskStatus OnUpdate()
{
if (_crew.CrewInteraction == null || !_crew.CrewInteraction.CanInteractionCrew())
if (_crew.CrewInteraction == null || !_crew.CrewInteraction.CanInteractionCrew(_crew))
{
_crew.AIMovement.StopMove();
_crew.ResetMission();

View File

@ -29,7 +29,7 @@ namespace BlueWater.BehaviorTrees.Actions
public override TaskStatus OnUpdate()
{
if (!_serverCrew.CrewInteraction.CanInteractionCrew())
if (!_serverCrew.CrewInteraction.CanInteractionCrew(_serverCrew))
{
_serverCrew.AIMovement.StopMove();
_serverCrew.CanNotServing();

View File

@ -15,7 +15,7 @@ namespace BlueWater.BehaviorTrees.Actions
public override void OnStart()
{
if (_serverCrew.CrewInteraction != null && _serverCrew.CurrentPickupItem == null)
if (_serverCrew.CrewInteraction != null)
{
_serverCrew.AIMovement.Move(_serverCrew.CrewInteraction.CenterTransform.position);
}
@ -25,7 +25,8 @@ namespace BlueWater.BehaviorTrees.Actions
{
if (_serverCrew.CurrentPickupItem != null) return TaskStatus.Success;
if (_serverCrew.CrewInteraction == null || !_serverCrew.CrewInteraction.CanInteractionCrew() || !_serverCrew.OrderedCustomer.CanInteractionCrew())
if (_serverCrew.CrewInteraction == null || !_serverCrew.CrewInteraction.CanInteractionCrew(_serverCrew) ||
_serverCrew.OrderedCustomer == null || !_serverCrew.OrderedCustomer.CanInteractionCrew())
{
_serverCrew.AIMovement.StopMove();
_serverCrew.ResetMission();

View File

@ -3,11 +3,21 @@ using BlueWater.Npcs.Customers;
namespace BlueWater.Npcs.Crews.Server
{
public enum ActionType
{
None = 0,
Patrol,
TakeCocktail,
PlaceOnServingTable,
ServingToCustomer
}
public class ServerCrew : Crew
{
public Customer OrderedCustomer { get; private set; }
public IPickup CurrentPickupItem { get; private set; }
public bool IsServing { get; private set; }
public ActionType CurrentActionType { get; private set; }
public StateMachineController<ServerCrew> StateMachineController { get; private set; }
public IStateMachine<ServerCrew> IdleState { get; private set; }
@ -22,6 +32,7 @@ namespace BlueWater.Npcs.Crews.Server
public override void Initialize()
{
CurrentActionType = ActionType.Patrol;
IdleState = new IdleState();
WalkingState = new WalkingState();
ServingState = new ServingState();
@ -33,6 +44,8 @@ namespace BlueWater.Npcs.Crews.Server
public override void ResetMission()
{
CurrentActionType = ActionType.Patrol;
CrewInteraction = null;
IsOnMission = false;
BalloonUi.DiscardItem();
@ -53,10 +66,11 @@ namespace BlueWater.Npcs.Crews.Server
return CrewInteraction == null && !OrderedCustomer && CurrentPickupItem == null && !IsServing;
}
public void OnMission(ICrewInteraction crewInteraction, Customer orderedCustomer)
public void OnMission(ICrewInteraction crewInteraction, Customer orderedCustomer, ActionType actionType)
{
base.OnMission(crewInteraction);
OrderedCustomer = orderedCustomer;
CurrentActionType = actionType;
}
public void TakeFromServingTable(IPickup pickupItem, Customer orderedCustomer)

View File

@ -339,9 +339,9 @@ namespace BlueWater.Npcs.Customers
throw new NotImplementedException();
}
public bool CanInteractionCrew()
public bool CanInteractionCrew(Crew crew = null)
{
return !IsReceivedItem;
return !IsReceivedItem && CurrentTableSeat;
}
public virtual void ShowInteractionUi()

View File

@ -133,13 +133,6 @@ namespace BlueWater
OnPlaceOnServingTable?.Invoke();
}
// 플레이어가 서빙테이블에 있는 칵테일을 가져오는 이벤트
public static Action OnTakeFromServingTable;
public static void InvokeTakeFromServingTable()
{
OnTakeFromServingTable?.Invoke();
}
// Npc
// 손님 생성 이벤트
public static Action OnCreateCustomer;

View File

@ -14,7 +14,7 @@ namespace BlueWater.Interfaces
void InteractionCrew(Crew crew);
void CancelInteractionCrew();
bool CanInteractionCrew();
bool CanInteractionCrew(Crew crew = null);
event Action OnInteractionCompleted;
}

View File

@ -1,6 +1,5 @@
using System;
using BlueWater.Items;
using BlueWater.Players.Tycoons;
using Sirenix.OdinInspector;
using UnityEngine;
@ -26,8 +25,18 @@ namespace BlueWater.Tycoons
[field: SerializeField]
public int CurrentAmount { get; private set; }
[field: SerializeField]
public bool IsActivated { get; private set; }
[SerializeField]
private bool _isActivated;
public bool IsActivated
{
get => _isActivated;
private set
{
_isActivated = value;
_liquidImage.sprite = _isActivated ? _liquidData.Sprite : DataManager.Instance.SpriteDataSo.Lock;
}
}
private Material _instanceMaterial;
@ -49,10 +58,12 @@ namespace BlueWater.Tycoons
SetCurrentAmount(0);
}
private void Start()
protected override void Start()
{
base.Start();
_liquidImage.sprite = _isActivated ? _liquidData.Sprite : DataManager.Instance.SpriteDataSo.Lock;
InteractionMessage = $"{_liquidData.Name} 따르기";
_liquidImage.sprite = _liquidData.Sprite;
_instanceMaterial.SetColor(LiquidColorHash, _liquidData.Color * _colorIntensity);
}

View File

@ -1,4 +1,7 @@
using System;
using BlueWater.Interfaces;
using BlueWater.Npcs.Crews;
using BlueWater.Npcs.Crews.Server;
namespace BlueWater.Tycoons
{
@ -9,12 +12,12 @@ namespace BlueWater.Tycoons
// 테이블의 칵테일을 가져가는 경우
if (CurrentPickupItem != null)
{
EventManager.InvokeTakeFromServingTable();
CurrentTycoonPlayer.TycoonPickupHandler.PickupItem(CurrentPickupItem);
CurrentTycoonPlayer.InteractionCanvas.BalloonUi.SetItemImage(CurrentPickupItem);
CocktailGlassImage.enabled = false;
InteractionCanvas.BalloonUi.DiscardItem();
CurrentPickupItem = null;
OrderedCustomer = null;
}
}
@ -23,9 +26,15 @@ namespace BlueWater.Tycoons
return CurrentPickupItem != null && !CurrentTycoonPlayer.TycoonPickupHandler.IsPickedUpCocktail();
}
public override bool CanInteractionCrew()
public override bool CanInteractionCrew(Crew crew = null)
{
return CurrentPickupItem != null && _orderedCustomer != null;
var servingCrew = (ServerCrew)crew;
if (!servingCrew)
{
throw new Exception("상호작용 오브젝트 오류");
}
return servingCrew.CurrentActionType == ActionType.TakeCocktail && CurrentPickupItem != null && OrderedCustomer;
}
public void CompleteMakingCocktail(IPickup cocktailData)

View File

@ -36,9 +36,10 @@ namespace BlueWater.Tycoons
protected bool IsOpened;
protected TycoonPlayer CurrentTycoonPlayer;
protected Material OriginalMaterial;
protected bool IsQuitting;
protected bool IsShowing;
protected Material OriginalMaterial;
protected float HoldingElapsedTime;
private void OnDrawGizmosSelected()
{
@ -62,6 +63,11 @@ namespace BlueWater.Tycoons
RegisterPlayerInteraction();
}
protected virtual void Start()
{
}
protected virtual void OnDisable()
{
if (IsQuitting) return;
@ -101,6 +107,7 @@ namespace BlueWater.Tycoons
{
VisualLook.material = OutlineMaterial;
EventManager.InvokeShowInteractionUi(InteractionMessage);
EventManager.InvokeHoldInteracting(HoldingElapsedTime);
IsShowing = true;
}

View File

@ -45,10 +45,10 @@ namespace BlueWater.Tycoons
}
}
protected Customer OrderedCustomer;
private Material _originalCocktailGlassMaterial;
private Coroutine _findCustomerMatchingItemInstance;
private Coroutine _findServerCrewInstance;
protected Customer _orderedCustomer;
public event Action OnInteractionCompleted;
@ -64,21 +64,21 @@ namespace BlueWater.Tycoons
// 테이블의 칵테일을 가져가는 경우
if (CurrentPickupItem != null)
{
EventManager.InvokeTakeFromServingTable();
CurrentTycoonPlayer.TycoonPickupHandler.PickupItem(CurrentPickupItem);
CurrentTycoonPlayer.InteractionCanvas.BalloonUi.SetItemImage(CurrentPickupItem);
CocktailGlassImage.enabled = false;
InteractionCanvas.BalloonUi.DiscardItem();
CurrentPickupItem = null;
OrderedCustomer = null;
}
// 테이블에 칵테일을 놓는 경우
else
{
EventManager.InvokePlaceOnServingTable();
CurrentPickupItem = CurrentTycoonPlayer.TycoonPickupHandler.GetCurrentPickupItem();
CurrentTycoonPlayer.TycoonPickupHandler.GiveItem(CurrentPickupItem);
CurrentTycoonPlayer.InteractionCanvas.BalloonUi.DiscardItem();
InteractionCanvas.BalloonUi.SetItemImage(CurrentPickupItem);
CurrentTycoonPlayer.TycoonPickupHandler.DiscardItem();
CurrentTycoonPlayer.InteractionCanvas.BalloonUi.DiscardItem();
CocktailGlassImage.enabled = true;
}
}
@ -108,15 +108,17 @@ namespace BlueWater.Tycoons
public void InteractionCrew(Crew crew)
{
// 테이블의 칵테일을 가져가는 경우
// 종업원이 테이블의 칵테일을 가져가는 경우
if (CurrentPickupItem != null)
{
var serverCrew = (ServerCrew)crew;
serverCrew.TakeFromServingTable(CurrentPickupItem, _orderedCustomer);
serverCrew.TakeFromServingTable(CurrentPickupItem, OrderedCustomer);
CocktailGlassImage.enabled = false;
InteractionCanvas.BalloonUi.DiscardItem();
CurrentPickupItem = null;
OrderedCustomer = null;
}
// 종업원이 테이블에 칵테일을 놓는 경우
else
{
var serverCrew = (ServerCrew)crew;
@ -132,10 +134,16 @@ namespace BlueWater.Tycoons
throw new NotImplementedException();
}
public virtual bool CanInteractionCrew()
public virtual bool CanInteractionCrew(Crew crew = null)
{
return (CurrentPickupItem != null && _orderedCustomer != null) ||
CurrentPickupItem == null;
var servingCrew = (ServerCrew)crew;
if (!servingCrew)
{
throw new Exception("상호작용 오브젝트 오류");
}
return (servingCrew.CurrentActionType == ActionType.TakeCocktail && CurrentPickupItem != null && OrderedCustomer) ||
servingCrew.CurrentActionType == ActionType.PlaceOnServingTable && CurrentPickupItem == null;
}
private IEnumerator FindCustomerMatchingItem()
@ -143,12 +151,13 @@ namespace BlueWater.Tycoons
var waitTime = new WaitForSeconds(2f);
while (true)
{
_orderedCustomer = TycoonManager.Instance.CustomerController.FindCustomerMatchingItem(_currentPickupItem);
if (_orderedCustomer && _orderedCustomer.CanInteractionCrew())
OrderedCustomer = TycoonManager.Instance.CustomerController.FindCustomerMatchingItem(_currentPickupItem);
if (OrderedCustomer && OrderedCustomer.CanInteractionCrew())
{
var crewController = TycoonManager.Instance.CrewController;
Utils.StartUniqueCoroutine(this, ref _findServerCrewInstance,
crewController.FindClosestCrewCoroutine(CenterTransform.position, crewController.ServerCrews, crew => crew.OnMission(this, _orderedCustomer)));
crewController.FindClosestCrewCoroutine(CenterTransform.position, crewController.ServerCrews,
crew => crew.OnMission(this, OrderedCustomer, ActionType.TakeCocktail)));
}
yield return waitTime;

View File

@ -1,6 +1,4 @@
using System;
using System.Collections;
using System.Linq;
using BlueWater.Interfaces;
using BlueWater.Npcs.Crews;
using BlueWater.Npcs.Crews.Cleaner;
@ -33,20 +31,14 @@ namespace BlueWater.Tycoons
[field: SerializeField]
public int TableNumber;
[SerializeField]
private Sprite _foodImage;
[SerializeField]
private Sprite _dirtyImage;
[SerializeField]
private float _interactionHoldingTime = 3f;
private Sprite _fullBeerGlass;
private Sprite _emptyBeerGlass;
private Coroutine _findCleanerCrewInstance;
private bool _isPlayerInteracting;
private bool _isCrewInteracting;
private float _playerElapsedTime;
private float _crewElapsedTime;
public event Action OnInteractionCompleted;
@ -57,6 +49,14 @@ namespace BlueWater.Tycoons
Initialize();
}
protected override void Start()
{
base.Start();
_fullBeerGlass = DataManager.Instance.SpriteDataSo.FullBeerGlass;
_emptyBeerGlass = DataManager.Instance.SpriteDataSo.EmptyBeerGlass;
}
private void Update()
{
if (InteractionCanvas.BalloonUi.IsWaitTimeOver())
@ -66,27 +66,12 @@ namespace BlueWater.Tycoons
CleanTable();
}
if (_isPlayerInteracting)
{
if (_playerElapsedTime > _interactionHoldingTime)
{
CleanTable();
}
_playerElapsedTime += Time.deltaTime;
}
else
{
if (_playerElapsedTime > 0f)
{
_playerElapsedTime -= Time.deltaTime;
}
}
if (IsCleaned) return;
var holdingGauge = 0f;
if (_playerElapsedTime > 0f)
if (HoldingElapsedTime > 0f)
{
holdingGauge = Mathf.Clamp(_playerElapsedTime / _interactionHoldingTime, 0f, 1f);
holdingGauge = Mathf.Clamp(HoldingElapsedTime / _interactionHoldingTime, 0f, 1f);
}
if (IsShowing)
@ -94,16 +79,32 @@ namespace BlueWater.Tycoons
EventManager.InvokeHoldInteracting(holdingGauge);
}
if (_isCrewInteracting)
if (HoldingElapsedTime > _interactionHoldingTime)
{
if (_crewElapsedTime > _interactionHoldingTime)
if (_isCrewInteracting)
{
OnInteractionCompleted?.Invoke();
OnInteractionCompleted = null;
CleanTable();
}
_crewElapsedTime += Time.deltaTime;
CleanTable();
}
if (_isPlayerInteracting)
{
HoldingElapsedTime += Time.deltaTime;
}
if (_isCrewInteracting)
{
HoldingElapsedTime += Time.deltaTime;
}
if (!_isPlayerInteracting && !_isCrewInteracting)
{
if (HoldingElapsedTime > 0f)
{
HoldingElapsedTime -= Time.deltaTime;
}
}
}
@ -120,7 +121,7 @@ namespace BlueWater.Tycoons
public void SetFood()
{
Food.sprite = _foodImage;
Food.sprite = _fullBeerGlass;
Food.enabled = true;
}
@ -155,14 +156,14 @@ namespace BlueWater.Tycoons
_isCrewInteracting = false;
InteractionCanvas.BalloonUi.HideUi();
InteractionCanvas.BalloonUi.ResetUi();
_playerElapsedTime = 0f;
HoldingElapsedTime = 0f;
}
public void DirtyTable()
{
Food.sprite = _dirtyImage;
Food.sprite = _emptyBeerGlass;
Food.enabled = true;
InteractionCanvas.BalloonUi.OrderItem(_dirtyImage, 0, TycoonManager.Instance.TycoonStageController.StageDataSo.DirtyTableWaitTime);
InteractionCanvas.BalloonUi.OrderItem(_emptyBeerGlass, 0, TycoonManager.Instance.TycoonStageController.StageDataSo.DirtyTableWaitTime);
IsCleaned = false;
var crewController = TycoonManager.Instance.CrewController;
@ -172,20 +173,18 @@ namespace BlueWater.Tycoons
public void InteractionCrew(Crew crew)
{
_crewElapsedTime = 0f;
_isCrewInteracting = true;
((CleanerCrew)crew).SetIsCleaningTable(true);
}
public void CancelInteractionCrew()
{
_crewElapsedTime = 0f;
_isCrewInteracting = false;
}
public bool CanInteractionCrew()
public bool CanInteractionCrew(Crew crew = null)
{
return !_isPlayerInteracting;
return !IsCleaned;
}
}
}

View File

@ -17,8 +17,6 @@ namespace BlueWater.Tycoons
private Coroutine _findCleanerCrewInstance;
private bool _isPlayerInteracting;
private bool _isCrewInteracting;
private float _playerElapsedTime;
private float _crewElapsedTime;
public event Action OnInteractionCompleted;
@ -38,27 +36,10 @@ namespace BlueWater.Tycoons
Destroy();
}
if (_isPlayerInteracting)
{
if (_playerElapsedTime > _interactionHoldingTime)
{
Destroy();
}
_playerElapsedTime += Time.deltaTime;
}
else
{
if (_playerElapsedTime > 0f)
{
_playerElapsedTime -= Time.deltaTime;
}
}
var holdingGauge = 0f;
if (_playerElapsedTime > 0f)
if (HoldingElapsedTime > 0f)
{
holdingGauge = Mathf.Clamp(_playerElapsedTime / _interactionHoldingTime, 0f, 1f);
holdingGauge = Mathf.Clamp(HoldingElapsedTime / _interactionHoldingTime, 0f, 1f);
}
if (IsShowing)
@ -66,16 +47,32 @@ namespace BlueWater.Tycoons
EventManager.InvokeHoldInteracting(holdingGauge);
}
if (_isCrewInteracting)
if (HoldingElapsedTime > _interactionHoldingTime)
{
if (_crewElapsedTime > _interactionHoldingTime)
if (_isCrewInteracting)
{
OnInteractionCompleted?.Invoke();
OnInteractionCompleted = null;
Destroy();
}
_crewElapsedTime += Time.deltaTime;
Destroy();
}
if (_isPlayerInteracting)
{
HoldingElapsedTime += Time.deltaTime;
}
if (_isCrewInteracting)
{
HoldingElapsedTime += Time.deltaTime;
}
if (!_isPlayerInteracting && !_isCrewInteracting)
{
if (HoldingElapsedTime > 0f)
{
HoldingElapsedTime -= Time.deltaTime;
}
}
}
@ -123,9 +120,9 @@ namespace BlueWater.Tycoons
_isCrewInteracting = false;
}
public bool CanInteractionCrew()
public bool CanInteractionCrew(Crew crew = null)
{
return !_isPlayerInteracting;
return true;
}
}
}

View File

@ -13,3 +13,6 @@ MonoBehaviour:
m_Name: SpriteData
m_EditorClassIdentifier:
<Gold>k__BackingField: {fileID: 21300000, guid: 51c11bee66d04f64d8d44afcb9975321, type: 3}
<EmptyBeerGlass>k__BackingField: {fileID: 21300000, guid: cda1d961a563b6143a024170ed6f0f44, type: 3}
<FullBeerGlass>k__BackingField: {fileID: 21300000, guid: 514247b5965aef447b13b5da95f3281a, type: 3}
<Lock>k__BackingField: {fileID: 21300000, guid: 8ef64d8ac85ff4681987c8b621bef86b, type: 3}

View File

@ -9,6 +9,12 @@ namespace BlueWater
public Sprite Gold { get; private set; }
[field: SerializeField]
public Sprite UnfinishedCocktail { get; private set; }
public Sprite EmptyBeerGlass { get; private set; }
[field: SerializeField]
public Sprite FullBeerGlass { get; private set; }
[field: SerializeField]
public Sprite Lock { get; private set; }
}
}

View File

@ -136,12 +136,12 @@ namespace BlueWater.Tycoons
{
foreach (var element in BartenderCrews)
{
if (orderedCustomer.IsReceivedItem) yield break;
if (element.MyBartenderTable.CurrentPickupItem != null || element.IsOnMission) continue;
var orderedCocktailIngredients = orderedCustomer.OrderedCocktailData.ValidIngredients;
if (!tycoonIngredientController.IsMakingCocktail(orderedCocktailIngredients)) break;
if (element.MyBartenderTable.CurrentPickupItem != null || element.IsOnMission) continue;
if (orderedCustomer.IsReceivedItem || orderedCustomer.IsMatchedServer) yield break;
element.SetOrderedCustomer(orderedCustomer);
tycoonIngredientController.ConsumeMakingCocktailIngredient(orderedCocktailIngredients);

View File

@ -69,13 +69,6 @@ namespace BlueWater.Uis
public void SetItemImage(IPickup item)
{
//_orderItemData = ItemManager.Instance.GetItemDataByIdx(foodIdx);
// if (_orderItemData == null)
// {
// Debug.LogError($"{foodIdx} 해당 음식을 등록할 수 없습니다.");
// return;
// }
if (!item.Sprite)
{
Debug.LogWarning($"{item.Sprite} 해당 음식의 이미지가 없습니다.");

View File

@ -85,6 +85,7 @@ namespace BlueWater
private void OnDestroy()
{
_slider.onValueChanged.RemoveListener(OnSliderValueChanged);
DOTween.Kill(_rect);
}
private void OnSliderValueChanged(float value)
@ -94,6 +95,8 @@ namespace BlueWater
public void Move(BillInfo billInfo)
{
if (!_rect) return;
if (CurrentBillInfo != null)
{
CurrentBillInfo.IsEmpty = true;
@ -119,6 +122,8 @@ namespace BlueWater
private void OnArrivedTarget()
{
if (!_rect) return;
CurrentBillInfo.IsMoving = false;
var randomZ = Random.Range(-15f, 15f);
var arrivedSequence = DOTween.Sequence();

View File

@ -200,6 +200,7 @@ GameObject:
- component: {fileID: 479823629690914954}
- component: {fileID: 2588384133887034894}
- component: {fileID: 2961986041977982893}
- component: {fileID: 2322101151879677010}
m_Layer: 14
m_Name: VisualLook
m_TagString: Untagged
@ -319,6 +320,18 @@ MonoBehaviour:
_animationName: Idle
loop: 1
timeScale: 1
--- !u!210 &2322101151879677010
SortingGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 813964778509222274}
m_Enabled: 1
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 5
m_SortAtRoot: 0
--- !u!1 &2781393898199067900
GameObject:
m_ObjectHideFlags: 0
@ -604,13 +617,13 @@ CapsuleCollider:
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_Bits: 256
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.1
m_Radius: 0.25
m_Height: 0.5
m_Direction: 1
m_Center: {x: 0, y: 0.25, z: 0}
@ -655,7 +668,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
version: 1073741824
radius: 0.1
radius: 0.25
height: 0.5
canMove: 1
maxSpeed: 2
@ -663,7 +676,7 @@ MonoBehaviour:
groundMask:
serializedVersion: 2
m_Bits: 4294967295
endReachedDistance: 0.5
endReachedDistance: 0.2
whenCloseToDestination: 0
rvoDensityBehavior:
enabled: 1

View File

@ -200,6 +200,7 @@ GameObject:
- component: {fileID: 479823629690914954}
- component: {fileID: 2588384133887034894}
- component: {fileID: 2961986041977982893}
- component: {fileID: 1143287283172291005}
m_Layer: 14
m_Name: VisualLook
m_TagString: Untagged
@ -319,6 +320,18 @@ MonoBehaviour:
_animationName: Idle
loop: 1
timeScale: 1
--- !u!210 &1143287283172291005
SortingGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 813964778509222274}
m_Enabled: 1
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 5
m_SortAtRoot: 0
--- !u!1 &2781393898199067900
GameObject:
m_ObjectHideFlags: 0
@ -604,13 +617,13 @@ CapsuleCollider:
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_Bits: 256
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.1
m_Radius: 0.25
m_Height: 0.5
m_Direction: 1
m_Center: {x: 0, y: 0.25, z: 0}
@ -655,7 +668,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
version: 1073741824
radius: 0.1
radius: 0.25
height: 0.5
canMove: 1
maxSpeed: 2
@ -663,7 +676,7 @@ MonoBehaviour:
groundMask:
serializedVersion: 2
m_Bits: 4294967295
endReachedDistance: 0.5
endReachedDistance: 0.2
whenCloseToDestination: 0
rvoDensityBehavior:
enabled: 1

View File

@ -200,6 +200,7 @@ GameObject:
- component: {fileID: 479823629690914954}
- component: {fileID: 2588384133887034894}
- component: {fileID: 2961986041977982893}
- component: {fileID: 1333026624613754047}
m_Layer: 14
m_Name: VisualLook
m_TagString: Untagged
@ -319,6 +320,18 @@ MonoBehaviour:
_animationName: Idle
loop: 1
timeScale: 1
--- !u!210 &1333026624613754047
SortingGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 813964778509222274}
m_Enabled: 1
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 5
m_SortAtRoot: 0
--- !u!1 &2781393898199067900
GameObject:
m_ObjectHideFlags: 0
@ -604,13 +617,13 @@ CapsuleCollider:
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_Bits: 256
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.1
m_Radius: 0.25
m_Height: 0.5
m_Direction: 1
m_Center: {x: 0, y: 0.25, z: 0}
@ -655,7 +668,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
version: 1073741824
radius: 0.1
radius: 0.25
height: 0.5
canMove: 1
maxSpeed: 2
@ -663,7 +676,7 @@ MonoBehaviour:
groundMask:
serializedVersion: 2
m_Bits: 4294967295
endReachedDistance: 0.5
endReachedDistance: 0.2
whenCloseToDestination: 0
rvoDensityBehavior:
enabled: 1

View File

@ -200,6 +200,7 @@ GameObject:
- component: {fileID: 479823629690914954}
- component: {fileID: 2588384133887034894}
- component: {fileID: 2961986041977982893}
- component: {fileID: 4034770193240481967}
m_Layer: 14
m_Name: VisualLook
m_TagString: Untagged
@ -318,6 +319,18 @@ MonoBehaviour:
_animationName: Idle
loop: 1
timeScale: 1
--- !u!210 &4034770193240481967
SortingGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 813964778509222274}
m_Enabled: 1
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 5
m_SortAtRoot: 0
--- !u!1 &2781393898199067900
GameObject:
m_ObjectHideFlags: 0
@ -913,13 +926,13 @@ CapsuleCollider:
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_Bits: 256
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.1
m_Radius: 0.25
m_Height: 0.5
m_Direction: 1
m_Center: {x: 0, y: 0.25, z: 0}
@ -964,7 +977,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
version: 1073741824
radius: 0.1
radius: 0.25
height: 0.5
canMove: 1
maxSpeed: 2
@ -972,7 +985,7 @@ MonoBehaviour:
groundMask:
serializedVersion: 2
m_Bits: 4294967295
endReachedDistance: 0.5
endReachedDistance: 0.2
whenCloseToDestination: 0
rvoDensityBehavior:
enabled: 1
@ -1134,16 +1147,19 @@ MonoBehaviour:
<Name>k__BackingField:
<RatioRange>k__BackingField: 0
<IngredientIdx1>k__BackingField:
<IngredientAmount1>k__BackingField: 0
<IngredientRatio1>k__BackingField: 0
<IngredientIdx2>k__BackingField:
<IngredientAmount2>k__BackingField: 0
<IngredientRatio2>k__BackingField: 0
<IngredientIdx3>k__BackingField:
<IngredientAmount3>k__BackingField: 0
<IngredientRatio3>k__BackingField: 0
<IngredientIdx4>k__BackingField:
<IngredientAmount4>k__BackingField: 0
<IngredientRatio4>k__BackingField: 0
<IngredientIdx5>k__BackingField:
<IngredientAmount5>k__BackingField: 0
<IngredientRatio5>k__BackingField: 0
<Sprite>k__BackingField: {fileID: 0}
<ValidIngredients>k__BackingField: []
<CurrentBill>k__BackingField: {fileID: 0}
<IsMatchedServer>k__BackingField: 0
<IsReceivedItem>k__BackingField: 0
<IsOrderedSucceed>k__BackingField: 0
_customerInteractionType: 0

View File

@ -320,9 +320,9 @@ CapsuleCollider:
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.25
m_Height: 1
m_Height: 0.5
m_Direction: 1
m_Center: {x: 0, y: 0.5, z: 0}
m_Center: {x: 0, y: 0.25, z: 0}
--- !u!114 &6054159730444663926
MonoBehaviour:
m_ObjectHideFlags: 0
@ -585,7 +585,9 @@ MonoBehaviour:
_replacementMaterial: {fileID: 0}
_initialSkinName: Basic
_isRandomSkin: 0
_isRandomRange: 0
_randomRange: {x: 0, y: 0}
_randomStrings: []
--- !u!114 &3359549505901716120
MonoBehaviour:
m_ObjectHideFlags: 0

View File

@ -107,7 +107,7 @@ SpriteRenderer:
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 6
m_Sprite: {fileID: 21300000, guid: cda1d961a563b6143a024170ed6f0f44, type: 3}
m_Sprite: {fileID: 21300000, guid: 514247b5965aef447b13b5da95f3281a, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0

View File

@ -53,7 +53,7 @@ MonoBehaviour:
<InteractionCanvas>k__BackingField: {fileID: 3099553823688037663}
<OutlineMaterial>k__BackingField: {fileID: 2100000, guid: 9db92b3ac1f276e42ae7d7bcfbbca549, type: 2}
<EnableInteraction>k__BackingField: 1
<InteractionRadius>k__BackingField: 0.7
<InteractionRadius>k__BackingField: 0.5
<InteractionMessage>k__BackingField:
IsOpened: 0
<IsOccupied>k__BackingField: 0
@ -63,8 +63,6 @@ MonoBehaviour:
<Food>k__BackingField: {fileID: 8752266548893034047}
TableDirection: {x: -1, y: 0, z: 0}
TableNumber: 0
_foodImage: {fileID: 21300000, guid: 514247b5965aef447b13b5da95f3281a, type: 3}
_dirtyImage: {fileID: 21300000, guid: cda1d961a563b6143a024170ed6f0f44, type: 3}
_interactionHoldingTime: 3
--- !u!1 &1352874222752200122
GameObject:
@ -380,7 +378,7 @@ MonoBehaviour:
<InteractionCanvas>k__BackingField: {fileID: 1675779991655778469}
<OutlineMaterial>k__BackingField: {fileID: 2100000, guid: 9db92b3ac1f276e42ae7d7bcfbbca549, type: 2}
<EnableInteraction>k__BackingField: 1
<InteractionRadius>k__BackingField: 0.7
<InteractionRadius>k__BackingField: 0.5
<InteractionMessage>k__BackingField:
IsOpened: 0
<IsOccupied>k__BackingField: 0
@ -390,8 +388,6 @@ MonoBehaviour:
<Food>k__BackingField: {fileID: 4724775134085759924}
TableDirection: {x: 1, y: 0, z: 0}
TableNumber: 0
_foodImage: {fileID: 21300000, guid: 514247b5965aef447b13b5da95f3281a, type: 3}
_dirtyImage: {fileID: 21300000, guid: cda1d961a563b6143a024170ed6f0f44, type: 3}
_interactionHoldingTime: 3
--- !u!1 &6493535781353555306
GameObject:
@ -741,7 +737,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2234961990804426782, guid: 3f9f846a7f237924e97c9acf370d991d, type: 3}
propertyPath: m_Center.z
value: 0.2
value: 0.15
objectReference: {fileID: 0}
- target: {fileID: 2301048832536013177, guid: 3f9f846a7f237924e97c9acf370d991d, type: 3}
propertyPath: m_LocalScale.x

View File

@ -76,7 +76,7 @@ SpriteRenderer:
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 6
m_Sprite: {fileID: 21300000, guid: cda1d961a563b6143a024170ed6f0f44, type: 3}
m_Sprite: {fileID: 21300000, guid: 514247b5965aef447b13b5da95f3281a, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
@ -103,6 +103,10 @@ PrefabInstance:
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2234961990804426782, guid: 3f9f846a7f237924e97c9acf370d991d, type: 3}
propertyPath: m_Center.z
value: 0.2
objectReference: {fileID: 0}
- target: {fileID: 2301048832536013177, guid: 3f9f846a7f237924e97c9acf370d991d, type: 3}
propertyPath: m_LocalScale.x
value: 1

View File

@ -18,7 +18,7 @@ Material:
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
m_CustomRenderQueue: 3000
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:

View File

@ -18,7 +18,7 @@ Material:
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
m_CustomRenderQueue: 3000
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:

View File

@ -1,9 +1,16 @@
fileFormatVersion: 2
guid: 8ef64d8ac85ff4681987c8b621bef86b
AssetOrigin:
serializedVersion: 1
productId: 154574
packageName: Ultimate Clean GUI Pack
packageVersion: 2.1.3
assetPath: Assets/UltimateCleanGUIPack/Common/Sprites/Icons Colored/Basic/Lock.png
uploadId: 621733
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
@ -20,9 +27,12 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
@ -31,9 +41,9 @@ TextureImporter:
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
@ -43,9 +53,9 @@ TextureImporter:
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
alignment: 7
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spritePixelsToUnits: 256
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
@ -54,12 +64,17 @@ TextureImporter:
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 1
platformSettings:
- serializedVersion: 3
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
@ -69,12 +84,53 @@ TextureImporter:
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WindowsStoreApps
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
@ -84,16 +140,11 @@ TextureImporter:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 154574
packageName: Ultimate Clean GUI Pack
packageVersion: 2.1.3
assetPath: Assets/UltimateCleanGUIPack/Common/Sprites/Icons Colored/Basic/Lock.png
uploadId: 621733

View File

@ -140,7 +140,7 @@ PlayerSettings:
loadStoreDebugModeEnabled: 0
visionOSBundleVersion: 1.0
tvOSBundleVersion: 1.0
bundleVersion: 0.3.2.0
bundleVersion: 0.3.2.5
preloadedAssets:
- {fileID: -944628639613478452, guid: 4ed6540e2f7ce234888adf8deff1f241, type: 3}
metroInputSource: 0