Customer AI 주문 서브트리 및 데코레이터 추가
레스토랑 씬용 임시 AStarPath 싱글톤 추가
This commit is contained in:
parent
22047aeb8b
commit
24239dc138
BIN
Assets/_DDD/_Addressables/AI/Customer/Subtree/CustomerDefault.asset
(Stored with Git LFS)
BIN
Assets/_DDD/_Addressables/AI/Customer/Subtree/CustomerDefault.asset
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/_DDD/_Addressables/AI/Customer/Subtree/OrderSubtree.asset
(Stored with Git LFS)
Normal file
BIN
Assets/_DDD/_Addressables/AI/Customer/Subtree/OrderSubtree.asset
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bab8aadc83d64f64b8280e6ebb957e65
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -8,6 +8,10 @@ PrefabInstance:
|
|||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TransformParent: {fileID: 0}
|
m_TransformParent: {fileID: 0}
|
||||||
m_Modifications:
|
m_Modifications:
|
||||||
|
- target: {fileID: 2686192822530022837, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
|
propertyPath: m_IsTrigger
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
- target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
propertyPath: m_Data.m_UniqueID
|
propertyPath: m_Data.m_UniqueID
|
||||||
value: 2072347169
|
value: 2072347169
|
||||||
@ -1104,6 +1108,30 @@ PrefabInstance:
|
|||||||
propertyPath: _availableInteractions
|
propertyPath: _availableInteractions
|
||||||
value: 2
|
value: 2
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
|
propertyPath: gravity.x
|
||||||
|
value: NaN
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
|
propertyPath: gravity.y
|
||||||
|
value: NaN
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
|
propertyPath: gravity.z
|
||||||
|
value: NaN
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
|
propertyPath: orientation
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
|
propertyPath: enableRotation
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
|
propertyPath: alwaysDrawGizmos
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6336425934484470474, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
- target: {fileID: 6336425934484470474, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
propertyPath: m_Materials.Array.size
|
propertyPath: m_Materials.Array.size
|
||||||
value: 4
|
value: 4
|
||||||
@ -1144,6 +1172,18 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: CustomerNpc
|
value: CustomerNpc
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7545136660434259176, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
|
propertyPath: m_Constraints
|
||||||
|
value: 112
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7545136660434259176, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
|
propertyPath: m_IsKinematic
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8165702938223525558, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
|
propertyPath: graphMask.value
|
||||||
|
value: 2
|
||||||
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents:
|
m_RemovedComponents:
|
||||||
- {fileID: 133104368464330048, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
- {fileID: 133104368464330048, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
|
@ -11785,6 +11785,92 @@ MeshFilter:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 1771012164}
|
m_GameObject: {fileID: 1771012164}
|
||||||
m_Mesh: {fileID: 0}
|
m_Mesh: {fileID: 0}
|
||||||
|
--- !u!1 &1775054119
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 1775054121}
|
||||||
|
- component: {fileID: 1775054120}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: AstarPath
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!114 &1775054120
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1775054119}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 78396926cbbfc4ac3b48fc5fc34a87d1, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
version: 1073741824
|
||||||
|
data:
|
||||||
|
dataString: UEsDBBQAAAgIAABIIewaXtoYSgIAALMEAAALACQAZ3JhcGgxLmpzb24KACAAAAAAAAEAGAAAgD7V3rGdAQCAPtXesZ0BAIA+1d6xnQF1U8tu2zAQ/BVD56awZRuOe4ydpoc8CstAgxQ9rMm1RJgiXZKy4xj59+5SjyhNeyI0s7PP0TkRBTgQAd0KpKp88mUw/Dz9NEiENcFW7g6er52zjvCUUdQ6Uy8Yw1KOO4LewUbjN1R5EZqwFlxoVW66lCU8Z9ruWTwe1t/XMsdbNHkoWBlBZVaYK2uaMmPCUKpg3VppbMBReklwaIDHD8hTh1QeWcdzBVchIXt0t3BCd2el2ioBgWox/fMXkVKVaDwhxHKhZNkC42VC/AbELne2MnLt4IDOw0ZpFU4c+qMZmuMcajyACTcO9kVWuS0I7FLaextW+LtSLsYKqzUKbiPDEJTJuZtzD26FsW3Pkn1x8kr4TKBh5vz6F5YuW1THUcHvGBgkB9AVKy5GA2YD5A0Xp3fgyQi0vwXVVpKLdWvruDv0RdznFrR/x6zROVDmH5q1w/4JQh1YW6aE/dIejYdyr2n4r2TGaLdxsxruY9UmWmIApfm6xFqzqHfUtWQqrXkuZ0O8az30MzuQ0FPzvvAb599aJ1Be8T39Ag3V+L9iNPkgadzYCMatYtRK0rqKL+yRW3yoAk2Ib3tg4p6Ou7DG1Kfu77WVNfZ5kxkEhz5k9IjiwejT41NPhoZNeA+HkrSLKjrqTZtXSr63QjKepbNhms7mczEbXc7lBU7kdLZJp7M5yOlEDJM4hTIqKNDfKb8O7WLob+7d20AZM65Q0MEG0fxsV+ngeKNeStvzgDJbmwnyhXmoc3Rj06FB02bldfztez9Fcn5NXv8AUEsDBBQAAAgIAABIIexc6sO8cwAAAIUAAAAJACQAbWV0YS5qc29uCgAgAAAAAAABABgAAIA+1d6xnQEAgD7V3rGdAQCAPtXesZ0Bq1YqSy0qzszPU7JSMNUz1rPQUVBKL0osyCgGChiBOKWZKSB2dF5pTg6Qb2xuZG5gZGRuaZlsbmhhmaKbapJiap5kZGpumZhiapJsoBQLVFVSWZDql5ibiqwzILEkIy0zLyUzL10vKDU5sbjEHWSRUmwtAFBLAQItABQAAAgIAABIIewaXtoYSgIAALMEAAALACQAAAAAAAAAAAAAAAAAAABncmFwaDEuanNvbgoAIAAAAAAAAQAYAACAPtXesZ0BAIA+1d6xnQEAgD7V3rGdAVBLAQItABQAAAgIAABIIexc6sO8cwAAAIUAAAAJACQAAAAAAAAAAAAAAJcCAABtZXRhLmpzb24KACAAAAAAAAEAGAAAgD7V3rGdAQCAPtXesZ0BAIA+1d6xnQFQSwUGAAAAAAIAAgC4AAAAVQMAAAAA
|
||||||
|
file_cachedStartup: {fileID: 0}
|
||||||
|
cacheStartup: 0
|
||||||
|
showNavGraphs: 1
|
||||||
|
showUnwalkableNodes: 1
|
||||||
|
debugMode: 4
|
||||||
|
debugFloor: 0
|
||||||
|
debugRoof: 1
|
||||||
|
manualDebugFloorRoof: 0
|
||||||
|
showSearchTree: 0
|
||||||
|
unwalkableNodeDebugSize: 0.3
|
||||||
|
logPathResults: 0
|
||||||
|
maxNearestNodeDistance: 100
|
||||||
|
scanOnStartup: 1
|
||||||
|
fullGetNearestSearch: 0
|
||||||
|
prioritizeGraphs: 0
|
||||||
|
prioritizeGraphsLimit: 1
|
||||||
|
colorSettings:
|
||||||
|
_SolidColor: {r: 0.11764706, g: 0.4, b: 0.7882353, a: 0.9}
|
||||||
|
_UnwalkableNode: {r: 1, g: 0, b: 0, a: 0.5}
|
||||||
|
_BoundsHandles: {r: 0.29, g: 0.454, b: 0.741, a: 0.9}
|
||||||
|
_ConnectionLowLerp: {r: 0, g: 1, b: 0, a: 0.5}
|
||||||
|
_ConnectionHighLerp: {r: 1, g: 0, b: 0, a: 0.5}
|
||||||
|
_MeshEdgeColor: {r: 0, g: 0, b: 0, a: 0.5}
|
||||||
|
_AreaColors: []
|
||||||
|
tagNames: []
|
||||||
|
heuristic: 2
|
||||||
|
heuristicScale: 1
|
||||||
|
threadCount: -1
|
||||||
|
maxFrameTime: 10
|
||||||
|
batchGraphUpdates: 0
|
||||||
|
graphUpdateBatchingInterval: 0.2
|
||||||
|
navmeshUpdates:
|
||||||
|
updateInterval: 0
|
||||||
|
euclideanEmbedding:
|
||||||
|
mode: 0
|
||||||
|
seed: 0
|
||||||
|
pivotPointRoot: {fileID: 0}
|
||||||
|
spreadOutCount: 10
|
||||||
|
showGraphs: 1
|
||||||
|
--- !u!4 &1775054121
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1775054119}
|
||||||
|
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: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!4 &1784230204 stripped
|
--- !u!4 &1784230204 stripped
|
||||||
Transform:
|
Transform:
|
||||||
m_CorrespondingSourceObject: {fileID: 1061695247072719575, guid: 70f56d7d65d2e7842b5bd517ae7fe7fe, type: 3}
|
m_CorrespondingSourceObject: {fileID: 1061695247072719575, guid: 70f56d7d65d2e7842b5bd517ae7fe7fe, type: 3}
|
||||||
@ -16891,3 +16977,4 @@ SceneRoots:
|
|||||||
- {fileID: 612992553}
|
- {fileID: 612992553}
|
||||||
- {fileID: 761682093}
|
- {fileID: 761682093}
|
||||||
- {fileID: 549344125}
|
- {fileID: 549344125}
|
||||||
|
- {fileID: 1775054121}
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f96045235fcc43c880f2e0ee857b6f2e
|
||||||
|
timeCreated: 1756111444
|
@ -0,0 +1,235 @@
|
|||||||
|
using Opsive.BehaviorDesigner.Runtime;
|
||||||
|
using Opsive.BehaviorDesigner.Runtime.Components;
|
||||||
|
using Opsive.BehaviorDesigner.Runtime.Tasks;
|
||||||
|
using Opsive.BehaviorDesigner.Runtime.Tasks.Decorators;
|
||||||
|
using Opsive.GraphDesigner.Runtime;
|
||||||
|
using Opsive.Shared.Utility;
|
||||||
|
using Unity.Burst;
|
||||||
|
using Unity.Entities;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DDD
|
||||||
|
{
|
||||||
|
[NodeDescription("자식 태스크의 실행 시간을 제한합니다")]
|
||||||
|
public class TimeLimiter : ILogicNode, IParentNode, ITaskComponentData, IDecorator, ISavableTask
|
||||||
|
{
|
||||||
|
[Tooltip("The index of the node.")]
|
||||||
|
[SerializeField] ushort _Index;
|
||||||
|
|
||||||
|
[Tooltip("The parent index of the node. ushort.MaxValue indicates no parent.")]
|
||||||
|
[SerializeField] ushort _ParentIndex;
|
||||||
|
|
||||||
|
[Tooltip("The sibling index of the node. ushort.MaxValue indicates no sibling.")]
|
||||||
|
[SerializeField] ushort _SiblingIndex;
|
||||||
|
|
||||||
|
[Tooltip("최대 실행 시간(초)")]
|
||||||
|
[SerializeField] float _timeLimit = 30.0f;
|
||||||
|
|
||||||
|
[Tooltip("시간 초과 시 반환할 상태")]
|
||||||
|
[SerializeField] private TaskStatus _timeoutStatus = TaskStatus.Failure;
|
||||||
|
|
||||||
|
[Header("Debug")]
|
||||||
|
[Tooltip("로그 출력")]
|
||||||
|
[SerializeField] private bool _enableDebug = false;
|
||||||
|
|
||||||
|
private ushort _ComponentIndex;
|
||||||
|
|
||||||
|
public ushort Index
|
||||||
|
{
|
||||||
|
get => _Index;
|
||||||
|
set => _Index = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ushort ParentIndex
|
||||||
|
{
|
||||||
|
get => _ParentIndex;
|
||||||
|
set => _ParentIndex = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ushort SiblingIndex
|
||||||
|
{
|
||||||
|
get => _SiblingIndex;
|
||||||
|
set => _SiblingIndex = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ushort RuntimeIndex { get; set; }
|
||||||
|
|
||||||
|
public float TimeLimit
|
||||||
|
{
|
||||||
|
get => _timeLimit;
|
||||||
|
set => _timeLimit = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int MaxChildCount
|
||||||
|
{
|
||||||
|
get { return 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public ComponentType Tag
|
||||||
|
{
|
||||||
|
get => typeof(TimeLimiterTag);
|
||||||
|
}
|
||||||
|
|
||||||
|
public System.Type SystemType
|
||||||
|
{
|
||||||
|
get => typeof(TimeLimiterTaskSystem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void AddBufferElement(World world, Entity entity)
|
||||||
|
{
|
||||||
|
DynamicBuffer<TimeLimiterComponent> buffer;
|
||||||
|
if (world.EntityManager.HasBuffer<TimeLimiterComponent>(entity))
|
||||||
|
{
|
||||||
|
buffer = world.EntityManager.GetBuffer<TimeLimiterComponent>(entity);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer = world.EntityManager.AddBuffer<TimeLimiterComponent>(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer.Add(new TimeLimiterComponent()
|
||||||
|
{
|
||||||
|
Index = RuntimeIndex,
|
||||||
|
TimeLimit = _timeLimit,
|
||||||
|
TimeoutStatus = _timeoutStatus,
|
||||||
|
});
|
||||||
|
_ComponentIndex = (ushort)(buffer.Length - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearBufferElement(World world, Entity entity)
|
||||||
|
{
|
||||||
|
if (world.EntityManager.HasBuffer<TimeLimiterComponent>(entity))
|
||||||
|
{
|
||||||
|
var buffer = world.EntityManager.GetBuffer<TimeLimiterComponent>(entity);
|
||||||
|
buffer.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public MemberVisibility GetSaveReflectionType(int index)
|
||||||
|
{
|
||||||
|
return MemberVisibility.None;
|
||||||
|
}
|
||||||
|
|
||||||
|
public object Save(World world, Entity entity)
|
||||||
|
{
|
||||||
|
var timeLimiterComponents = world.EntityManager.GetBuffer<TimeLimiterComponent>(entity);
|
||||||
|
var timeLimiterComponent = timeLimiterComponents[_ComponentIndex];
|
||||||
|
|
||||||
|
return timeLimiterComponent.StartTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Load(object saveData, World world, Entity entity)
|
||||||
|
{
|
||||||
|
var timeLimiterComponents = world.EntityManager.GetBuffer<TimeLimiterComponent>(entity);
|
||||||
|
var timeLimiterComponent = timeLimiterComponents[_ComponentIndex];
|
||||||
|
|
||||||
|
timeLimiterComponent.StartTime = (float)saveData;
|
||||||
|
timeLimiterComponents[_ComponentIndex] = timeLimiterComponent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct TimeLimiterComponent : IBufferElementData
|
||||||
|
{
|
||||||
|
[Tooltip("The index of the node.")]
|
||||||
|
public ushort Index;
|
||||||
|
|
||||||
|
[Tooltip("최대 실행 시간(초)")]
|
||||||
|
public float TimeLimit;
|
||||||
|
|
||||||
|
[Tooltip("실행 시작 시간(초)")]
|
||||||
|
public float StartTime;
|
||||||
|
|
||||||
|
[Tooltip("Should the task end when the child returns failure?")]
|
||||||
|
public TaskStatus TimeoutStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct TimeLimiterTag : IComponentData, IEnableableComponent { }
|
||||||
|
|
||||||
|
[DisableAutoCreation]
|
||||||
|
public partial struct TimeLimiterTaskSystem : ISystem
|
||||||
|
{
|
||||||
|
[BurstCompile]
|
||||||
|
private void OnUpdate(ref SystemState state)
|
||||||
|
{
|
||||||
|
var query = SystemAPI.QueryBuilder().WithAllRW<BranchComponent>().WithAllRW<TaskComponent>().WithAllRW<TimeLimiterComponent>().WithAll<TimeLimiterTag, EvaluationComponent>().Build();
|
||||||
|
state.Dependency = new TimeLimiterJob()
|
||||||
|
{
|
||||||
|
CurrentTime = (float)SystemAPI.Time.ElapsedTime
|
||||||
|
}.ScheduleParallel(query, state.Dependency);
|
||||||
|
}
|
||||||
|
|
||||||
|
[BurstCompile]
|
||||||
|
private partial struct TimeLimiterJob : IJobEntity
|
||||||
|
{
|
||||||
|
public float CurrentTime;
|
||||||
|
|
||||||
|
[BurstCompile]
|
||||||
|
public void Execute(ref DynamicBuffer<BranchComponent> branchComponents,
|
||||||
|
ref DynamicBuffer<TaskComponent> taskComponents,
|
||||||
|
ref DynamicBuffer<TimeLimiterComponent> timeLimiterComponents)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < timeLimiterComponents.Length; ++i)
|
||||||
|
{
|
||||||
|
var timeLimiterComponent = timeLimiterComponents[i];
|
||||||
|
var taskComponent = taskComponents[timeLimiterComponent.Index];
|
||||||
|
var branchComponent = branchComponents[taskComponent.BranchIndex];
|
||||||
|
TaskComponent childTaskComponent;
|
||||||
|
|
||||||
|
if (taskComponent.Status == TaskStatus.Queued)
|
||||||
|
{
|
||||||
|
taskComponent.Status = TaskStatus.Running;
|
||||||
|
taskComponents[taskComponent.Index] = taskComponent;
|
||||||
|
|
||||||
|
timeLimiterComponent.StartTime = CurrentTime;
|
||||||
|
timeLimiterComponents[i] = timeLimiterComponent;
|
||||||
|
|
||||||
|
childTaskComponent = taskComponents[taskComponent.Index + 1];
|
||||||
|
childTaskComponent.Status = TaskStatus.Queued;
|
||||||
|
taskComponents[taskComponent.Index + 1] = childTaskComponent;
|
||||||
|
|
||||||
|
branchComponent.NextIndex = taskComponent.Index + 1;
|
||||||
|
branchComponents[taskComponent.BranchIndex] = branchComponent;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (taskComponent.Status != TaskStatus.Running)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timeLimiterComponent.StartTime >= 0f &&
|
||||||
|
CurrentTime - timeLimiterComponent.StartTime >= timeLimiterComponent.TimeLimit) {
|
||||||
|
// 시간 초과
|
||||||
|
taskComponent.Status = timeLimiterComponent.TimeoutStatus;
|
||||||
|
taskComponents[taskComponent.Index] = taskComponent;
|
||||||
|
|
||||||
|
// 자식 태스크가 실행 중이면 중단
|
||||||
|
childTaskComponent = taskComponents[taskComponent.Index + 1];
|
||||||
|
if (childTaskComponent.Status == TaskStatus.Running ||
|
||||||
|
childTaskComponent.Status == TaskStatus.Queued) {
|
||||||
|
childTaskComponent.Status = timeLimiterComponent.TimeoutStatus;
|
||||||
|
taskComponents[taskComponent.Index + 1] = childTaskComponent;
|
||||||
|
}
|
||||||
|
|
||||||
|
branchComponent.NextIndex = taskComponent.ParentIndex;
|
||||||
|
branchComponents[taskComponent.BranchIndex] = branchComponent;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
childTaskComponent = taskComponents[taskComponent.Index + 1];
|
||||||
|
if (childTaskComponent.Status == TaskStatus.Queued ||
|
||||||
|
childTaskComponent.Status == TaskStatus.Running) {
|
||||||
|
// The child should keep running.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
taskComponent.Status = childTaskComponent.Status;
|
||||||
|
taskComponents[taskComponent.Index] = taskComponent;
|
||||||
|
|
||||||
|
branchComponent.NextIndex = taskComponent.ParentIndex;
|
||||||
|
branchComponents[taskComponent.BranchIndex] = branchComponent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d5da50af45c8438eb9677fd18378f9b4
|
||||||
|
timeCreated: 1756111556
|
@ -101,6 +101,7 @@ public bool HasReachedDestination()
|
|||||||
|
|
||||||
public bool IsPositionMovable(Vector3 endPosition)
|
public bool IsPositionMovable(Vector3 endPosition)
|
||||||
{
|
{
|
||||||
|
|
||||||
var nearestNode = AstarPath.active.GetNearest(endPosition).node;
|
var nearestNode = AstarPath.active.GetNearest(endPosition).node;
|
||||||
return nearestNode != null && nearestNode.Walkable;
|
return nearestNode != null && nearestNode.Walkable;
|
||||||
}
|
}
|
||||||
|
@ -25,11 +25,11 @@ private void Start()
|
|||||||
|
|
||||||
public bool CanInteract()
|
public bool CanInteract()
|
||||||
{
|
{
|
||||||
if (GetInteractionSubsystemType() == RestaurantOrderType.Wait)
|
//if (GetInteractionSubsystemType() == RestaurantOrderType.Wait)
|
||||||
{
|
//{
|
||||||
return true;
|
// return true;
|
||||||
}
|
//}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null)
|
public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
using Opsive.BehaviorDesigner.Runtime.Tasks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace DDD.RestaurantOrders
|
namespace DDD.RestaurantOrders
|
||||||
@ -6,7 +7,8 @@ public class RestaurantOrderSolver_Wait : MonoBehaviour, IInteractionSubsystemSo
|
|||||||
{
|
{
|
||||||
public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null)
|
public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null)
|
||||||
{
|
{
|
||||||
// TODO : DO SOMETHING!!!
|
if (CanExecuteInteractionSubsystem(interactor, interactable, payloadSo) == false) return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user