Init commit
This commit is contained in:
parent
07c0e21a57
commit
31ea50c10a
@ -2419,6 +2419,37 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &181975869
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 181975870}
|
||||
m_Layer: 0
|
||||
m_Name: BartenderSpawn
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: -964228994112308473, guid: 0000000000000000d000000000000000, type: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &181975870
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 181975869}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -7}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1360757596}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &186139407
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -4327,8 +4358,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 7ab08469541b2aa45818fa36bbcb9cf7, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_persistent: 0
|
||||
<CustomerDataSo>k__BackingField: {fileID: 11400000, guid: e6ce9d58057b580479880585947969d8, type: 2}
|
||||
_customerPrefab: {fileID: -2302002259734456648, guid: 23195e611c71ad44b8a1ccb2b6e0efe5, type: 3}
|
||||
_customerSpawnTransform: {fileID: 1038321203}
|
||||
_checkEmptySeatInterval: 0.5
|
||||
@ -5272,6 +5301,37 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 444009244}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &473619455
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 473619456}
|
||||
m_Layer: 0
|
||||
m_Name: ServerSpawn
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: -964228994112308473, guid: 0000000000000000d000000000000000, type: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &473619456
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 473619455}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -7}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1360757596}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &510358306
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -9288,12 +9348,12 @@ Transform:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 887608711}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -7}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1665075868}
|
||||
m_Father: {fileID: 1360757596}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &891021167
|
||||
GameObject:
|
||||
@ -14334,6 +14394,40 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: bbb4e96b2ebafc246b85623c547a7d01, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &1360757595
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1360757596}
|
||||
m_Layer: 0
|
||||
m_Name: Crews
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1360757596
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1360757595}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 887608712}
|
||||
- {fileID: 473619456}
|
||||
- {fileID: 181975870}
|
||||
m_Father: {fileID: 1665075868}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1370164786
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -18444,7 +18538,7 @@ Transform:
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 887608712}
|
||||
- {fileID: 1360757596}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1665075869
|
||||
@ -18545,14 +18639,14 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_cleanerCrewPrefab: {fileID: 3226241112093390236, guid: fb1e288d64b813b4a9929ba9ece44956, type: 3}
|
||||
_servingCrewPrefab: {fileID: 0}
|
||||
_servingCrewPrefab: {fileID: 1745629821853633206, guid: b692f61d994a0b94cb92cf0f2d47cfb2, type: 3}
|
||||
_bartenderCrewPrefab: {fileID: 0}
|
||||
_cleanerCrewSpawnTransform: {fileID: 887608712}
|
||||
_servingCrewSpawnTransform: {fileID: 0}
|
||||
_bartenderCrewSpawnTransform: {fileID: 0}
|
||||
_servingCrewSpawnTransform: {fileID: 473619456}
|
||||
_bartenderCrewSpawnTransform: {fileID: 181975870}
|
||||
<Crews>k__BackingField: []
|
||||
<CleanerCrews>k__BackingField: []
|
||||
<ServingCrews>k__BackingField: []
|
||||
<ServerCrews>k__BackingField: []
|
||||
<BartenderCrews>k__BackingField: []
|
||||
--- !u!1 &1670140492
|
||||
GameObject:
|
||||
|
@ -3,19 +3,19 @@ using BlueWater.Npcs.Crews;
|
||||
|
||||
namespace BlueWater.BehaviorTrees.Actions
|
||||
{
|
||||
[TaskCategory("Custom/Npc/Crew/Cleaner")]
|
||||
public class CompleteCleaning : Action
|
||||
[TaskCategory("Custom/Npc/Crew")]
|
||||
public class CompleteMission : Action
|
||||
{
|
||||
private CleanerCrew _cleanerCrew;
|
||||
private Crew _crew;
|
||||
|
||||
public override void OnAwake()
|
||||
{
|
||||
_cleanerCrew = GetComponent<CleanerCrew>();
|
||||
_crew = GetComponent<Crew>();
|
||||
}
|
||||
|
||||
public override TaskStatus OnUpdate()
|
||||
{
|
||||
if (_cleanerCrew.CrewInteraction == null && _cleanerCrew.IsCleaningFloor == false && _cleanerCrew.IsCleaningTable == false)
|
||||
if (_crew.CrewInteraction == null)
|
||||
{
|
||||
return TaskStatus.Success;
|
||||
}
|
||||
|
@ -3,26 +3,26 @@ using BlueWater.Npcs.Crews;
|
||||
|
||||
namespace BlueWater.BehaviorTrees.Actions
|
||||
{
|
||||
[TaskCategory("Custom/Npc/Crew/Cleaner")]
|
||||
[TaskCategory("Custom/Npc/Crew")]
|
||||
public class MoveToRandomPositionInRange : Action
|
||||
{
|
||||
private CleanerCrew _cleanerCrew;
|
||||
private Crew _crew;
|
||||
|
||||
public override void OnAwake()
|
||||
{
|
||||
_cleanerCrew = GetComponent<CleanerCrew>();
|
||||
_crew = GetComponent<Crew>();
|
||||
}
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
_cleanerCrew.AIMovement.MoveToRandomPositionInRange(10f);
|
||||
_crew.AIMovement.MoveToRandomPositionInRange(10f);
|
||||
}
|
||||
|
||||
public override TaskStatus OnUpdate()
|
||||
{
|
||||
if (_cleanerCrew.AIMovement.HasReachedDestination())
|
||||
if (_crew.AIMovement.HasReachedDestination())
|
||||
{
|
||||
_cleanerCrew.AIMovement.StopMove();
|
||||
_crew.AIMovement.StopMove();
|
||||
return TaskStatus.Success;
|
||||
}
|
||||
|
||||
|
@ -1,21 +0,0 @@
|
||||
using BehaviorDesigner.Runtime.Tasks;
|
||||
using BlueWater.Npcs.Crews;
|
||||
|
||||
namespace BlueWater.BehaviorTrees.Actions
|
||||
{
|
||||
[TaskCategory("Custom/Npc/Crew/Cleaner")]
|
||||
public class CheckCleaning : Conditional
|
||||
{
|
||||
private CleanerCrew _cleanerCrew;
|
||||
|
||||
public override void OnAwake()
|
||||
{
|
||||
_cleanerCrew = GetComponent<CleanerCrew>();
|
||||
}
|
||||
|
||||
public override TaskStatus OnUpdate()
|
||||
{
|
||||
return _cleanerCrew.IsOnMission ? TaskStatus.Success : TaskStatus.Failure;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
using BehaviorDesigner.Runtime.Tasks;
|
||||
using BlueWater.Npcs.Crews;
|
||||
|
||||
namespace BlueWater.BehaviorTrees.Actions
|
||||
{
|
||||
[TaskCategory("Custom/Npc/Crew")]
|
||||
public class CheckOnMission : Conditional
|
||||
{
|
||||
private Crew _crew;
|
||||
|
||||
public override void OnAwake()
|
||||
{
|
||||
_crew = GetComponent<Crew>();
|
||||
}
|
||||
|
||||
public override TaskStatus OnUpdate()
|
||||
{
|
||||
return _crew.IsOnMission ? TaskStatus.Success : TaskStatus.Failure;
|
||||
}
|
||||
}
|
||||
}
|
@ -3,43 +3,43 @@ using BlueWater.Npcs.Crews;
|
||||
|
||||
namespace BlueWater.BehaviorTrees.Actions
|
||||
{
|
||||
[TaskCategory("Custom/Npc/Crew/Cleaner")]
|
||||
public class Cleaning : Conditional
|
||||
[TaskCategory("Custom/Npc/Crew")]
|
||||
public class OnMission : Conditional
|
||||
{
|
||||
private CleanerCrew _cleanerCrew;
|
||||
private Crew _crew;
|
||||
|
||||
public override void OnAwake()
|
||||
{
|
||||
_cleanerCrew = GetComponent<CleanerCrew>();
|
||||
_crew = GetComponent<Crew>();
|
||||
}
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
if (_cleanerCrew.CrewInteraction != null)
|
||||
if (_crew.CrewInteraction != null)
|
||||
{
|
||||
_cleanerCrew.AIMovement.Move(_cleanerCrew.CrewInteraction.CenterTransform.position);
|
||||
_crew.AIMovement.Move(_crew.CrewInteraction.CenterTransform.position);
|
||||
}
|
||||
}
|
||||
|
||||
public override TaskStatus OnUpdate()
|
||||
{
|
||||
if (_cleanerCrew.CrewInteraction == null)
|
||||
if (_crew.CrewInteraction == null)
|
||||
{
|
||||
_cleanerCrew.AIMovement.StopMove();
|
||||
_cleanerCrew.ResetMission();
|
||||
_crew.AIMovement.StopMove();
|
||||
_crew.ResetMission();
|
||||
return TaskStatus.Failure;
|
||||
}
|
||||
|
||||
if (!_cleanerCrew.CrewInteraction.CanInteractionCrew())
|
||||
if (!_crew.CrewInteraction.CanInteractionCrew())
|
||||
{
|
||||
_cleanerCrew.AIMovement.StopMove();
|
||||
_crew.AIMovement.StopMove();
|
||||
return TaskStatus.Failure;
|
||||
}
|
||||
|
||||
if (!_cleanerCrew.CanInteractionPosition()) return TaskStatus.Running;
|
||||
if (!_crew.CanInteractionPosition()) return TaskStatus.Running;
|
||||
|
||||
_cleanerCrew.AIMovement.StopMove();
|
||||
_cleanerCrew.CrewInteraction.InteractionCrew(_cleanerCrew);
|
||||
_crew.AIMovement.StopMove();
|
||||
_crew.CrewInteraction.InteractionCrew(_crew);
|
||||
|
||||
return TaskStatus.Success;
|
||||
}
|
||||
|
@ -5,35 +5,6 @@ namespace BlueWater.Npcs.Crews
|
||||
{
|
||||
public class CleanerCrew: Crew
|
||||
{
|
||||
public void OnMission(ICrewInteraction crewInteraction)
|
||||
{
|
||||
CrewInteraction = crewInteraction;
|
||||
CrewInteraction.OnInteractionCompleted += InteractionCompleted;
|
||||
IsOnMission = true;
|
||||
}
|
||||
|
||||
public void ResetMission()
|
||||
{
|
||||
CrewInteraction = null;
|
||||
IsOnMission = false;
|
||||
IsCleaningFloor = false;
|
||||
IsCleaningTable = false;
|
||||
}
|
||||
|
||||
public bool CanInteractionPosition()
|
||||
{
|
||||
if (CrewInteraction.CenterTransform == null) return false;
|
||||
|
||||
return AIMovement.HasReachedDestination() ||
|
||||
Vector3.Distance(CrewInteraction.CenterTransform.position, transform.position) <=
|
||||
CrewInteraction.InteractionRadius;
|
||||
}
|
||||
|
||||
private void InteractionCompleted()
|
||||
{
|
||||
CrewInteraction.OnInteractionCompleted -= InteractionCompleted;
|
||||
|
||||
ResetMission();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -197,6 +197,39 @@ namespace BlueWater.Npcs.Crews
|
||||
CurrentState = newState;
|
||||
CurrentState.EnterState(this);
|
||||
}
|
||||
|
||||
public virtual void OnMission(ICrewInteraction crewInteraction)
|
||||
{
|
||||
CrewInteraction = crewInteraction;
|
||||
CrewInteraction.OnInteractionCompleted += InteractionCompleted;
|
||||
IsOnMission = true;
|
||||
}
|
||||
|
||||
public virtual void ResetMission()
|
||||
{
|
||||
CrewInteraction = null;
|
||||
IsOnMission = false;
|
||||
IsCleaningFloor = false;
|
||||
IsCleaningTable = false;
|
||||
IsServing = false;
|
||||
IsMakingCocktail = false;
|
||||
}
|
||||
|
||||
public virtual bool CanInteractionPosition()
|
||||
{
|
||||
if (CrewInteraction.CenterTransform == null) return false;
|
||||
|
||||
return AIMovement.HasReachedDestination() ||
|
||||
Vector3.Distance(CrewInteraction.CenterTransform.position, transform.position) <=
|
||||
CrewInteraction.InteractionRadius;
|
||||
}
|
||||
|
||||
protected virtual void InteractionCompleted()
|
||||
{
|
||||
CrewInteraction.OnInteractionCompleted -= InteractionCompleted;
|
||||
|
||||
ResetMission();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
using BlueWater.Interfaces;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.Npcs.Crews
|
||||
{
|
||||
public class ServingCrew: Crew
|
||||
public class ServerCrew: Crew
|
||||
{
|
||||
|
||||
}
|
@ -99,6 +99,9 @@ namespace BlueWater.Npcs.Customers
|
||||
[field: SerializeField]
|
||||
public CocktailData OrderedCocktailData { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public Bill CurrentBill { get; set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public bool IsReceivedItem { get; set; }
|
||||
|
||||
@ -179,9 +182,7 @@ namespace BlueWater.Npcs.Customers
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (_isQuitting) return;
|
||||
|
||||
CustomerManager.Instance.UnregisterCustomer(this);
|
||||
EventManager.InvokeDestroyCustomer(this);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -142,6 +142,12 @@ namespace BlueWater
|
||||
OnCreateCustomer?.Invoke();
|
||||
}
|
||||
|
||||
public static Action<Customer> OnDestroyCustomer;
|
||||
public static void InvokeDestroyCustomer(Customer customer)
|
||||
{
|
||||
OnDestroyCustomer?.Invoke(customer);
|
||||
}
|
||||
|
||||
// 손님이 칵테일 주문 이벤트
|
||||
public static Action<Customer> OnOrderedCocktail;
|
||||
public static void InvokeOrderedCocktail(Customer orderedCustomer)
|
||||
@ -170,10 +176,10 @@ namespace BlueWater
|
||||
OnCreateCleanerCrew?.Invoke();
|
||||
}
|
||||
|
||||
public static Func<ServingCrew> OnCreateServingCrew;
|
||||
public static void InvokeCreateServingCrew()
|
||||
public static Func<ServerCrew> OnCreateServerCrew;
|
||||
public static void InvokeCreateServerCrew()
|
||||
{
|
||||
OnCreateServingCrew?.Invoke();
|
||||
OnCreateServerCrew?.Invoke();
|
||||
}
|
||||
|
||||
public static Func<BartenderCrew> OnCreateBartenderCrew;
|
||||
|
@ -1,16 +1,36 @@
|
||||
using System;
|
||||
using BlueWater.Interfaces;
|
||||
using BlueWater.Npcs.Crews;
|
||||
using BlueWater.Utility;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
{
|
||||
public class ServingTable : InteractionFurniture
|
||||
public class ServingTable : InteractionFurniture, ICrewInteraction
|
||||
{
|
||||
[SerializeField]
|
||||
private SpriteRenderer _cocktailGlassImage;
|
||||
|
||||
// 서빙 테이블 기준 아이템이 있는지 없는지
|
||||
private IPickup _currentPickupItem;
|
||||
public IPickup CurrentPickupItem
|
||||
{
|
||||
get => _currentPickupItem;
|
||||
set
|
||||
{
|
||||
_currentPickupItem = value;
|
||||
|
||||
if (_currentPickupItem != null)
|
||||
{
|
||||
var crewController = TycoonManager.Instance.CrewController;
|
||||
Utils.StartUniqueCoroutine(this, ref _findServerCrewInstance,
|
||||
crewController.FindClosestCrewCoroutine(CenterTransform.position, crewController.ServerCrews, crew => crew.OnMission(this)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Material _originalCocktailGlassMaterial;
|
||||
private Coroutine _findServerCrewInstance;
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
@ -22,23 +42,23 @@ namespace BlueWater.Tycoons
|
||||
public override void Interaction()
|
||||
{
|
||||
// 테이블의 칵테일을 가져가는 경우
|
||||
if (_currentPickupItem != null)
|
||||
if (CurrentPickupItem != null)
|
||||
{
|
||||
EventManager.InvokeTakeFromServingTable();
|
||||
CurrentTycoonPlayer.TycoonPickupHandler.PickupItem(_currentPickupItem);
|
||||
CurrentTycoonPlayer.InteractionCanvas.BalloonUi.SetItemImage(_currentPickupItem);
|
||||
CurrentTycoonPlayer.TycoonPickupHandler.PickupItem(CurrentPickupItem);
|
||||
CurrentTycoonPlayer.InteractionCanvas.BalloonUi.SetItemImage(CurrentPickupItem);
|
||||
_cocktailGlassImage.enabled = false;
|
||||
InteractionCanvas.BalloonUi.DiscardItem();
|
||||
_currentPickupItem = null;
|
||||
CurrentPickupItem = null;
|
||||
}
|
||||
// 테이블에 칵테일을 놓는 경우
|
||||
else
|
||||
{
|
||||
EventManager.InvokePlaceOnServingTable();
|
||||
_currentPickupItem = CurrentTycoonPlayer.TycoonPickupHandler.GetCurrentPickupItem();
|
||||
CurrentTycoonPlayer.TycoonPickupHandler.GiveItem(_currentPickupItem);
|
||||
CurrentPickupItem = CurrentTycoonPlayer.TycoonPickupHandler.GetCurrentPickupItem();
|
||||
CurrentTycoonPlayer.TycoonPickupHandler.GiveItem(CurrentPickupItem);
|
||||
CurrentTycoonPlayer.InteractionCanvas.BalloonUi.DiscardItem();
|
||||
InteractionCanvas.BalloonUi.SetItemImage(_currentPickupItem);
|
||||
InteractionCanvas.BalloonUi.SetItemImage(CurrentPickupItem);
|
||||
_cocktailGlassImage.enabled = true;
|
||||
}
|
||||
}
|
||||
@ -47,13 +67,13 @@ namespace BlueWater.Tycoons
|
||||
{
|
||||
// 1. 테이블에 칵테일이 있고, 플레이어가 칵테일을 들고 있지 않은 경우
|
||||
// 2. 테이블에 칵테일이 없고, 플레이어가 칵테일을 들고 있는 경우 (정상적인 칵테일만)
|
||||
return (_currentPickupItem != null && !CurrentTycoonPlayer.TycoonPickupHandler.IsPickedUpCocktail())||
|
||||
(_currentPickupItem == null && CurrentTycoonPlayer.TycoonPickupHandler.IsServablePickupItem());
|
||||
return (CurrentPickupItem != null && !CurrentTycoonPlayer.TycoonPickupHandler.IsPickedUpCocktail())||
|
||||
(CurrentPickupItem == null && CurrentTycoonPlayer.TycoonPickupHandler.IsServablePickupItem());
|
||||
}
|
||||
|
||||
public override void ShowInteractionUi()
|
||||
{
|
||||
InteractionMessage = _currentPickupItem != null ? "음료 들기" : "음료 내려놓기";
|
||||
InteractionMessage = CurrentPickupItem != null ? "음료 들기" : "음료 내려놓기";
|
||||
base.ShowInteractionUi();
|
||||
|
||||
_cocktailGlassImage.material = OutlineMaterial;
|
||||
@ -65,5 +85,22 @@ namespace BlueWater.Tycoons
|
||||
|
||||
_cocktailGlassImage.material = _originalCocktailGlassMaterial;
|
||||
}
|
||||
|
||||
public void InteractionCrew(Crew crew)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void CancelInteractionCrew()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool CanInteractionCrew()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public event Action OnInteractionCompleted;
|
||||
}
|
||||
}
|
@ -97,38 +97,6 @@ namespace BlueWater.Tycoons
|
||||
Food.enabled = false;
|
||||
InteractionMessage = "치우기";
|
||||
}
|
||||
|
||||
private IEnumerator FindCleanerCrewCoroutine()
|
||||
{
|
||||
var waitTime = new WaitForSeconds(2f);
|
||||
while (true)
|
||||
{
|
||||
var cleaners = TycoonManager.Instance.CrewController.CleanerCrews;
|
||||
if (cleaners == null || cleaners.Count == 0)
|
||||
{
|
||||
yield return waitTime;
|
||||
continue;
|
||||
}
|
||||
|
||||
var closestCleaners = cleaners.OrderBy(element =>
|
||||
Vector3.Distance(element.transform.position, transform.position)).ToList();
|
||||
var isFound = false;
|
||||
|
||||
foreach (var element in closestCleaners.Where(element => !element.IsOnMission))
|
||||
{
|
||||
element.OnMission(this);
|
||||
isFound = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (isFound)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
yield return waitTime;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetTableNumber(int number) => TableNumber = number;
|
||||
|
||||
@ -179,7 +147,9 @@ namespace BlueWater.Tycoons
|
||||
InteractionCanvas.BalloonUi.OrderItem(_dirtyImage, 0, TycoonManager.Instance.TycoonStageController.StageDataSo.DirtyTableWaitTime);
|
||||
IsCleaned = false;
|
||||
|
||||
Utils.StartUniqueCoroutine(this, ref _findCleanerCrewInstance, FindCleanerCrewCoroutine());
|
||||
var crewController = TycoonManager.Instance.CrewController;
|
||||
Utils.StartUniqueCoroutine(this, ref _findCleanerCrewInstance,
|
||||
crewController.FindClosestCrewCoroutine(CenterTransform.position, crewController.CleanerCrews, crew => crew.OnMission(this)));
|
||||
}
|
||||
|
||||
public void InteractionCrew(Crew crew)
|
||||
|
@ -68,40 +68,9 @@ namespace BlueWater.Tycoons
|
||||
InteractionMessage = "치우기";
|
||||
vomitingImage = VisualLook.GetComponent<SpriteRenderer>().sprite;
|
||||
InteractionCanvas.BalloonUi.OrderItem(vomitingImage, 0, TycoonManager.Instance.TycoonStageController.StageDataSo.VomitingWaitTime);
|
||||
|
||||
Utils.StartUniqueCoroutine(this, ref _findCleanerCrewInstance, FindCleanerCrewCoroutine());
|
||||
}
|
||||
|
||||
private IEnumerator FindCleanerCrewCoroutine()
|
||||
{
|
||||
var waitTime = new WaitForSeconds(2f);
|
||||
while (true)
|
||||
{
|
||||
var cleaners = TycoonManager.Instance.CrewController.CleanerCrews;
|
||||
if (cleaners == null || cleaners.Count == 0)
|
||||
{
|
||||
yield return waitTime;
|
||||
continue;
|
||||
}
|
||||
|
||||
var closestCleaners = cleaners.OrderBy(element =>
|
||||
Vector3.Distance(element.transform.position, transform.position)).ToList();
|
||||
var isFound = false;
|
||||
|
||||
foreach (var element in closestCleaners.Where(element => !element.IsOnMission))
|
||||
{
|
||||
element.OnMission(this);
|
||||
isFound = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (isFound)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
yield return waitTime;
|
||||
}
|
||||
var crewController = TycoonManager.Instance.CrewController;
|
||||
Utils.StartUniqueCoroutine(this, ref _findCleanerCrewInstance,
|
||||
crewController.FindClosestCrewCoroutine(CenterTransform.position, crewController.CleanerCrews, crew => crew.OnMission(this)));
|
||||
}
|
||||
|
||||
public override void Interaction()
|
||||
|
@ -1,4 +1,6 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using BlueWater.Npcs.Crews;
|
||||
using BlueWater.Utility;
|
||||
using Sirenix.OdinInspector;
|
||||
@ -13,7 +15,7 @@ namespace BlueWater.Tycoons
|
||||
private CleanerCrew _cleanerCrewPrefab;
|
||||
|
||||
[SerializeField]
|
||||
private ServingCrew _servingCrewPrefab;
|
||||
private ServerCrew _servingCrewPrefab;
|
||||
|
||||
[SerializeField]
|
||||
private BartenderCrew _bartenderCrewPrefab;
|
||||
@ -36,7 +38,7 @@ namespace BlueWater.Tycoons
|
||||
public List<CleanerCrew> CleanerCrews { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public List<ServingCrew> ServingCrews { get; private set; }
|
||||
public List<ServerCrew> ServerCrews { get; private set; }
|
||||
|
||||
[field: SerializeField]
|
||||
public List<BartenderCrew> BartenderCrews { get; private set; }
|
||||
@ -44,14 +46,14 @@ namespace BlueWater.Tycoons
|
||||
private void Start()
|
||||
{
|
||||
EventManager.OnCreateCleanerCrew += CreateCleanerCrew;
|
||||
EventManager.OnCreateServingCrew += CreateServingCrew;
|
||||
EventManager.OnCreateServerCrew += CreateServerCrew;
|
||||
EventManager.OnCreateBartenderCrew += CreateBartenderCrew;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
EventManager.OnCreateCleanerCrew -= CreateCleanerCrew;
|
||||
EventManager.OnCreateServingCrew -= CreateServingCrew;
|
||||
EventManager.OnCreateServerCrew -= CreateServerCrew;
|
||||
EventManager.OnCreateBartenderCrew -= CreateBartenderCrew;
|
||||
}
|
||||
|
||||
@ -65,10 +67,10 @@ namespace BlueWater.Tycoons
|
||||
return newCrew;
|
||||
}
|
||||
|
||||
public ServingCrew CreateServingCrew()
|
||||
public ServerCrew CreateServerCrew()
|
||||
{
|
||||
var newCrew = Instantiate(_servingCrewPrefab, _servingCrewSpawnTransform.position, _servingCrewPrefab.transform.rotation);
|
||||
Utils.RegisterList(ServingCrews, newCrew);
|
||||
Utils.RegisterList(ServerCrews, newCrew);
|
||||
Utils.RegisterList(Crews, newCrew);
|
||||
newCrew.Initialize();
|
||||
|
||||
@ -84,5 +86,33 @@ namespace BlueWater.Tycoons
|
||||
|
||||
return newCrew;
|
||||
}
|
||||
|
||||
public T FindClosestAvailableCrew<T>(Vector3 position, List<T> crews) where T : Crew
|
||||
{
|
||||
if (crews == null || crews.Count == 0) return null;
|
||||
|
||||
var availableCrews = crews.Where(crew => !crew.IsOnMission).ToList();
|
||||
if (availableCrews.Count == 0) return null;
|
||||
|
||||
return availableCrews
|
||||
.OrderBy(crew => Vector3.Distance(crew.transform.position, position))
|
||||
.FirstOrDefault();
|
||||
}
|
||||
|
||||
public IEnumerator FindClosestCrewCoroutine<T>(Vector3 position, List<T> crews, System.Action<T> onCrewFoundEvent) where T : Crew
|
||||
{
|
||||
var waitTime = new WaitForSeconds(2f);
|
||||
while (true)
|
||||
{
|
||||
var closestCrew = FindClosestAvailableCrew(position, crews);
|
||||
if (closestCrew != null)
|
||||
{
|
||||
onCrewFoundEvent?.Invoke(closestCrew);
|
||||
yield break;
|
||||
}
|
||||
|
||||
yield return waitTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -7,12 +7,9 @@ using UnityEngine;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
{
|
||||
public class CustomerManager : Singleton<CustomerManager>
|
||||
public class CustomerController : MonoBehaviour
|
||||
{
|
||||
[Title("손님 데이터")]
|
||||
[field: SerializeField, Required]
|
||||
public CustomerDataSo CustomerDataSo { get; private set; }
|
||||
|
||||
[SerializeField, Required]
|
||||
private Customer _customerPrefab;
|
||||
|
||||
@ -37,11 +34,13 @@ namespace BlueWater.Tycoons
|
||||
_customerTableController = TycoonManager.Instance.CustomerTableController;
|
||||
|
||||
EventManager.OnCreateCustomer += TryFindEmptySeat;
|
||||
EventManager.OnDestroyCustomer += UnregisterCustomer;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
EventManager.OnCreateCustomer -= TryFindEmptySeat;
|
||||
EventManager.OnDestroyCustomer -= UnregisterCustomer;
|
||||
}
|
||||
|
||||
public Customer CreateCustomer()
|
||||
@ -116,18 +115,12 @@ namespace BlueWater.Tycoons
|
||||
Utils.UnregisterList(InstanceCustomers, customer);
|
||||
}
|
||||
|
||||
public CustomerData GetRandomCustomerData()
|
||||
public void CheckInstanceCustomerBills()
|
||||
{
|
||||
var customerDataCount = CustomerDataSo.GetDataCount();
|
||||
if (customerDataCount == 0)
|
||||
foreach (var element in InstanceCustomers)
|
||||
{
|
||||
Debug.LogError($"{CustomerDataSo}의 값이 비어있습니다.");
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
return CustomerDataSo.GetRandomValue();
|
||||
}
|
||||
|
||||
public List<Customer> GetCurrentCustomers() => InstanceCustomers;
|
||||
}
|
||||
}
|
20
Assets/02.Scripts/Tycoon/ServingTableController.cs
Normal file
20
Assets/02.Scripts/Tycoon/ServingTableController.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BlueWater.Tycoons
|
||||
{
|
||||
public class ServingTableController : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private Transform _servingTableRoot;
|
||||
|
||||
[SerializeField]
|
||||
private List<ServingTable> _servingTables;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_servingTables = _servingTableRoot.GetComponentsInChildren<ServingTable>().ToList();
|
||||
}
|
||||
}
|
||||
}
|
2
Assets/02.Scripts/Tycoon/ServingTableController.cs.meta
Normal file
2
Assets/02.Scripts/Tycoon/ServingTableController.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 03e84488b3da65549a78d481636713a3
|
@ -125,12 +125,7 @@ namespace BlueWater.Uis
|
||||
_isItemReceived = false;
|
||||
SetItemImage(_orderCocktailData);
|
||||
|
||||
_tween = _fillImage.DOFillAmount(1f, hurryTime)
|
||||
.From(0f)
|
||||
.SetEase(Ease.Linear)
|
||||
.SetDelay(waitTime)
|
||||
.OnComplete(OnTweenComplete)
|
||||
.SetAutoKill(false);
|
||||
SetTween(waitTime, hurryTime);
|
||||
}
|
||||
|
||||
public void OrderItem(Sprite sprite, int waitTime, int hurryTime)
|
||||
@ -140,7 +135,13 @@ namespace BlueWater.Uis
|
||||
_isItemReceived = false;
|
||||
SetItemSprite(sprite);
|
||||
ShowUi();
|
||||
|
||||
SetTween(waitTime, hurryTime);
|
||||
}
|
||||
|
||||
public void SetTween(int waitTime, int hurryTime)
|
||||
{
|
||||
_tween?.Kill();
|
||||
_tween = _fillImage.DOFillAmount(1f, hurryTime)
|
||||
.From(0f)
|
||||
.SetEase(Ease.Linear)
|
||||
|
@ -64,11 +64,17 @@ namespace BlueWater
|
||||
_stampImageObject.SetActive(false);
|
||||
_tableNumberText.text = customer.CurrentTableSeat.TableNumber.ToString();
|
||||
_tableNumberImageObject.SetActive(true);
|
||||
|
||||
_sliderTween = _slider.DOValue(0f, customer.CurrentLevelData.HurryTime)
|
||||
|
||||
SetTween(customer.CurrentLevelData.WaitTime, customer.CurrentLevelData.HurryTime);
|
||||
}
|
||||
|
||||
public void SetTween(int waitTime, int hurryTime)
|
||||
{
|
||||
_sliderTween?.Kill();
|
||||
_sliderTween = _slider.DOValue(0f, hurryTime)
|
||||
.From(1f)
|
||||
.SetEase(Ease.Linear)
|
||||
.SetDelay(customer.CurrentLevelData.WaitTime)
|
||||
.SetDelay(waitTime)
|
||||
.SetAutoKill(true);
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,13 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using BlueWater.Npcs.Customers;
|
||||
using Sirenix.OdinInspector;
|
||||
using Spine.Unity;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
|
||||
namespace BlueWater
|
||||
namespace BlueWater.Uis
|
||||
{
|
||||
public class BillUi : MonoBehaviour
|
||||
{
|
||||
@ -24,8 +26,9 @@ namespace BlueWater
|
||||
|
||||
[SerializeField]
|
||||
private List<BillInfo> _billInfos = new(5);
|
||||
|
||||
private Dictionary<Customer, Bill> _customerBillDictionary = new();
|
||||
|
||||
private ObservableList<KeyValuePair<Customer, Bill>> _customerBills = new();
|
||||
|
||||
private bool _isMovedChain;
|
||||
private bool _isActivating;
|
||||
|
||||
@ -33,12 +36,16 @@ namespace BlueWater
|
||||
|
||||
private void Start()
|
||||
{
|
||||
_customerBills.ItemAdded += UpdateBillInfo;
|
||||
_customerBills.ItemRemoved += UpdateBillInfo;
|
||||
EventManager.OnOrderedCocktail += OrderedCocktail;
|
||||
EventManager.OnOrderResult += OrderResult;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
_customerBills.ItemAdded -= UpdateBillInfo;
|
||||
_customerBills.ItemRemoved -= UpdateBillInfo;
|
||||
EventManager.OnOrderedCocktail -= OrderedCocktail;
|
||||
EventManager.OnOrderResult -= OrderResult;
|
||||
}
|
||||
@ -47,33 +54,29 @@ namespace BlueWater
|
||||
{
|
||||
var instance = Instantiate(_billPrefab, _spawnLocation);
|
||||
instance.Initialize(customer, _spawnPosition, _billInfos[0].Position);
|
||||
_customerBillDictionary.Add(customer, instance);
|
||||
UpdateBillInfo();
|
||||
customer.CurrentBill = instance;
|
||||
var newKeyValuePair = new KeyValuePair<Customer, Bill>(customer, instance);
|
||||
_customerBills.Add(newKeyValuePair);
|
||||
}
|
||||
|
||||
private void OrderResult(Customer customer, bool isSucceed)
|
||||
{
|
||||
if (_customerBillDictionary.TryGetValue(customer, out var bill))
|
||||
{
|
||||
bill.OrderResult(isSucceed, UpdateBillInfo);
|
||||
_customerBillDictionary.Remove(customer);
|
||||
|
||||
UpdateBillInfo(); // Bill이 제거된 후 빈 자리를 업데이트
|
||||
}
|
||||
var keyValue = _customerBills.FirstOrDefault((element) => element.Key == customer);
|
||||
keyValue.Value.OrderResult(isSucceed, () => _customerBills.Remove(keyValue));
|
||||
}
|
||||
|
||||
private void UpdateBillInfo()
|
||||
private void UpdateBillInfo(ObservableList<KeyValuePair<Customer, Bill>> sender, ListChangedEventArgs<KeyValuePair<Customer, Bill>> e)
|
||||
{
|
||||
foreach (var element in _customerBillDictionary.Values)
|
||||
foreach (var element in sender)
|
||||
{
|
||||
for (var i = 0; i < _billInfos.Count; i++)
|
||||
{
|
||||
if (element.CurrentBillInfo == _billInfos[i]) break;
|
||||
if (element.Value.CurrentBillInfo == _billInfos[i]) break;
|
||||
|
||||
if (_billInfos[i].IsEmpty)
|
||||
{
|
||||
PlayChainAnimation();
|
||||
element.Move(_billInfos[i]);
|
||||
element.Value.Move(_billInfos[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -175,7 +175,7 @@ namespace BlueWater.Uis
|
||||
TycoonManager.Instance.TycoonStatus.CurrentGarnishAmount2 += 4000;break;
|
||||
case "AddAllLiquid":
|
||||
TycoonManager.Instance.TycoonIngredientController.AllAddBarrels(1000); break;
|
||||
case "ServerNpc": EventManager.InvokeCreateServingCrew(); break;
|
||||
case "ServerNpc": EventManager.InvokeCreateServerCrew(); break;
|
||||
case "CleanerNpc": EventManager.InvokeCreateCleanerCrew(); break;
|
||||
case "ChefNpc": EventManager.InvokeCreateBartenderCrew(); break;
|
||||
case "SpeedUp":
|
||||
|
@ -728,7 +728,7 @@ MonoBehaviour:
|
||||
resetValuesOnRestart: 0
|
||||
externalBehavior: {fileID: 11400000, guid: b46524e0380db8a4caaa3000e32b5e04, type: 2}
|
||||
mBehaviorSource:
|
||||
behaviorName: Cleaner
|
||||
behaviorName: CleanerCrew
|
||||
behaviorDescription:
|
||||
mTaskData:
|
||||
types: []
|
||||
|
1140
Assets/05.Prefabs/Characters/Npcs/Crews/ServerCrew.prefab
Normal file
1140
Assets/05.Prefabs/Characters/Npcs/Crews/ServerCrew.prefab
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b692f61d994a0b94cb92cf0f2d47cfb2
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -176,6 +176,42 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 3249711671270954515}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1304425945750998618
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5776045902233640550}
|
||||
m_Layer: 0
|
||||
m_Name: BartenderTables
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5776045902233640550
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1304425945750998618}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 5701996018619210215}
|
||||
- {fileID: 790144698020171886}
|
||||
- {fileID: 5559400221697507446}
|
||||
- {fileID: 5881185964479335323}
|
||||
- {fileID: 7251359079948161700}
|
||||
m_Father: {fileID: 1402113424960589398}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1374224201695919457
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1444,11 +1480,6 @@ Transform:
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 5701996018619210215}
|
||||
- {fileID: 790144698020171886}
|
||||
- {fileID: 5559400221697507446}
|
||||
- {fileID: 5881185964479335323}
|
||||
- {fileID: 7251359079948161700}
|
||||
- {fileID: 2754206603907726668}
|
||||
- {fileID: 3647761711574370734}
|
||||
- {fileID: 251860307607057383}
|
||||
@ -1724,6 +1755,7 @@ Transform:
|
||||
- {fileID: 4798925548635759970}
|
||||
- {fileID: 3032369304281183765}
|
||||
- {fileID: 1031605920973182729}
|
||||
- {fileID: 5776045902233640550}
|
||||
m_Father: {fileID: 4449232531499695111}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &8697754653569273504
|
||||
@ -2018,7 +2050,7 @@ PrefabInstance:
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 4798925548635759970}
|
||||
m_TransformParent: {fileID: 5776045902233640550}
|
||||
m_Modifications:
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
@ -2038,15 +2070,15 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
@ -4326,7 +4358,7 @@ PrefabInstance:
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 4798925548635759970}
|
||||
m_TransformParent: {fileID: 5776045902233640550}
|
||||
m_Modifications:
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
@ -4346,15 +4378,15 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
@ -4454,7 +4486,7 @@ PrefabInstance:
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 4798925548635759970}
|
||||
m_TransformParent: {fileID: 5776045902233640550}
|
||||
m_Modifications:
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
@ -4474,15 +4506,15 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
@ -5534,7 +5566,7 @@ PrefabInstance:
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 4798925548635759970}
|
||||
m_TransformParent: {fileID: 5776045902233640550}
|
||||
m_Modifications:
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
@ -5554,15 +5586,15 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
@ -6338,7 +6370,7 @@ PrefabInstance:
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 4798925548635759970}
|
||||
m_TransformParent: {fileID: 5776045902233640550}
|
||||
m_Modifications:
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
@ -6358,15 +6390,15 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 809828747251277026, guid: a46735af9ffe7684fb0f19bc9b351e30, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
|
@ -10,7 +10,7 @@ MonoBehaviour:
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b23f08d2ae4cba14087c1ed36193d82b, type: 3}
|
||||
m_Name: Cleaner
|
||||
m_Name: CleanerCrew
|
||||
m_EditorClassIdentifier:
|
||||
mBehaviorSource:
|
||||
behaviorName: Customer
|
||||
@ -22,10 +22,11 @@ MonoBehaviour:
|
||||
variableStartIndex:
|
||||
JSONSerialization: '{"EntryTask":{"Type":"BehaviorDesigner.Runtime.Tasks.EntryTask","NodeData":{"Offset":"(548.5,11.3636351)"},"ID":0,"Name":"Entry","Instant":true},"RootTask":{"Type":"BehaviorDesigner.Runtime.Tasks.Repeater","NodeData":{"Offset":"(-2.36053467,152.585861)"},"ID":1,"Name":"Repeater","Instant":true,"SharedIntcount":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedBoolrepeatForever":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":true},"SharedBoolendOnFailure":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(0,120)"},"ID":2,"Name":"Cleaner
|
||||
Cycle","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(-2.54729939,179.727264)"},"ID":3,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-225.263184,152.083344)"},"ID":4,"Name":"Succes
|
||||
Sequence","Instant":true,"AbortTypeabortType":"LowerPriority","Children":[{"Type":"BlueWater.BehaviorTrees.Actions.CheckCleaning","NodeData":{"Offset":"(-120,150)"},"ID":5,"Name":"Check
|
||||
Cleaning","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(140.876663,145.4505)"},"ID":6,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-105,147.5)"},"ID":7,"Name":"Succes
|
||||
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Actions.Cleaning","NodeData":{"Offset":"(-140,150)"},"ID":8,"Name":"Cleaning","Instant":true},{"Type":"BlueWater.BehaviorTrees.Actions.CompleteCleaning","NodeData":{"Offset":"(2.49850464,149.907471)"},"ID":9,"Name":"Complete
|
||||
Cleaning","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(162.857178,152.857422)"},"ID":10,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(150,145.2378)"},"ID":11,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(289.942871,151.213776)"},"ID":12,"Name":"Fail
|
||||
Sequence","Instant":true,"AbortTypeabortType":"LowerPriority","Children":[{"Type":"BlueWater.BehaviorTrees.Actions.CheckOnMission","NodeData":{"Offset":"(-120,150)"},"ID":5,"Name":"Check
|
||||
On Mission","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(140.876663,145.4505)"},"ID":6,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-105,147.5)"},"ID":7,"Name":"Succes
|
||||
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Actions.OnMission","NodeData":{"Offset":"(-140,150)"},"ID":8,"Name":"On
|
||||
Mission","Instant":true},{"Type":"BlueWater.BehaviorTrees.Actions.CompleteMission","NodeData":{"Offset":"(0,150)"},"ID":9,"Name":"Complete
|
||||
Mission","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(162.857178,152.857422)"},"ID":10,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(150,145.2378)"},"ID":11,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(289.942871,151.213776)"},"ID":12,"Name":"Fail
|
||||
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Actions.MoveToRandomPositionInRange","NodeData":{"Offset":"(-100.101685,148.086548)"},"ID":13,"Name":"Move
|
||||
To Random Position In Range","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(99.99939,150)"},"ID":14,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]}]}]}]},"Variables":[{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true}]}'
|
||||
fieldSerializationData:
|
40
Assets/11.BehaviorTree/ServerCrew.asset
Normal file
40
Assets/11.BehaviorTree/ServerCrew.asset
Normal file
@ -0,0 +1,40 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b23f08d2ae4cba14087c1ed36193d82b, type: 3}
|
||||
m_Name: ServerCrew
|
||||
m_EditorClassIdentifier:
|
||||
mBehaviorSource:
|
||||
behaviorName: Customer
|
||||
behaviorDescription:
|
||||
mTaskData:
|
||||
types: []
|
||||
parentIndex:
|
||||
startIndex:
|
||||
variableStartIndex:
|
||||
JSONSerialization: '{"EntryTask":{"Type":"BehaviorDesigner.Runtime.Tasks.EntryTask","NodeData":{"Offset":"(548.5,11.3636351)"},"ID":0,"Name":"Entry","Instant":true},"RootTask":{"Type":"BehaviorDesigner.Runtime.Tasks.Repeater","NodeData":{"Offset":"(-2.36053467,152.585861)"},"ID":1,"Name":"Repeater","Instant":true,"SharedIntcount":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedBoolrepeatForever":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":true},"SharedBoolendOnFailure":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(0,120)"},"ID":2,"Name":"Cleaner
|
||||
Cycle","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(-2.54729939,179.727264)"},"ID":3,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-225.263184,152.083344)"},"ID":4,"Name":"Succes
|
||||
Sequence","Instant":true,"AbortTypeabortType":"LowerPriority","Children":[{"Type":"BlueWater.BehaviorTrees.Actions.CheckOnMission","NodeData":{"Offset":"(-120,150)"},"ID":5,"Name":"Check
|
||||
On Mission","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(140.876663,145.4505)"},"ID":6,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-105,147.5)"},"ID":7,"Name":"Succes
|
||||
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Actions.OnMission","NodeData":{"Offset":"(-140,150)"},"ID":8,"Name":"On
|
||||
Mission","Instant":true},{"Type":"BlueWater.BehaviorTrees.Actions.CompleteMission","NodeData":{"Offset":"(0,150)"},"ID":9,"Name":"Complete
|
||||
Mission","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(162.857178,152.857422)"},"ID":10,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(150,145.2378)"},"ID":11,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(289.942871,151.213776)"},"ID":12,"Name":"Fail
|
||||
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWater.BehaviorTrees.Actions.MoveToRandomPositionInRange","NodeData":{"Offset":"(-100.101685,148.086548)"},"ID":13,"Name":"Move
|
||||
To Random Position In Range","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(99.99939,150)"},"ID":14,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":2},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]}]}]}]},"Variables":[{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true}]}'
|
||||
fieldSerializationData:
|
||||
typeName: []
|
||||
fieldNameHash:
|
||||
startIndex:
|
||||
dataPosition:
|
||||
unityObjects: []
|
||||
byteData:
|
||||
byteDataArray:
|
||||
Version: 1.7.9
|
8
Assets/11.BehaviorTree/ServerCrew.asset.meta
Normal file
8
Assets/11.BehaviorTree/ServerCrew.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7528ceb2f7ed9cc4896ce2c45aa65338
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user