From e894a9dd27709fd7aaf5e8c51c215aeaa262fc44 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Fri, 10 Jul 2026 11:37:16 +0800 Subject: [PATCH] =?UTF-8?q?@=20chore(ai):=20=E7=A7=BB=E9=99=A4=E6=AD=BB?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=20Behavior=20Designer=EF=BC=88BD=5F*=20+=20O?= =?UTF-8?q?psive=20=E5=8C=85=20+=20=E5=AE=8F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 敌人 AI 已迁到自研 BrainGraph,旧的 Opsive Behavior Designer 集成全线死亡: 无任何 prefab 挂 BehaviorTree,新系统也不引用 BD 任务。用户手动删除三个 com.opsive.* 包后,BD_* 文件(#if GRAPH_DESIGNER 下引用 Opsive 类型)导致 BaseGames.Enemies.AI 程序集编译失败——本提交清除死代码并恢复编译。 - 删除 ~50 个 BD_*.cs + BDTaskAttributes.cs + BaseGames.Enemies.AI.asmdef。 - 移除 Standalone 的 GRAPH_DESIGNER 脚本宏。 - 移除 com.opsive.behaviordesigner/shared/graphdesigner 嵌入包(用户已删目录)。 已扫描确认无其他程序集引用该 AI 程序集、无真实 Opsive/BD_ 类型引用 (仅注释/Tooltip 提及)。编译 0 错误。属敌人架构重构 P1(死代码清除)。 Co-Authored-By: Claude Opus 4.8 (1M context) @ --- Assets/_Game/Scripts/Enemies/AI.meta | 8 - .../Scripts/Enemies/AI/BDTaskAttributes.cs | 37 - .../Enemies/AI/BDTaskAttributes.cs.meta | 11 - Assets/_Game/Scripts/Enemies/AI/BD_Attack.cs | 31 - .../Scripts/Enemies/AI/BD_Attack.cs.meta | 11 - .../Enemies/AI/BD_BossPhaseTransition.cs | 58 - .../Enemies/AI/BD_BossPhaseTransition.cs.meta | 11 - .../Scripts/Enemies/AI/BD_BroadcastAlert.cs | 39 - .../Enemies/AI/BD_BroadcastAlert.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_CanAttack.cs | 27 - .../Scripts/Enemies/AI/BD_CanAttack.cs.meta | 11 - .../Scripts/Enemies/AI/BD_CanReachTarget.cs | 35 - .../Enemies/AI/BD_CanReachTarget.cs.meta | 11 - .../Scripts/Enemies/AI/BD_CanUseAbility.cs | 71 - .../Enemies/AI/BD_CanUseAbility.cs.meta | 11 - .../Scripts/Enemies/AI/BD_CanUseBossSkill.cs | 41 - .../Enemies/AI/BD_CanUseBossSkill.cs.meta | 11 - .../Scripts/Enemies/AI/BD_ChasePlayer.cs | 145 -- .../Scripts/Enemies/AI/BD_ChasePlayer.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_EnterPhase.cs | 35 - .../Scripts/Enemies/AI/BD_EnterPhase.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_FaceTarget.cs | 29 - .../Scripts/Enemies/AI/BD_FaceTarget.cs.meta | 11 - .../Scripts/Enemies/AI/BD_InterruptAbility.cs | 32 - .../Enemies/AI/BD_InterruptAbility.cs.meta | 11 - .../Enemies/AI/BD_InvestigateLastKnown.cs | 162 -- .../AI/BD_InvestigateLastKnown.cs.meta | 11 - .../Scripts/Enemies/AI/BD_IsAbilityRunning.cs | 34 - .../Enemies/AI/BD_IsAbilityRunning.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_IsAiPhase.cs | 36 - .../Scripts/Enemies/AI/BD_IsAiPhase.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_IsGrounded.cs | 27 - .../Scripts/Enemies/AI/BD_IsGrounded.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_IsHPBelow.cs | 34 - .../Scripts/Enemies/AI/BD_IsHPBelow.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_IsNearEdge.cs | 28 - .../Scripts/Enemies/AI/BD_IsNearEdge.cs.meta | 11 - .../Scripts/Enemies/AI/BD_IsOnNavLink.cs | 35 - .../Scripts/Enemies/AI/BD_IsOnNavLink.cs.meta | 11 - .../Scripts/Enemies/AI/BD_IsOutsideZone.cs | 61 - .../Enemies/AI/BD_IsOutsideZone.cs.meta | 11 - .../Scripts/Enemies/AI/BD_IsPlayerInRange.cs | 31 - .../Enemies/AI/BD_IsPlayerInRange.cs.meta | 11 - .../Scripts/Enemies/AI/BD_IsPlayerVisible.cs | 28 - .../Enemies/AI/BD_IsPlayerVisible.cs.meta | 11 - .../Enemies/AI/BD_IsSensorDetecting.cs | 41 - .../Enemies/AI/BD_IsSensorDetecting.cs.meta | 11 - .../Scripts/Enemies/AI/BD_IsStateMatch.cs | 30 - .../Enemies/AI/BD_IsStateMatch.cs.meta | 11 - Assets/_Game/Scripts/Enemies/AI/BD_JumpTo.cs | 49 - .../Scripts/Enemies/AI/BD_JumpTo.cs.meta | 11 - .../Enemies/AI/BD_MaintainCombatDistance.cs | 94 - .../AI/BD_MaintainCombatDistance.cs.meta | 11 - Assets/_Game/Scripts/Enemies/AI/BD_MoveTo.cs | 42 - .../Scripts/Enemies/AI/BD_MoveTo.cs.meta | 11 - .../Scripts/Enemies/AI/BD_MoveToAndWait.cs | 58 - .../Enemies/AI/BD_MoveToAndWait.cs.meta | 11 - .../Scripts/Enemies/AI/BD_MoveToPlayer.cs | 43 - .../Enemies/AI/BD_MoveToPlayer.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_OnParried.cs | 30 - .../Scripts/Enemies/AI/BD_OnParried.cs.meta | 11 - Assets/_Game/Scripts/Enemies/AI/BD_Patrol.cs | 69 - .../Scripts/Enemies/AI/BD_Patrol.cs.meta | 11 - .../Scripts/Enemies/AI/BD_PatrolWaypoints.cs | 241 -- .../Enemies/AI/BD_PatrolWaypoints.cs.meta | 11 - .../Scripts/Enemies/AI/BD_PlayAnimation.cs | 37 - .../Enemies/AI/BD_PlayAnimation.cs.meta | 11 - .../Scripts/Enemies/AI/BD_ReturnToHome.cs | 103 - .../Enemies/AI/BD_ReturnToHome.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_SetAiPhase.cs | 34 - .../Scripts/Enemies/AI/BD_SetAiPhase.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_SetAlert.cs | 29 - .../Scripts/Enemies/AI/BD_SetAlert.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_SetState.cs | 45 - .../Scripts/Enemies/AI/BD_SetState.cs.meta | 11 - .../Scripts/Enemies/AI/BD_SpawnProjectile.cs | 42 - .../Enemies/AI/BD_SpawnProjectile.cs.meta | 11 - .../Scripts/Enemies/AI/BD_StopMovement.cs | 28 - .../Enemies/AI/BD_StopMovement.cs.meta | 11 - .../Scripts/Enemies/AI/BD_SummonMinions.cs | 55 - .../Enemies/AI/BD_SummonMinions.cs.meta | 11 - .../Scripts/Enemies/AI/BD_TelegraphAttack.cs | 56 - .../Enemies/AI/BD_TelegraphAttack.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_TeleportTo.cs | 26 - .../Scripts/Enemies/AI/BD_TeleportTo.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_UseAbility.cs | 58 - .../Scripts/Enemies/AI/BD_UseAbility.cs.meta | 11 - .../Scripts/Enemies/AI/BD_UseBossSkill.cs | 53 - .../Enemies/AI/BD_UseBossSkill.cs.meta | 11 - .../Enemies/AI/BD_UseBossSkillWeighted.cs | 54 - .../AI/BD_UseBossSkillWeighted.cs.meta | 11 - Assets/_Game/Scripts/Enemies/AI/BD_Wait.cs | 33 - .../_Game/Scripts/Enemies/AI/BD_Wait.cs.meta | 11 - .../Scripts/Enemies/AI/BD_WaitForAnimation.cs | 48 - .../Enemies/AI/BD_WaitForAnimation.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_WaitRandom.cs | 36 - .../Scripts/Enemies/AI/BD_WaitRandom.cs.meta | 11 - .../Enemies/AI/BD_WaitUntilAbilityEnd.cs | 68 - .../Enemies/AI/BD_WaitUntilAbilityEnd.cs.meta | 11 - .../_Game/Scripts/Enemies/AI/BD_WalkRandom.cs | 48 - .../Scripts/Enemies/AI/BD_WalkRandom.cs.meta | 11 - .../Enemies/AI/BaseGames.Enemies.AI.asmdef | 21 - .../AI/BaseGames.Enemies.AI.asmdef.meta | 7 - .../com.opsive.behaviordesigner/Editor.meta | 8 - .../Editor/Icons.meta | 8 - .../Editor/Icons/BehaviorDesignerIcon.png | Bin 3412 -> 0 bytes .../Icons/BehaviorDesignerIcon.png.meta | 104 - .../Editor/Icons/DarkActiveStackedTask.png | Bin 1477 -> 0 bytes .../Icons/DarkActiveStackedTask.png.meta | 127 -- .../Editor/Icons/DarkCollapsedSlot.png | Bin 1012 -> 0 bytes .../Editor/Icons/DarkCollapsedSlot.png.meta | 140 -- .../Icons/DarkConditionalAbortBothIcon.png | Bin 1315 -> 0 bytes .../DarkConditionalAbortBothIcon.png.meta | 140 -- .../DarkConditionalAbortLowerPriorityIcon.png | Bin 1252 -> 0 bytes ...ConditionalAbortLowerPriorityIcon.png.meta | 140 -- .../Icons/DarkConditionalAbortSelfIcon.png | Bin 1256 -> 0 bytes .../DarkConditionalAbortSelfIcon.png.meta | 140 -- .../Editor/Icons/DarkExecutionFailure.png | Bin 374 -> 0 bytes .../Icons/DarkExecutionFailure.png.meta | 127 -- .../Icons/DarkExecutionFailureReevaluate.png | Bin 1397 -> 0 bytes .../DarkExecutionFailureReevaluate.png.meta | 127 -- .../Editor/Icons/DarkExecutionSuccess.png | Bin 332 -> 0 bytes .../Icons/DarkExecutionSuccess.png.meta | 127 -- .../Icons/DarkExecutionSuccessReevaluate.png | Bin 1374 -> 0 bytes .../DarkExecutionSuccessReevaluate.png.meta | 127 -- .../Editor/Icons/LightActiveStackedTask.png | Bin 1516 -> 0 bytes .../Icons/LightActiveStackedTask.png.meta | 127 -- .../Editor/Icons/LightCollapsedSlot.png | Bin 1007 -> 0 bytes .../Editor/Icons/LightCollapsedSlot.png.meta | 140 -- .../Icons/LightConditionalAbortBothIcon.png | Bin 1250 -> 0 bytes .../LightConditionalAbortBothIcon.png.meta | 140 -- ...LightConditionalAbortLowerPriorityIcon.png | Bin 1224 -> 0 bytes ...ConditionalAbortLowerPriorityIcon.png.meta | 140 -- .../Icons/LightConditionalAbortSelfIcon.png | Bin 1234 -> 0 bytes .../LightConditionalAbortSelfIcon.png.meta | 140 -- .../Editor/Icons/LightExecutionFailure.png | Bin 368 -> 0 bytes .../Icons/LightExecutionFailure.png.meta | 140 -- .../Icons/LightExecutionFailureReevaluate.png | Bin 1413 -> 0 bytes .../LightExecutionFailureReevaluate.png.meta | 140 -- .../Editor/Icons/LightExecutionSuccess.png | Bin 302 -> 0 bytes .../Icons/LightExecutionSuccess.png.meta | 140 -- .../Icons/LightExecutionSuccessReevaluate.png | Bin 1392 -> 0 bytes .../LightExecutionSuccessReevaluate.png.meta | 140 -- .../Editor/Icons/Tasks.meta | 8 - .../Editor/Icons/Tasks/DarkActionIcon.png | Bin 1403 -> 0 bytes .../Icons/Tasks/DarkActionIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkCompositeIcon.png | Bin 1064 -> 0 bytes .../Icons/Tasks/DarkCompositeIcon.png.meta | 140 -- .../Tasks/DarkConditionalEvaluatorIcon.png | Bin 2214 -> 0 bytes .../DarkConditionalEvaluatorIcon.png.meta | 140 -- .../Icons/Tasks/DarkConditionalIcon.png | Bin 1075 -> 0 bytes .../Icons/Tasks/DarkConditionalIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkCooldownIcon.png | Bin 2077 -> 0 bytes .../Icons/Tasks/DarkCooldownIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkDecoratorIcon.png | Bin 1229 -> 0 bytes .../Icons/Tasks/DarkDecoratorIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkEventIcon.png | Bin 1504 -> 0 bytes .../Editor/Icons/Tasks/DarkEventIcon.png.meta | 140 -- .../Icons/Tasks/DarkHasReceivedEventIcon.png | Bin 1173 -> 0 bytes .../Tasks/DarkHasReceivedEventIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkIdleIcon.png | Bin 1656 -> 0 bytes .../Editor/Icons/Tasks/DarkIdleIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkInverterIcon.png | Bin 1091 -> 0 bytes .../Icons/Tasks/DarkInverterIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkIteratorIcon.png | Bin 2210 -> 0 bytes .../Icons/Tasks/DarkIteratorIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkLogIcon.png | Bin 1202 -> 0 bytes .../Editor/Icons/Tasks/DarkLogIcon.png.meta | 140 -- .../Icons/Tasks/DarkOnInterruptIcon.png | Bin 1146 -> 0 bytes .../Icons/Tasks/DarkOnInterruptIcon.png.meta | 140 -- .../Icons/Tasks/DarkOnPhysicsCallbackIcon.png | Bin 2410 -> 0 bytes .../Tasks/DarkOnPhysicsCallbackIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkParallelIcon.png | Bin 1258 -> 0 bytes .../Icons/Tasks/DarkParallelIcon.png.meta | 140 -- .../Icons/Tasks/DarkParallelSelectorIcon.png | Bin 1433 -> 0 bytes .../Tasks/DarkParallelSelectorIcon.png.meta | 140 -- .../Tasks/DarkPerformInterruptionIcon.png | Bin 1363 -> 0 bytes .../DarkPerformInterruptionIcon.png.meta | 140 -- .../Icons/Tasks/DarkPrioritySelectorIcon.png | Bin 1287 -> 0 bytes .../Tasks/DarkPrioritySelectorIcon.png.meta | 140 -- .../Icons/Tasks/DarkRandomProbabilityIcon.png | Bin 1264 -> 0 bytes .../Tasks/DarkRandomProbabilityIcon.png.meta | 140 -- .../Icons/Tasks/DarkRandomSelectorIcon.png | Bin 1346 -> 0 bytes .../Tasks/DarkRandomSelectorIcon.png.meta | 140 -- .../Icons/Tasks/DarkRandomSequenceIcon.png | Bin 1359 -> 0 bytes .../Tasks/DarkRandomSequenceIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkRepeaterIcon.png | Bin 2170 -> 0 bytes .../Icons/Tasks/DarkRepeaterIcon.png.meta | 140 -- .../Icons/Tasks/DarkReturnFailureIcon.png | Bin 1558 -> 0 bytes .../Tasks/DarkReturnFailureIcon.png.meta | 140 -- .../Icons/Tasks/DarkReturnSuccessIcon.png | Bin 1468 -> 0 bytes .../Tasks/DarkReturnSuccessIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkSelectorIcon.png | Bin 1598 -> 0 bytes .../Icons/Tasks/DarkSelectorIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkSendEventIcon.png | Bin 1108 -> 0 bytes .../Icons/Tasks/DarkSendEventIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkSequenceIcon.png | Bin 1207 -> 0 bytes .../Icons/Tasks/DarkSequenceIcon.png.meta | 140 -- .../Icons/Tasks/DarkStackedActionIcon.png | Bin 1231 -> 0 bytes .../Tasks/DarkStackedActionIcon.png.meta | 140 -- .../Tasks/DarkStackedConditionalIcon.png | Bin 1289 -> 0 bytes .../Tasks/DarkStackedConditionalIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkStartIcon.png | Bin 3147 -> 0 bytes .../Editor/Icons/Tasks/DarkStartIcon.png.meta | 140 -- .../Icons/Tasks/DarkUntilFailureIcon.png | Bin 2406 -> 0 bytes .../Icons/Tasks/DarkUntilFailureIcon.png.meta | 140 -- .../Icons/Tasks/DarkUntilSuccessIcon.png | Bin 2310 -> 0 bytes .../Icons/Tasks/DarkUntilSuccessIcon.png.meta | 140 -- .../Icons/Tasks/DarkUtilitySelectorIcon.png | Bin 594 -> 0 bytes .../Tasks/DarkUtilitySelectorIcon.png.meta | 140 -- .../Editor/Icons/Tasks/DarkWaitIcon.png | Bin 1852 -> 0 bytes .../Editor/Icons/Tasks/DarkWaitIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightActionIcon.png | Bin 1404 -> 0 bytes .../Icons/Tasks/LightActionIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightCompositeIcon.png | Bin 1061 -> 0 bytes .../Icons/Tasks/LightCompositeIcon.png.meta | 140 -- .../Icons/Tasks/LightConditionalEvaluator.png | Bin 2020 -> 0 bytes .../Tasks/LightConditionalEvaluator.png.meta | 140 -- .../Icons/Tasks/LightConditionalIcon.png | Bin 1052 -> 0 bytes .../Icons/Tasks/LightConditionalIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightCooldownIcon.png | Bin 2188 -> 0 bytes .../Icons/Tasks/LightCooldownIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightDecoratorIcon.png | Bin 1199 -> 0 bytes .../Icons/Tasks/LightDecoratorIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightEventIcon.png | Bin 1505 -> 0 bytes .../Icons/Tasks/LightEventIcon.png.meta | 140 -- .../Icons/Tasks/LightHasReceivedEventIcon.png | Bin 1158 -> 0 bytes .../Tasks/LightHasReceivedEventIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightIdleIcon.png | Bin 1631 -> 0 bytes .../Editor/Icons/Tasks/LightIdleIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightInverterIcon.png | Bin 1430 -> 0 bytes .../Icons/Tasks/LightInverterIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightIteratorIcon.png | Bin 1980 -> 0 bytes .../Icons/Tasks/LightIteratorIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightLogIcon.png | Bin 1189 -> 0 bytes .../Editor/Icons/Tasks/LightLogIcon.png.meta | 140 -- .../Icons/Tasks/LightOnInterruptIcon.png | Bin 1231 -> 0 bytes .../Icons/Tasks/LightOnInterruptIcon.png.meta | 140 -- .../Tasks/LightOnPhysicsCallbackIcon.png | Bin 2438 -> 0 bytes .../Tasks/LightOnPhysicsCallbackIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightParallelIcon.png | Bin 1179 -> 0 bytes .../Icons/Tasks/LightParallelIcon.png.meta | 140 -- .../Icons/Tasks/LightParallelSelectorIcon.png | Bin 1376 -> 0 bytes .../Tasks/LightParallelSelectorIcon.png.meta | 140 -- .../Tasks/LightPerformInterruptionIcon.png | Bin 1334 -> 0 bytes .../LightPerformInterruptionIcon.png.meta | 140 -- .../Icons/Tasks/LightPrioritySelectorIcon.png | Bin 1269 -> 0 bytes .../Tasks/LightPrioritySelectorIcon.png.meta | 140 -- .../Tasks/LightRandomProbabilityIcon.png | Bin 1282 -> 0 bytes .../Tasks/LightRandomProbabilityIcon.png.meta | 140 -- .../Icons/Tasks/LightRandomSelectorIcon.png | Bin 1346 -> 0 bytes .../Tasks/LightRandomSelectorIcon.png.meta | 140 -- .../Icons/Tasks/LightRandomSequenceIcon.png | Bin 1296 -> 0 bytes .../Tasks/LightRandomSequenceIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightRepeaterIcon.png | Bin 2287 -> 0 bytes .../Icons/Tasks/LightRepeaterIcon.png.meta | 140 -- .../Icons/Tasks/LightReturnFailureIcon.png | Bin 1662 -> 0 bytes .../Tasks/LightReturnFailureIcon.png.meta | 140 -- .../Icons/Tasks/LightReturnSuccessIcon.png | Bin 1517 -> 0 bytes .../Tasks/LightReturnSuccessIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightSelectorIcon.png | Bin 1695 -> 0 bytes .../Icons/Tasks/LightSelectorIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightSendEventIcon.png | Bin 1111 -> 0 bytes .../Icons/Tasks/LightSendEventIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightSequenceIcon.png | Bin 1154 -> 0 bytes .../Icons/Tasks/LightSequenceIcon.png.meta | 140 -- .../Icons/Tasks/LightStackedActionIcon.png | Bin 1165 -> 0 bytes .../Tasks/LightStackedActionIcon.png.meta | 140 -- .../Tasks/LightStackedConditionalIcon.png | Bin 1277 -> 0 bytes .../LightStackedConditionalIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightStartIcon.png | Bin 1210 -> 0 bytes .../Icons/Tasks/LightStartIcon.png.meta | 140 -- .../Icons/Tasks/LightUntilFailureIcon.png | Bin 2536 -> 0 bytes .../Tasks/LightUntilFailureIcon.png.meta | 140 -- .../Icons/Tasks/LightUntilSuccessIcon.png | Bin 2436 -> 0 bytes .../Tasks/LightUntilSuccessIcon.png.meta | 140 -- .../Icons/Tasks/LightUtilitySelectorIcon.png | Bin 623 -> 0 bytes .../Tasks/LightUtilitySelectorIcon.png.meta | 140 -- .../Editor/Icons/Tasks/LightWaitIcon.png | Bin 2338 -> 0 bytes .../Editor/Icons/Tasks/LightWaitIcon.png.meta | 140 -- .../Editor/Managers.meta | 8 - .../Editor/Managers/AddOnsManager.cs | 18 - .../Editor/Managers/AddOnsManager.cs.meta | 11 - .../Editor/Managers/AssetInfo.cs | 19 - .../Editor/Managers/AssetInfo.cs.meta | 11 - .../Editor/Managers/BehaviorMainWindow.cs | 68 - .../Managers/BehaviorMainWindow.cs.meta | 12 - .../Editor/Managers/Images.meta | 8 - .../Editor/Managers/Images/Editor.png | Bin 6697 -> 0 bytes .../Editor/Managers/Images/Editor.png.meta | 140 -- .../Editor/Managers/Images/Repository.png | Bin 5030 -> 0 bytes .../Managers/Images/Repository.png.meta | 140 -- .../Editor/Managers/IntegrationsManager.cs | 18 - .../Managers/IntegrationsManager.cs.meta | 11 - ...ve.BehaviorDesigner.Editor.Managers.asmdef | 29 - ...haviorDesigner.Editor.Managers.asmdef.meta | 7 - .../Editor/Managers/SamplesManager.cs | 24 - .../Editor/Managers/SamplesManager.cs.meta | 11 - .../Editor/Managers/Startup.cs | 72 - .../Editor/Managers/Startup.cs.meta | 11 - .../Editor/Managers/WelcomeScreenManager.cs | 181 -- .../Managers/WelcomeScreenManager.cs.meta | 11 - .../Editor/NodeViews.meta | 8 - .../Editor/NodeViews/EventNodeViewControl.cs | 118 - .../NodeViews/EventNodeViewControl.cs.meta | 11 - ...rDesigner.Editor.Controls.NodeViews.asmdef | 32 - ...gner.Editor.Controls.NodeViews.asmdef.meta | 7 - .../PriorityEvaluatorNodeViewControl.cs | 95 - .../PriorityEvaluatorNodeViewControl.cs.meta | 11 - .../NodeViews/StackedTaskNodeViewControl.cs | 134 -- .../StackedTaskNodeViewControl.cs.meta | 11 - .../Editor/NodeViews/TaskNodeViewControl.cs | 288 --- .../NodeViews/TaskNodeViewControl.cs.meta | 11 - .../UtilityEvaluatorNodeViewControl.cs | 95 - .../UtilityEvaluatorNodeViewControl.cs.meta | 11 - .../Editor/NodeViews/WaitNodeViewControl.cs | 111 - .../NodeViews/WaitNodeViewControl.cs.meta | 11 - .../Editor/Opsive.BehaviorDesigner.Editor.dll | Bin 56320 -> 0 bytes .../Opsive.BehaviorDesigner.Editor.dll.meta | 70 - .../Editor/Styles.meta | 8 - .../Editor/Styles/TaskStyles.uss | 29 - .../Editor/Styles/TaskStyles.uss.meta | 11 - .../com.opsive.behaviordesigner/Runtime.meta | 8 - .../Runtime/BehaviorTree.cs | 1983 ----------------- .../Runtime/BehaviorTree.cs.meta | 11 - .../Runtime/BehaviorTreeData.cs | 1674 -------------- .../Runtime/BehaviorTreeData.cs.meta | 11 - .../Runtime/BehaviorTreeDataStructures.cs | 117 - .../BehaviorTreeDataStructures.cs.meta | 11 - .../Runtime/Components.meta | 8 - .../Runtime/Components/BakedBehaviorTree.cs | 120 - .../Components/BakedBehaviorTree.cs.meta | 11 - .../Components/BehaviorTreeComponents.cs | 261 --- .../Components/BehaviorTreeComponents.cs.meta | 11 - .../Runtime/Groups.meta | 8 - .../Groups/BeforeTraversalSystemGroup.cs | 46 - .../Groups/BeforeTraversalSystemGroup.cs.meta | 11 - .../Runtime/Groups/BehaviorTreeSystemGroup.cs | 80 - .../Groups/BehaviorTreeSystemGroup.cs.meta | 11 - .../Runtime/Groups/TaskSystemGroup.cs | 41 - .../Runtime/Groups/TaskSystemGroup.cs.meta | 11 - .../Runtime/Groups/TraversalSystemGroup.cs | 76 - .../Groups/TraversalSystemGroup.cs.meta | 11 - .../Opsive.BehaviorDesigner.Runtime.asmdef | 29 - ...psive.BehaviorDesigner.Runtime.asmdef.meta | 7 - .../Runtime/Subtree.cs | 298 --- .../Runtime/Subtree.cs.meta | 11 - .../Runtime/Systems.meta | 8 - .../Runtime/Systems/BeforeTraversalSystems.cs | 412 ---- .../Systems/BeforeTraversalSystems.cs.meta | 11 - .../Runtime/Systems/CleanupSystem.cs | 176 -- .../Runtime/Systems/CleanupSystem.cs.meta | 11 - .../Runtime/Systems/TaskObjectSystem.cs | 217 -- .../Runtime/Systems/TaskObjectSystem.cs.meta | 11 - .../Runtime/Systems/TraversalSystems.cs | 617 ----- .../Runtime/Systems/TraversalSystems.cs.meta | 11 - .../Runtime/Tasks.meta | 8 - .../Runtime/Tasks/Actions.meta | 8 - .../Runtime/Tasks/Actions/Action.cs | 19 - .../Runtime/Tasks/Actions/Action.cs.meta | 11 - .../Runtime/Tasks/Actions/ActionNode.cs | 31 - .../Runtime/Tasks/Actions/ActionNode.cs.meta | 11 - .../Runtime/Tasks/Actions/Conversions.meta | 8 - .../Actions/Conversions/ConvertBoolToFloat.cs | 33 - .../Conversions/ConvertBoolToFloat.cs.meta | 11 - .../Actions/Conversions/ConvertBoolToInt.cs | 33 - .../Conversions/ConvertBoolToInt.cs.meta | 11 - .../Conversions/ConvertBoolToString.cs | 33 - .../Conversions/ConvertBoolToString.cs.meta | 11 - .../Actions/Conversions/ConvertFloatToBool.cs | 33 - .../Conversions/ConvertFloatToBool.cs.meta | 11 - .../Actions/Conversions/ConvertFloatToInt.cs | 33 - .../Conversions/ConvertFloatToInt.cs.meta | 11 - .../Conversions/ConvertFloatToString.cs | 33 - .../Conversions/ConvertFloatToString.cs.meta | 11 - .../ConvertGameObjectToTransform.cs | 37 - .../ConvertGameObjectToTransform.cs.meta | 11 - .../Actions/Conversions/ConvertIntToBool.cs | 33 - .../Conversions/ConvertIntToBool.cs.meta | 11 - .../Actions/Conversions/ConvertIntToFloat.cs | 33 - .../Conversions/ConvertIntToFloat.cs.meta | 11 - .../Actions/Conversions/ConvertIntToString.cs | 33 - .../Conversions/ConvertIntToString.cs.meta | 11 - .../Conversions/ConvertStringToBool.cs | 36 - .../Conversions/ConvertStringToBool.cs.meta | 11 - .../Conversions/ConvertStringToFloat.cs | 36 - .../Conversions/ConvertStringToFloat.cs.meta | 11 - .../Actions/Conversions/ConvertStringToInt.cs | 36 - .../Conversions/ConvertStringToInt.cs.meta | 11 - .../ConvertTransformToGameObject.cs | 37 - .../ConvertTransformToGameObject.cs.meta | 11 - .../Runtime/Tasks/Actions/IList.meta | 8 - .../Actions/IList/AddGameObjectToArray.cs | 45 - .../IList/AddGameObjectToArray.cs.meta | 11 - .../Actions/IList/AddGameObjectToList.cs | 37 - .../Actions/IList/AddGameObjectToList.cs.meta | 11 - .../IList/RandomGameObjectFromArray.cs | 49 - .../IList/RandomGameObjectFromArray.cs.meta | 11 - .../Actions/IList/RandomGameObjectFromList.cs | 50 - .../IList/RandomGameObjectFromList.cs.meta | 11 - .../IList/RemoveGameObjectFromArray.cs | 57 - .../IList/RemoveGameObjectFromArray.cs.meta | 11 - .../Actions/IList/RemoveGameObjectFromList.cs | 31 - .../IList/RemoveGameObjectFromList.cs.meta | 11 - .../IList/SelectGameObjectFromArray.cs | 39 - .../IList/SelectGameObjectFromArray.cs.meta | 11 - .../Actions/IList/SelectGameObjectFromList.cs | 40 - .../IList/SelectGameObjectFromList.cs.meta | 11 - .../Runtime/Tasks/Actions/Idle.cs | 96 - .../Runtime/Tasks/Actions/Idle.cs.meta | 11 - .../Runtime/Tasks/Actions/Log.cs | 34 - .../Runtime/Tasks/Actions/Log.cs.meta | 11 - .../Runtime/Tasks/Actions/LogValue.cs | 38 - .../Runtime/Tasks/Actions/LogValue.cs.meta | 11 - .../Runtime/Tasks/Actions/Math.meta | 8 - .../Runtime/Tasks/Actions/Math/BoolFlip.cs | 31 - .../Tasks/Actions/Math/BoolFlip.cs.meta | 11 - .../Tasks/Actions/Math/BoolOperator.cs | 61 - .../Tasks/Actions/Math/BoolOperator.cs.meta | 11 - .../Tasks/Actions/Math/FloatOperator.cs | 73 - .../Tasks/Actions/Math/FloatOperator.cs.meta | 11 - .../Runtime/Tasks/Actions/Math/IntOperator.cs | 73 - .../Tasks/Actions/Math/IntOperator.cs.meta | 11 - .../Runtime/Tasks/Actions/Math/RandomBool.cs | 45 - .../Tasks/Actions/Math/RandomBool.cs.meta | 11 - .../Runtime/Tasks/Actions/Math/RandomFloat.cs | 49 - .../Tasks/Actions/Math/RandomFloat.cs.meta | 11 - .../Tasks/Actions/Math/RandomInteger.cs | 49 - .../Tasks/Actions/Math/RandomInteger.cs.meta | 11 - .../Runtime/Tasks/Actions/Math/SetBool.cs | 33 - .../Tasks/Actions/Math/SetBool.cs.meta | 11 - .../Runtime/Tasks/Actions/Math/SetFloat.cs | 33 - .../Tasks/Actions/Math/SetFloat.cs.meta | 11 - .../Runtime/Tasks/Actions/Math/SetInt.cs | 32 - .../Runtime/Tasks/Actions/Math/SetInt.cs.meta | 11 - .../Runtime/Tasks/Actions/Math/SetString.cs | 33 - .../Tasks/Actions/Math/SetString.cs.meta | 11 - .../Runtime/Tasks/Actions/Math/SetVector2.cs | 33 - .../Tasks/Actions/Math/SetVector2.cs.meta | 11 - .../Runtime/Tasks/Actions/Math/SetVector3.cs | 33 - .../Tasks/Actions/Math/SetVector3.cs.meta | 11 - .../Tasks/Actions/PerformInterruption.cs | 160 -- .../Tasks/Actions/PerformInterruption.cs.meta | 11 - .../Tasks/Actions/RestartBehaviorTree.cs | 60 - .../Tasks/Actions/RestartBehaviorTree.cs.meta | 11 - .../Runtime/Tasks/Actions/ReturnStatus.cs | 121 - .../Tasks/Actions/ReturnStatus.cs.meta | 11 - .../Runtime/Tasks/Actions/SendEvent.cs | 81 - .../Runtime/Tasks/Actions/SendEvent.cs.meta | 11 - .../Runtime/Tasks/Actions/SetSubtree.cs | 68 - .../Runtime/Tasks/Actions/SetSubtree.cs.meta | 11 - .../Runtime/Tasks/Actions/StackedAction.cs | 20 - .../Tasks/Actions/StackedAction.cs.meta | 11 - .../Tasks/Actions/StartBehaviorTree.cs | 58 - .../Tasks/Actions/StartBehaviorTree.cs.meta | 11 - .../Runtime/Tasks/Actions/StopBehaviorTree.cs | 32 - .../Tasks/Actions/StopBehaviorTree.cs.meta | 11 - .../Runtime/Tasks/Actions/SubtreeReference.cs | 50 - .../Tasks/Actions/SubtreeReference.cs.meta | 11 - .../Tasks/Actions/SubtreeReferenceSelector.cs | 42 - .../Actions/SubtreeReferenceSelector.cs.meta | 11 - .../Tasks/Actions/TargetBehaviorTreeAction.cs | 71 - .../Actions/TargetBehaviorTreeAction.cs.meta | 11 - .../Tasks/Actions/TargetGameObjectAction.cs | 54 - .../Actions/TargetGameObjectAction.cs.meta | 11 - .../Runtime/Tasks/Actions/UnityObjects.meta | 8 - .../Tasks/Actions/UnityObjects/SetEnabled.cs | 36 - .../Actions/UnityObjects/SetEnabled.cs.meta | 11 - .../Actions/UnityObjects/SetGameObject.cs | 33 - .../UnityObjects/SetGameObject.cs.meta | 11 - .../UnityObjects/WaitForAnimatorState.cs | 58 - .../UnityObjects/WaitForAnimatorState.cs.meta | 11 - .../Runtime/Tasks/Actions/Wait.cs | 383 ---- .../Runtime/Tasks/Actions/Wait.cs.meta | 11 - .../Runtime/Tasks/Composites.meta | 8 - .../Runtime/Tasks/Composites/CompositeNode.cs | 35 - .../Tasks/Composites/CompositeNode.cs.meta | 11 - .../Runtime/Tasks/Composites/Parallel.cs | 225 -- .../Runtime/Tasks/Composites/Parallel.cs.meta | 11 - .../Tasks/Composites/ParallelSelector.cs | 219 -- .../Tasks/Composites/ParallelSelector.cs.meta | 11 - .../Tasks/Composites/PrioritySelector.cs | 331 --- .../Tasks/Composites/PrioritySelector.cs.meta | 11 - .../Tasks/Composites/RandomSelector.cs | 324 --- .../Tasks/Composites/RandomSelector.cs.meta | 11 - .../Tasks/Composites/RandomSequence.cs | 324 --- .../Tasks/Composites/RandomSequence.cs.meta | 11 - .../Runtime/Tasks/Composites/Selector.cs | 258 --- .../Runtime/Tasks/Composites/Selector.cs.meta | 11 - .../Runtime/Tasks/Composites/Sequence.cs | 257 --- .../Runtime/Tasks/Composites/Sequence.cs.meta | 11 - .../Tasks/Composites/UtilitySelector.cs | 361 --- .../Tasks/Composites/UtilitySelector.cs.meta | 11 - .../Runtime/Tasks/ConditionalAbortType.cs | 28 - .../Tasks/ConditionalAbortType.cs.meta | 11 - .../Runtime/Tasks/Conditionals.meta | 8 - .../Runtime/Tasks/Conditionals/Conditional.cs | 25 - .../Tasks/Conditionals/Conditional.cs.meta | 11 - .../Tasks/Conditionals/ConditionalNode.cs | 37 - .../Conditionals/ConditionalNode.cs.meta | 11 - .../Tasks/Conditionals/HasReceivedEvent.cs | 262 --- .../Conditionals/HasReceivedEvent.cs.meta | 11 - .../Runtime/Tasks/Conditionals/HasValue.cs | 38 - .../Tasks/Conditionals/HasValue.cs.meta | 11 - .../Conditionals/IsBehaviorTreeActive.cs | 29 - .../Conditionals/IsBehaviorTreeActive.cs.meta | 11 - .../Runtime/Tasks/Conditionals/Math.meta | 8 - .../Tasks/Conditionals/Math/BoolComparison.cs | 32 - .../Conditionals/Math/BoolComparison.cs.meta | 11 - .../Conditionals/Math/FloatComparison.cs | 60 - .../Conditionals/Math/FloatComparison.cs.meta | 11 - .../Conditionals/Math/GameObjectComparison.cs | 32 - .../Math/GameObjectComparison.cs.meta | 11 - .../Tasks/Conditionals/Math/IntComparison.cs | 61 - .../Conditionals/Math/IntComparison.cs.meta | 11 - .../Conditionals/Math/Vector2Comparison.cs | 32 - .../Math/Vector2Comparison.cs.meta | 11 - .../Conditionals/Math/Vector3Comparison.cs | 32 - .../Math/Vector3Comparison.cs.meta | 11 - .../Runtime/Tasks/Conditionals/Physics.meta | 8 - .../Physics/HasEnteredCollision.cs | 61 - .../Physics/HasEnteredCollision.cs.meta | 11 - .../Physics/HasEnteredCollision2D.cs | 61 - .../Physics/HasEnteredCollision2D.cs.meta | 11 - .../Conditionals/Physics/HasEnteredTrigger.cs | 60 - .../Physics/HasEnteredTrigger.cs.meta | 11 - .../Physics/HasEnteredTrigger2D.cs | 61 - .../Physics/HasEnteredTrigger2D.cs.meta | 11 - .../Physics/HasExitedCollision.cs | 61 - .../Physics/HasExitedCollision.cs.meta | 11 - .../Physics/HasExitedCollision2D.cs | 61 - .../Physics/HasExitedCollision2D.cs.meta | 11 - .../Conditionals/Physics/HasExitedTrigger.cs | 61 - .../Physics/HasExitedTrigger.cs.meta | 11 - .../Physics/HasExitedTrigger2D.cs | 61 - .../Physics/HasExitedTrigger2D.cs.meta | 11 - .../Tasks/Conditionals/RandomProbability.cs | 229 -- .../Conditionals/RandomProbability.cs.meta | 11 - .../Tasks/Conditionals/StackedConditional.cs | 49 - .../Conditionals/StackedConditional.cs.meta | 11 - .../TargetBehaviorTreeConditional.cs | 71 - .../TargetBehaviorTreeConditional.cs.meta | 11 - .../TargetGameObjectConditional.cs | 53 - .../TargetGameObjectConditional.cs.meta | 11 - .../Runtime/Tasks/Decorators.meta | 8 - .../Tasks/Decorators/ConditionalEvaluator.cs | 176 -- .../Decorators/ConditionalEvaluator.cs.meta | 11 - .../Runtime/Tasks/Decorators/Cooldown.cs | 226 -- .../Runtime/Tasks/Decorators/Cooldown.cs.meta | 11 - .../Runtime/Tasks/Decorators/DecoratorNode.cs | 35 - .../Tasks/Decorators/DecoratorNode.cs.meta | 11 - .../Runtime/Tasks/Decorators/Inverter.cs | 126 -- .../Runtime/Tasks/Decorators/Inverter.cs.meta | 11 - .../Runtime/Tasks/Decorators/Iterator.cs | 109 - .../Runtime/Tasks/Decorators/Iterator.cs.meta | 11 - .../Tasks/Decorators/PriorityEvaluator.cs | 113 - .../Decorators/PriorityEvaluator.cs.meta | 11 - .../Decorators/PriorityVariableEvaluator.cs | 29 - .../PriorityVariableEvaluator.cs.meta | 11 - .../Runtime/Tasks/Decorators/Repeater.cs | 304 --- .../Runtime/Tasks/Decorators/Repeater.cs.meta | 11 - .../Runtime/Tasks/Decorators/ReturnFailure.cs | 125 -- .../Tasks/Decorators/ReturnFailure.cs.meta | 11 - .../Runtime/Tasks/Decorators/ReturnSuccess.cs | 125 -- .../Tasks/Decorators/ReturnSuccess.cs.meta | 11 - .../Runtime/Tasks/Decorators/UntilFailure.cs | 135 -- .../Tasks/Decorators/UntilFailure.cs.meta | 11 - .../Runtime/Tasks/Decorators/UntilSuccess.cs | 135 -- .../Tasks/Decorators/UntilSuccess.cs.meta | 11 - .../Tasks/Decorators/UtilityCurveEvaluator.cs | 65 - .../Decorators/UtilityCurveEvaluator.cs.meta | 11 - .../Tasks/Decorators/UtilityEvaluator.cs | 130 -- .../Tasks/Decorators/UtilityEvaluator.cs.meta | 11 - .../Decorators/UtilityVariableEvaluator.cs | 29 - .../UtilityVariableEvaluator.cs.meta | 11 - .../Runtime/Tasks/ECSTask.cs | 132 -- .../Runtime/Tasks/ECSTask.cs.meta | 11 - .../Runtime/Tasks/Events.meta | 8 - .../Runtime/Tasks/Events/EventNode.cs | 35 - .../Runtime/Tasks/Events/EventNode.cs.meta | 11 - .../Runtime/Tasks/Events/OnCollisionEnter.cs | 60 - .../Tasks/Events/OnCollisionEnter.cs.meta | 11 - .../Tasks/Events/OnCollisionEnter2D.cs | 60 - .../Tasks/Events/OnCollisionEnter2D.cs.meta | 11 - .../Runtime/Tasks/Events/OnCollisionExit.cs | 60 - .../Tasks/Events/OnCollisionExit.cs.meta | 11 - .../Runtime/Tasks/Events/OnCollisionExit2D.cs | 60 - .../Tasks/Events/OnCollisionExit2D.cs.meta | 11 - .../Runtime/Tasks/Events/OnInterrupt.cs | 130 -- .../Runtime/Tasks/Events/OnInterrupt.cs.meta | 11 - .../Runtime/Tasks/Events/OnReceivedEvent.cs | 167 -- .../Tasks/Events/OnReceivedEvent.cs.meta | 11 - .../Runtime/Tasks/Events/OnTriggerEnter.cs | 60 - .../Tasks/Events/OnTriggerEnter.cs.meta | 11 - .../Runtime/Tasks/Events/OnTriggerEnter2D.cs | 60 - .../Tasks/Events/OnTriggerEnter2D.cs.meta | 11 - .../Runtime/Tasks/Events/OnTriggerExit.cs | 60 - .../Tasks/Events/OnTriggerExit.cs.meta | 11 - .../Runtime/Tasks/Events/OnTriggerExit2D.cs | 60 - .../Tasks/Events/OnTriggerExit2D.cs.meta | 11 - .../Runtime/Tasks/Events/Start.cs | 24 - .../Runtime/Tasks/Events/Start.cs.meta | 11 - .../Runtime/Tasks/ISubtreeReference.cs | 34 - .../Runtime/Tasks/ISubtreeReference.cs.meta | 11 - .../Runtime/Tasks/PlaceholderTasks.cs | 71 - .../Runtime/Tasks/PlaceholderTasks.cs.meta | 11 - .../Runtime/Tasks/StackedTask.cs | 407 ---- .../Runtime/Tasks/StackedTask.cs.meta | 11 - .../Runtime/Tasks/Task.cs | 371 --- .../Runtime/Tasks/Task.cs.meta | 11 - .../Runtime/Tasks/TaskCoroutine.cs | 63 - .../Runtime/Tasks/TaskCoroutine.cs.meta | 11 - .../Runtime/Tasks/TaskDelegateBase.cs | 1259 ----------- .../Runtime/Tasks/TaskDelegateBase.cs.meta | 11 - .../Runtime/Tasks/TaskInterfaces.cs | 204 -- .../Runtime/Tasks/TaskInterfaces.cs.meta | 11 - .../Runtime/Tasks/TaskStatus.cs | 19 - .../Runtime/Tasks/TaskStatus.cs.meta | 11 - .../Runtime/Tasks/Templates.meta | 8 - .../Runtime/Tasks/Templates/ECSNodes.cs | 541 ----- .../Runtime/Tasks/Templates/ECSNodes.cs.meta | 11 - .../Tasks/Templates/GameObjectNodes.cs | 242 -- .../Tasks/Templates/GameObjectNodes.cs.meta | 11 - .../Runtime/Tasks/UnknownTasks.cs | 107 - .../Runtime/Tasks/UnknownTasks.cs.meta | 11 - .../Runtime/Utility.meta | 8 - .../Runtime/Utility/ComponentUtility.cs | 162 -- .../Runtime/Utility/ComponentUtility.cs.meta | 11 - .../Runtime/Utility/SaveManager.cs | 651 ------ .../Runtime/Utility/SaveManager.cs.meta | 11 - .../Runtime/Utility/TraversalUtility.cs | 108 - .../Runtime/Utility/TraversalUtility.cs.meta | 11 - .../Runtime/Utility/Types.cs | 42 - .../Runtime/Utility/Types.cs.meta | 11 - .../com.opsive.behaviordesigner/package.json | 25 - .../package.json.meta | 7 - Packages/com.opsive.graphdesigner/Editor.meta | 8 - .../Editor/Icons.meta | 8 - .../Editor/Icons/DropdownDark.png | Bin 193 -> 0 bytes .../Editor/Icons/DropdownDark.png.meta | 140 -- .../Editor/Icons/DropdownLight.png | Bin 206 -> 0 bytes .../Editor/Icons/DropdownLight.png.meta | 140 -- .../Editor/Icons/Error.png | Bin 290 -> 0 bytes .../Editor/Icons/Error.png.meta | 140 -- .../Editor/Icons/GearDark.png | Bin 285 -> 0 bytes .../Editor/Icons/GearDark.png.meta | 140 -- .../Editor/Icons/GearLight.png | Bin 316 -> 0 bytes .../Editor/Icons/GearLight.png.meta | 140 -- .../Editor/Icons/IdentifyDark.png | Bin 207 -> 0 bytes .../Editor/Icons/IdentifyDark.png.meta | 140 -- .../Editor/Icons/IdentifyLight.png | Bin 207 -> 0 bytes .../Editor/Icons/IdentifyLight.png.meta | 140 -- .../Editor/Icons/LeftRightTrianglesDark.png | Bin 216 -> 0 bytes .../Icons/LeftRightTrianglesDark.png.meta | 140 -- .../Editor/Icons/LeftRightTrianglesLight.png | Bin 216 -> 0 bytes .../Icons/LeftRightTrianglesLight.png.meta | 140 -- .../Editor/Icons/LockIconDark.png | Bin 1155 -> 0 bytes .../Editor/Icons/LockIconDark.png.meta | 140 -- .../Editor/Icons/LockIconLight.png | Bin 1146 -> 0 bytes .../Editor/Icons/LockIconLight.png.meta | 140 -- .../Editor/Icons/NextGraphDark.png | Bin 278 -> 0 bytes .../Editor/Icons/NextGraphDark.png.meta | 140 -- .../Editor/Icons/NextGraphLight.png | Bin 995 -> 0 bytes .../Editor/Icons/NextGraphLight.png.meta | 140 -- .../Editor/Icons/PauseDark.png | Bin 1023 -> 0 bytes .../Editor/Icons/PauseDark.png.meta | 127 -- .../Editor/Icons/PauseLight.png | Bin 1023 -> 0 bytes .../Editor/Icons/PauseLight.png.meta | 127 -- .../Editor/Icons/PencilIcon.png | Bin 386 -> 0 bytes .../Editor/Icons/PencilIcon.png.meta | 127 -- .../Editor/Icons/PlayDark.png | Bin 1376 -> 0 bytes .../Editor/Icons/PlayDark.png.meta | 127 -- .../Editor/Icons/PlayLight.png | Bin 1388 -> 0 bytes .../Editor/Icons/PlayLight.png.meta | 127 -- .../Editor/Icons/PreviousGraphDark.png | Bin 275 -> 0 bytes .../Editor/Icons/PreviousGraphDark.png.meta | 140 -- .../Editor/Icons/PreviousGraphLight.png | Bin 1003 -> 0 bytes .../Editor/Icons/PreviousGraphLight.png.meta | 140 -- .../Editor/Icons/RemoveDark.png | Bin 255 -> 0 bytes .../Editor/Icons/RemoveDark.png.meta | 140 -- .../Editor/Icons/RemoveLight.png | Bin 255 -> 0 bytes .../Editor/Icons/RemoveLight.png.meta | 140 -- .../Editor/Icons/RightTriangleDark.png | Bin 184 -> 0 bytes .../Editor/Icons/RightTriangleDark.png.meta | 140 -- .../Editor/Icons/RightTriangleLight.png | Bin 184 -> 0 bytes .../Editor/Icons/RightTriangleLight.png.meta | 140 -- .../Editor/Icons/StepDark.png | Bin 1152 -> 0 bytes .../Editor/Icons/StepDark.png.meta | 127 -- .../Editor/Icons/StepLight.png | Bin 1156 -> 0 bytes .../Editor/Icons/StepLight.png.meta | 127 -- .../Editor/Icons/StopDark.png | Bin 1202 -> 0 bytes .../Editor/Icons/StopDark.png.meta | 127 -- .../Editor/Icons/StopLight.png | Bin 1219 -> 0 bytes .../Editor/Icons/StopLight.png.meta | 127 -- .../Editor/Icons/ToggleSharedDark.png | Bin 165 -> 0 bytes .../Editor/Icons/ToggleSharedDark.png.meta | 140 -- .../Editor/Icons/ToggleSharedLight.png | Bin 165 -> 0 bytes .../Editor/Icons/ToggleSharedLight.png.meta | 140 -- .../Editor/Icons/UnlockIconDark.png | Bin 1162 -> 0 bytes .../Editor/Icons/UnlockIconDark.png.meta | 140 -- .../Editor/Icons/UnlockIconLight.png | Bin 1161 -> 0 bytes .../Editor/Icons/UnlockIconLight.png.meta | 140 -- .../Editor/Icons/UpDownTrianglesDark.png | Bin 295 -> 0 bytes .../Editor/Icons/UpDownTrianglesDark.png.meta | 127 -- .../Editor/Icons/UpDownTrianglesLight.png | Bin 319 -> 0 bytes .../Icons/UpDownTrianglesLight.png.meta | 127 -- .../Editor/Icons/UpTriangleDark.png | Bin 182 -> 0 bytes .../Editor/Icons/UpTriangleDark.png.meta | 140 -- .../Editor/Icons/UpTriangleLight.png | Bin 199 -> 0 bytes .../Editor/Icons/UpTriangleLight.png.meta | 140 -- .../Editor/Icons/WatchVariableDark.png | Bin 280 -> 0 bytes .../Editor/Icons/WatchVariableDark.png.meta | 140 -- .../Editor/Icons/WatchVariableLight.png | Bin 302 -> 0 bytes .../Editor/Icons/WatchVariableLight.png.meta | 140 -- .../Editor/Opsive.GraphDesigner.Editor.dll | Bin 242688 -> 0 bytes .../Opsive.GraphDesigner.Editor.dll.meta | 70 - .../Editor/Styles.meta | 8 - .../Editor/Styles/ElementResizerStyles.uss | 84 - .../Styles/ElementResizerStyles.uss.meta | 10 - .../Editor/Styles/GraphWindowStyles.uss | 196 -- .../Editor/Styles/GraphWindowStyles.uss.meta | 10 - .../Editor/Styles/GroupStyles.uss | 82 - .../Editor/Styles/GroupStyles.uss.meta | 10 - .../Editor/Styles/NodeStyles.uss | 119 - .../Editor/Styles/NodeStyles.uss.meta | 10 - .../Editor/Styles/SlotStyles.uss | 116 - .../Editor/Styles/SlotStyles.uss.meta | 10 - .../com.opsive.graphdesigner/Runtime.meta | 8 - .../Runtime/Opsive.GraphDesigner.Runtime.dll | Bin 31232 -> 0 bytes .../Opsive.GraphDesigner.Runtime.dll.meta | 70 - .../Runtime/Wrappers.meta | 8 - .../Wrappers/GameObjectSharedVariables.cs | 16 - .../GameObjectSharedVariables.cs.meta | 11 - ...sive.GraphDesigner.Runtime.Wrappers.asmdef | 18 - ...GraphDesigner.Runtime.Wrappers.asmdef.meta | 7 - .../Wrappers/ProjectSharedVariables.cs | 16 - .../Wrappers/ProjectSharedVariables.cs.meta | 11 - .../Runtime/Wrappers/SceneSharedVariables.cs | 16 - .../Wrappers/SceneSharedVariables.cs.meta | 11 - .../com.opsive.graphdesigner/package.json | 15 - .../package.json.meta | 7 - Packages/com.opsive.shared/Editor.meta | 8 - Packages/com.opsive.shared/Editor/Icons.meta | 8 - .../Editor/Icons/ActivateDarkIcon.png | Bin 1057 -> 0 bytes .../Editor/Icons/ActivateDarkIcon.png.meta | 84 - .../Editor/Icons/ActivateLightIcon.png | Bin 1059 -> 0 bytes .../Editor/Icons/ActivateLightIcon.png.meta | 84 - .../Editor/Icons/ActivityIndicator.png | Bin 2393 -> 0 bytes .../Editor/Icons/ActivityIndicator.png.meta | 103 - .../Editor/Icons/AddDarkIcon.png | Bin 1041 -> 0 bytes .../Editor/Icons/AddDarkIcon.png.meta | 84 - .../Editor/Icons/AddLightIcon.png | Bin 1033 -> 0 bytes .../Editor/Icons/AddLightIcon.png.meta | 84 - .../Editor/Icons/BackNavigation.png | Bin 1022 -> 0 bytes .../Editor/Icons/BackNavigation.png.meta | 103 - .../Editor/Icons/DeleteDarkIcon.png | Bin 1068 -> 0 bytes .../Editor/Icons/DeleteDarkIcon.png.meta | 84 - .../Editor/Icons/DeleteLightIcon.png | Bin 1067 -> 0 bytes .../Editor/Icons/DeleteLightIcon.png.meta | 84 - .../Editor/Icons/DuplicateDarkIcon.png | Bin 1055 -> 0 bytes .../Editor/Icons/DuplicateDarkIcon.png.meta | 84 - .../Editor/Icons/DuplicateLightIcon.png | Bin 1055 -> 0 bytes .../Editor/Icons/DuplicateLightIcon.png.meta | 84 - .../Editor/Icons/FavoriteType.png | Bin 266 -> 0 bytes .../Editor/Icons/FavoriteType.png.meta | 103 - .../Editor/Icons/FindSelectDark.png | Bin 1159 -> 0 bytes .../Editor/Icons/FindSelectDark.png.meta | 103 - .../Editor/Icons/FindSelectLight.png | Bin 1159 -> 0 bytes .../Editor/Icons/FindSelectLight.png.meta | 103 - .../Editor/Icons/ForwardNavigation.png | Bin 1023 -> 0 bytes .../Editor/Icons/ForwardNavigation.png.meta | 103 - .../Editor/Icons/InfoDarkIcon.png | Bin 993 -> 0 bytes .../Editor/Icons/InfoDarkIcon.png.meta | 84 - .../Editor/Icons/InfoLightIcon.png | Bin 999 -> 0 bytes .../Editor/Icons/InfoLightIcon.png.meta | 84 - .../Editor/Icons/NotFavoriteType.png | Bin 272 -> 0 bytes .../Editor/Icons/NotFavoriteType.png.meta | 103 - .../Editor/Icons/PersistDarkIcon.png | Bin 1062 -> 0 bytes .../Editor/Icons/PersistDarkIcon.png.meta | 84 - .../Editor/Icons/PersistLightIcon.png | Bin 1065 -> 0 bytes .../Editor/Icons/PersistLightIcon.png.meta | 84 - .../Editor/Icons/PresetIcon.png | Bin 530 -> 0 bytes .../Editor/Icons/PresetIcon.png.meta | 98 - .../Editor/Icons/RadioButtonDark.png | Bin 1265 -> 0 bytes .../Editor/Icons/RadioButtonDark.png.meta | 103 - .../Editor/Icons/RadioButtonLight.png | Bin 1195 -> 0 bytes .../Editor/Icons/RadioButtonLight.png.meta | 103 - .../Editor/Icons/RadioButtonSelectedDark.png | Bin 1372 -> 0 bytes .../Icons/RadioButtonSelectedDark.png.meta | 103 - .../Editor/Icons/RadioButtonSelectedLight.png | Bin 1289 -> 0 bytes .../Icons/RadioButtonSelectedLight.png.meta | 103 - .../Editor/Icons/RemoveDarkIcon.png | Bin 1025 -> 0 bytes .../Editor/Icons/RemoveDarkIcon.png.meta | 84 - .../Editor/Icons/RemoveLightIcon.png | Bin 1024 -> 0 bytes .../Editor/Icons/RemoveLightIcon.png.meta | 84 - .../Editor/Icons/ReoderableKnob.png | Bin 2840 -> 0 bytes .../Editor/Icons/ReoderableKnob.png.meta | 103 - .../Editor/Icons/Selected.png | Bin 2864 -> 0 bytes .../Editor/Icons/Selected.png.meta | 103 - .../com.opsive.shared/Editor/Icons/Units.meta | 8 - .../Editor/Icons/Units/Default.png | Bin 230 -> 0 bytes .../Editor/Icons/Units/Default.png.meta | 103 - .../Editor/Icons/Units/Enum.png | Bin 2836 -> 0 bytes .../Editor/Icons/Units/Enum.png.meta | 103 - .../Editor/Icons/Units/Folder.png | Bin 2843 -> 0 bytes .../Editor/Icons/Units/Folder.png.meta | 103 - .../Editor/Icons/Units/System.Boolean.png | Bin 232 -> 0 bytes .../Icons/Units/System.Boolean.png.meta | 103 - .../Editor/Icons/Units/System.Int32.png | Bin 238 -> 0 bytes .../Editor/Icons/Units/System.Int32.png.meta | 103 - .../Editor/Icons/Units/System.Single.png | Bin 231 -> 0 bytes .../Editor/Icons/Units/System.Single.png.meta | 103 - .../Editor/Icons/Units/System.String.png | Bin 241 -> 0 bytes .../Editor/Icons/Units/System.String.png.meta | 103 - .../Editor/Icons/Units/UnityEngine.Color.png | Bin 263 -> 0 bytes .../Icons/Units/UnityEngine.Color.png.meta | 103 - .../Icons/Units/UnityEngine.Matrix4x4.png | Bin 2859 -> 0 bytes .../Units/UnityEngine.Matrix4x4.png.meta | 103 - .../Icons/Units/UnityEngine.Quaternion.png | Bin 2913 -> 0 bytes .../Units/UnityEngine.Quaternion.png.meta | 103 - .../Icons/Units/UnityEngine.RaycastHit.png | Bin 248 -> 0 bytes .../Units/UnityEngine.RaycastHit.png.meta | 103 - .../Editor/Icons/Units/UnityEngine.Time.png | Bin 2975 -> 0 bytes .../Icons/Units/UnityEngine.Time.png.meta | 103 - .../Icons/Units/UnityEngine.Vector2.png | Bin 258 -> 0 bytes .../Icons/Units/UnityEngine.Vector2.png.meta | 103 - .../Icons/Units/UnityEngine.Vector3.png | Bin 295 -> 0 bytes .../Icons/Units/UnityEngine.Vector3.png.meta | 103 - .../Icons/Units/UnityEngine.Vector4.png | Bin 396 -> 0 bytes .../Icons/Units/UnityEngine.Vector4.png.meta | 103 - .../Editor/Icons/UpdateDarkIcon.png | Bin 1065 -> 0 bytes .../Editor/Icons/UpdateDarkIcon.png.meta | 84 - .../Editor/Icons/UpdateLightIcon.png | Bin 1078 -> 0 bytes .../Editor/Icons/UpdateLightIcon.png.meta | 84 - Packages/com.opsive.shared/Editor/Import.meta | 8 - .../Editor/Import/ImportStatus.cs | 23 - .../Editor/Import/ImportStatus.cs.meta | 11 - .../Import/Opsive.Shared.Editor.Import.asmdef | 16 - .../Opsive.Shared.Editor.Import.asmdef.meta | 7 - .../com.opsive.shared/Editor/Managers.meta | 8 - .../Editor/Managers/Images.meta | 8 - .../Editor/Managers/Images/Discord.png | Bin 4585 -> 0 bytes .../Editor/Managers/Images/Discord.png.meta | 103 - .../Managers/Images/DocumentationLarge.png | Bin 5813 -> 0 bytes .../Images/DocumentationLarge.png.meta | 103 - .../Managers/Images/DocumentationSmall.png | Bin 4894 -> 0 bytes .../Images/DocumentationSmall.png.meta | 140 -- .../Editor/Managers/Images/Downloads.png | Bin 5676 -> 0 bytes .../Editor/Managers/Images/Downloads.png.meta | 140 -- .../Editor/Managers/Images/Forum.png | Bin 4346 -> 0 bytes .../Editor/Managers/Images/Forum.png.meta | 103 - .../Managers/Images/ProfessionalServices.png | Bin 6989 -> 0 bytes .../Images/ProfessionalServices.png.meta | 140 -- .../Editor/Managers/Images/Review.png | Bin 4317 -> 0 bytes .../Editor/Managers/Images/Review.png.meta | 103 - .../Editor/Managers/Images/Showcase.png | Bin 5172 -> 0 bytes .../Editor/Managers/Images/Showcase.png.meta | 103 - .../Editor/Managers/Images/Videos.png | Bin 4234 -> 0 bytes .../Editor/Managers/Images/Videos.png.meta | 103 - .../Opsive.Shared.Editor.Managers.dll | Bin 30720 -> 0 bytes .../Opsive.Shared.Editor.Managers.dll.meta | 33 - Packages/com.opsive.shared/Editor/Styles.meta | 8 - .../Editor/Styles/FoldoutListViewStyles.uss | 104 - .../Styles/FoldoutListViewStyles.uss.meta | 10 - .../Editor/Styles/InpectorStyles.uss | 31 - .../Editor/Styles/InpectorStyles.uss.meta | 11 - .../Editor/Styles/ManagerStyles.uss | 232 -- .../Editor/Styles/ManagerStyles.uss.meta | 10 - .../Editor/Styles/ReorderableListStyles.uss | 186 -- .../Styles/ReorderableListStyles.uss.meta | 10 - .../Styles/ReorderableStateListStyles.uss | 82 - .../ReorderableStateListStyles.uss.meta | 10 - .../Editor/Styles/SharedStyles.uss | 295 --- .../Editor/Styles/SharedStyles.uss.meta | 10 - .../com.opsive.shared/Editor/UIElements.meta | 8 - .../Opsive.Shared.Editor.UIElements.dll | Bin 153600 -> 0 bytes .../Opsive.Shared.Editor.UIElements.dll.meta | 33 - .../com.opsive.shared/Editor/Utility.meta | 8 - .../Utility/Opsive.Shared.Editor.Utility.dll | Bin 8192 -> 0 bytes .../Opsive.Shared.Editor.Utility.dll.meta | 33 - Packages/com.opsive.shared/Runtime.meta | 8 - .../com.opsive.shared/Runtime/Events.meta | 8 - .../Runtime/Events/DomainResetter.cs | 25 - .../Runtime/Events/DomainResetter.cs.meta | 13 - .../Runtime/Events/Opsive.Shared.Events.dll | Bin 22016 -> 0 bytes .../Events/Opsive.Shared.Events.dll.meta | 33 - .../Runtime/Opsive.Shared.Runtime.asmdef | 17 - .../Runtime/Opsive.Shared.Runtime.asmdef.meta | 9 - .../com.opsive.shared/Runtime/Utility.meta | 8 - .../Runtime/Utility/Opsive.Shared.Utility.dll | Bin 61952 -> 0 bytes .../Utility/Opsive.Shared.Utility.dll.meta | 33 - Packages/com.opsive.shared/package.json | 12 - Packages/com.opsive.shared/package.json.meta | 7 - Packages/packages-lock.json | 105 +- ProjectSettings/ProjectSettings.asset | 2 +- 895 files changed, 12 insertions(+), 52035 deletions(-) delete mode 100644 Assets/_Game/Scripts/Enemies/AI.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BDTaskAttributes.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BDTaskAttributes.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_Attack.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_Attack.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_BossPhaseTransition.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_BossPhaseTransition.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_BroadcastAlert.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_BroadcastAlert.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_CanAttack.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_CanAttack.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_CanReachTarget.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_CanReachTarget.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_CanUseAbility.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_CanUseAbility.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_CanUseBossSkill.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_CanUseBossSkill.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_ChasePlayer.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_ChasePlayer.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_EnterPhase.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_EnterPhase.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_FaceTarget.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_FaceTarget.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_InterruptAbility.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_InterruptAbility.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_InvestigateLastKnown.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_InvestigateLastKnown.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsAbilityRunning.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsAbilityRunning.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsAiPhase.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsAiPhase.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsGrounded.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsGrounded.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsHPBelow.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsHPBelow.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsNearEdge.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsNearEdge.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsOnNavLink.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsOnNavLink.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsOutsideZone.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsOutsideZone.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerInRange.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerInRange.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerVisible.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerVisible.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsSensorDetecting.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsSensorDetecting.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsStateMatch.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_IsStateMatch.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_JumpTo.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_JumpTo.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_MaintainCombatDistance.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_MaintainCombatDistance.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_MoveTo.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_MoveTo.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_MoveToAndWait.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_MoveToAndWait.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_MoveToPlayer.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_MoveToPlayer.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_OnParried.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_OnParried.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_Patrol.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_Patrol.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_PatrolWaypoints.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_PatrolWaypoints.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_PlayAnimation.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_PlayAnimation.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_ReturnToHome.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_ReturnToHome.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_SetAiPhase.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_SetAiPhase.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_SetAlert.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_SetAlert.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_SetState.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_SetState.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_SpawnProjectile.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_SpawnProjectile.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_StopMovement.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_StopMovement.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_SummonMinions.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_SummonMinions.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_TelegraphAttack.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_TelegraphAttack.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_TeleportTo.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_TeleportTo.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_UseAbility.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_UseAbility.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkill.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkill.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkillWeighted.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkillWeighted.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_Wait.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_Wait.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_WaitForAnimation.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_WaitForAnimation.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_WaitRandom.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_WaitRandom.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_WaitUntilAbilityEnd.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_WaitUntilAbilityEnd.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_WalkRandom.cs delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BD_WalkRandom.cs.meta delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef delete mode 100644 Assets/_Game/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/BehaviorDesignerIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/BehaviorDesignerIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkActiveStackedTask.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkActiveStackedTask.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkCollapsedSlot.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkCollapsedSlot.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortBothIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortBothIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortLowerPriorityIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortLowerPriorityIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortSelfIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortSelfIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailure.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailure.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailureReevaluate.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailureReevaluate.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionSuccess.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionSuccess.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionSuccessReevaluate.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionSuccessReevaluate.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightActiveStackedTask.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightActiveStackedTask.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightCollapsedSlot.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightCollapsedSlot.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightConditionalAbortBothIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightConditionalAbortBothIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightConditionalAbortLowerPriorityIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightConditionalAbortLowerPriorityIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightConditionalAbortSelfIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightConditionalAbortSelfIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionFailure.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionFailure.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionFailureReevaluate.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionFailureReevaluate.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccess.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccess.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccessReevaluate.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccessReevaluate.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkActionIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkActionIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCompositeIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCompositeIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalEvaluatorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalEvaluatorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCooldownIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCooldownIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkDecoratorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkDecoratorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkEventIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkEventIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkHasReceivedEventIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkHasReceivedEventIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIdleIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIdleIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkInverterIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkInverterIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIteratorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIteratorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkLogIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkLogIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnInterruptIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnInterruptIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnPhysicsCallbackIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnPhysicsCallbackIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelSelectorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelSelectorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPerformInterruptionIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPerformInterruptionIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPrioritySelectorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPrioritySelectorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRandomProbabilityIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRandomProbabilityIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRandomSelectorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRandomSelectorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRandomSequenceIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRandomSequenceIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRepeaterIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRepeaterIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnFailureIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnFailureIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnSuccessIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnSuccessIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSelectorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSelectorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSendEventIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSendEventIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSequenceIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSequenceIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStackedActionIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStackedActionIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStackedConditionalIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStackedConditionalIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStartIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStartIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUntilFailureIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUntilFailureIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUntilSuccessIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUntilSuccessIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUtilitySelectorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUtilitySelectorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkWaitIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkWaitIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightActionIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightActionIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCompositeIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCompositeIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalEvaluator.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalEvaluator.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCooldownIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCooldownIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightDecoratorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightDecoratorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightEventIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightEventIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightHasReceivedEventIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightHasReceivedEventIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIdleIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIdleIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightInverterIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightInverterIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIteratorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIteratorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightLogIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightLogIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightOnInterruptIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightOnInterruptIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightOnPhysicsCallbackIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightOnPhysicsCallbackIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelSelectorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelSelectorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightPerformInterruptionIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightPerformInterruptionIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightPrioritySelectorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightPrioritySelectorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomProbabilityIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomProbabilityIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSelectorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSelectorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSequenceIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSequenceIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRepeaterIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRepeaterIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnFailureIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnFailureIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnSuccessIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnSuccessIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSelectorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSelectorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSendEventIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSendEventIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSequenceIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSequenceIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStackedActionIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStackedActionIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStackedConditionalIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStackedConditionalIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStartIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStartIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilFailureIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilFailureIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilSuccessIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilSuccessIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUtilitySelectorIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUtilitySelectorIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightWaitIcon.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightWaitIcon.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/AddOnsManager.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/AddOnsManager.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/AssetInfo.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/AssetInfo.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/BehaviorMainWindow.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/BehaviorMainWindow.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/Images.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/Images/Editor.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/Images/Editor.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/Images/Repository.png delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/Images/Repository.png.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/IntegrationsManager.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/IntegrationsManager.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/Opsive.BehaviorDesigner.Editor.Managers.asmdef delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/Opsive.BehaviorDesigner.Editor.Managers.asmdef.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/SamplesManager.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/SamplesManager.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/Startup.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/Startup.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/WelcomeScreenManager.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Managers/WelcomeScreenManager.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/EventNodeViewControl.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/EventNodeViewControl.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/Opsive.BehaviorDesigner.Editor.Controls.NodeViews.asmdef delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/Opsive.BehaviorDesigner.Editor.Controls.NodeViews.asmdef.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/PriorityEvaluatorNodeViewControl.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/PriorityEvaluatorNodeViewControl.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/StackedTaskNodeViewControl.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/StackedTaskNodeViewControl.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/TaskNodeViewControl.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/TaskNodeViewControl.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/UtilityEvaluatorNodeViewControl.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/UtilityEvaluatorNodeViewControl.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/WaitNodeViewControl.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/NodeViews/WaitNodeViewControl.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Opsive.BehaviorDesigner.Editor.dll delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Opsive.BehaviorDesigner.Editor.dll.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Styles.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Styles/TaskStyles.uss delete mode 100644 Packages/com.opsive.behaviordesigner/Editor/Styles/TaskStyles.uss.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/BehaviorTree.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/BehaviorTree.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeData.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeData.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeDataStructures.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeDataStructures.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Components.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Components/BakedBehaviorTree.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Components/BakedBehaviorTree.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Components/BehaviorTreeComponents.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Components/BehaviorTreeComponents.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Groups.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Groups/BeforeTraversalSystemGroup.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Groups/BeforeTraversalSystemGroup.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Groups/BehaviorTreeSystemGroup.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Groups/BehaviorTreeSystemGroup.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Groups/TaskSystemGroup.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Groups/TaskSystemGroup.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Groups/TraversalSystemGroup.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Groups/TraversalSystemGroup.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Opsive.BehaviorDesigner.Runtime.asmdef delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Opsive.BehaviorDesigner.Runtime.asmdef.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Subtree.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Subtree.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Systems.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Systems/BeforeTraversalSystems.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Systems/BeforeTraversalSystems.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Systems/CleanupSystem.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Systems/CleanupSystem.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Systems/TaskObjectSystem.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Systems/TaskObjectSystem.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Systems/TraversalSystems.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Systems/TraversalSystems.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Action.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Action.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ActionNode.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ActionNode.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToFloat.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToFloat.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToInt.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToInt.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToString.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToString.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToBool.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToBool.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToInt.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToInt.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToString.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToString.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertGameObjectToTransform.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertGameObjectToTransform.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToBool.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToBool.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToFloat.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToFloat.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToString.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToString.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToBool.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToBool.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToFloat.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToFloat.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToInt.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToInt.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertTransformToGameObject.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertTransformToGameObject.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToArray.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToArray.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToList.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToList.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromArray.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromArray.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromList.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromList.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromArray.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromArray.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromList.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromList.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromArray.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromArray.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromList.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromList.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Idle.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Idle.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Log.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Log.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/LogValue.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/LogValue.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolFlip.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolFlip.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolOperator.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolOperator.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/FloatOperator.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/FloatOperator.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/IntOperator.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/IntOperator.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomBool.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomBool.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomFloat.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomFloat.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomInteger.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomInteger.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetBool.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetBool.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetFloat.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetFloat.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetInt.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetInt.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetString.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetString.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector2.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector2.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector3.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector3.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/PerformInterruption.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/PerformInterruption.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/RestartBehaviorTree.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/RestartBehaviorTree.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ReturnStatus.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ReturnStatus.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SendEvent.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SendEvent.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SetSubtree.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SetSubtree.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StackedAction.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StackedAction.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StartBehaviorTree.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StartBehaviorTree.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StopBehaviorTree.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StopBehaviorTree.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReference.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReference.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReferenceSelector.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReferenceSelector.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetBehaviorTreeAction.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetBehaviorTreeAction.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetGameObjectAction.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetGameObjectAction.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetEnabled.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetEnabled.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetGameObject.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetGameObject.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/WaitForAnimatorState.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/WaitForAnimatorState.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Wait.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Wait.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/CompositeNode.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/CompositeNode.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Parallel.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Parallel.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/ParallelSelector.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/ParallelSelector.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/PrioritySelector.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/PrioritySelector.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSelector.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSelector.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSequence.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSequence.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Selector.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Selector.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Sequence.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Sequence.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/UtilitySelector.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/UtilitySelector.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/ConditionalAbortType.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/ConditionalAbortType.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Conditional.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Conditional.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/ConditionalNode.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/ConditionalNode.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasReceivedEvent.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasReceivedEvent.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasValue.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasValue.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/IsBehaviorTreeActive.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/IsBehaviorTreeActive.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/BoolComparison.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/BoolComparison.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/FloatComparison.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/FloatComparison.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/GameObjectComparison.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/GameObjectComparison.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/IntComparison.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/IntComparison.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector2Comparison.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector2Comparison.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector3Comparison.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector3Comparison.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision2D.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision2D.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger2D.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger2D.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision2D.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision2D.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger2D.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger2D.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/RandomProbability.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/RandomProbability.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/StackedConditional.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/StackedConditional.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetBehaviorTreeConditional.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetBehaviorTreeConditional.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetGameObjectConditional.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetGameObjectConditional.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ConditionalEvaluator.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ConditionalEvaluator.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Cooldown.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Cooldown.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/DecoratorNode.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/DecoratorNode.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Inverter.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Inverter.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Iterator.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Iterator.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityEvaluator.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityEvaluator.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityVariableEvaluator.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityVariableEvaluator.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Repeater.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Repeater.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnFailure.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnFailure.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnSuccess.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnSuccess.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilFailure.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilFailure.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilSuccess.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilSuccess.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityCurveEvaluator.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityCurveEvaluator.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityEvaluator.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityEvaluator.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityVariableEvaluator.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityVariableEvaluator.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/ECSTask.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/ECSTask.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/EventNode.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/EventNode.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter2D.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter2D.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit2D.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit2D.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnInterrupt.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnInterrupt.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnReceivedEvent.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnReceivedEvent.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter2D.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter2D.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit2D.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit2D.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/Start.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/Start.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/ISubtreeReference.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/ISubtreeReference.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/PlaceholderTasks.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/PlaceholderTasks.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/StackedTask.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/StackedTask.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Task.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Task.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskCoroutine.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskCoroutine.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskDelegateBase.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskDelegateBase.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskInterfaces.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskInterfaces.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskStatus.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskStatus.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/ECSNodes.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/ECSNodes.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/GameObjectNodes.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/GameObjectNodes.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/UnknownTasks.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Tasks/UnknownTasks.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Utility.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Utility/ComponentUtility.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Utility/ComponentUtility.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Utility/SaveManager.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Utility/SaveManager.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Utility/TraversalUtility.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Utility/TraversalUtility.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Utility/Types.cs delete mode 100644 Packages/com.opsive.behaviordesigner/Runtime/Utility/Types.cs.meta delete mode 100644 Packages/com.opsive.behaviordesigner/package.json delete mode 100644 Packages/com.opsive.behaviordesigner/package.json.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/DropdownDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/DropdownDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/DropdownLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/DropdownLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/Error.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/Error.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/GearDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/GearDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/GearLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/GearLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/LeftRightTrianglesDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/LeftRightTrianglesDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/LeftRightTrianglesLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/LeftRightTrianglesLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/LockIconDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/LockIconDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/LockIconLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/LockIconLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/NextGraphDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/NextGraphDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/NextGraphLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/NextGraphLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PauseDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PauseDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PauseLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PauseLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PencilIcon.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PencilIcon.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PlayDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PlayDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PlayLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PlayLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/RemoveDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/RemoveDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/RemoveLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/RemoveLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/StepDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/StepDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/StepLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/StepLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/StopDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/StopDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/StopLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/StopLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/ToggleSharedDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/ToggleSharedDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/ToggleSharedLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/ToggleSharedLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UpDownTrianglesDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UpDownTrianglesDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UpDownTrianglesLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UpDownTrianglesLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/WatchVariableDark.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/WatchVariableDark.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/WatchVariableLight.png delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Icons/WatchVariableLight.png.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Opsive.GraphDesigner.Editor.dll delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Opsive.GraphDesigner.Editor.dll.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles/ElementResizerStyles.uss delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles/ElementResizerStyles.uss.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles/GraphWindowStyles.uss delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles/GraphWindowStyles.uss.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles/GroupStyles.uss delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles/GroupStyles.uss.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles/NodeStyles.uss delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles/NodeStyles.uss.meta delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles/SlotStyles.uss delete mode 100644 Packages/com.opsive.graphdesigner/Editor/Styles/SlotStyles.uss.meta delete mode 100644 Packages/com.opsive.graphdesigner/Runtime.meta delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Opsive.GraphDesigner.Runtime.dll delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Opsive.GraphDesigner.Runtime.dll.meta delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Wrappers.meta delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Wrappers/GameObjectSharedVariables.cs delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Wrappers/GameObjectSharedVariables.cs.meta delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Wrappers/Opsive.GraphDesigner.Runtime.Wrappers.asmdef delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Wrappers/Opsive.GraphDesigner.Runtime.Wrappers.asmdef.meta delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Wrappers/ProjectSharedVariables.cs delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Wrappers/ProjectSharedVariables.cs.meta delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Wrappers/SceneSharedVariables.cs delete mode 100644 Packages/com.opsive.graphdesigner/Runtime/Wrappers/SceneSharedVariables.cs.meta delete mode 100644 Packages/com.opsive.graphdesigner/package.json delete mode 100644 Packages/com.opsive.graphdesigner/package.json.meta delete mode 100644 Packages/com.opsive.shared/Editor.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/ActivateDarkIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/ActivateDarkIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/ActivateLightIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/ActivateLightIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/ActivityIndicator.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/ActivityIndicator.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/AddDarkIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/AddDarkIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/AddLightIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/AddLightIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/BackNavigation.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/BackNavigation.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/DeleteDarkIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/DeleteDarkIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/DeleteLightIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/DeleteLightIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/DuplicateDarkIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/DuplicateDarkIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/DuplicateLightIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/DuplicateLightIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/FavoriteType.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/FavoriteType.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/FindSelectDark.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/FindSelectDark.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/FindSelectLight.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/FindSelectLight.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/ForwardNavigation.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/ForwardNavigation.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/InfoDarkIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/InfoDarkIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/InfoLightIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/InfoLightIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/NotFavoriteType.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/NotFavoriteType.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/PersistDarkIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/PersistDarkIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/PersistLightIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/PersistLightIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/PresetIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/PresetIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RadioButtonDark.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RadioButtonDark.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RadioButtonLight.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RadioButtonLight.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RadioButtonSelectedDark.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RadioButtonSelectedDark.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RadioButtonSelectedLight.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RadioButtonSelectedLight.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RemoveDarkIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RemoveDarkIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RemoveLightIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/RemoveLightIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/ReoderableKnob.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/ReoderableKnob.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Selected.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Selected.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/Default.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/Default.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/Enum.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/Enum.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/Folder.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/Folder.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/System.Boolean.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/System.Boolean.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/System.Int32.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/System.Int32.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/System.Single.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/System.Single.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/System.String.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/System.String.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Color.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Color.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Matrix4x4.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Matrix4x4.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Quaternion.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Quaternion.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.RaycastHit.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.RaycastHit.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Time.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Time.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Vector2.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Vector2.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Vector3.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Vector3.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Vector4.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Vector4.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/UpdateDarkIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/UpdateDarkIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Icons/UpdateLightIcon.png delete mode 100644 Packages/com.opsive.shared/Editor/Icons/UpdateLightIcon.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Import.meta delete mode 100644 Packages/com.opsive.shared/Editor/Import/ImportStatus.cs delete mode 100644 Packages/com.opsive.shared/Editor/Import/ImportStatus.cs.meta delete mode 100644 Packages/com.opsive.shared/Editor/Import/Opsive.Shared.Editor.Import.asmdef delete mode 100644 Packages/com.opsive.shared/Editor/Import/Opsive.Shared.Editor.Import.asmdef.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Discord.png delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Discord.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/DocumentationLarge.png delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/DocumentationLarge.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/DocumentationSmall.png delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/DocumentationSmall.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Downloads.png delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Downloads.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Forum.png delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Forum.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/ProfessionalServices.png delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/ProfessionalServices.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Review.png delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Review.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Showcase.png delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Showcase.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Videos.png delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Images/Videos.png.meta delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Opsive.Shared.Editor.Managers.dll delete mode 100644 Packages/com.opsive.shared/Editor/Managers/Opsive.Shared.Editor.Managers.dll.meta delete mode 100644 Packages/com.opsive.shared/Editor/Styles.meta delete mode 100644 Packages/com.opsive.shared/Editor/Styles/FoldoutListViewStyles.uss delete mode 100644 Packages/com.opsive.shared/Editor/Styles/FoldoutListViewStyles.uss.meta delete mode 100644 Packages/com.opsive.shared/Editor/Styles/InpectorStyles.uss delete mode 100644 Packages/com.opsive.shared/Editor/Styles/InpectorStyles.uss.meta delete mode 100644 Packages/com.opsive.shared/Editor/Styles/ManagerStyles.uss delete mode 100644 Packages/com.opsive.shared/Editor/Styles/ManagerStyles.uss.meta delete mode 100644 Packages/com.opsive.shared/Editor/Styles/ReorderableListStyles.uss delete mode 100644 Packages/com.opsive.shared/Editor/Styles/ReorderableListStyles.uss.meta delete mode 100644 Packages/com.opsive.shared/Editor/Styles/ReorderableStateListStyles.uss delete mode 100644 Packages/com.opsive.shared/Editor/Styles/ReorderableStateListStyles.uss.meta delete mode 100644 Packages/com.opsive.shared/Editor/Styles/SharedStyles.uss delete mode 100644 Packages/com.opsive.shared/Editor/Styles/SharedStyles.uss.meta delete mode 100644 Packages/com.opsive.shared/Editor/UIElements.meta delete mode 100644 Packages/com.opsive.shared/Editor/UIElements/Opsive.Shared.Editor.UIElements.dll delete mode 100644 Packages/com.opsive.shared/Editor/UIElements/Opsive.Shared.Editor.UIElements.dll.meta delete mode 100644 Packages/com.opsive.shared/Editor/Utility.meta delete mode 100644 Packages/com.opsive.shared/Editor/Utility/Opsive.Shared.Editor.Utility.dll delete mode 100644 Packages/com.opsive.shared/Editor/Utility/Opsive.Shared.Editor.Utility.dll.meta delete mode 100644 Packages/com.opsive.shared/Runtime.meta delete mode 100644 Packages/com.opsive.shared/Runtime/Events.meta delete mode 100644 Packages/com.opsive.shared/Runtime/Events/DomainResetter.cs delete mode 100644 Packages/com.opsive.shared/Runtime/Events/DomainResetter.cs.meta delete mode 100644 Packages/com.opsive.shared/Runtime/Events/Opsive.Shared.Events.dll delete mode 100644 Packages/com.opsive.shared/Runtime/Events/Opsive.Shared.Events.dll.meta delete mode 100644 Packages/com.opsive.shared/Runtime/Opsive.Shared.Runtime.asmdef delete mode 100644 Packages/com.opsive.shared/Runtime/Opsive.Shared.Runtime.asmdef.meta delete mode 100644 Packages/com.opsive.shared/Runtime/Utility.meta delete mode 100644 Packages/com.opsive.shared/Runtime/Utility/Opsive.Shared.Utility.dll delete mode 100644 Packages/com.opsive.shared/Runtime/Utility/Opsive.Shared.Utility.dll.meta delete mode 100644 Packages/com.opsive.shared/package.json delete mode 100644 Packages/com.opsive.shared/package.json.meta diff --git a/Assets/_Game/Scripts/Enemies/AI.meta b/Assets/_Game/Scripts/Enemies/AI.meta deleted file mode 100644 index 212118fc..00000000 --- a/Assets/_Game/Scripts/Enemies/AI.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 458bf9c7d1eae52438922d9630862656 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BDTaskAttributes.cs b/Assets/_Game/Scripts/Enemies/AI/BDTaskAttributes.cs deleted file mode 100644 index 06aed3b8..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BDTaskAttributes.cs +++ /dev/null @@ -1,37 +0,0 @@ -#if GRAPH_DESIGNER -using System; - -namespace BaseGames.Enemies.AI -{ - /// - /// 指定 BD Task 在编辑器任务面板中显示的名称。 - /// 本版本 BehaviorDesigner 不内置此特性,由项目自行定义以保持代码可读性与前向兼容性。 - /// - [AttributeUsage(AttributeTargets.Class, Inherited = false)] - public sealed class TaskNameAttribute : Attribute - { - public string Name { get; } - public TaskNameAttribute(string name) => Name = name; - } - - /// - /// 指定 BD Task 在编辑器任务面板中所属分类(路径形式,如 "BaseGames/Enemy/Combat")。 - /// - [AttributeUsage(AttributeTargets.Class, Inherited = false)] - public sealed class TaskCategoryAttribute : Attribute - { - public string Category { get; } - public TaskCategoryAttribute(string category) => Category = category; - } - - /// - /// 为 BD Task 提供编辑器 Tooltip 描述文本。 - /// - [AttributeUsage(AttributeTargets.Class, Inherited = false)] - public sealed class TaskDescriptionAttribute : Attribute - { - public string Description { get; } - public TaskDescriptionAttribute(string description) => Description = description; - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BDTaskAttributes.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BDTaskAttributes.cs.meta deleted file mode 100644 index 2065c4f0..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BDTaskAttributes.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6e52f911001ee0448971afc570e5e486 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_Attack.cs b/Assets/_Game/Scripts/Enemies/AI/BD_Attack.cs deleted file mode 100644 index 5868f642..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_Attack.cs +++ /dev/null @@ -1,31 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:发动攻击。 - /// CanAttack() 检查通过后调用 BeginAttack,立即返回 Success。 - /// - [TaskName("Attack")] - [TaskCategory("BaseGames/Enemy/Combat")] - [TaskDescription("执行近战攻击(单段或连击序列)")] - public class BD_Attack : Action - { - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null || !_enemy.CanAttack()) - return TaskStatus.Failure; - - _enemy.BeginAttack(AttackType.Melee); - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_Attack.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_Attack.cs.meta deleted file mode 100644 index 0cde3dd1..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_Attack.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6129e08d8bc28a24ebfb02c246e2e744 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_BossPhaseTransition.cs b/Assets/_Game/Scripts/Enemies/AI/BD_BossPhaseTransition.cs deleted file mode 100644 index 34ae6cef..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_BossPhaseTransition.cs +++ /dev/null @@ -1,58 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:启动 Boss 阶段过渡演出(无敌帧 + 可选定格),等待过渡完成后返回 Success。 - /// - /// 返回 Running:过渡演出进行中(BossBase.IsPhaseTransitioning = true)。 - /// 返回 Success:过渡完成或目标阶段已达到(含守护逻辑,防止重复触发)。 - /// 返回 Failure:BossBase 组件不存在。 - /// - /// 典型 BT 用法: - /// Sequence [ BD_IsHPBelow(0.5) → BD_BossPhaseTransition(Phase=1, Duration=1.5) → Phase2战斗节点 ] - /// 过渡完成后,此节点每 tick 因守护立即返回 Success,Sequence 直接进入后续战斗节点。 - /// - [TaskName("Boss Phase Transition")] - [TaskCategory("BaseGames/Enemy/Boss")] - [TaskDescription("触发 Boss 阶段过渡演出(无敌 + 动画 + 广播事件)")] - public class BD_BossPhaseTransition : Action - { - [Tooltip("切换到的目标阶段索引")] - [SerializeField] private int m_TargetPhase = 1; - - [Tooltip("无敌帧 + 过渡演出持续时间(秒)")] - [SerializeField, Min(0f)] private float m_InvincibleDuration = 1.5f; - - private BossBase _boss; - private bool _started; - - public override void OnAwake() => _boss = GetComponent(); - - public override void OnStart() - { - _started = false; - } - - public override TaskStatus OnUpdate() - { - if (_boss == null) return TaskStatus.Failure; - - // 防止 BT 重入时重复触发阶段过渡:目标阶段已达到则直接返回 Success - if (_boss.CurrentPhase >= m_TargetPhase) return TaskStatus.Success; - - if (!_started) - { - _boss.BeginPhaseTransition(m_TargetPhase, m_InvincibleDuration); - _started = true; - } - - return _boss.IsPhaseTransitioning ? TaskStatus.Running : TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_BossPhaseTransition.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_BossPhaseTransition.cs.meta deleted file mode 100644 index c155ef5e..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_BossPhaseTransition.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e86991de79acdb3498c9187ea96a8c3c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_BroadcastAlert.cs b/Assets/_Game/Scripts/Enemies/AI/BD_BroadcastAlert.cs deleted file mode 100644 index 52c38be0..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_BroadcastAlert.cs +++ /dev/null @@ -1,39 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using UnityEngine; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:向半径内其他敌人广播警戒(Group Alert)。 - /// - /// 返回 Success:广播完成(不保证命中任何敌人)。 - /// - /// 典型用法:在 BD_SetAiPhase(Chase) 之后立即调用此节点, - /// 使发现玩家的敌人将警报传播给周围同伴,实现群体索敌效果。 - /// - /// 半径优先使用 m_OverrideRadius;若为 0 则读取 EnemyStatsSO.AlertBroadcastRadius。 - /// - [TaskName("Broadcast Alert")] - [TaskCategory("BaseGames/Enemy/Perception")] - [TaskDescription("向附近的友方广播警报,使其进入 Alert 状态")] - public class BD_BroadcastAlert : Action - { - [Tooltip("广播半径(m);0 = 使用 EnemyStatsSO.AlertBroadcastRadius")] - [SerializeField, Min(0f)] private float m_OverrideRadius = 0f; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - float r = m_OverrideRadius > 0f ? m_OverrideRadius : (_enemy.StatsSO?.AlertBroadcastRadius ?? 0f); - _enemy.AlertNearby(r); - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_BroadcastAlert.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_BroadcastAlert.cs.meta deleted file mode 100644 index 039cb62a..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_BroadcastAlert.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 93ffcd4596213bf4d8499aa565712213 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_CanAttack.cs b/Assets/_Game/Scripts/Enemies/AI/BD_CanAttack.cs deleted file mode 100644 index 5fabe827..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_CanAttack.cs +++ /dev/null @@ -1,27 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional:攻击冷却是否完毕(可以发动攻击)。 - /// - [TaskName("Can Attack?")] - [TaskCategory("BaseGames/Enemy/Combat")] - [TaskDescription("检查当前是否满足近战攻击条件(距离 + 视线)")] - public class BD_CanAttack : Conditional - { - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - return _enemy.CanAttack() ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_CanAttack.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_CanAttack.cs.meta deleted file mode 100644 index c7f38e77..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_CanAttack.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 795ff4e1aa5e05b4b86fe8604822e2c6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_CanReachTarget.cs b/Assets/_Game/Scripts/Enemies/AI/BD_CanReachTarget.cs deleted file mode 100644 index e9e1fb36..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_CanReachTarget.cs +++ /dev/null @@ -1,35 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// 条件:目标坐标从当前位置是否可到达(调用 NavAgent.CanReach,无法寻路时 Failure)。 - /// 用于 Boss 阶段切换或小怪决策能否追击到跨平台目标。 - /// - [TaskName("Can Reach Target?")] - [TaskCategory("BaseGames/Enemy/Perception")] - [TaskDescription("检查 NavAgent 是否可以规划到目标的有效路径")] - public sealed class BD_CanReachTarget : Conditional - { - [Tooltip("检查目标(留空则使用玩家位置)")] - [SerializeField] private Transform m_Target; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy?.Nav == null) return TaskStatus.Failure; - Vector2 pos = m_Target != null - ? (Vector2)m_Target.position - : _enemy.PlayerTransform != null ? (Vector2)_enemy.PlayerTransform.position : Vector2.zero; - return _enemy.Nav.CanReach(pos) ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_CanReachTarget.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_CanReachTarget.cs.meta deleted file mode 100644 index 962a6faa..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_CanReachTarget.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 436d3fd564880ae46a899b347f9a3494 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_CanUseAbility.cs b/Assets/_Game/Scripts/Enemies/AI/BD_CanUseAbility.cs deleted file mode 100644 index 6a76d6b0..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_CanUseAbility.cs +++ /dev/null @@ -1,71 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies.Abilities; - -namespace BaseGames.Enemies.AI -{ - /// - /// 条件:abilityId 当前可用(冷却完毕且未在运行)。 - /// 可选开启范围、视线、脚踏地面等调度提示检查; - /// 仅当所有启用的条件均满足时才返回 Success。 - /// - [TaskName("Can Use Ability?")] - [TaskCategory("BaseGames/Enemy/Combat")] - [TaskDescription("检查能力是否存在且冷却就绪,支持范围/视线/地面等调度提示检查")] - public sealed class BD_CanUseAbility : Conditional - { - [Tooltip("能力 ScriptableObject(优先级高于下方字符串 ID)")] - [SerializeField] private EnemyAbilitySO m_AbilitySO; - - [Tooltip("能力 ID(当 AbilitySO 未赋值时使用)")] - [SerializeField] private string m_AbilityId = ""; - - [Header("调度提示(可选)")] - [Tooltip("启用后,检查玩家是否在 AbilitySO.preferredRange 范围内")] - [SerializeField] private bool m_CheckRange = false; - - [Tooltip("启用后,检查 AbilitySO.requiresLineOfSight 是否满足视线条件")] - [SerializeField] private bool m_CheckLineOfSight = false; - - [Tooltip("启用后,检查 AbilitySO.requiresGrounded 是否满足落地条件")] - [SerializeField] private bool m_CheckGrounded = false; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - - string id = m_AbilitySO != null ? m_AbilitySO.abilityId : m_AbilityId; - var ab = _enemy.Abilities.Get(id); - if (ab == null || !ab.CanUse) return TaskStatus.Failure; - - // ── 调度提示检查(均可在 Inspector 独立开关)────────────────────────── - var config = ab.Config; - if (config != null) - { - if (m_CheckGrounded && config.requiresGrounded && !(_enemy.Movement?.IsGrounded ?? false)) - return TaskStatus.Failure; - - if (m_CheckLineOfSight && config.requiresLineOfSight && !_enemy.IsPlayerVisible()) - return TaskStatus.Failure; - - if (m_CheckRange && _enemy.Stats != null) - { - float sqrDist = _enemy.Stats.SqrDistanceToPlayer; - float minSqr = config.preferredMinRange * config.preferredMinRange; - float maxSqr = config.preferredMaxRange * config.preferredMaxRange; - if (sqrDist < minSqr || sqrDist > maxSqr) - return TaskStatus.Failure; - } - } - - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_CanUseAbility.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_CanUseAbility.cs.meta deleted file mode 100644 index 68538c6e..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_CanUseAbility.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3fbc6b3634e77bf40bfeb918c7e45e5f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_CanUseBossSkill.cs b/Assets/_Game/Scripts/Enemies/AI/BD_CanUseBossSkill.cs deleted file mode 100644 index 5840b58c..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_CanUseBossSkill.cs +++ /dev/null @@ -1,41 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using UnityEngine; -using BaseGames.Boss; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional:检查 Boss 技能是否冷却就绪。 - /// 支持拖拽 BossSkillSO 或直接填写 skillId 字符串(SO 优先)。 - /// - [TaskName("Can Use Boss Skill?")] - [TaskCategory("BaseGames/Enemy/Boss")] - [TaskDescription("检查指定 Boss 技能是否在当前阶段可用且冷却就绪")] - public class BD_CanUseBossSkill : Conditional - { - [SerializeField] private BossSkillSO m_SkillSO; - [SerializeField] private string m_SkillId; - - private BossBase _boss; - private BossSkillExecutor _executor; - - public override void OnAwake() - { - _boss = GetComponent(); - _executor = transform.GetComponentInChildren(); - } - - public override TaskStatus OnUpdate() - { - if (_executor == null) return TaskStatus.Failure; - - string id = m_SkillSO != null ? m_SkillSO.skillId : m_SkillId; - if (string.IsNullOrEmpty(id)) return TaskStatus.Failure; - - return _executor.CanUseSkill(id) ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_CanUseBossSkill.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_CanUseBossSkill.cs.meta deleted file mode 100644 index 28c903c4..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_CanUseBossSkill.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bb7c971f5193f174189337814487bd7d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_ChasePlayer.cs b/Assets/_Game/Scripts/Enemies/AI/BD_ChasePlayer.cs deleted file mode 100644 index 4ae11719..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_ChasePlayer.cs +++ /dev/null @@ -1,145 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:追击玩家(三阶段视线丢失模型)。 - /// - /// - /// Tracking:持有视线,以奔跑速度追击并更新 LastKnownPlayerPosition。 - /// Searching:视线丢失超过 LostSightBuffer(~0.3s)后进入。速度降低,向最后可见位置行进;若恢复视线即回到 Tracking。 - /// Lost:Searching 持续超过 LoseLinkTimeout → 返回 Failure,让 BD 树切入 BD_InvestigateLastKnown。 - /// - /// - /// 短暂遮挡(如绕过柱子)在 LostSightBuffer 内不会改变速度,避免追击手感割裂。 - /// - [TaskName("Chase Player")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("三段式追击(Tracking→Searching→Lost);丢失视线后进入缓冲期")] - public sealed class BD_ChasePlayer : Action - { - [Header("距离限制")] - [Tooltip("追击距离上限(m);0 = 使用 EnemyStatsSO.MaxChaseDistance")] - [SerializeField] [Min(0f)] private float m_MaxChaseDistance = 0f; - - [Header("视线丢失")] - [Tooltip("视线丢失判定超时(s);0 = 使用 EnemyStatsSO.LoseLinkTimeout")] - [SerializeField] [Min(0f)] private float m_LoseLinkTimeout = 0f; - - [Tooltip("视线刚丢失后的缓冲期(s):此期间保持追击速度,短暂遮挡不触发搜索模式")] - [SerializeField] [Min(0f)] private float m_LostSightBuffer = 0.3f; - - [Header("路径规划")] - [Tooltip("路径重规划阈值(m):玩家移动超过此距离后才重新规划,避免每帧请求")] - [SerializeField] [Min(0.1f)] private float m_ReplanThreshold = 1.5f; - - [Header("搜索阶段")] - [Tooltip("Searching 阶段速度倍率(相对于行走速度;<1 = 减速搜索)")] - [SerializeField] [UnityEngine.Range(0.3f, 1.5f)] private float m_SearchSpeedMultiplier = 0.7f; - - private enum ChaseSubState { Tracking, Searching } - - private EnemyBase _enemy; - private float _losTimer; - private Vector2 _lastReplanPos; - private ChaseSubState _subState; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override void OnStart() - { - _enemy.SetAiPhase(AiPhase.Chase); - _losTimer = 0f; - _lastReplanPos = Vector2.positiveInfinity; - _subState = ChaseSubState.Tracking; - - float runSpeed = _enemy.Stats?.RunSpeed ?? 4f; - _enemy.Nav?.SetSpeed(runSpeed); - - var ac = _enemy.AnimConfig; - if (_enemy.Animancer != null && ac?.Run != null) - _enemy.Animancer.Play(ac.Run); - } - - public override TaskStatus OnUpdate() - { - if (_enemy == null || _enemy.PlayerTransform == null) - return TaskStatus.Failure; - - float maxDist = m_MaxChaseDistance > 0f ? m_MaxChaseDistance : (_enemy.Stats?.MaxChaseDistance ?? 15f); - float loseTime = m_LoseLinkTimeout > 0f ? m_LoseLinkTimeout : (_enemy.Stats?.LoseLinkTimeout ?? 2f); - - // 超出最大追击距离 → 放弃追击 - if (_enemy.Stats != null && _enemy.Stats.SqrDistanceToPlayer > maxDist * maxDist) - return TaskStatus.Failure; - - Vector2 playerPos = _enemy.PlayerTransform.position; - - // 若配置了巡逻区域,且玩家超出追击边界 → 放弃追击(优先级高于纯距离限制) - var zone = _enemy.PatrolZone; - if (zone != null && !zone.ContainsChase(playerPos)) - return TaskStatus.Failure; - - if (_enemy.IsPlayerVisible()) - { - // 视线恢复:Searching → Tracking,恢复奔跑速度 - if (_subState == ChaseSubState.Searching) - { - _subState = ChaseSubState.Tracking; - _enemy.Nav?.SetSpeed(_enemy.Stats?.RunSpeed ?? 4f); - } - _losTimer = 0f; - _enemy.LastKnownPlayerPosition = playerPos; - } - else - { - _losTimer += Time.deltaTime; - - if (_subState == ChaseSubState.Tracking) - { - // 缓冲期结束 → 切入 Searching:减速并向最后可见位置行进 - if (_losTimer >= m_LostSightBuffer) - { - _subState = ChaseSubState.Searching; - float searchSpeed = (_enemy.Stats?.WalkSpeed ?? 2f) * m_SearchSpeedMultiplier; - _enemy.Nav?.SetSpeed(searchSpeed); - _enemy.MoveTo(_enemy.LastKnownPlayerPosition); - _lastReplanPos = _enemy.LastKnownPlayerPosition; - } - } - else // Searching - { - if (_losTimer >= loseTime) - return TaskStatus.Failure; // 搜索超时 → 进入 BD_InvestigateLastKnown - } - } - - // Tracking 阶段按阈值重规划路径 - if (_subState == ChaseSubState.Tracking) - { - float sqrReplan = m_ReplanThreshold * m_ReplanThreshold; - if ((playerPos - _lastReplanPos).sqrMagnitude > sqrReplan) - { - _enemy.MoveTo(playerPos); - _lastReplanPos = playerPos; - } - } - - _enemy.FacePlayer(); - return TaskStatus.Running; - } - - public override void OnEnd() - { - float walkSpeed = _enemy?.Stats?.WalkSpeed ?? 2f; - _enemy?.Nav?.SetSpeed(walkSpeed); - _enemy?.StopMovement(); - _subState = ChaseSubState.Tracking; // 重置子状态,防止下次激活时以错误状态重入 - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_ChasePlayer.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_ChasePlayer.cs.meta deleted file mode 100644 index 19265394..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_ChasePlayer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a7ecfbdf1fee6a141a18c72d36fcfbf2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_EnterPhase.cs b/Assets/_Game/Scripts/Enemies/AI/BD_EnterPhase.cs deleted file mode 100644 index 609b7ef5..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_EnterPhase.cs +++ /dev/null @@ -1,35 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:Boss 切换阶段(Phase)。 - /// 调用 BossBase.EnterPhase(PhaseIndex),单帧完成,返回 Success。 - /// - [TaskName("Enter Boss Phase")] - [TaskCategory("BaseGames/Enemy/Boss")] - [TaskDescription("立即切换 Boss 到目标阶段序号(单帧完成)")] - public class BD_EnterPhase : Action - { - [UnityEngine.SerializeField] private int m_PhaseIndex = 1; - - private BossBase _boss; - - public override void OnAwake() => _boss = GetComponent(); - - public override void OnStart() - { - // 阶段切换是单帧操作,在 OnStart 完成;OnUpdate 仅汇报结果 - _boss?.EnterPhase(m_PhaseIndex); - } - - public override TaskStatus OnUpdate() - { - return _boss == null ? TaskStatus.Failure : TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_EnterPhase.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_EnterPhase.cs.meta deleted file mode 100644 index ad4dcff5..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_EnterPhase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5b532ff86847a744c801b1b6c4bae0c5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_FaceTarget.cs b/Assets/_Game/Scripts/Enemies/AI/BD_FaceTarget.cs deleted file mode 100644 index 4a08e120..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_FaceTarget.cs +++ /dev/null @@ -1,29 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:立即朝向玩家,单帧完成,返回 Success。 - /// - [TaskName("Face Target")] - [TaskCategory("BaseGames/Enemy/Animation")] - [TaskDescription("立即朝向目标 Transform 或玩家,单帧返回 Success")] - public class BD_FaceTarget : Action - { - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - _enemy.FacePlayer(); - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_FaceTarget.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_FaceTarget.cs.meta deleted file mode 100644 index 5c0e4280..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_FaceTarget.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3ed2d3259efee514b8e17bc22ca021e3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_InterruptAbility.cs b/Assets/_Game/Scripts/Enemies/AI/BD_InterruptAbility.cs deleted file mode 100644 index 062a6afd..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_InterruptAbility.cs +++ /dev/null @@ -1,32 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies.Abilities; - -namespace BaseGames.Enemies.AI -{ - /// 动作:中断指定能力。 - [TaskName("Interrupt Ability")] - [TaskCategory("BaseGames/Enemy/Combat")] - [TaskDescription("立即中断指定能力或全部能力")] - public sealed class BD_InterruptAbility : Action - { - [SerializeField] private string m_AbilityId = ""; - [SerializeField] private InterruptReason m_Reason = InterruptReason.ExternalRequest; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - var ab = _enemy.Abilities.Get(m_AbilityId); - if (ab == null) return TaskStatus.Failure; - ab.Interrupt(m_Reason); - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_InterruptAbility.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_InterruptAbility.cs.meta deleted file mode 100644 index 4db9b640..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_InterruptAbility.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3db7ca634cc20574dba7f11ab018b23a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_InvestigateLastKnown.cs b/Assets/_Game/Scripts/Enemies/AI/BD_InvestigateLastKnown.cs deleted file mode 100644 index 72f14afc..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_InvestigateLastKnown.cs +++ /dev/null @@ -1,162 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:多步搜查(Navigate → LookAround → RandomWalk × N)。 - /// - /// - /// Navigate:导航至最后可见位置。 - /// LookAround:到达后原地环顾(播放 Look 动画,持续 LookAroundDuration)。 - /// WalkRandom:向搜查半径内的随机点移动,重复 RandomStepCount 次。 - /// 任意阶段重新发现玩家 → 返回 Failure,BD 树重入追击。 - /// 所有步骤完成仍未发现 → 返回 Success,BD 树归位/恢复巡逻。 - /// - /// - [TaskName("Investigate Last Known Pos")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("多步搜查:导航到最后已知位置 → 环顾四周 → 随机游走 N 次")] - public sealed class BD_InvestigateLastKnown : Action - { - [Tooltip("到达搜查点后环顾的时长(s)")] - [SerializeField] private float m_LookAroundDuration = 0.8f; - - [Tooltip("随机行走步数(完成环顾后随机游荡的次数)")] - [SerializeField] [Min(0)] private int m_RandomStepCount = 2; - - [Tooltip("随机行走半径(m)")] - [SerializeField] private float m_SearchRadius = 2.5f; - - [Tooltip("到达目标点的判定半径(m)")] - [SerializeField] private float m_ArriveRadius = 0.6f; - - private enum InvestigateSubStep { Navigate, LookAround, WalkRandom } - - private EnemyBase _enemy; - private InvestigateSubStep _step; - private float _stepTimer; - private int _stepsRemaining; - private Vector2 _randomTarget; - private bool _pathFailed; - private bool _subscribed; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override void OnStart() - { - _enemy.SetAiPhase(AiPhase.Investigate); - _step = InvestigateSubStep.Navigate; - _stepTimer = 0f; - _stepsRemaining = m_RandomStepCount; - _pathFailed = false; - - if (!_subscribed && _enemy.Nav != null) - { - _enemy.Nav.OnNavPathFailed += HandlePathFailed; - _subscribed = true; - } - - _enemy.MoveTo(_enemy.LastKnownPlayerPosition); - } - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - - if (_enemy.IsPlayerVisible()) return TaskStatus.Failure; - - switch (_step) - { - case InvestigateSubStep.Navigate: return UpdateNavigate(); - case InvestigateSubStep.LookAround: return UpdateLookAround(); - case InvestigateSubStep.WalkRandom: return UpdateWalkRandom(); - default: return TaskStatus.Success; - } - } - - public override void OnEnd() - { - if (_subscribed && _enemy?.Nav != null) - _enemy.Nav.OnNavPathFailed -= HandlePathFailed; - _subscribed = false; - _enemy?.StopMovement(); - } - - // ── 阶段逻辑 ──────────────────────────────────────────────────── - private TaskStatus UpdateNavigate() - { - Vector2 self = _enemy.transform.position; - bool arrived = _pathFailed || - (self - _enemy.LastKnownPlayerPosition).sqrMagnitude <= m_ArriveRadius * m_ArriveRadius; - - if (!arrived) return TaskStatus.Running; - - _enemy.StopMovement(); - EnterLookAround(); - return TaskStatus.Running; - } - - private TaskStatus UpdateLookAround() - { - _stepTimer += Time.deltaTime; - if (_stepTimer < m_LookAroundDuration) return TaskStatus.Running; - - if (_stepsRemaining > 0) - EnterRandomWalk(); - else - return TaskStatus.Success; - - return TaskStatus.Running; - } - - private TaskStatus UpdateWalkRandom() - { - Vector2 self = _enemy.transform.position; - bool arrived = _pathFailed || - (self - _randomTarget).sqrMagnitude <= m_ArriveRadius * m_ArriveRadius; - - if (!arrived) return TaskStatus.Running; - - _enemy.StopMovement(); - _stepsRemaining--; - _pathFailed = false; - - if (_stepsRemaining > 0) - EnterRandomWalk(); - else - return TaskStatus.Success; - - return TaskStatus.Running; - } - - // ── 辅助方法 ──────────────────────────────────────────────────── - private void EnterLookAround() - { - _step = InvestigateSubStep.LookAround; - _stepTimer = 0f; - _enemy.BeginLookAround(); - } - - private void EnterRandomWalk() - { - _step = InvestigateSubStep.WalkRandom; - _pathFailed = false; - - Vector2 origin = _enemy.LastKnownPlayerPosition; - // 横板地形中只在水平方向随机偏移,保留 origin.y; - // PathBerserker2d 寻路负责处理跨平台的纵向路径规划。 - float dir = Random.value > 0.5f ? 1f : -1f; - float dist = Random.Range(0.5f, m_SearchRadius); - _randomTarget = new Vector2(origin.x + dir * dist, origin.y); - - _enemy.MoveTo(_randomTarget); - } - - private void HandlePathFailed() => _pathFailed = true; - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_InvestigateLastKnown.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_InvestigateLastKnown.cs.meta deleted file mode 100644 index 1c7d3eb6..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_InvestigateLastKnown.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2e43db9982a49864e95812919b0efd10 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsAbilityRunning.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsAbilityRunning.cs deleted file mode 100644 index 7c1c690f..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsAbilityRunning.cs +++ /dev/null @@ -1,34 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies.Abilities; - -namespace BaseGames.Enemies.AI -{ - /// 条件:abilityId 当前是否正在运行。 - [TaskName("Is Ability Running?")] - [TaskCategory("BaseGames/Enemy/Combat")] - [TaskDescription("检查指定能力当前是否正在执行中")] - public sealed class BD_IsAbilityRunning : Conditional - { - [Tooltip("能力 ScriptableObject(优先级高于下方字符串 ID)")] - [SerializeField] private EnemyAbilitySO m_AbilitySO; - - [Tooltip("能力 ID(当 AbilitySO 未赋值时使用)")] - [SerializeField] private string m_AbilityId = ""; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - string id = m_AbilitySO != null ? m_AbilitySO.abilityId : m_AbilityId; - var ab = _enemy.Abilities.Get(id); - return ab != null && ab.IsRunning ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsAbilityRunning.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsAbilityRunning.cs.meta deleted file mode 100644 index d6b38a4c..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsAbilityRunning.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 254e8e3d6b56229498e94e24e7e53393 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsAiPhase.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsAiPhase.cs deleted file mode 100644 index 4691e114..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsAiPhase.cs +++ /dev/null @@ -1,36 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional:当前 AI 行为阶段是否与目标匹配。 - /// - /// 常用于 Decorator Conditional Abort 或 Sequence 头部保护子树, - /// 例如只有在 阶段时才执行巡逻序列。 - /// - [TaskName("Is Ai Phase?")] - [TaskCategory("BaseGames/Enemy/State")] - [TaskDescription("检查当前 AI 行为阶段是否与目标枚举值匹配")] - public sealed class BD_IsAiPhase : Conditional - { - [Tooltip("目标 AI 行为阶段")] - [SerializeField] private AiPhase m_Phase = AiPhase.Patrol; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - return _enemy.CurrentAiPhase == m_Phase - ? TaskStatus.Success - : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsAiPhase.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsAiPhase.cs.meta deleted file mode 100644 index 3761d883..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsAiPhase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c5d65c8544c21a146a5f30140acdb5ce -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsGrounded.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsGrounded.cs deleted file mode 100644 index 1ec23fb0..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsGrounded.cs +++ /dev/null @@ -1,27 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional:敌人是否处于地面。 - /// - [TaskName("Is Grounded?")] - [TaskCategory("BaseGames/Enemy/State")] - [TaskDescription("检查敌人是否接地(适用于触发跳跃或落地逻辑的条件保护)")] - public class BD_IsGrounded : Conditional - { - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null || _enemy.Movement == null) return TaskStatus.Failure; - return _enemy.Movement.IsGrounded ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsGrounded.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsGrounded.cs.meta deleted file mode 100644 index 2ee7ca49..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsGrounded.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f3047372de5d51a4f98aee8505490bf1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsHPBelow.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsHPBelow.cs deleted file mode 100644 index b9249d67..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsHPBelow.cs +++ /dev/null @@ -1,34 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional:Boss HP 是否低于阈值(用于触发阶段切换)。 - /// HPThreshold 为 0~1 归一化比例(如 0.5 = HP ≤ 50%)。 - /// - [TaskName("Is HP Below Threshold?")] - [TaskCategory("BaseGames/Enemy/State")] - [TaskDescription("检查当前 HP 是否低于指定百分比阈值")] - public class BD_IsHPBelow : Conditional - { - [UnityEngine.Range(0f, 1f)] - [UnityEngine.SerializeField] private float m_HPThreshold = 0.5f; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null || _enemy.Stats == null) return TaskStatus.Failure; - - float maxHP = UnityEngine.Mathf.Max(1f, _enemy.Stats.MaxHP); - float ratio = (float)_enemy.Stats.CurrentHP / maxHP; - return ratio <= m_HPThreshold ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsHPBelow.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsHPBelow.cs.meta deleted file mode 100644 index 404bad54..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsHPBelow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f1b683b9405d60c4daacd09719b186b5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsNearEdge.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsNearEdge.cs deleted file mode 100644 index 1e950005..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsNearEdge.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional:敌人是否靠近平台边缘。 - /// 通过 EnemyNavAgent.IsNearEdge() 检测(双射线检测脚下/前方地面)。 - /// - [TaskName("Is Near Edge?")] - [TaskCategory("BaseGames/Enemy/State")] - [TaskDescription("检查前方是否有悬崖边缘(基于 EnemyNavAgent Raycast 检测)")] - public class BD_IsNearEdge : Conditional - { - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null || _enemy.Nav == null) return TaskStatus.Failure; - return _enemy.Nav.IsNearEdge() ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsNearEdge.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsNearEdge.cs.meta deleted file mode 100644 index d84fc548..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsNearEdge.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 008a71992a8cb644a94c331e06cd3955 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsOnNavLink.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsOnNavLink.cs deleted file mode 100644 index 979c1829..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsOnNavLink.cs +++ /dev/null @@ -1,35 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// 条件:NavAgent 当前是否正在穿越连接段(跳跃/下落/爬梯/传送等)。 - /// 可选过滤具体连接类型(填 None = 任意类型均匹配)。 - /// - [TaskName("Is On NavLink?")] - [TaskCategory("BaseGames/Enemy/State")] - [TaskDescription("检查 NavAgent 当前是否正在穿越 NavLink(如跳跃传送门)")] - public sealed class BD_IsOnNavLink : Conditional - { - [Tooltip("填 None 匹配任意类型;填具体类型则只在该类型时 Success。")] - [SerializeField] private NavLinkType m_FilterType = NavLinkType.None; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy?.Nav == null) return TaskStatus.Failure; - if (!_enemy.Nav.IsOnLink) return TaskStatus.Failure; - if (m_FilterType != NavLinkType.None && _enemy.Nav.CurrentLinkType != m_FilterType) - return TaskStatus.Failure; - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsOnNavLink.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsOnNavLink.cs.meta deleted file mode 100644 index 04213a67..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsOnNavLink.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 44406bb7e06320746950682adf59f59c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsOutsideZone.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsOutsideZone.cs deleted file mode 100644 index ad4b5c15..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsOutsideZone.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional:判断目标坐标是否超出指定区域边界。 - /// - /// - /// 未配置 PatrolZone 时返回 Failure(表示"无限制",等同于不超界)。 - /// 超界 → Success;区域内 → Failure。 - /// - /// - /// 典型用法:在 Patrol BT 子树中用 BD_IsOutsideZone 检查敌人坐标, - /// 超出巡逻区域时触发归位序列。 - /// - [TaskName("Is Outside Zone")] - [TaskCategory("BaseGames/Enemy/Zone")] - [TaskDescription("判断敌人/玩家坐标是否超出巡逻或追击区域;无 Zone 时返回 Failure(不限制)")] - public sealed class BD_IsOutsideZone : Conditional - { - [Tooltip("true = 检查追击区域,false = 检查巡逻区域")] - [SerializeField] private bool m_CheckChaseZone = false; - - [Tooltip("true = 检查敌人自身坐标,false = 检查玩家坐标")] - [SerializeField] private bool m_CheckEnemy = true; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - - var zone = _enemy.PatrolZone; - if (zone == null) return TaskStatus.Failure; // 无区域 = 不限制 - - Vector2 pos; - if (m_CheckEnemy) - { - pos = _enemy.transform.position; - } - else - { - if (_enemy.PlayerTransform == null) return TaskStatus.Failure; - pos = _enemy.PlayerTransform.position; - } - - bool inside = m_CheckChaseZone - ? zone.ContainsChase(pos) - : zone.ContainsPatrol(pos); - - return inside ? TaskStatus.Failure : TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsOutsideZone.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsOutsideZone.cs.meta deleted file mode 100644 index 800a2f5d..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsOutsideZone.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bff87912e6defb849bea247df2801172 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerInRange.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerInRange.cs deleted file mode 100644 index bdf010de..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerInRange.cs +++ /dev/null @@ -1,31 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional:检查玩家是否在指定范围内。 - /// 成功/失败直接驱动 BT 分支选择(Selector / Sequence 节点)。 - /// - [TaskName("Is Player In Range?")] - [TaskCategory("BaseGames/Enemy/Perception")] - [TaskDescription("检查玩家是否在指定距离内")] - public class BD_IsPlayerInRange : Conditional - { - /// 检测范围(Inspector 可配置,默认 6 米)。 - public float Range = 6f; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - return _enemy.IsPlayerInRange(Range) ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerInRange.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerInRange.cs.meta deleted file mode 100644 index b763b146..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerInRange.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9d176aa20179c6b43a6798432eb073a4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerVisible.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerVisible.cs deleted file mode 100644 index c773edc3..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerVisible.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional:玩家是否可见(LOS 检测)。 - /// 读取 EnemyBase.IsPlayerVisible(),结果来自 PhysicsPerceptionSystem(LOS / Sight 槽位)。 - /// - [TaskName("Is Player Visible?")] - [TaskCategory("BaseGames/Enemy/Perception")] - [TaskDescription("检查是否有视线到达玩家(通过 EnemyBase.HasLineOfSight)")] - public class BD_IsPlayerVisible : Conditional - { - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - return _enemy.IsPlayerVisible() ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerVisible.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerVisible.cs.meta deleted file mode 100644 index 4296244a..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsPlayerVisible.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0f8a58f1dbebf644999205d1a2febdc9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsSensorDetecting.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsSensorDetecting.cs deleted file mode 100644 index 02444875..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsSensorDetecting.cs +++ /dev/null @@ -1,41 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies.Perception; - -namespace BaseGames.Enemies.AI -{ - /// - /// 条件: 中名为 slotName 的槽位是否检测到目标。 - /// 若 m_Target 为空则使用 EnemyBase.PlayerTransform。 - /// - [TaskName("Is Sensor Detecting?")] - [TaskCategory("BaseGames/Enemy/Perception")] - [TaskDescription("检查 PhysicsPerceptionSystem 中指定 Sensor 槽是否检测到目标")] - public sealed class BD_IsSensorDetecting : Conditional - { - [SerializeField] private string m_SlotName = "aggro"; - [SerializeField] private bool m_AnyTarget = false; - - private IPerceptionSystem _hub; - private EnemyBase _enemy; - - public override void OnAwake() - { - _hub = gameObject.GetComponent(); - _enemy = gameObject.GetComponent(); - } - - public override TaskStatus OnUpdate() - { - if (_hub == null) return TaskStatus.Failure; - if (m_AnyTarget) - return _hub.HasAnyDetection(m_SlotName) ? TaskStatus.Success : TaskStatus.Failure; - var tgt = _enemy != null ? _enemy.PlayerTransform : null; - if (tgt == null) return TaskStatus.Failure; - return _hub.IsDetecting(m_SlotName, tgt.gameObject) ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsSensorDetecting.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsSensorDetecting.cs.meta deleted file mode 100644 index bc54b49d..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsSensorDetecting.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5a1015b63dbb3da4aa877d7e898b394a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsStateMatch.cs b/Assets/_Game/Scripts/Enemies/AI/BD_IsStateMatch.cs deleted file mode 100644 index ba38ab9e..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsStateMatch.cs +++ /dev/null @@ -1,30 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional:敌人当前 EnemyStateType 是否与目标状态匹配。 - /// - [TaskName("Is State Match?")] - [TaskCategory("BaseGames/Enemy/State")] - [TaskDescription("检查当前物理/战斗状态是否与目标枚举值匹配")] - public class BD_IsStateMatch : Conditional - { - [SerializeField] private EnemyStateType m_TargetState = EnemyStateType.Controlled; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - return _enemy.CurrentState == m_TargetState ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_IsStateMatch.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_IsStateMatch.cs.meta deleted file mode 100644 index acbb5f24..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_IsStateMatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 058372e0cdf7c5b40b53838cf89b8daf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_JumpTo.cs b/Assets/_Game/Scripts/Enemies/AI/BD_JumpTo.cs deleted file mode 100644 index d46d2b3b..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_JumpTo.cs +++ /dev/null @@ -1,49 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:跳跃至目标坐标(抛物线跳跃)。 - /// 调用 EnemyBase.JumpTo,待落地(IsGrounded)后返回 Success。 - /// - [TaskName("Jump To")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("执行跳跃动作到达目标高度或 NavLink 对接点")] - public class BD_JumpTo : Action - { - [SerializeField] private Vector2 m_Target; - - private EnemyBase _enemy; - private bool _jumped; - - public override void OnAwake() => _enemy = GetComponent(); - - public override void OnStart() - { - _jumped = false; - } - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - - if (!_jumped) - { - _enemy.JumpTo(m_Target); - _jumped = true; - return TaskStatus.Running; - } - - // 等待落地 - if (_enemy.Movement != null && _enemy.Movement.IsGrounded) - return TaskStatus.Success; - - return TaskStatus.Running; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_JumpTo.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_JumpTo.cs.meta deleted file mode 100644 index 17e372b4..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_JumpTo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7907401e39b5fdf409449af475640396 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_MaintainCombatDistance.cs b/Assets/_Game/Scripts/Enemies/AI/BD_MaintainCombatDistance.cs deleted file mode 100644 index 3f3daecf..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_MaintainCombatDistance.cs +++ /dev/null @@ -1,94 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using UnityEngine; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:战斗站位控制。 - /// 在 [m_PreferredMinDist, m_PreferredMaxDist] 范围内保持与玩家的水平距离: - /// - 距离过近 → 后退 - /// - 距离过远 → 靠近 - /// - 在范围内 → 停止移动,持续朝向玩家 - /// 始终返回 Running,上层 BT 通过 Abort 或条件终止该 Task。 - /// - [TaskName("Maintain Combat Distance")] - [TaskCategory("BaseGames/Enemy/Combat")] - [TaskDescription("在战斗中维持与目标的理想距离范围")] - public class BD_MaintainCombatDistance : Action - { - [Tooltip("期望最小距离(m);小于此值开始后退")] - [SerializeField] private float m_PreferredMinDist = 2f; - - [Tooltip("期望最大距离(m);大于此值开始靠近")] - [SerializeField] private float m_PreferredMaxDist = 4f; - - [Tooltip("后退速度(m/s),默认使用 WalkSpeed")] - [SerializeField] private float m_BackpedaleSpeed = 0f; - - [Tooltip("每帧重新规划路径的阈值(m);玩家移动超过此距离才重规划,降低频率")] - [SerializeField] private float m_ReplanThreshold = 0.5f; - - private EnemyBase _enemy; - private Vector2 _lastPlayerPos; - private float _sqrMin; - private float _sqrMax; - - public override void OnAwake() => _enemy = GetComponent(); - - public override void OnStart() - { - _sqrMin = m_PreferredMinDist * m_PreferredMinDist; - _sqrMax = m_PreferredMaxDist * m_PreferredMaxDist; - _lastPlayerPos = Vector2.positiveInfinity; - } - - public override TaskStatus OnUpdate() - { - if (_enemy == null || _enemy.PlayerTransform == null) - return TaskStatus.Failure; - - if (_enemy.Stats == null) - return TaskStatus.Failure; - - _enemy.FacePlayer(); - - float sqrDist = _enemy.Stats.SqrDistanceToPlayer; - - if (sqrDist < _sqrMin) - { - // 距离过近 → 后退(向远离玩家方向移动) - _enemy.Nav?.StopNavigation(); - Vector2 toPlayer = ((Vector2)_enemy.PlayerTransform.position - (Vector2)_enemy.transform.position).normalized; - float backDir = -Mathf.Sign(toPlayer.x); - float speed = m_BackpedaleSpeed > 0f ? m_BackpedaleSpeed : _enemy.Stats.WalkSpeed; - _enemy.MoveInDirectionWithSpeed(backDir, speed); - } - else if (sqrDist > _sqrMax) - { - // 距离过远 → 靠近 - Vector2 playerPos = _enemy.PlayerTransform.position; - float moved = ((Vector2)playerPos - _lastPlayerPos).sqrMagnitude; - if (moved > m_ReplanThreshold * m_ReplanThreshold) - { - _lastPlayerPos = playerPos; - _enemy.MoveTo(playerPos); - } - } - else - { - // 在最优范围内 → 停止导航,原地保持朝向 - _enemy.StopMovement(); - } - - return TaskStatus.Running; - } - - public override void OnEnd() - { - _enemy?.StopMovement(); - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_MaintainCombatDistance.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_MaintainCombatDistance.cs.meta deleted file mode 100644 index 855cb92c..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_MaintainCombatDistance.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 480875a7bad333140a3c46e637eb7bc6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_MoveTo.cs b/Assets/_Game/Scripts/Enemies/AI/BD_MoveTo.cs deleted file mode 100644 index 6cc71bb4..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_MoveTo.cs +++ /dev/null @@ -1,42 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:移动到指定世界坐标 Target。 - /// 到达目标(IsAtDestination)后返回 Success。 - /// - [TaskName("Move To")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("导航到目标 Transform 或世界坐标点;到达返回 Success")] - public class BD_MoveTo : Action - { - [SerializeField] private Vector2 m_Target; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - - _enemy.MoveTo(m_Target); - - if (_enemy.Nav != null && _enemy.Nav.IsAtDestination()) - return TaskStatus.Success; - - return TaskStatus.Running; - } - - public override void OnEnd() - { - _enemy?.StopMovement(); - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_MoveTo.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_MoveTo.cs.meta deleted file mode 100644 index 7d97484f..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_MoveTo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 460aa03baecb5b547980f7bab7cfee22 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_MoveToAndWait.cs b/Assets/_Game/Scripts/Enemies/AI/BD_MoveToAndWait.cs deleted file mode 100644 index add3c6f5..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_MoveToAndWait.cs +++ /dev/null @@ -1,58 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// 动作:移动到目标并等待 OnGoalReached 事件(事件驱动,替代轮询版 BD_MoveTo)。 - /// OnGoalReached 触发后返回 Success;路径失败返回 Failure。 - /// - [TaskName("Move To And Wait")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("导航到目标点,到达后原地等待指定时长,然后返回 Success")] - public sealed class BD_MoveToAndWait : Action - { - [SerializeField] private Transform m_Target; - - private EnemyBase _enemy; - private bool _reached; - private bool _failed; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override void OnStart() - { - _reached = _failed = false; - if (_enemy?.Nav == null) { _failed = true; return; } - _enemy.Nav.OnGoalReached += HandleReached; - _enemy.Nav.OnNavPathFailed += HandleFailed; - var pos = m_Target != null ? (Vector2)m_Target.position - : _enemy.PlayerTransform != null ? (Vector2)_enemy.PlayerTransform.position - : (Vector2)transform.position; - _enemy.Nav.RequestMoveTo(pos); - } - - public override TaskStatus OnUpdate() - { - if (_failed) return TaskStatus.Failure; - if (_reached) return TaskStatus.Success; - return TaskStatus.Running; - } - - public override void OnEnd() - { - if (_enemy?.Nav != null) - { - _enemy.Nav.OnGoalReached -= HandleReached; - _enemy.Nav.OnNavPathFailed -= HandleFailed; - } - } - - private void HandleReached() => _reached = true; - private void HandleFailed() => _failed = true; - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_MoveToAndWait.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_MoveToAndWait.cs.meta deleted file mode 100644 index 8ee544ec..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_MoveToAndWait.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: df51ca671ebccea47a45c1e1bca3caa3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_MoveToPlayer.cs b/Assets/_Game/Scripts/Enemies/AI/BD_MoveToPlayer.cs deleted file mode 100644 index 37ed77fe..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_MoveToPlayer.cs +++ /dev/null @@ -1,43 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:移向玩家。 - /// OnStart 从 EnemyBase.PlayerTransform 获取玩家引用(由 _onPlayerSpawned 事件缓存, - /// 避免 FindWithTag 全场景扫描)。OnUpdate 每帧更新导航目标。 - /// - [TaskName("Move To Player")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("持续向玩家方向移动,失去视线或超出追踪距离返回 Failure")] - public class BD_MoveToPlayer : Action - { - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override void OnStart() - { - _enemy.SetAiPhase(AiPhase.Chase); - } - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - if (_enemy.PlayerTransform == null) return TaskStatus.Failure; - - _enemy.MoveTo(_enemy.PlayerTransform.position); - _enemy.FacePlayer(); - return TaskStatus.Running; - } - - public override void OnEnd() - { - _enemy?.StopMovement(); - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_MoveToPlayer.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_MoveToPlayer.cs.meta deleted file mode 100644 index 61125478..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_MoveToPlayer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 67b2f5400ef71aa4fae183cf1ce1e649 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_OnParried.cs b/Assets/_Game/Scripts/Enemies/AI/BD_OnParried.cs deleted file mode 100644 index 3483f2c2..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_OnParried.cs +++ /dev/null @@ -1,30 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Conditional Task:检查敌人本次 BT Tick 内是否发生了弹反事件。 - /// - /// 返回 Success 时同时清除标志(每次弹反只触发一次响应分支)。 - /// 典型用法:在 BD 树根部优先分支放置此条件,触发时执行受击硬直 / 反制动画等子树。 - /// - [TaskName("On Parried?")] - [TaskCategory("BaseGames/Enemy/Utility")] - [TaskDescription("检查上一次攻击是否被玩家格挡(用于 Boss 反制逻辑)")] - public class BD_OnParried : Conditional - { - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - return _enemy.ConsumeParryEvent() ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_OnParried.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_OnParried.cs.meta deleted file mode 100644 index be1a6b9f..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_OnParried.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fdae429711fc46d41a7b025eed43784f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_Patrol.cs b/Assets/_Game/Scripts/Enemies/AI/BD_Patrol.cs deleted file mode 100644 index 09346cb5..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_Patrol.cs +++ /dev/null @@ -1,69 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:来回踱步巡逻——持续向当前方向移动,遇墙或悬崖时自动翻转方向。 - /// 转向检测通过 / - /// 进行;这两项是 EnemyMovement 内置的物理射线检测,不属于感知系统(PhysicsPerceptionSystem)。 - /// - /// 若需要按预设路点顺序巡逻,请使用 (支持 Transform 引用和内联坐标)。 - /// - [TaskName("Patrol (Pace)")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("来回踱步巡逻:遇墙或悬崖自动翻转方向(通过 EnemyMovement 物理射线检测,无需感知槽)")] - public class BD_Patrol : Action - { - private EnemyBase _enemy; - private EnemyMovement _movement; - private float _dir = 1f; - private float _flipCooldown; // 翻转后短暂冷却,等待射线刷新到新朝向 - - public override void OnAwake() - { - _enemy = GetComponent(); - _movement = _enemy?.Movement; - } - - public override void OnStart() - { - _enemy?.SetAiPhase(AiPhase.Patrol); - // 与敌人实际朝向同步,防止任务重入时 _dir 与朝向不符(如战斗后朝向已改变) - if (_movement != null) - _dir = _movement.FacingDirection; - _flipCooldown = 0f; - } - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - - // 翻转冷却期间跳过物理检测(等待射线在新朝向完成刷新) - if (_flipCooldown > 0f) - _flipCooldown -= Time.deltaTime; - else if (ShouldFlip()) - { - _dir = -_dir; - _flipCooldown = 0.1f; // ~6 帧缓冲(60 fps),防止射线残留信号导致抖动 - } - - _enemy.MoveInDirection(_dir); - return TaskStatus.Running; - } - - public override void OnEnd() => _enemy?.StopMovement(); - - private bool ShouldFlip() - { - // 转身进行中时不重复检测,防止 _dir 在转身期间被残留信号反复翻转 - if (_movement == null || _movement.IsTurning) return false; - return _movement.IsWallAhead || _movement.IsLedgeAhead; - } - } -} -#endif - diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_Patrol.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_Patrol.cs.meta deleted file mode 100644 index 304223a1..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_Patrol.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b0fd85d7c7ce18f4193bb3b70707d055 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_PatrolWaypoints.cs b/Assets/_Game/Scripts/Enemies/AI/BD_PatrolWaypoints.cs deleted file mode 100644 index f3f84336..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_PatrolWaypoints.cs +++ /dev/null @@ -1,241 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:按预设路点顺序巡逻(支持 Transform 引用或内联 Vector2 坐标两种模式)。 - /// - /// - /// m_Waypoints(Transform[]):拖入场景中的路点对象;适合动态路点(可在运行时移动)。 - /// m_InlineWaypoints(Vector2[]):直接填写世界坐标;无需在场景中放置对象,编辑器中以 Gizmo 可视化路径。 - /// 两者同时设置时 m_Waypoints 优先。 - /// - /// - /// 到达最后一个路点后可循环(Loop)或往返(PingPong)。 - /// 与 PathBerserker2d 集成:通过 IPathAgent.RequestMoveTo 导航,支持跨平台跳跃 NavLink。 - /// - [TaskName("Patrol (Waypoints)")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("按预设路点顺序巡逻;支持 Transform 引用或内联 Vector2 坐标,可循环或折返")] - public sealed class BD_PatrolWaypoints : Action - { - [Tooltip("路点列表(世界空间 Transform);与 m_InlineWaypoints 同时设置时此项优先")] - [SerializeField] private Transform[] m_Waypoints; - - [Tooltip("内联路点坐标(世界空间 Vector2);m_Waypoints 为空时使用;在 Scene 视图中以绿色 Gizmo 可视化")] - [SerializeField] private Vector2[] m_InlineWaypoints; - - [Tooltip("到达路点的判定半径(m)")] - [SerializeField] private float m_ArriveRadius = 0.3f; - - [Tooltip("true = 往返; false = 循环")] - [SerializeField] private bool m_PingPong = false; - - [Tooltip("每个路点到达后等待时长(s)")] - [SerializeField] private float m_WaitAtWaypoint = 0f; - - // 首次启动重试间隔:OnStart() 的第一次 RequestCurrent() 可能因 NavAgent 尚未完成 - // UpdateMappedPosition()(脚本执行顺序问题)而静默失败。此值只需大于一帧即可。 - private const float InitialRetryDelay = 0.05f; - - // 正常巡逻中卡住的重试间隔:必须足够长,使任何在途 PB2d 路径请求 - // (Pending → Finished → HandlePathRequest 消费)都已处理完毕,避免竞争覆盖。 - private const float StuckRetryDelay = 0.5f; - - private EnemyBase _enemy; - private int _index = 0; - private int _dir = 1; - private float _waitTimer = 0f; - private bool _waiting = false; - private float _stuckTimer = 0f; - private bool _pathFailed = false; - private bool _hasMoved = false; // 首次成功开始移动后置 true - - // ── 统一路点访问 ──────────────────────────────────────────────────── - private int WaypointCount => - m_Waypoints != null && m_Waypoints.Length > 0 - ? m_Waypoints.Length - : m_InlineWaypoints?.Length ?? 0; - - private Vector2 GetWaypoint(int index) - { - if (m_Waypoints != null && m_Waypoints.Length > 0) - { - var t = m_Waypoints[index]; - return t != null ? (Vector2)t.position : (Vector2)transform.position; - } - return m_InlineWaypoints != null && index < m_InlineWaypoints.Length - ? m_InlineWaypoints[index] - : (Vector2)transform.position; - } - - // ── BD 生命周期 ───────────────────────────────────────────────────── - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override void OnStart() - { - if (WaypointCount == 0) return; - _waiting = false; - _waitTimer = 0f; - _stuckTimer = 0f; - _pathFailed = false; - _hasMoved = false; - _enemy?.SetAiPhase(AiPhase.Patrol); - - if (_enemy?.Nav != null) - { - _enemy.Nav.OnGoalReached += HandleGoalReached; - _enemy.Nav.OnNavPathFailed += HandlePathFailed; - } - - RequestCurrent(); - } - - public override TaskStatus OnUpdate() - { - if (_enemy == null || WaypointCount == 0) - return TaskStatus.Failure; - - if (_waiting) - { - _waitTimer -= Time.deltaTime; - if (_waitTimer > 0f) return TaskStatus.Running; - _waiting = false; - Advance(); - RequestCurrent(); - return TaskStatus.Running; - } - - // 兜底重试:用时间门控避免与 PB2d 的 Finished-状态路径请求产生竞争。 - // 首次启动前(_hasMoved=false)使用短延迟,处理 NavAgent 位置映射尚未就绪的情况; - // 正常巡逻中使用长延迟,确保在途路径请求已被 HandlePathRequest 消费完毕。 - if (_enemy.Nav != null) - { - if (!_enemy.Nav.IsMoving) - { - _stuckTimer += Time.deltaTime; - float retryDelay = _hasMoved ? StuckRetryDelay : InitialRetryDelay; - if (_stuckTimer >= retryDelay) - { - _stuckTimer = 0f; - _pathFailed = false; - RequestCurrent(); - } - } - else - { - _hasMoved = true; - _stuckTimer = 0f; - } - } - - return TaskStatus.Running; - } - - public override void OnEnd() - { - if (_enemy?.Nav != null) - { - _enemy.Nav.OnGoalReached -= HandleGoalReached; - _enemy.Nav.OnNavPathFailed -= HandlePathFailed; - } - _enemy?.StopMovement(); - } - - // ── 内部辅助 ──────────────────────────────────────────────────────── - private void HandleGoalReached() - { - _hasMoved = true; - _stuckTimer = 0f; - _pathFailed = false; - if (m_WaitAtWaypoint > 0f) - { - _waiting = true; - _waitTimer = m_WaitAtWaypoint; - _enemy?.StopMovement(); - } - else - { - Advance(); - RequestCurrent(); - } - } - - // 路径失败时不在回调中立即重试——此时 NavAgent.HandlePathRequest 尚未调用 - // currentPathRequest.Reset(),直接提交新请求会被随后的 Reset() 覆盖清除。 - // 改为设置标志,交由 OnUpdate 的计时兜底在下一帧安全重试。 - private void HandlePathFailed() - { - _pathFailed = true; - _stuckTimer = 0f; // 重置计时器,使兜底在 StuckRetryDelay 后触发 - } - - private void RequestCurrent() - { - if (WaypointCount == 0) return; - _enemy.MoveTo(GetWaypoint(_index)); - } - - private void Advance() - { - if (WaypointCount <= 1) return; - if (m_PingPong) - { - _index += _dir; - if (_index >= WaypointCount) { _index = WaypointCount - 2; _dir = -1; } - else if (_index < 0) { _index = 1; _dir = 1; } - } - else - { - _index = (_index + 1) % WaypointCount; - } - } - - // ── Gizmo 可视化(仅 m_InlineWaypoints 模式)──────────────────────── -#if UNITY_EDITOR - private new void OnDrawGizmos() - { - if (m_InlineWaypoints == null || m_InlineWaypoints.Length < 1) return; - // m_Waypoints 存在时不绘制,避免与场景路点重叠 - if (m_Waypoints != null && m_Waypoints.Length > 0) return; - - Gizmos.color = new Color(0.2f, 0.85f, 0.2f, 0.8f); - for (int i = 0; i < m_InlineWaypoints.Length; i++) - { - Gizmos.DrawWireSphere(m_InlineWaypoints[i], m_ArriveRadius); - - if (i < m_InlineWaypoints.Length - 1) - Gizmos.DrawLine(m_InlineWaypoints[i], m_InlineWaypoints[i + 1]); - } - - // PingPong 时也画返回线;Loop 时画首尾连接线 - if (m_InlineWaypoints.Length >= 2) - { - if (m_PingPong) - { - // 往返:虚线效果(半透明线) - Gizmos.color = new Color(0.2f, 0.85f, 0.2f, 0.35f); - Gizmos.DrawLine(m_InlineWaypoints[m_InlineWaypoints.Length - 1], m_InlineWaypoints[0]); - } - else - { - // 循环:画首尾连接 - Gizmos.color = new Color(0.2f, 0.85f, 0.2f, 0.5f); - Gizmos.DrawLine(m_InlineWaypoints[m_InlineWaypoints.Length - 1], m_InlineWaypoints[0]); - } - } - - // 编辑器标签(路点序号) - UnityEditor.Handles.color = new Color(0.2f, 0.85f, 0.2f, 1f); - for (int i = 0; i < m_InlineWaypoints.Length; i++) - UnityEditor.Handles.Label(m_InlineWaypoints[i] + Vector2.up * 0.25f, $"WP{i}"); - } -#endif - } -} -#endif - diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_PatrolWaypoints.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_PatrolWaypoints.cs.meta deleted file mode 100644 index 305f4559..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_PatrolWaypoints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e7a2cb1e940ff92499a0ebb9d3063e21 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_PlayAnimation.cs b/Assets/_Game/Scripts/Enemies/AI/BD_PlayAnimation.cs deleted file mode 100644 index 2399f40e..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_PlayAnimation.cs +++ /dev/null @@ -1,37 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:通过 AnimationClip 名称播放 Animancer 动画,立即返回 Success。 - /// ClipName 需与 EnemyAnimationConfigSO 中字段名一致。 - /// - [TaskName("Play Animation")] - [TaskCategory("BaseGames/Enemy/Animation")] - [TaskDescription("通过 Animancer 播放指定动画 Clip;支持等待动画结束后返回")] - public class BD_PlayAnimation : Action - { - /// EnemyAnimationConfigSO 中的 AnimationClip 字段名(如 "Attack_Melee")。 - [SerializeField] private string m_ClipName = "Idle"; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null || _enemy.AnimConfig == null) return TaskStatus.Failure; - - var clip = _enemy.AnimConfig.GetClipByName(m_ClipName); - if (clip != null) - _enemy.Animancer?.Play(clip); - - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_PlayAnimation.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_PlayAnimation.cs.meta deleted file mode 100644 index de7d541c..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_PlayAnimation.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3247bf3e6a748dc408bbf0d6ac7e1680 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_ReturnToHome.cs b/Assets/_Game/Scripts/Enemies/AI/BD_ReturnToHome.cs deleted file mode 100644 index 60ae1b86..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_ReturnToHome.cs +++ /dev/null @@ -1,103 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:归位到出生点()。 - /// - /// - /// 切换 ,使用行走速度导航回初始位置。 - /// 到达(距离 ≤ homeRadius)或路径失败时:切换 ,返回 Success。 - /// 路径失败也返回 Success,避免 BD 树卡死;上层节点继续恢复巡逻。 - /// - /// - /// 典型 BD 用法: - /// - /// Sequence - /// BD_InvestigateLastKnown → Success - /// BD_ReturnToHome → Success - /// BD_SetAiPhase(Patrol) - /// - /// - [TaskName("Return To Home")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("导航回出生点;到达后切换 Idle 并返回 Success")] - public sealed class BD_ReturnToHome : Action - { - [Tooltip("到达判定半径(m);0 = 使用 EnemyStatsSO.HomeRadius")] - [SerializeField] private float m_ArriveRadius = 0f; - - private EnemyBase _enemy; - private bool _reached; - private bool _pathFailed; - private bool _subscribed; - private Vector2 _returnTarget; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override void OnStart() - { - _enemy.SetAiPhase(AiPhase.ReturnHome); - _reached = false; - _pathFailed = false; - - if (!_subscribed && _enemy.Nav != null) - { - _enemy.Nav.OnGoalReached += HandleReached; - _enemy.Nav.OnNavPathFailed += HandleFailed; - _subscribed = true; - } - - // 切换为行走速度 - float walkSpeed = _enemy.Stats?.WalkSpeed ?? 2f; - _enemy.Nav?.SetSpeed(walkSpeed); - - // 优先归位到巡逻区域中心;无区域时退回出生点 - _returnTarget = _enemy.PatrolZone != null - ? _enemy.PatrolZone.PatrolCenter - : _enemy.HomePosition; - _enemy.MoveTo(_returnTarget); - } - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - - if (_pathFailed) return CompleteReturn(); - if (_reached) return CompleteReturn(); - - // 兜底距离判断(事件可能因帧序问题延迟一帧) - float radius = m_ArriveRadius > 0f ? m_ArriveRadius : (_enemy.Stats?.HomeRadius ?? 0.5f); - float sqr = ((Vector2)_enemy.transform.position - _returnTarget).sqrMagnitude; - if (sqr <= radius * radius) - return CompleteReturn(); - - return TaskStatus.Running; - } - - public override void OnEnd() - { - if (_subscribed && _enemy?.Nav != null) - { - _enemy.Nav.OnGoalReached -= HandleReached; - _enemy.Nav.OnNavPathFailed -= HandleFailed; - } - _subscribed = false; - } - - private TaskStatus CompleteReturn() - { - _enemy.StopMovement(); - _enemy.SetAiPhase(AiPhase.Idle); - return TaskStatus.Success; - } - - private void HandleReached() => _reached = true; - private void HandleFailed() => _pathFailed = true; - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_ReturnToHome.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_ReturnToHome.cs.meta deleted file mode 100644 index 836fd1bd..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_ReturnToHome.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0555fce4edd236847b580a2b436bd22f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_SetAiPhase.cs b/Assets/_Game/Scripts/Enemies/AI/BD_SetAiPhase.cs deleted file mode 100644 index 7f99938b..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_SetAiPhase.cs +++ /dev/null @@ -1,34 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:设置 AI 行为阶段()。 - /// 单帧完成,返回 Success。常用于行为树中作为阶段过渡的标记节点, - /// 例如在 Selector 分支开头标记当前进入了哪个阶段。 - /// - [TaskName("Set Ai Phase")] - [TaskCategory("BaseGames/Enemy/State")] - [TaskDescription("立即切换 AI 行为阶段(AiPhase),单帧返回 Success")] - public sealed class BD_SetAiPhase : Action - { - [Tooltip("目标 AI 行为阶段")] - [SerializeField] private AiPhase m_Phase = AiPhase.Idle; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - _enemy.SetAiPhase(m_Phase); - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_SetAiPhase.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_SetAiPhase.cs.meta deleted file mode 100644 index 3a4a4e52..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_SetAiPhase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6f70a0ea7dc70bb4cbf300d19eacfba0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_SetAlert.cs b/Assets/_Game/Scripts/Enemies/AI/BD_SetAlert.cs deleted file mode 100644 index 970cad99..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_SetAlert.cs +++ /dev/null @@ -1,29 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:设置警觉状态,并通知 EnemyBase 调整 BT Tick 频率。 - /// - [TaskName("Set Alert Tick Rate")] - [TaskCategory("BaseGames/Enemy/Perception")] - [TaskDescription("切换行为树 Tick 频率:警觉时高频,巡逻时低频")] - public class BD_SetAlert : Action - { - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - - _enemy.SetAggroTickRate(true); - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_SetAlert.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_SetAlert.cs.meta deleted file mode 100644 index b911da24..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_SetAlert.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0f8deae75c691904192374ccab313a2e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_SetState.cs b/Assets/_Game/Scripts/Enemies/AI/BD_SetState.cs deleted file mode 100644 index c698d1fb..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_SetState.cs +++ /dev/null @@ -1,45 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; -using BaseGames.Enemies.Abilities; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:强制切换敌人到指定 EnemyStateType,并中断所有正在执行的能力。 - /// 单帧完成,立即返回 Success。 - /// - /// 典型用法: - /// - 进入 Stagger 状态后重置为 Idle(替代手动停止动画) - /// - 技能打断后显式回到 Controlled 状态 - /// - [TaskName("Set State")] - [TaskCategory("BaseGames/Enemy/State")] - [TaskDescription("强制切换敌人物理/战斗状态(ForceState)")] - public class BD_SetState : Action - { - [Tooltip("切换到的目标状态")] - [SerializeField] private EnemyStateType m_TargetState = EnemyStateType.Controlled; - - [Tooltip("切换状态时同时中断所有正在执行的能力")] - [SerializeField] private bool m_InterruptAbilities = true; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - - if (m_InterruptAbilities) - _enemy.Abilities?.InterruptAll(InterruptReason.ExternalRequest); - - _enemy.ForceState(m_TargetState); - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_SetState.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_SetState.cs.meta deleted file mode 100644 index 8c64bff9..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_SetState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d3406f00433d44e449c24b4340b0c49a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_SpawnProjectile.cs b/Assets/_Game/Scripts/Enemies/AI/BD_SpawnProjectile.cs deleted file mode 100644 index d28f3d31..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_SpawnProjectile.cs +++ /dev/null @@ -1,42 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Core; -using BaseGames.Core.Pool; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:在敌人当前位置生成弹射物。 - /// ProjectileKey 为 Addressable 键,通过 GlobalObjectPool 实例化。 - /// - [TaskName("Spawn Projectile")] - [TaskCategory("BaseGames/Enemy/Utility")] - [TaskDescription("在指定位置生成投射物并赋予初速度")] - public class BD_SpawnProjectile : Action - { - [SerializeField] private Vector2 m_Direction = Vector2.right; - [SerializeField] private string m_ProjectileKey = ""; - [SerializeField] private float m_Speed = 8f; - - public override TaskStatus OnUpdate() - { - if (string.IsNullOrEmpty(m_ProjectileKey)) return TaskStatus.Failure; - - var pool = ServiceLocator.GetOrDefault(); - if (pool == null) return TaskStatus.Failure; - - var go = pool.Spawn(m_ProjectileKey, transform.position, Quaternion.identity); - if (go != null) - { - var rb = go.GetComponent(); - if (rb != null) - rb.velocity = m_Direction.normalized * m_Speed; - } - - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_SpawnProjectile.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_SpawnProjectile.cs.meta deleted file mode 100644 index d6723907..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_SpawnProjectile.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 85547509455668b43971ceccfd36d609 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_StopMovement.cs b/Assets/_Game/Scripts/Enemies/AI/BD_StopMovement.cs deleted file mode 100644 index 14b2459f..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_StopMovement.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:立即停止移动,单帧完成,返回 Success。 - /// - [TaskName("Stop Movement")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("立即停止 NavAgent 移动,单帧返回 Success")] - public class BD_StopMovement : Action - { - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = GetComponent(); - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - _enemy.StopMovement(); - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_StopMovement.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_StopMovement.cs.meta deleted file mode 100644 index ff80b793..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_StopMovement.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2ff201baacc362345a79874bc2a56b74 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_SummonMinions.cs b/Assets/_Game/Scripts/Enemies/AI/BD_SummonMinions.cs deleted file mode 100644 index f4fc8c10..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_SummonMinions.cs +++ /dev/null @@ -1,55 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Core; -using BaseGames.Core.Pool; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:Boss 专用召唤小兵。 - /// 通过 GlobalObjectPool 在 Boss 周围生成 MinionPrefabKey 对应的敌人。 - /// - [TaskName("Summon Minions")] - [TaskCategory("BaseGames/Enemy/Boss")] - [TaskDescription("在指定位置生成小怪预制体(支持延迟和数量配置)")] - public class BD_SummonMinions : Action - { - [Header("召唤配置")] - [Tooltip("对象池 Key,对应 PoolRegistry 中注册的小怪预制体。")] - [SerializeField] private string m_MinionPrefabKey = ""; - [Tooltip("单次召唤的小兵数量。")] - [Min(1)] - [SerializeField] private int m_Count = 2; - [Tooltip("小兵生成位置距 Boss 中心的横向散开半径(m)。")] - [Min(0.1f)] - [SerializeField] private float m_SpawnRadius = 3f; - - // 延迟缓存:首次调用时解析,避免每帧服务定位开销 - private IObjectPoolService _pool; - - public override TaskStatus OnUpdate() - { - if (string.IsNullOrEmpty(m_MinionPrefabKey)) return TaskStatus.Failure; - - _pool ??= ServiceLocator.GetOrDefault(); - if (_pool == null) return TaskStatus.Failure; - - for (int i = 0; i < m_Count; i++) - { - float angleRad = (i / (float)m_Count) * Mathf.PI * 2f; - var offset = new Vector2(Mathf.Cos(angleRad), 0f) * m_SpawnRadius; - var spawnPos = new Vector3( - transform.position.x + offset.x, - transform.position.y, - 0f); - _pool.Spawn(m_MinionPrefabKey, spawnPos, Quaternion.identity); - } - - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_SummonMinions.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_SummonMinions.cs.meta deleted file mode 100644 index 98431219..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_SummonMinions.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8fe673f758db6ef4c81938d19b7a4fde -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_TelegraphAttack.cs b/Assets/_Game/Scripts/Enemies/AI/BD_TelegraphAttack.cs deleted file mode 100644 index 34b4a2f0..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_TelegraphAttack.cs +++ /dev/null @@ -1,56 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies.Boss.Patterns; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:触发攻击预警(TelegraphSystem),等待 Duration 秒后返回 Success。 - /// 对应架构 07_EnemyModule §8 BD_TelegraphAttack;与 TelegraphSystem 协作。 - /// - [TaskName("Telegraph Attack")] - [TaskCategory("BaseGames/Enemy/Combat")] - [TaskDescription("播放攻击前摇动画并等待结束后返回 Success")] - public class BD_TelegraphAttack : Action - { - [SerializeField] private float m_Duration = 1f; - [SerializeField] private string m_VfxKey = ""; - - private TelegraphSystem _telegraph; - private float _elapsed; - private Coroutine _telegraphCoroutine; - - public override void OnAwake() => _telegraph = GetComponent(); - - public override void OnStart() - { - _elapsed = 0f; - _telegraphCoroutine = null; - - if (_telegraph != null && !string.IsNullOrEmpty(m_VfxKey)) - { - _telegraphCoroutine = _telegraph.StartCoroutine( - _telegraph.ShowTelegraph(m_VfxKey, m_Duration, transform.position)); - } - } - - public override TaskStatus OnUpdate() - { - _elapsed += Time.deltaTime; - return _elapsed >= m_Duration ? TaskStatus.Success : TaskStatus.Running; - } - - public override void OnEnd() - { - // BD 任务被 Abort 时停止仍在播放的预警协程,避免孤立 VFX - if (_telegraphCoroutine != null) - { - _telegraph?.StopCoroutine(_telegraphCoroutine); - _telegraphCoroutine = null; - } - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_TelegraphAttack.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_TelegraphAttack.cs.meta deleted file mode 100644 index 452daad6..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_TelegraphAttack.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bbc61c8ed12b2bb4b9c50b6aa1046576 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_TeleportTo.cs b/Assets/_Game/Scripts/Enemies/AI/BD_TeleportTo.cs deleted file mode 100644 index 4bd0cc4b..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_TeleportTo.cs +++ /dev/null @@ -1,26 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:瞬移(传送)到目标坐标,Boss 专用。 - /// 单帧直接修改 transform.position,不使用导航。 - /// - [TaskName("Teleport To")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("瞬移到目标位置(配合粒子/闪烁能力)")] - public class BD_TeleportTo : Action - { - [SerializeField] private Vector2 m_Target; - - public override TaskStatus OnUpdate() - { - transform.position = new Vector3(m_Target.x, m_Target.y, transform.position.z); - return TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_TeleportTo.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_TeleportTo.cs.meta deleted file mode 100644 index 80dc3d65..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_TeleportTo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c9d4cc838f773cd44ad029c86f722906 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_UseAbility.cs b/Assets/_Game/Scripts/Enemies/AI/BD_UseAbility.cs deleted file mode 100644 index cb732367..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_UseAbility.cs +++ /dev/null @@ -1,58 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies.Abilities; - -namespace BaseGames.Enemies.AI -{ - /// - /// 通用:触发能力。OnStart 调用 ability.Execute(),OnUpdate 等待结束。 - /// 失败条件:能力不存在、能力 CanUse=false 或 Execute 返回 false。 - /// - [TaskName("Use Ability")] - [TaskCategory("BaseGames/Enemy/Combat")] - [TaskDescription("触发指定能力(拖拽 EnemyAbilitySO 或填写 ID),等待执行结束")] - public sealed class BD_UseAbility : Action - { - [Tooltip("可直接拖拽 EnemyAbilitySO 资产(推荐),或填写裸字符串 ID 作为兜底")] - [SerializeField] private EnemyAbilitySO m_AbilitySO; - [SerializeField] private string m_AbilityId = ""; - - private EnemyBase _enemy; - private EnemyAbilityBase _ability; - private bool _startedSuccessfully; - - public override void OnAwake() - { - _enemy = gameObject.GetComponent(); - } - - public override void OnStart() - { - _startedSuccessfully = false; - if (_enemy == null) return; - - // SO 拖拽优先;裸字符串兜底 - string id = m_AbilitySO != null ? m_AbilitySO.abilityId : m_AbilityId; - if (string.IsNullOrEmpty(id)) return; - - _ability = _enemy.Abilities.Get(id); - if (_ability == null) return; - _startedSuccessfully = _ability.Execute(); - } - - public override TaskStatus OnUpdate() - { - if (!_startedSuccessfully || _ability == null) return TaskStatus.Failure; - return _ability.IsRunning ? TaskStatus.Running : TaskStatus.Success; - } - - public override void OnEnd() - { - _ability = null; - _startedSuccessfully = false; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_UseAbility.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_UseAbility.cs.meta deleted file mode 100644 index e581b0a3..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_UseAbility.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4865a86627f84a54292736e6dc2b9e15 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkill.cs b/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkill.cs deleted file mode 100644 index 0c9daedd..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkill.cs +++ /dev/null @@ -1,53 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Boss; - -namespace BaseGames.Enemies.AI -{ - /// - /// 触发 Boss 技能。OnStart 调用 BossBase.UseBossSkill(skillId),OnUpdate 等待技能结束。 - /// 失败条件:非 Boss 敌人、技能 ID 无效、BossSkillExecutor 未就绪或技能执行中。 - /// - [TaskName("Use Boss Skill")] - [TaskCategory("BaseGames/Enemy/Boss")] - [TaskDescription("通过技能 ID 执行 Boss 指定技能")] - public sealed class BD_UseBossSkill : Action - { - [SerializeField] private string m_SkillId = ""; - [Tooltip("可选:直接拖拽 BossSkillSO 资产以替代裸字符串(优先于 m_SkillId)")] - [SerializeField] private BossSkillSO m_SkillSO; - - private BossBase _boss; - private bool _startedSuccessfully; - - public override void OnAwake() - { - _boss = gameObject.GetComponent(); - } - - public override void OnStart() - { - _startedSuccessfully = false; - if (_boss == null) return; - - string id = m_SkillSO != null ? m_SkillSO.skillId : m_SkillId; - if (string.IsNullOrEmpty(id)) return; - - _startedSuccessfully = _boss.UseBossSkill(id); - } - - public override TaskStatus OnUpdate() - { - if (!_startedSuccessfully || _boss == null) return TaskStatus.Failure; - return _boss.IsBossSkillExecuting ? TaskStatus.Running : TaskStatus.Success; - } - - public override void OnEnd() - { - _startedSuccessfully = false; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkill.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkill.cs.meta deleted file mode 100644 index 5a25b4e0..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkill.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8f86542f8dede80438ab28ec682758b6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkillWeighted.cs b/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkillWeighted.cs deleted file mode 100644 index 13d2ef6c..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkillWeighted.cs +++ /dev/null @@ -1,54 +0,0 @@ -#if GRAPH_DESIGNER -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using UnityEngine; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:在当前阶段可用且冷却就绪的技能中,按 weight 加权随机选择一个技能并执行。 - /// - /// 返回 Running:技能正在执行。 - /// 返回 Success:技能执行完成。 - /// 返回 Failure:无可用技能,或执行器忙。 - /// - /// 用法:在 Boss BT 的 Combat 阶段,替代 BD_UseBossSkill(固定 ID)实现随机化技能组合。 - /// 每个 BossSkillSO 设置 weight 字段控制出现概率:越大越常见。 - /// - [TaskName("Use Boss Skill (Weighted)")] - [TaskCategory("BaseGames/Enemy/Boss")] - [TaskDescription("加权随机选择并执行可用技能;对上一次使用的技能施加权重惩罚")] - public class BD_UseBossSkillWeighted : Action - { - [Tooltip("等待技能执行完成后才返回 Success。关闭后执行开始即返回 Success,BT 继续运行其他节点。")] - [SerializeField] private bool m_WaitForCompletion = true; - - private BossBase _boss; - private bool _started; - - public override void OnAwake() => _boss = GetComponent(); - - public override void OnStart() - { - _started = false; - } - - public override TaskStatus OnUpdate() - { - if (_boss == null) return TaskStatus.Failure; - - if (!_started) - { - bool ok = _boss.UseBossSkillWeighted(); - if (!ok) return TaskStatus.Failure; - _started = true; - - if (!m_WaitForCompletion) return TaskStatus.Success; - } - - // 等待技能执行完成 - return _boss.IsBossSkillExecuting ? TaskStatus.Running : TaskStatus.Success; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkillWeighted.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkillWeighted.cs.meta deleted file mode 100644 index 134f9e81..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_UseBossSkillWeighted.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5cf18a1d81f80c646947ea0475c31108 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_Wait.cs b/Assets/_Game/Scripts/Enemies/AI/BD_Wait.cs deleted file mode 100644 index 03cc78d4..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_Wait.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:等待固定 Duration 秒后返回 Success。 - /// 适用于攻击前摇、冷却间隔等固定等待。 - /// - [TaskName("Wait")] - [TaskCategory("BaseGames/Enemy/Utility")] - [TaskDescription("等待固定 Duration 秒后返回 Success")] - public class BD_Wait : Action - { - [UnityEngine.SerializeField] private float m_Duration = 1f; - - private float _elapsed; - - public override void OnStart() - { - _elapsed = 0f; - } - - public override TaskStatus OnUpdate() - { - _elapsed += Time.deltaTime; - return _elapsed >= m_Duration ? TaskStatus.Success : TaskStatus.Running; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_Wait.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_Wait.cs.meta deleted file mode 100644 index 79be2f28..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_Wait.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a145269c2d2c3094994ff16e72ba4d68 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_WaitForAnimation.cs b/Assets/_Game/Scripts/Enemies/AI/BD_WaitForAnimation.cs deleted file mode 100644 index a3ae84f9..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_WaitForAnimation.cs +++ /dev/null @@ -1,48 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:等待当前 Animancer 动画播放完毕再返回 Success。 - /// 通过 Animancer CurrentState.NormalizedTime >= 1 轮询; - /// 若动画为循环动画(NormalizedTime 每帧 wrap 到 0),超时后强制返回 Success,防止永久挂死。 - /// - [TaskName("Wait For Animation")] - [TaskCategory("BaseGames/Enemy/Animation")] - [TaskDescription("等待 Animancer 当前动画播放完毕后返回 Success。循环动画请设置超时时间。")] - public class BD_WaitForAnimation : Action - { - [Tooltip("安全超时(秒)。若动画是循环型,超时后自动返回 Success。0 = 不启用超时(仅适合非循环动画)。")] - [SerializeField, Min(0f)] private float m_Timeout = 5f; - - private EnemyBase _enemy; - private float _deadline; - - public override void OnAwake() => _enemy = GetComponent(); - - public override void OnStart() - { - _deadline = m_Timeout > 0f ? Time.time + m_Timeout : float.MaxValue; - } - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - - // 超时保护:防止循环动画导致永久阻塞 - if (Time.time >= _deadline) return TaskStatus.Success; - - var state = _enemy.Animancer?.States?.Current; - if (state == null) return TaskStatus.Success; // 无动画直接继续 - if (state.NormalizedTime >= 1f) return TaskStatus.Success; - - return TaskStatus.Running; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_WaitForAnimation.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_WaitForAnimation.cs.meta deleted file mode 100644 index fc033a50..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_WaitForAnimation.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 437d55b7c77973b4c8a80b688ab153d5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_WaitRandom.cs b/Assets/_Game/Scripts/Enemies/AI/BD_WaitRandom.cs deleted file mode 100644 index 5b4c53b9..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_WaitRandom.cs +++ /dev/null @@ -1,36 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:在 [Min, Max] 范围内随机等待后返回 Success。 - /// 适用于巡逻间隔、随机攻击延迟等自然行为。 - /// - [TaskName("Wait (Random)")] - [TaskCategory("BaseGames/Enemy/Utility")] - [TaskDescription("在 Min~Max 范围内随机等待后返回 Success")] - public class BD_WaitRandom : Action - { - [UnityEngine.SerializeField] private float m_Min = 0.5f; - [UnityEngine.SerializeField] private float m_Max = 2.0f; - - private float _elapsed; - private float _target; - - public override void OnStart() - { - _elapsed = 0f; - _target = Random.Range(m_Min, m_Max); - } - - public override TaskStatus OnUpdate() - { - _elapsed += Time.deltaTime; - return _elapsed >= _target ? TaskStatus.Success : TaskStatus.Running; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_WaitRandom.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_WaitRandom.cs.meta deleted file mode 100644 index ec980b2b..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_WaitRandom.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 15e39022725082a44a41a79a7a655814 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_WaitUntilAbilityEnd.cs b/Assets/_Game/Scripts/Enemies/AI/BD_WaitUntilAbilityEnd.cs deleted file mode 100644 index eca5514d..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_WaitUntilAbilityEnd.cs +++ /dev/null @@ -1,68 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; -using BaseGames.Enemies.Abilities; - -namespace BaseGames.Enemies.AI -{ - /// - /// BD Action:等待指定能力执行结束后返回 Success。 - /// 适用于需要同步等待某个由外部触发的能力(而非本节点触发)的场景。 - /// - /// 返回 Running:能力正在执行。 - /// 返回 Success:能力执行完毕(IsRunning = false)。 - /// 返回 Failure:能力不存在,或超时保护触发。 - /// - /// 典型用法:Sequence [ BD_UseAbility(A) → BD_WaitUntilAbilityEnd(B) ] 等待 B 被 A 内部链式触发后结束。 - /// - [TaskName("Wait Until Ability End")] - [TaskCategory("BaseGames/Enemy/Combat")] - [TaskDescription("等待指定能力执行完成后返回 Success")] - public sealed class BD_WaitUntilAbilityEnd : Action - { - [Tooltip("可直接拖拽 EnemyAbilitySO 资产(推荐),或填写裸字符串 ID 作为兜底")] - [SerializeField] private EnemyAbilitySO m_AbilitySO; - [SerializeField] private string m_AbilityId = ""; - - [Tooltip("超时保护(秒);0 = 永不超时")] - [SerializeField, Min(0f)] private float m_Timeout = 5f; - - private EnemyBase _enemy; - private EnemyAbilityBase _ability; - private float _deadline; - - public override void OnAwake() => _enemy = GetComponent(); - - public override void OnStart() - { - _ability = null; - _deadline = m_Timeout > 0f ? Time.time + m_Timeout : float.MaxValue; - - if (_enemy == null) return; - string id = m_AbilitySO != null ? m_AbilitySO.abilityId : m_AbilityId; - if (!string.IsNullOrEmpty(id)) - _ability = _enemy.Abilities?.Get(id); - } - - public override TaskStatus OnUpdate() - { - if (_ability == null) return TaskStatus.Failure; - - if (Time.time >= _deadline) - { - Debug.LogWarning($"[BD_WaitUntilAbilityEnd] 能力 '{_ability.Config?.abilityId}' 超时,强制中断", gameObject); - // 强制中断仍在运行的能力,防止 HitBox/动画协程泄漏 - if (_ability.IsRunning) - _ability.Interrupt(InterruptReason.ExternalRequest); - return TaskStatus.Failure; - } - - return _ability.IsRunning ? TaskStatus.Running : TaskStatus.Success; - } - - public override void OnEnd() => _ability = null; - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_WaitUntilAbilityEnd.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_WaitUntilAbilityEnd.cs.meta deleted file mode 100644 index 84818baa..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_WaitUntilAbilityEnd.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9311a809097042f4b8b5de9681d51d0d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_WalkRandom.cs b/Assets/_Game/Scripts/Enemies/AI/BD_WalkRandom.cs deleted file mode 100644 index df96db77..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_WalkRandom.cs +++ /dev/null @@ -1,48 +0,0 @@ -#if GRAPH_DESIGNER -using UnityEngine; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; -using BaseGames.Enemies; - -namespace BaseGames.Enemies.AI -{ - /// - /// 动作:随机游走(调用 NavAgent.SetRandomDestination)。 - /// 到达目的地后立即选下一个随机点,持续 Running。 - /// 常用于巡逻 fallback 或无路点的小怪。 - /// - [TaskName("Walk Random")] - [TaskCategory("BaseGames/Enemy/Movement")] - [TaskDescription("随机游走:持续选取随机目的地导航(常用于待机巡逻兜底)")] - public sealed class BD_WalkRandom : Action - { - [Tooltip("尝试选取随机点的次数")] - [SerializeField] private int m_RetryCount = 5; - - private EnemyBase _enemy; - - public override void OnAwake() => _enemy = gameObject.GetComponent(); - - public override void OnStart() - { - _enemy.SetAiPhase(AiPhase.Patrol); - TryWalk(); - } - - public override TaskStatus OnUpdate() - { - if (_enemy == null) return TaskStatus.Failure; - if (_enemy.Nav?.IsAtDestination() ?? true) TryWalk(); - return TaskStatus.Running; - } - - public override void OnEnd() => _enemy?.StopMovement(); - - private void TryWalk() - { - for (int i = 0; i < m_RetryCount; i++) - if (_enemy.Nav?.WalkToRandom() ?? false) break; - } - } -} -#endif diff --git a/Assets/_Game/Scripts/Enemies/AI/BD_WalkRandom.cs.meta b/Assets/_Game/Scripts/Enemies/AI/BD_WalkRandom.cs.meta deleted file mode 100644 index 2ad3ceae..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BD_WalkRandom.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a55d2b270a2c1d34a9b08771feedba62 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef b/Assets/_Game/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef deleted file mode 100644 index adf98679..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef +++ /dev/null @@ -1,21 +0,0 @@ -{ - "excludePlatforms": [], - "allowUnsafeCode": false, - "precompiledReferences": [], - "name": "BaseGames.Enemies.AI", - "defineConstraints": [], - "noEngineReferences": false, - "versionDefines": [], - "rootNamespace": "BaseGames.Enemies.AI", - "references": [ - "BaseGames.Core", - "BaseGames.Core.Events", - "BaseGames.Enemies", - "BaseGames.Enemies.Boss.Patterns", - "Opsive.BehaviorDesigner.Runtime", - "Kybernetik.Animancer" - ], - "autoReferenced": true, - "overrideReferences": false, - "includePlatforms": [] -} diff --git a/Assets/_Game/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef.meta b/Assets/_Game/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef.meta deleted file mode 100644 index 4e3da5a5..00000000 --- a/Assets/_Game/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: c2f7ab9cf613d0c4fb44cdd94fea551f -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor.meta b/Packages/com.opsive.behaviordesigner/Editor.meta deleted file mode 100644 index 7082ed22..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 26ac373dcc50b57419e903b8853f3593 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons.meta deleted file mode 100644 index b0c1dbba..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 142d426ab319c944c8627c59dc5d9f06 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/BehaviorDesignerIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/BehaviorDesignerIcon.png deleted file mode 100644 index 61c3f9fe831e65ee67b63e7a86895e8ddae3f455..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3412 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 ATmS$7 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkCollapsedSlot.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkCollapsedSlot.png.meta deleted file mode 100644 index a9deaa1e..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkCollapsedSlot.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 98eddd8dea34cc1429daaebbc435b3b7 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortBothIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortBothIcon.png deleted file mode 100644 index c25b3f0f53befc978f4bd9064c5b293877d8ee12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1315 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcpgi&u1T;Y}Gc(1?+0Dej&CJ!v!qU>h(9qS*$)e0A^2?!QvjxH#(u+90EigL0Y1`&iTCB^h0!;J{ z?sxor!PI04pUag9Z*?SR zbW7_k-hY#WTVwNI%|ARQ?7p^>OB8Bk-2dlq=DdHn^xUV-@0Xo;QpogHb_=KXk0jwQ zFW6Ujp4wjc&Dvq|3hjMr)&Y(e3tXb+Bp>|${=%l6%Y|+@F=ng?s&LXZNYny-jzi^nQ`ERO>MD*P61=?~NU#BX*>_2+&cih5Gi{l0> zPOdoZ)cEOTa2W6Ru}7Gw1K*0pwxm9vX?5yDPu$x3 eOegoTNHD~iOn>CEc>8BivE}LN=d#Wzp$P!I=Gn>s diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortBothIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortBothIcon.png.meta deleted file mode 100644 index 7cdb0278..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortBothIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 1c01950cc0f1c994cb5ff3576969ebbf -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortLowerPriorityIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortLowerPriorityIcon.png deleted file mode 100644 index ba5d9c432dd23c2e09d3e7c7e8db09be9d69d760..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcpgi&u1T;Y}Gc(1?+0xb7$jQmc!qU>h(9qS*(#6=&(aGG{+}O#* z&C=Wurq?AuximL5uLPzy1)F! zZ>HFK9dQt8Q1AY6IbyBc0XOM`$BY=O1q1gqnC(8=Rnd4h&cUT+>nA25!He7~bJYbL z`4uv+q-~VkZ@#DTY?9NFyG{iU9;;41GriI{UnnBGH$QTku25fs@U(}*aS!DD4ja^% znnpcX%2Cca-5~zcJL@;fep#NO6{_D0bT>D#&uBB9`KPj`U3D|LWo+_U@>rMaV@ z!rEGW_ixjM{41P$4sM&~J9ESO*IMlhUcN2~d9h^4RAK%S2k-8B=WA{gU%SkYv<=-k zW%9gZO#xY@MaN4tj{( zJaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcpgi&u1T;Y}Gc(1?+1Sj@+1b*h(9qS*(agoo(!$cz%*4RR z*x1Arrq?AuximL5uLPzy1)&$H9EV;|Qpha;+U$~Alv$RV;#QQOs{r=0RVHq?nBg=J zsy79A{;uunK zYswURFJ?!PW9mXI(z%aVSxlF%J(`y&t0Q82AWYgoV2{J3b3sCiX7d~t3w>bP-THtt z$b(N|Ws+cV4Z)m$a)12S#-kUSq?Vp{Wy)rd2?UTplEsZ6-TNf~wonN47!qb$H zC=z&jA;UanTL){=d#WOgHieGnTnF5l;ui|sTI6?QyRKZ-TVvlzDdImT+uwD5%k^HO z%kpvUnIEUkF7q|&i!FF~!+3A(^-umca0mMt{Bzl#3eG;WU++cF z+ho=+9hL8z{BG_Ga`?<#RqXgaLM=VWOhZ)J>BQO-T=$c!rnNF_w{NQ`|@>S z72kh`+gHBNTsec?Ou_cv>Ge#j8->13+V|)Ayz`U1zfbucC9}J+uBK6_o{5Lyc6{nJ TNtG1=pt8r))z4*}Q$iB})swe& diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortSelfIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortSelfIcon.png.meta deleted file mode 100644 index 695343b3..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkConditionalAbortSelfIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: ff3ba64f23e708645b24cc7509b5ebe5 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailure.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailure.png deleted file mode 100644 index 223d6fca552e9b7bb86fde155fc7e597fa788777..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmV-+0g3*JP)lrKnzPL|@K9=vo2 zL?nS{pm(z|=UDJ~D14@_-vI|;G0vW7$kg?pz#cdmXJ-Hv!H>Y3|Mp^>wGHrte_VmV zI6JEZJfv9i1P@t(LHmJcIKY1D`o0kkumg@7ScLhaM1Y4Z+HdHkR#E_;fk8zRdTtev z%Y9Eu;l|lj#cxX_z!mr^frBs8N{N&QcvA2W$qPIyXpkh~qM$;Og#+k~$=8i>fZrTk z6!=nlPw0;@{?bUHV1vIEm#NjkD+Y!U+;;;R(rToIL~l0W{UK UlcO0n=>Px#07*qoM6N<$f@`Cpd;kCd diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailure.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailure.png.meta deleted file mode 100644 index c9ffe3aa..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailure.png.meta +++ /dev/null @@ -1,127 +0,0 @@ -fileFormatVersion: 2 -guid: 8d159db7a8da43e41a50a77e43cfd6ba -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailureReevaluate.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/DarkExecutionFailureReevaluate.png deleted file mode 100644 index 6df0aceac6eb6ae5b2e61ddcc5c6119e87910c94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1397 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 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightActiveStackedTask.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/LightActiveStackedTask.png.meta deleted file mode 100644 index 26004b23..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightActiveStackedTask.png.meta +++ /dev/null @@ -1,127 +0,0 @@ -fileFormatVersion: 2 -guid: e57f179ee476f274dbe537179e67bf04 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightCollapsedSlot.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/LightCollapsedSlot.png deleted file mode 100644 index d8b6a632739800e30aed137473c7e0572c468a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1007 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 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightConditionalAbortSelfIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/LightConditionalAbortSelfIcon.png.meta deleted file mode 100644 index a0c53a7a..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightConditionalAbortSelfIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 5d44e66bacdbe51408dd30e519c2b318 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionFailure.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionFailure.png deleted file mode 100644 index b8b9e2349b97bc57c7397943904e093afd7f1eab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwKPP)=Eo5JewUuBmbaR~n9yQb+L7RHmf#F&HWzL6t_O$`k<) zmH{v1capsCd0<%-G23J>zzpmr_&WpHCTjr;+)eN+fXd)E;4A*to8a95e2$L?u$bUi zRe-06B`0{w0W3OxIKu(#HraEL6b^6!ZW`Dd^-W0wp0ew>p}tolfUm%!vVxhv4yfh1 zCsMcx{!sZ_i6j<(OW+XOv{TZ`3%n@!hvW@j6%0s<@TQTHF#4HTd~zG zDc9CvtZnkAJ};#>yGm_30( z8n}+Y0pf->mrDbV@_}l?g%Vf0^hNMIh2?T4c%NT5NkT8YAaN#m5AX}dv$TGUJJ|XF O00003$g6vzMP&3m(SI@6Y!?k&);NfD${n3e=+2oR7$3?fT} z#9$1FH6}(>AQ4oSu(f~?5rYI&2t~0PX$@@!%NBwa1k^4-hb{~=Ez@=8b>5r%t{rC5_xy0Pe@Gb z5ucsZOhmq5Lrtn&wChD_a`rU<&3#&W3eeDdxG0C!-5bOHs!3o@cfWJNW`&TJBui5r z4XmavT`9j}(Z4XwW8S*^AQ1%z1P3ZljaEv_XR5zm9RvWnAxWx`l-Mn#q`0`hCje1O zVD)!wn)AMi_sEZv4NgFG(XP+M5o29Xj6ykI`kY*}KcC%hk;JT#vNU5#wQ*TNH4(K( zbQI^`vSwM}M1`%-r!{(@R+T>kzy$z8sM7N9#>j>H@>!!>GAy3uG_GFxg=zU)6$3zZ za^Z$)f$z`R5MjZawWB!ax=_W+g`eZ(&koLIjUGuqe_BJ-x^2ZoBu5GXfZeN4XU(oO zA;qrpj&6x}_#U6t)+YsTU9|&nivXZrI-kdG-i;EUAK794aOYE@03Z$>=>)Kka~`dp zFN+Ue|1Di>b|-1~J@Hy=TfBPZ>?if5=YK&`Ht z@I=ebnpEGWwFUB5pXP;+h;we{oW}!zARpK=N^^N7-H0I`WUj zYM)*h6x#+#w6MA+QQp3LZs6>XnvjsixUd#h;FH}k|4r6!jOLEcvc|x2;4PLt)1puOBbcb=}>SNM4 zM{C%WR94%VrZqh<3kdvMBv({~8xhIokM|Ty)3a|w)IoE)r4Tf0c)RKKm0wHa9G(b` z22BI+RUvT3H~?@};gOd_L;=IXrDufXSf$^~$R2xHnv~ZT84m!QF%D6HAlPD?0D!yN zk|Tq9OTLMfcWhg%H9gda`<0T48UB5nhdlx1T#ud}8<`{sFzX)zfcBt$23UdHNNHUJP(;@WhXsdu0wXszA)z_+It^=x`SBOL7CzAjbklJ#UUw+WJC^50}N zKy$Tb_zOQuc$8TeIDTTecCXD20F)5z(dW-OVm236F(qeC zkbuj=hFFOSzYr>AVA1S ztc)oxy+A}yyp%}mT=8<6cDH3d_xcmaZuZ1hUN}HRS_sTJr_KelCusLP`OpBe8X74s z`dmy&dBZ>ny54v-irsC<tLaK?Mb%xR{-^=LVI817$B}_xFcDf<0#WBCi^UmR`HLJ0?6ZFW%({J9 TP=hq_00000NkvXXu0mjfb$pDI diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionFailureReevaluate.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionFailureReevaluate.png.meta deleted file mode 100644 index 1704f31d..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionFailureReevaluate.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 5a6d713911c8ec3488639e2934329033 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccess.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccess.png deleted file mode 100644 index c257f7c7de3b63387bcec81a218afbd8f563c8a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Eu!3HE}2mdz#QY^(zo*^7SP{WbZ0pvgRba4#v z=sbF9FK@GffWt%gRXr07H42Y%^-SQk;hr6EX_u0!s&asl)2s$3hR5@bcV61`u6EMg z!i!g8E7`RYE}h!)xw0(r52uZt``)l+J6Sde&tHE1l!+(fv>!Ha-}VLn{3YD|fC~_rSImIJX*kEqDrC-ytHE|8l!wjCTelF{r5}E*l6LF6K diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccess.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccess.png.meta deleted file mode 100644 index c22a2cb2..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccess.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: cf3f27e8ca1f20f4680890e078c7613a -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccessReevaluate.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/LightExecutionSuccessReevaluate.png deleted file mode 100644 index a7c2d05a9e57ae5df7c732c0850a8df60ef3f1bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1392 zcmV-$1&{iPP)iuaT^SUfRULvrl?#n z#zA7hgc~kR^oB%?iC%DFh%nTI&4nn@#1KRxq7z%p76;6MY=a%z9ZHYu+I~Ivd%Tb> zqYT1@|I6ojpWpkw|Gdxh0{?@i=LV`nakqVOjDK1I5%Hn8%laTTRHWwh1sqfGsccNr ziI!N2{<$f}m=u&IN*%6KZnM+MSl2`La=tWzi z(%3Zam+qI1g&n$@!k2unt~hpvF_v8tJnX-^Y9#n;vn$+N2ml6gSw<^bqI%Kh$>icG zj`5aYeB2yPO{vql_(GjQEJ4eP;~f@ljps2dMuU!ZPIpJ^Y|^c?6|71uH*M)}u($U! z#%A+wWcua)r~Cd1Tr$tc=29Mvg`6t^JPIE2U0LmLpKgt&Jj%MFmWi68Z5Jv{8$-a} ze47+KDWk z(vF7yD4vN7mPJw?TQuz}meRrEiP_#-0A8MmbZ2k0)$yDPWrl{Ip9Wnl##k&AcNymr zGv#%bmfy^p$_D^c05rfMa86f8Z7dT|n$;D)P37<0dlo1F1f%KiPS@$( z0CbEoi81CUA`S18MyxVrp%Y7n8Dp7efqJ7uHixUD%{AAn1AvU2lmW;@BwiXm*8J_@ zkyU&=Gg}4#YTmHW1w_OH5E)}qK6H9+(CTn^?3s$(&;x+2pl)`9{lGcKScHhUU}C}^ zO?wKs9HjvOIXOKKRot5SZu{kt;|Dy^ySBwpceuaU`5)8(0L7Y`P-E%7?s8+j|Do?P zA&0D-22Ugt0OTl505BSIuI-!YYD#7!kTQWi?(kpT<;Dj8XwYfC?mpA*m4=J}P^hj5 z)-P-8UT%IduX$u*j02}u8YTfiN(V{+fM-g#QMAtjz;txL;Ba-c-|_xf`RC-9d%e<- z2>=XYNnpKg*Vnbh+w(h8Natc^o)f|GoEQXvSSDCOM69xKW3axoz1ys=3ITvWK4QA& zI(aad7%Kz-tzh=Aw(RIyW7`?d_y6kXC#9)eTo5=-fGamN+*NWa#M1t%p79eF0H`)^ z39hrf*`*h(0RWgEHfmnyt1jHu)o9-z$%hgV^F(hq%9MpxFyG@E?fWAdrRh#qPGKV4 z+e}0p0Iad?4A&IB)T!dNJ^&CDDsQQNedpGyqtSdQ09+jYpgfZH)+sn8v_f$|2LQ`W zFI*NB>Qpr4t3EgI_GTht0I<2@NYqlW;;f)h|E?3PXLrH^9=3;*)32wpl10U9eeX70 zJk1!B7r;csI&ZesN7BAl5J9O>xm5~X&%x)tYA&6VtN?5|Ia86NtjNG1 zDAa!&Rra6S)_$=tz?S^;x^C@L$I||$teoCRB&(KM!@$6CieW*a={;P3VT>`Bmw$?g y2%q;gSIHz>3AC^Q$2hO3&`unx{~?hNoY%j!K4|Yu-sge<0000{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR^Z`oay)D~1LXFv#>P5)1SV^$hfLb3y(Bt1d1HN<}yWtLoyA%7Rq=pw#00 z(xPNwe55JEGy}s9zeOO0K-XCL7i9t?B{9b(Ke;qFHLt|e#a0O@qnDDIVr5`v;bd;& zY~<=ylcOS(cjOR+OKs01jWPOf2@hnOT^cxf;1xI#~i; zZfI!XYU$)+Xkg^*>|$YL=;Epb)tf?2nCSx@qYp|PNQng|1WbV-COqi_Iq=Mrng`4= zMZm1_%i(l8;{&*FvFpO@kD%s>uHtBnQ5=4>55iu z-f8o&{3lo3l!>C54gc2iJ?(pVuT5r_?_tm5i@c8fU*0VpcJIS<24)7vb>0oSk2ZRM OibGFVKbLh*2~7YFdHJCL diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkActionIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkActionIcon.png.meta deleted file mode 100644 index 160edf03..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkActionIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 3bbdfa553da4d554e9d74f8d88915aac -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCompositeIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCompositeIcon.png deleted file mode 100644 index a7bd863899362f5d25d4e22a93ec76cca39f49ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1064 zcmaJ=Pe>F|93C}HL`6DCDa2!>QgCN>R(IT)oMhcub+HxQU2qd2$C;-)tTS(%dA6g6 zk}xC?I&>@w>`)YTs8dGSr6BMU^p7YyMG->mp-Ttrjqa`;+J>2VfB3%d_j|wJ_b!hN z57gH-*HRQ!9~+btWbE+1nriYtx;$P%h9fwd#z{1dbBYbAu!g1}h#ATZOh83jn0pC( zD5{FqQ)!%zpB7bQFp7s^T*D%4it6cgEk(^j45r|WZc6lz$D1_JHHjVz#{F?C0yFyH zq79Ra!zpz!s|p(3dkXZpA`vhkR)A~FnvUp7^scT*=H50-gIx&DO7vb*>G%kUARB@p z)9F+F90z!w;ktr6&vk%+p9`>l^71~eOAPX2pc@n(nnbg;X)z)97h;i>L}xIzM3&9v za!jt1LG}#G34-8h1Oh&S@Hq=6R$QOyv=$X)=%}`CVI7&kQ>VJeFvZ>E00xt0ZeW zg))(Xv94mV9OL(nR0PK3|A!hz3GLtn+|T!)!cJ&yTR zbA`#O*e*^~%oiI&vkh$K-Iz{jmK$ zT)PAsFDWPN+XwSID|xVyRkoNlu(G=R+c$CG*3Dq5Z9UkXZ0bHkRaMs=_D?=rs;D~8 z-D?oO4qV8$AA7X110`R6$ZCK7Zv4so==vLBOZs@#+5GhL%bj1s=R?w~lWSL!@nLZvtMS_R<`(bn#-hXW{l3YI Fe*h#YR$~AF diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCompositeIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCompositeIcon.png.meta deleted file mode 100644 index d863e46a..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCompositeIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 3afb3814c40717440b175b6fde4e73c2 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalEvaluatorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalEvaluatorIcon.png deleted file mode 100644 index 82b4a389dad010ef94e32e69088669fa428556fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2214 zcmaJ@X;@Qd8V&oREK)#C9SBh=U`Pm%KmrLyLLdVHWVcW;Bo~M=xiPtr1W^!BOI<3O z%IL6^f=k0PfFO-n1O$1gN(8ll5EjKUh$!NWETWwoD|UX2bDw*^?K$VX@Atmv$ITB9 z4Ky=Fnj#PgGiDGy0-iD2&)5(i?ef0Vfv5FQKpYeaCPPxT7(mdtU=o003fL(?1iMm3m-7aS9GkB9XKj?(VKI!c`&{LTs6Ec=^s}Rh(5{+B_GNJ7Yrw3i*R_XoAyd8Ko;x&Lj{75 zXbBVn{F(3n6qZEEMF1`Wkbr4o4&1opjoMHmvcDK$L!dYc1ox~|F+3H7KuIbnLitA$ zQBJWuAs3WNoZsVFEHYClf!IP0z@$^qumYCHW*4RvhA=lBa z2fd-KqwiMKTSpbWmAq3DpvEV61U<)RghPw(ep1J_Y*5e3TSlAtS1qm$yz*_{S2F)< z@c^~-#pD}GnB(cXo2P7caBgQRv!L|!FT1&YE-p)>qf^vbrvYc|Y72{a8ylM#xm?vU zR#xV~-?giiUTYMUV}iOp89Sw+`ApR=_Q+}reuM{vAp`>!eCF%vXDx4VAJ$G(h%~_kPCXq0<0n9la@5+~Nvs$IketuwHDluDC zY*m|Q@7PhIx2l!Qs%yUl?XRA#*Wz;33>+5b(qfdfcw{AQ;Ew(z= zx6S0$`u-?~bms+iI7TzMzeY{Ig88ED?c2BU=aF*5sz;kV2unStcGW3ufn#1Zo#|KZ zJ7av)?}ULMCe6Eqoly$M&*h7<}R4V;FDg5aC6DLl@ zzC<4=*_-|ZO|(5qdgoUV1dXdrk}VQjaswOvo2wkGcaM!f8TP-+8pW?cn~105XMRhx z%II)9ye}i;(YjNXrO(s8ZX7DNKP+7ve5Wf`C2K;pyR|D4Tgz9QG(fZl#pN9$pRPjR z+k^9W20CiKNUW2+!yNn9MvX=jtgNi;|4yM;=1-4DxkT&res+i|Ok!wIvMr1Zudgl4 z%|l}j>vxRgJ6P@niSom($=2e!%Rj6QyLj((QIa?2FNvx{s_(3gW@q&;*2h$Q6V{x! z<)qh4$j(rCvHtvDyBuy@RYs<;Y)#Q6|8OxVS0vmta$m0PUi>MDb3w8+Z@o9$w716k z+58)v{O6G^fAdcL=33#4e$&-mOSJaL1tMqkQvdfH+-ha=|c?z$7&iJvaQ=Z0JRAi4OHX;{lYHDPB z{9JC5j1_ z6QXoCu0Zx+4WG~VF~=P>nQ)!Ga1imC#dZBF`DYC6O1|A3QLeFKs*F32ZmPec7;&?H zwwE@L!K~^WiaxG-9-OH=a;B$gc8Q;6R?Vxt^ zn_?^Yid{G)uE6>=@<^ax>AeOPVa~1pX+CoP`|OID9S`l_%61IJ{?dh7hE3r0QD|Nh)@af34Nsq`={)LeOb73s{hYKOQ!cuYF$y09i8a{tMa zN|&Zz$iw~pfx!owM!hGJv&bNYbxLVW7;W&%)G6x!>i#K5PqwWiZhu=-<#Cn0ZCBCQ bwC-vIGrV+P5ffjm{c~Ujgwkua?aKKNHk_Ws diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalEvaluatorIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalEvaluatorIcon.png.meta deleted file mode 100644 index 614b9f42..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalEvaluatorIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 63d6a403c13816a49b58d1de830ca51e -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalIcon.png deleted file mode 100644 index 8e1ce40b97fb19f493fe0626f01d99269e7723e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1075 zcmaJ=PfXKL9PVOJLqJKqs0q*%LuO>{x{cy0lgxFKAw#mwfS|_GzOe?{SK5awTqMMp zcu*mp2zpcx1dJLIA_oY64w$Hk7ZYMkzyk+S@WR2E;484#IzvXCH%;%L1P$77ZK9X^QvWp~;fcsPN=ttbIgC?gtx2+FVnkWp3a1aTnBeLYK{ zmLLvLO0pHT#u|AEsGn;>fIEM1hk03tg;r=kU@jp-SRROA5FQXO;0^bklZ z_5B7&^fx7?{w~QcQ+4ObT8qa5DnKG>sok2%TLEfEm&bE^o1w@Z2|+q5y?6-93V; z=VUc=uS~dLj3w#}OS|nOWr4BS|DmdyLz^fL_VfLxu$k=B0TTx%>@_6ZxKxE5O6Nlc z5D_$z5O!y)*qnw4nrWz$p#(=dTNF)(8T0fGJ{IGnnu$bB0#PAAVFg-IWZoB!_`|^( z@7Yk$%d+7}kgW-a+|d3_Ns?9FloDD|p9Ls_o8&-LZy+E!3?99aN{atp{21FGcC zk$EM5E^J=CJ+7QT7f)U;gOg$G#{Sjl>=t&9JVnO)IyT(^3kE3Wa+Wz9u;_=bt z?~jjBj?G6!FbQs|V{;4Gabw%6NN$JGb*#OEP#aphs@gfhA6o*ip^ zQ!?1rzIM4`$=U!;{qA@{N aA8-(_N2xF0KHmOqU*l-FNtn2BbMOy57G-?^ diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalIcon.png.meta deleted file mode 100644 index 8f0891c6..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkConditionalIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: dea5c23eac9d12c4cbd380cc879816ea -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCooldownIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCooldownIcon.png deleted file mode 100644 index 6705cadfe3dda3f18c72f19c5fcfb0ec365de3ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2077 zcmbVNc~}#78je5|F%Y>$cre6*U?Ir_a+VZwmOK!ofItgYVlt2j$;4z>VgyA2ITS=i zYizMq5h=)_cyN@fD^(FKfg%(aVY?{GrPWv$+3HSE-2KC+e{`Oi`5p7U@Av+`Go|mz(5qrJV_oM2gixRm=Z`q5SwfWT7?QhqfmiCT9sIm0>Zd0V6t4v!ar_l$K&Ku z7Cx3DB8gO7P$m!2slg~+c(g>9B4J4JK_BA+wM>LS0m5ROR*|aIFtsfF0xuJpo3@E~ z+=2<5!ot516(@?oaUnH`qY(W4BqRX9QKI9>6TJ0>tXOy%46B$#VtRTyA>E$V-0D(kQC`{*Cu-3ql z;QwU2*IE<3T?G;&K@F6qmLT~^TDu5FV)y5cOooUW<_5JKNs2g?2T9Ttpb{4HSa{?M zK`NIrNmM$A7QiL*c?=TY9{@O9I>6!3X=DnOO{WR`7dhUCr2qmRHGo8-a~XU9;0xFQ zNx-JjC~OXe#1(Kji&&vj1B;asaM7cg+JTk&aO#tszM+W1vtL zA|a0*tsS1$$A>t4y6W0bU#LeYmwG%;_dYZ`!nQNodGN6=ut$ESyRLHOg_4KL=!lj4 zTtjYU9w8d5Up2BX{|UR`p;t)j&s(MItB*b!uDy~rzw3EXSpO`uK|_ss*l~d2-=cXC zG?6j!(P;XQc2>DpRqJDbp6+`4RNCFF(Z|l6i4k$WPR~K6enslH=zwgSR>dJb)6M2! zX{m7#a`LB!z0d`^8%9QI90SdM-n|@m{nTi7@|b&N(Vf|jj;!n5-FC_=@jJ1HBdQ0g z9K*UgKbgG0t%svp8HhgHd0IB}D%8~-b+*IN>BVRLLiCtNqjkj}QLe=i*D*HLx1&13 z>K)E4IsEUJ>Jn^W=X2guyP%F0_1N+A!Nk|p)d}YF_5(F@9WJCi5yvNQsLlQkmX_r> z);Kx5q~62eT)b(la`J24u9yUi!&3$0J26M?RM}JEDw~<%a?9D78ONHMn&QisFQ2Cu zzIwIuvs1L)y4s(*CYxdk$4;DZ57lTiO@mXJgMED$a*l$+`yUNG3w3ZhRa{&=68D?n zm{VA*yx|u&8I1A1cE;0gMnAmc)>{44vpJ{h^mcFMNKvBlkDuk3|iUft!kwzlssWUt{HH<7Uauvo{4QEC1Ye4kvmMQ5h! zYF%#WzUF{TWShC7XW0%)yQ^*J8Ik>?E>P}e0L8UIH18PRJQT(X^XVCLjeo73Fk1dS zB>;OfV!*sYH>A9>&uBDmEp$_^{!)7O;Gfc{~RBe9xN+kX~Tuy2?y*p zWJuSvpc^|jKA|t|-2Q#l-V)Z1a#6FT3vI5q$m{qmi-x9j*OJLyA;zLoeks)uxQ$sh zkRNYWKxmBkuDqh+sOQU=jZ2aZ7pMNUdu&~wzfD0dxyZioZjST%f#caHh0e-7!h2Po z=bIAha)%MA7niI`7Uwo#Yu2^9uu zul?|$$M2rSBCo5nz2z@G-Tu(uJnk{gOuj)NElWjTwB@uM`apM{ee&Y|&As`ovkcmi zoICZ6D(vqcHXXY?QnAs^!Lh3L8}wIs7;B8>?6Mb~n3{rTIr25XzPb@;HKqM(t7;%_lO9drs3!^tXwV7<-*^;&guASgdb;pVRQci}i`C zANcG)@pP|fZ2b(VLa#y{3)`H!d?F>?^ureN!+Euw#6AB7ho3}$ diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCooldownIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCooldownIcon.png.meta deleted file mode 100644 index 6883c951..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkCooldownIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: b5459f67bc5033e49ad7a763cdb885bb -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkDecoratorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkDecoratorIcon.png deleted file mode 100644 index 6cb948491749d96cd00ff4e71c7d22ddf35d791d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 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 Vtk~|4=U;)!Tu)a&mvv4FO#o1SKuG`q diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkEventIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkEventIcon.png.meta deleted file mode 100644 index 407f1252..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkEventIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 9041375773f69454792084ab67820b7e -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkHasReceivedEventIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkHasReceivedEventIcon.png deleted file mode 100644 index 51a5e0ff583cba21302c2ac106afd8365bc730b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1173 zcmaJ5u%n#|1elHc$5|NUPM zw6?4*EvYCW2%mA2D?yNwg3@QVG@urUG4^PAgkGJ zcR(XSOsBL&2kMYE2ny6`*}>2m-NbByXl%-uveE+(nFQUM5u{%KcAX+MHAuDlBvvxR zAf>JAw?JEeOG4@IQ35K}w1#ZV2v|S|NG3CSuVD+BAeGY<@ZPy*C^82@JwfWTsSc@? z3_}Z$K6;f$VL6WEd77*D@jO>YdRflPu=wRYT)p7q1#bg6`A|5TrFIE%F*+FwpMq2h zAyZ(ObUIC^SJBYwX1G8g;AnWg9*pqVSp&%#k6|y(D~P~WEX_n3G)PBLPQpGEq_ES^ zDd^^utYJ@<2^WmX$R@+ltdmk6C`sRk>iQJgMse`P?>B|*MAigM9N4hWQgGwCmO7zK zA#4E|K`Q}aZ@!AHDTtt*f+iVmP>Rh!d@B*av5xfaT@zoqw`mIdYtXl*y6*~-~$6syM@PkCfvV?AY8Lz zVknV$^z!)TvLSL#wM&$k&Y2~XQSC-xv*sWE6lq_`nixc~fj>Qg?*SE`W zNACSnUY#mFQvIU#P}p|g9+ui4*DiGH$5#6%o~M5Gj%SYqvS;nz}_JhTjSr>=?8rtdFxOquv(ci+UviY5n`*L~RqKb*Tqq$@r d4(@ogVw8C2N-n-4oWw;Th*+dWJlEX0`xEJyhl>CJ diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkHasReceivedEventIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkHasReceivedEventIcon.png.meta deleted file mode 100644 index 7dc88499..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkHasReceivedEventIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: e6fc90c130121da4f9067b5e15b02975 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIdleIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIdleIcon.png deleted file mode 100644 index 500afefccdf0c10e4c3e702233f22388d3a22456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1656 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NxV8o3!bIvbf<8k#s88oIhUx|o?e8Cp8K896x_ zxR@Hi^t$9Hm*%GCmB93-AoQBy)C)=qxdlL*T~doO%TiO^it=+6z+Se>#O)SioaRCG zrr>sq2~NHGK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk*8j3k+-6{4dgJNh7*cWT z%}mb>5l4}><;gLNG`bA6njSeOUb*A*Wziz>;tvn{*lZ+>Eme4)EqdUX9OI|Na!_|> z2A|r3q&Q6p-glnb9QLZ&EP09yb^>$c#x4Z^}8!Pqsjf(l8=it9%}oCOwTU; z*Isl#qLJ%exNW@zx9NHFumyI17_K?6Dz2PukUn`HNBo1?PFMFkB`-A&d(f1BNG@XK zYs(GdY!7T~!q#ltc>ExbMyvS;k$s1>Zr(dp+5T)+oKo5zxxBA25xmQ<{Eb?ad*P)} z_CKqzf4gMu4i^8&`TilBhi&hnZwvBnux-7-{629Li`xGU_RF%Aw%)3ko@mhHoBp)r z72Dcth7v``zV!d*DLa)bRg>JJ^g}MDS+jtn??By;7rWnE-)TErz{+>}SkC*lxocHL zC9@KkWm7F)`JB_Yfh5aI;XY&0|tqa`t z@cH34AHr6tb>>cfpt#d#zSxr3+G}}}eE$hmu*fWUb?GVJi;_vR{B|}@)w?_UzB%8c zPj;)aV&_dfz!kA(M|D{3)m`TGO@aaLS9$Ce4szY%(r+nFYE%nYUOg*yviQMi2ez!p zO$yHPzs#64yC&{e4JL}_CE79*CwU0aOLS5&tTI3&kcxLRE_$3|%Di%V2u73({U}V_y W^Yo6mlr#50b%Cd=pUXO@geCx*1$>DB diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIdleIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIdleIcon.png.meta deleted file mode 100644 index bc6fbee3..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIdleIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: fc4d1b83384913b4abfbd8455db6df5b -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkInverterIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkInverterIcon.png deleted file mode 100644 index c9c95a904614ced1eeccf8cd5207b97536ebf2aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmaJ=TWHfz7*02tGB1dtFfa2Mhu5`fdfOUTXV$iMnzr-KYtIGV=os0Zgn15#lbbwdzW#a@_%qC9Z;F>Iiy za#~5HaXPV=laT5XZH&uOb;72ohDJ*lr9Oy3H|$lk5IsA2hX#rqqC5NvcS4WAjM6e_ z!1lqmlr-2U1!cN%7ih3JBA`Mn0!!`JOwJ0?d0mdo?QMnzc?j+c(SJ;(69R}J0|LLx z>y+Fq3jzTb>+=T!Y%TD(Sr6kTZ@|g=IDdfi)PcE&CeaMJhfDIYxmaWsqB9ul9K+;t zIaki>LPjsc27^Ic!{c!hgwq_*uxL3ob5lWqho)pGI#!SdY(=pfWpRimPX8Q1)r+#4 zIhQ7qFvb#fhIP5^BNc#&#Q&kHT11;T3FrO(Q`k%m=#WW56J-sF6s~8J9ZKgS1{5(e zQV8`IvM6K_MrH=-AkrQHTRRj@Mmcj^9-l~Xam~b{Cc!u#qKSe_QDn~Ni+Xu)kPoun zD9c7;K|kvb2O`nBSY423>+1_#9!XghYPi6a=eg06T)P!iokZrLp&Ws7%s?v0ADL51 zdub}EH^-Grdx@0fGQshAZ;y-9*B}FaVyS;Q`SuP z&tJb99|&c8mqeDF=ByX@E-$Oje!hBQ;p&^hlZzi--q_)|HkrP%-RJl3Y#v^)>h6z? zZ@RiB?u?#ljHvBMi4t%`5@$IW;HR1MSqfJ#4k7my9SuxwZzTw5W1+U); z)53c?JQ<(beQ5LYwa+gd<)>>LcnnPJ+ftwUjz`k#7O&i(9!!>xP3`|QUj6jE&;fR} lUjMSQbJ>}{EX6A*M+Mbi#eOT}s0;SBjz`=0@usfhzX1$)vl#d+&3;bM}vWEG)!d zSKC}027~Da?4U$IvxD-}ghQj%kvJ7-G86d43L-hl0wJ9TzE)22(|WQL%zpS}=jZVL8#27$*^n3$bA^B1y!hGg1KoG7(4t*`BCZw>nTrFv%0O z(~ag#NHIAbtK9L@>j>W0H%9FSON3>NJSy*NjVE5Qv%z`7&9 zJSZp{FDaQ2L7{$$1?@ahOo4z)K%<31p_9~=Olp0v9BZP3|XR-x!kt3VG zWmSO!@EJUiD*!ocq*9Td$VnG?qM%Iwx&n*)RhG^FQYNTiXc3)@#yB}Eue1uJ(f&V_ z#rlfo3nGBO^ZlQ~{HRPWfQ|t8oOB)oYFzRbWhgFz%me5G4ljzsNn5RA7?UI5@R=Mg zk{pRcZr=&AlQ=@Y?PolVMhIZ@1#~t82%vbPAO$B7Od?S5emD#TkN3q=@feIBG~mg2 z7hkG74&(0QjK!>SDI7*R3t$UYxk-O>J=WwZt-#_!ktqNV%m9+8JPr%_`N{-v?Obqc z>V4rRt(}Yenp`xL3|iUP|7!H=5#%1_@~ds3%~#_CY{>0A$kvlM#C{k|-6VkG6D1lQ zC{Il@iZ<#_5z1M@*0BrCaq)4PwRIPw!_F~X3*q*?CH~&QnvcCts8Nn-ZAKhXLwJ?J zcNq0~OEDW)UbL;F!jOJN5~1 z5xgYVK%to;(c>DrN=}cfy^~%0)A(T775Hw%P|GHS$r4_q;h=Kggt7Ifs9XT~&{uZH zVWw3lFTo#^mXMjCDk^RTwuDlL&lzc#WWDw=EBooZo5_cUp6p%}S}vcmPcHPLa? z+`4YO9y<5=F6Q@Vq|@G>vD&=#)p3PqN~6_#RWw9gro(ag13g94z4zHUoRNb;w5${} z6Fb`kr+vXkZ|lw83G{2cw>^CmR?%Q-GSayrxcC!N@%rDkVLCm-Ck{VE`b$FT&O>;_ zi2+~Lmq9(3ediA;T4{}MNOBKS{jjgU^q^RLBhcdqv-Y0cUm6~J$limuRlMNSc+5^*QcxTJ;CptPzG1fq{9kz)d6cn`c<F@|8TDPve2uF1%GYHVT0+2oC`ifIh_=6cnW$KvMj zm^zfMfrW~@E?N3S6R`vi7@`y9ovGKY{Y8DhUR)$g`Fy^`#EV+cal?9e$7$-!Ig_A@ z;NkdXyH6`CTh6u|>77o!SGDJ8_hgHLr*1m-k;?2F{A0GFD{`Z>H!dc%#70|3$D-Dp zp(7MwSy_sc+tK8jz7TUkpgJ+@kb{Y=YJOoM%h)|kO1?EwXk%9W-n`c5*%38G9&ewt z{Y30u`QTu>y4+RL4rdm&?%G^HXe)P1XxR=jtwZtj`jb+_dru<}k4kB-Elu1@hSKWr z;srzS+tFy#$|V~w4SDUKj)znkPYl+1Em;13s_1v)1H{Un-U8d~A1dVmvi!{%+wl6& zN{hm`#R2K(_qTpf)ho6FM=x5A{M>evGC^Yc1*n#O=#Vc5x9?GI?&~Rsq8D*aXMee(yIbvf&a1oGR8sAn`RyXU z*HX4;uquIZb)p2uNV~{!~yC43|y9Ssl YY`CVJY1}vPoAR$Az%PW-;F}=*4^eiAX8-^I diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIteratorIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIteratorIcon.png.meta deleted file mode 100644 index 6f7c8a0f..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkIteratorIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 3c1366e1dc8fe0b46b4a6c8724194cdd -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkLogIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkLogIcon.png deleted file mode 100644 index 1a2254ca9d4e033d3e1bca91cd16c0920255ea72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NwKn7NslTUZ!cI6E2|8oIhUnz=Z+nL9cgTe_LM znVFiv^t$9Hm*%GCmB93-AoLpH)C)=qxdlL*T~doO%TiO^it=+6z+Se>#OW4uH=O1{ z^`_uv@Ox6)yhC3J-7}Y#o978H@ zy@|BuYc}9ft=VO`sgOZp*VgovS5}w2dwFZ=D+Xm|^91eID-(k_6dD%V|%}_2Cv?+_kYK zHNk(KKdvqO;q>cDS>OEmhfVYpy!Kd0nq|ea)veUrsO)vcyT(Fg^8Ku6?ipFRMKbr3 z+T2%mY&{}$^Ux=uhWeJnFN9tQX;>9V#4^P``roxKZC8CSPyWsqQR{k_IR5!5xlFf0 z*!AK`w`(CWqVvDTEHXcCUU495ZmL92wSQ$YlYJ_KL<8fG{S5Ui5)1}ziIyvbqx(Rm Nh^MQc%Q~loCIBr$n~MMd diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkLogIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkLogIcon.png.meta deleted file mode 100644 index 7e7619c8..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkLogIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: c97bee71424b3e247a161d1279643506 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnInterruptIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnInterruptIcon.png deleted file mode 100644 index e80fbf42db9ca6ef5876833c1acbbc057e1f9ca7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1146 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~Nvfn46ebn7W!-I9s|J8oIh!m>Ie{xmub!8Ce(` zIk{NC^t$9Hm*%GCmB93-AoQB!)C)=qxdlL*T~doO%TiO^it=+6z+Se>#O)RnoaRCG zrr>sqDNeomK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk*3Rec0)ScKou`XqNX4x; z*Y|QAG7w>X5O%~-yK`6lb`9qh?R?bK51x%&<7Csw^C)2QjM-)ddNNjD z+Vx-NUY-{9T50(!(V3zLS%iHI4!#Zhf1g`pX$;?N#psmwIriltp;N`)1PDLrSTjL& zlbc*@E@!iC7$j`t2 z?NhV+&R+QVN3iI_fmsK8ZEO6WG+hla-`l>Pk-2>C&FBML*~R3xw!7YbaNTSBhYZf( w^8VdMycwP0$^4(IXCyRnsv!uA*;U*I4AviQ^c{rTeuGK_Pgg&ebxsLQ06VsTvH$=8 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnInterruptIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnInterruptIcon.png.meta deleted file mode 100644 index cd95ec41..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnInterruptIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 10ed9753a0870c84889dc42a7de397a8 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnPhysicsCallbackIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnPhysicsCallbackIcon.png deleted file mode 100644 index 9a04dacc72e63a5191624bd74ec6a33a9c8ccc20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2410 zcmaJ@dpK148lIlYgQ)G2Tq@JJBsEv8$rz(y+^V65Ew;omvxdps_RM02WVbU&F+`D6 za_J(D&{pKM)lh15l_aT5Bt)?zp>jq$?eoX!tlRJMyzl$Hzwi70SgBilJax5AwGjw} zuD2JBp&r-GzM2~9?@HM(^VEY0>>ddF3D~d%6hR0oOArnry?I~+#DG9n?60>VG6FFl z#qke>1L>PdOaTuA&SEf9o>0w3AjmFKA;^q^U}QKH!Qnfj-qkmtkQ|mXYMTQcM;E$5 zksPl$5#$%=U5(AQ(hSd0f7jBy~o8)g`Itv)fn{@+$<6az_1a zDv-Vf=_U|CNC%7^nu){XkpO_f+dBXNejSp4!xOML^#h>s_9O>@L?9x+T_|-l5sOV? z&^*4yQm>p*kuWSIVX+d41S7G-2t*NByrZMztOkLARwK~jSUwC&(R{JRoB|CJGesOB z%n|UBvx;E2AR2Z?sh$3P1fKA_EMNRBP3nYUrJxXt$KYm0=8RG+U^pBW32-3d9Rc-?w|B+k-96S*sp}m*s8pgI(caFH zNSNc&1k7k2#E0j&tbe$~A980~fhSZ)ra>Z348-yf33$k_M<#K8?8W|vdf&LLAA525 zAs4GQgPkqxe-(OeOWi%Q)9-DoUVLwSh_CK;k-Dv|$5)+3AQnFNrcwQ+oo#us+@IYI zZ-fSSGHlUBuFq@^1(e#OYX3O9z+yku$f|I!X852!#~){EmcB^eVP5*$&V74=L-qr; zX1J*g?Y-{TH!d>L!`W1H7?tyQ1urZco^Gy~c>etLuB~xdSjqFQJjd5}k2${1kM({K zY2TV}>Dby*lJVj|a&q#_qe_KB(V_F<;6c|soNJ^JpoP_RNg8tTI)XM_6r=!D993DR zhUMgBWwTDGEqQIp6+U*DdVc`pq283p>=Ud@&vnm zP`2=`mL5OM8e3eE{Aaew+QU`ip1;7{?P!+fBSlTXXR%G(h9j%U>(Z81y!@;UTEE(s zl%Mo0U`8V2f;n3-{+6~Ij|oh=jhGusaVr`CjRX|;WY_I_MsAh7yf>DLijW%K)1AlL zVc-+d?!kzNpK?{b*^^)vE5DjlGf;E4 zbmtQLW@diz&FRJ?qbQXf`;_d|;w(RJo2?XnnJ{exJun&3a^FR^QMFPvangj6k_j6m zL}p#1Y3%Urx4qcaXcI@4Rq1uEEB3XDwo04CldOv_V1YI;`^+`#^a=yH0R^(lJ2Z9T zzLv#-%!$=nJu-8U1HQscr7?$sjPCW*9>cIekrQoXJ^<8eqOz5I%BGK9r^=5~&uC3- zy<}VwwtC6KnQbbflG8rTo-z(n28N{Z4m{Wmuxyt;-Oo*Y#}0G5vFv3TA74Mo%Xwo6 z-1MseHWg;iPikC)jj0Lpc@amV$6sL`_g%dK!fuS=nt3s<)AwhwN#d6l4)NNc_3mDZ*gGvp~0W@F-JMtzT|{F?Qf?Q&m? zrCEB6F3x}r+4S<-Q#zMlJT88=q4KKxrVHgJWntxpPTW-<6Di!wi@9auX`w?e3!7G! zGrvb#9kgcn_P~b_%FfCQyWEthsUv?z$#P2zewUB-ms?SXub&>omDU|gJVVFcdAvC3 zY*Y5p=E`%PZfL)dvFgK{r!v}>H>J>bG$bF$1}nT68RoCEYGSeq7kAg+)j}PY#v9um zZDzc)&MD~qO zcdy3#P2b!I{4TK2hE>xw@wH%7uuPm()89X8>oAmRQSds3@Q9szkK|dRBcDodTehJD zMbkNN(Hc|6Q@m{_`Wgz_z%h5Y#!DIGKf@M=#T=-B%=)d1z`w?%srtjL#=QuRUInE1aoW=PyR zgi#}nJJW0mDf!~godr(agcDH)CRWK=&j?<5eTRgWcEt3you9@6gZIos?7wotfmtvfHv9ME?e0UXa1Go0 EA51#^7XSbN diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnPhysicsCallbackIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnPhysicsCallbackIcon.png.meta deleted file mode 100644 index 19a69eef..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkOnPhysicsCallbackIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 06864c37115f11445b04701c616d0e14 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelIcon.png deleted file mode 100644 index 52387d94cbf0e2eb97f3dcb4b4706bd9ca7c6bde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1258 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~Nw~8k?J27`nJvI6DGE-PO&)(cHkr(#*iv&C$)x z$G&eP`1g19yq1P3sUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnrq$G!Lpb z1-DzAaq86vIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@iR=@gSJp%({oTrOpNX4x; zGdFr2aS(A;PgIp)65ABorLZGD@#*q6{5O6x9y@gGl-q`)`a}2fZkn|&BIFKo9eJ=*_eQ{U>tABleQd@XSh5A0Edxx?7O`%5dPpL(UcRAt z17mu^{>|-MuT@vhtKSx#p>Q$wnC(JYy+so2|-WcCGg2#X_AI+1>9?35cAgd41|v zxmnJOZyuf_WbM;wzq!Sv{k2XZdtbS2Vw+BG{J*88mfQFh!wfdFEN9sahG4p-Lnn|= zV^(BSWYVTcChI%1Rd2}}>`FNQxoUHZrNykm#`!!NGn&}f$uqJsEbsXELO_gN095*T My85}Sb4q9e0M<>k1poj5 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelIcon.png.meta deleted file mode 100644 index 2fb66869..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: f612c025389b22640b1b6df88f4502e7 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelSelectorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkParallelSelectorIcon.png deleted file mode 100644 index 95c7490cdaa670bc93e6aaeb7bc174ad362de5af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1433 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 a2N>r0C%oP=eK|X*nDcb?b6Mw<&;$Te1@>|P diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPerformInterruptionIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPerformInterruptionIcon.png.meta deleted file mode 100644 index 7da0c1f0..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPerformInterruptionIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 7c0aba0d8377aac48966d8e3f817a2a8 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPrioritySelectorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPrioritySelectorIcon.png deleted file mode 100644 index 93f5c62b608d14371ba7d281b92ffc8b4c3586dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1287 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NvfnYtOcnV6Ya8X7wr8oIhU8W#O)R%oaRCG zrr>sqF;2buK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk)(2-j{?5R_SncWJ7*cWT zO~l>aCI^Waz3UCSKin#|u<9~;O%U3^qT}d2LFk-VMVq+p!*$F%Zl0bs;q3NJ$4>uy z@m+N`Z(YMF8I@N=#4eal$&JX+{B`?<9rm|x#8(Q#bgBjxtlU;c;oq?aF!OLvPe4gK;> zI98s+_jFY9mV0tmUb8L!9SmXkVg9VO?BAsm8_u;g&P~rMPre$kHpzrXejcOtl&gWC z7D~SR9rtJXS>D46n{+mB-7{-K^O|F``R_AEC$7p>c_OgLj$3;9o1d!M%zT+4LbL~+^HKY<(KOnKV$Z!J;~juH%(%X8-cpgU1AP5Ys_{rYXL zm$rFb_Rze$Fy!P}z75{;Znc?->fw<|!gExv=rwtzWq+A=jmP@L;X=C-1*fQ6Gc)G; z-u^8Rv*^O6yv26O@@WTnW-uBju>CpKP|qsCV9hk;mdKI;Vst00kn* AzW@LL diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPrioritySelectorIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPrioritySelectorIcon.png.meta deleted file mode 100644 index 4c00f53c..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkPrioritySelectorIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: cea0f2b6cee06a742bb35dcc40202e8e -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRandomProbabilityIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRandomProbabilityIcon.png deleted file mode 100644 index 7a518bf78d350a510535e0c3f706c258ccc1f3ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1264 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~Nw~I2xLn8MwJv8kzt@-PO&}+{wV%(A3Dp&D7Y^ z*~9>**Cju>G&eP`1g19yq1P3sUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnrq$G!Lpb z1-DzAaq86vIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@iwqz&*<~7C?PZ!6Kid%0Y zFY-1S2rQkd`o-Vg=f*+Km_z*AjeZ>z(Rsk9q9S3}(-XMf)7OX9`@Pq~TWb0OUhDOb zzy7+;K+#1g=&@&lu8`dBrN5dt>9qIVWh^>ytmvHd1BM-Zm6oTC(&hFkoKVa1v1?V? z_9}`YjH{LPj`wYkc_scH3q0p$FHw+_j55U$!UcXUm*q>#n;?nJH zl8Ylsm~PLnQpr4}$@WynOm5k;t?TDJTKBHBx~hKrJsp#rOA9;?YgDf@(Xq*vTAFzM zIlo5roCS_qx#^coA`ct#{dbk| Xr%iivr2gvWgUTRJS3j3^P6{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NvfIhr~;nmCzS8X7wr8oIh!m>HNj85ubl85+2` z8M+w5^t$9Hm*%GCmB93-AoQBy)C)=qxdlL*T~doO%TiO^it=+6z+Se>#O)SioaRCG zrr>sq2~NHGK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk);|^stY=_g+~(=x7*cWT z&5VP+%?1LliCcL$sOI?1xhdqtxuhk4X^MkagU}-&=i!`S4aF%3>b#p%&L$ODuuR^n z+ReiMA?M#8#y|Vs@73MPpPzh|(K>6y^d{DVeykq*TU7L007q_@D zYfrl|i%Z+rR-R{G+W+P_|2doE5)u!wgt4#jTDa6}$*;_2xznPF+l;5&sc4KeS=RVZ zN{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NvfS{fNxngT<|(Ae3~(ACY-+1S<5!otwP#L?B& z$iNY%*Cju>G&eP`1g19yq1O?oUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnv1@G!Lpb z1-Dx)aO%|uIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@izVb&Un1O-uu&0Y-NX4x; zGd6l1c91wed4b5Ql;;l~TzT{$Al~7^(SyG89o{HMu(Pu-WHlFG`GaX~x3_i32UZcs z79X}L>vB&{Fmd(xJHMv&ym9VI5ucC0ANar1JAU{5yMN{GNqlU~$@2~wJ=0-{XkdjS zi<28CuymB|p8K(Oe|ltCevIwyZIc;gSPm|GUa8Jt=eA8S{J6>4ClO2r@(r==uL4A) znt5V3PAiZ}m+W_5ailBTYiG<5 zU#)*fo#%zd?6YRN*DB(g*DfeF&0!6=CZ!>GM!VTG>DAdY&z9uNJ=+i)CB%FoK9k|v z39ZFp5B$zr=`UdP=eb_WohT8PwJqQy+g!)%0ZXc9R9{vNxc5_eOYalAT&H(8mG=G) zT@tji{O$h^|J7R=V|f$nD}JnBbT#YkBbj|m7r$n+YK{9+EFtH2>}aEBbkCv}lAfi7 zSB}TZbTarYzx=%+FQKiubGQG$wVWFmxZ&u7J=;H#1cs}M6a6{!_xpp2I8RqUmvv4F FO#tJE9=kwYL}h!Ua{frQNDB8eoBvmitD;8wP{%h>a0Q(2?MHTwT!j!m2e>&|w}Tlp?F(ETmATgD_kLoC)D#)v|0z0?8Cb z`G12VF_@`YszfOw700vWusU4kkO?=awI~{ciHtI6W%67I!DT|(Dh(SyV!4RNsT6E{ zGEEGKwR}jaiYeAXtBRK=%8PU5Oa(rQgNrnki9n$tBN=2`5*QAU)M|%c@1^yK1p2QT zpOn@o7HJ`p1k%F=Iyst;tVNSxGGe91X5kaQWxr_)AWs>7lSSpvx11KPu!DosV6> zq@fICG>n2tY^+9)$TV_jQm+ctJAq~XA(qA0K{5o^CBkstWCbKBVFcDIVJ(ioijG^7 ztkNjpLVbuMJs-RkKswbrNFma}YTWzyvQ(eYF9fJ$23J64QW$(8YCV_E;BrL_K0v06 zL<|}qKY>;JKQSYr#*iGv@jt~fxrJ7sWBRf5(Z$E+fi!5x=+M^ifT))+80VH)0XNZb z_hv(G9ySTvogJ`VeJ*uaL-C$Et#b9$sxMye-1YCha|2_%A5G2KA4!cg`ov6kiQ1SR zV+#2CWi@^=&(*m(q(hJ=;rS|UmA6DQc}vvs>bRe3*ICw&{1)~6+lSvZSW2>gd2xNG z{YKL-)`oX`N*>?S_qJu8tOuK}s^cl6E#n}E!>QjJo>0xGJqqb`m%%3eenrSS;kUMgzNY;;@)e6OKXgBdr?%)3Pbt` zyZEqs>l9MC#8#e}642%{6iriN0&TwUf=b+O9`f&u9S$<@tRDIyKG3kE+4-UoV@UBk zMPFbHa7il7zq5Y;w#{jqUaZWz^FZHGIy?A9vL^reEZmB!u0+@4m~?%sn`KJbK=TEs z%RUEI_?-7Cb=DCtU%fSbh81gG(D=;{{VpSwL3XpfA-c7G%B!-)n|9t>E{w^W_Sd-X zC+)NM6fZpszF>($W%q9x+8*vM?e5D-9?rE}6`xmj!xn5^yS%-lyiYTS5-CbILNZ%ZoAs4Nio?Y7;|a4>hlyH9P$1tRR2SDC>O+cPT^L-?Xl@lsAC=?F^H`4zE%%V*7WEy<^&+Tw4 za@|wc)MP#MN(&x}wr^bh8UM_tMp1O%RRKsyUdi@!d$B#sdU$PIn?H8=#x!21 zDxtt9rICBG_EP`jgUmHjsUcKF+`fDFPeY?)Im)_44*w|J{UZjZcqx6sx3`$y74sl(o^Ceg`-{gl}+^J#?} z{uQyWe(U;~gmr$KJ62wKpz^VM7&ynD$lxE{PoCa$G2~d;(T+_af4}yyoPX~W(01Vr zxbl8oD=FXmd{@)_e;jYwz26>x>}Y!Xmu;SX4JGQNCg*2CEBZXYTj)RFVM;Yozx7IS z>Ron>Fa)eum25r$xJ?_XO`j9!`KxW~!!YyJgg0LbDUasaLiQ%UJ_+8@1ik(2{M8?0 z(=Io&tf{G~t53Ke`RZ=(7`d$5+7Wf6E}(I4a_OlyStf1%%`tnq@Mqe~E72Cx_5(HM zEq(V&?6|LxY`=GKS4*C&-JSDb>yGDFV(Nn2)1J2uN7!8cQgJh%@TBVzcbjj-y4njr zE8>4G>-F1t!mC#FCh6LF@?tX$G<%;Oz1!1m6ps_=&Q15WO@EfQk-9JEz+h^+?f0C% f7viUXc5=sTFy(bFRgQ%@{sv-&%LT`I8OHwrCGBhP diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRepeaterIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRepeaterIcon.png.meta deleted file mode 100644 index b47ad690..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkRepeaterIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: ceb6f3e7f67cde640b28b2a15ec13ffe -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnFailureIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnFailureIcon.png deleted file mode 100644 index 3b86ce3a1ba925d5a31b8e4a7809e772323370eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1558 zcmbVMdrT8|96yGFqBs>cDvNp^W}>5yySCTITG{m;(qRjfDj+_3v@`hGs& z_wC5Gu85CIjspN7-kd?$#5pbePKy!03+mQHiPJoR%olRmVj)2D41l@VA_g>j=@Q1q z(5}jj7a0QpL>GJP`9i*BrQXSUWpr3Z7W8r=8UPIGL5_BoG6Gn{lz4nb=;04t5a@9k zp**!kVc~Gb?a8R(ncOO?-C0%Y)VZMa<)9&`7YV$KK!ZVVna{5e8liDsy|@k^%OP-F zL?|^v6Gr7*vO%2X8Bi@#N}UQA22oT7tJEk8r-6t9M&t@{pi)?+SEG7F15Q4WsEv0O z>um%zsY~1$A-5oKdbvCh2*?6T8OxW*VVzDF=0FgsC?WM%`UE;C_4!jG3Yc>GFU9I{o}mSnx3g?nqyn96W$UG z@2Oy16wi9W@%ZXJFVIgaREQQM5S>zslcMz)s>Lu$iz^V6qO@upn#8*PPt4?^G4gP6 z{HItVM`8trm(NRI+&pg{#wT_RFSbVD(bZM}c!e?(m_7LGNN-nW&pVQsfy|a=iJ66W zY^m*AGgicENY3_E#ywDY?dLA@{!im(VHkJy!sWKw;ei21W?N?a$2Z@-zTwQ09f`?( zmj7kj zyiy)=k6p5>nyCHO5A8=*&7C&on)WnxV0K}>VaZd;#`^B}+%4a}v5R_Gx0^e118TP| zJ=W2&>*UVvn!nFgM<)(Sn^!)lGqr7MYFyPsojTm!&@f-BBckA*+IB`E86M=HboBd< zPm6wB6=GtK7LH18Cezn`ueckvJ|SjSOl{I3>zk_P?G@+Oq^yJ*>gVjdVBJ=8tYox4 z;aN)4ne^LSZ^q)em8Y*fgt{wevh@0i4M};cQWosFo3qb!P#vpk2HJ)T&&L+|P3Z>Z z%%r_jL(2!>m!&YZaHS|n$t-qv_zdsO$#0Pa!bj`FQ&eIIlmD@ zZ>!0!llEnw(EaeE>Wl(OL2+m?GFrT_eBEaL(IT?CuyG=>j=aI#Em6SnzS!lxnw+xm NpV~}XiB6Ma>pz2)H;@1T diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnFailureIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnFailureIcon.png.meta deleted file mode 100644 index 81b783a1..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnFailureIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 667a475ceee05824188a36b24ec8d392 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnSuccessIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnSuccessIcon.png deleted file mode 100644 index b76cec74c0ded88ba0e95360e7369aaf9e366adc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1468 zcmbVMZA=qq96y90A-uSWlNp4|;oL;pdue-IPb!vP3k|{;G^5~*9PI%Y+Piu^Y$0(% zWdkAV91iD9=5SeNqEjSJ6aqsSVN?0Nc7MyILQrriZ?VeO?CrEobShcDjMD3L0W<`qrg>egt%8%`60VFFbjZD~uMn8G z>yQFXHkR!&aOHevwZ!FD=U8mj6*jFMN!tpidTBu5WYH*Vb}noXB@WgoRSFx1<1k4oakYjd@no35a011^AQiZp){r!j0xvxX&?ebS z={&}?qzmkHNVzP#XcYB$JW7vBDN1E1uGMP&90Z{N5(;;fAhTYD;7$xMFr3>a@h+Jc z1=!EXmWY+I4gr=fy5MwWXD<^A?xjG1kfC1Ih2lyKbvpfiEl9iNJnmmJo+<6NRJk}b zk8_Kak`3geG%)}Mv3tHEzaX%NeqG{0QdkEg+A5u#Ae$K-0&bLc-cDmAm7bzD5JpCe z8C5u*ZlLh=bSj0=ka{Y`qzZ663rmogN@c)s%AhsjxY3l3;|2<2FcU+l^eJjQfHezl znH6kYKravUE@83fVrhfKv9c&xM9~qbfZTFX7Tx8d3pV7F@M{IUU>7~^P5$&OddqMU zzlXD%B+&^k#Fyruq2Gw92};ipS`}q50_*i8rPrG%14fW06QwaAOIZ8=i5UuvLH)(? zpJE9dfeQ35mrEaPmYatYK*va+HA2V@Ne~n?XJ+&k@6U517jpWx#jc#+tf+mlHTb}4 zbIL^dt*n{p@tKcFvAZCdLk59Vi^@UFpIOIf|{ttHNU*pWGB0>3J*bykc7U zXhq1(lly=E-ZRS&-#&Ua|N0S4MfllXFrG#@+InK6>c4)FdWtVXR>icfA6Ab=^v@%; zU873=%c2d(vL-iD(5{%KfwEsNML&4-_|@6^b!XHbdi@QdqZ!)L5V}`&e0yeVuJ=~! zaD0E-h#2wye)jU1gG|Wy^vDOAd2}wdbL`%|$k6?x$+c@s%KH1-lRGR)-E|+yJbQhr zeaD%bcfPrJ@|_6P1^GVOzcI43B)DzI7jIq}!NwJxA=mm&U1^}de>?88<9i-9Ue1_l zZwuQsSu$i^dvx;AcZYlhzcvjX_p0jTBrpAj8tGh#O6N$bS zALqMZ`|GqNDeAYdn);S^Ip2}Oge{+Mt~sxLy0fmOaVn=1?mBjLFm$Ev@6iK}v*r9t z`UIG?+xlao8mA)D_6z1M!w8$JI4h$lgXU)IkNf=pQ?oILIhS7S`v>~(8q)v( diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnSuccessIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnSuccessIcon.png.meta deleted file mode 100644 index f11e8a6a..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkReturnSuccessIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 66f47acff1d46f848bc8c22b221ee1d0 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSelectorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSelectorIcon.png deleted file mode 100644 index da25d92cffa902f276cd55dd52100eee918d5fd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1598 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2c=CsU^h>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR^Z`oay)D~1LXFv#>P5)1SV^$hfLb3y(Bt1d1HN<}yWtLoyA%7Rq=pw#00 z(xPNwe55JEGy}s9zeOO0K-XCL7i9t?B{9b(Ke;qFHLt|e#a0O@qnDDIVr5`v;bd;& zY~<=M zGh=5n16L;_R|A+{&%EN2#JuEGn7x@md!c$w@ana4E=o--$uA1Y&(DFSfPjqrlKkR~ z`~n5%U^4}c@XWlF{PJQ=Q1n22>ylcOS(cjOR+OKs01jWPOf2@h8kiVaIJy{F8e2HK z0$uNDX5r}QX5nmLWaj2(Vd|^|)tf?2nCSx@qYp|PNQng|1WbV-COqi_Iq=Mrng`4= zMZm1F`|K-S1_q`)PZ!6Kid%1H+ImPQN*sT$JpDnqkf=zDfMSORS8J2U%8o_N%}TMZ zyFzsMwmEN&m67#YsC#8$cXB2>>;Ax!0zsF9evd9_UbrNpsHHf4#uvSR{Pz@X@5y}B zD(^4g|Kp)o{@(U~wf(&6dFDwA0|eep_B>>3?7u<%hVYvWKi@r4TXsQXbKix=w0&VB zuH~%9AAfvSV|SllvA^I3lT-s!(F1-9=G_VG{L6m*ty2{0ydkD{tF|y@^UY~4N`}i< zz0%;zK9y0#7GK=xkYFj+eN!x_ns0f~%H;_%ec3$EQ!lVhJ8g^b)RIfo4j_{rYynCebZ*0E33Wz z?qPz#j`Nk7GkoEq%ZJrZ_DvYRhje*9UZwKZmu@SaDUeC>zluT-^{P2g>@ z-1}Qsgex~#=nnfg2jk~=7@xf>_Iml0;RZwRoMJa76P|S|IP#d{9aNv+Q4+3p)NGue zwsPssdrj#NW(6Hp{OBYRU6HRb&Eu+S)pzErv;3Z`SRMQ5zpCl-1M}zi-l}v5Oq2F6 zNP5q|s)_gaxdrjh#3Q98SV|v=tdahz6?$;8j#h}s-!hhY4e?jRVzna-Iz=N^n)n-f z*=&(mn-`WiK`6)c$#XH$ZJ(QZWyEC~M8DlVWBoaQot{i2 zAIu;Aa4L!-n|~aFIuXPlqB4h~pdbjcDS{w~;0qDmKm~7RJN;n|H|IY1zVDoK&$&mM zo9ar7mlYEPQ7YF;v1T#? z9YFGQz^D0HmJ|eguP-AHnNmSg;Q2tKw_8~j{!YQP zXJjomcTM=hn5=3uEbaGF$^&Du|3gi42JNCa_!I9xh22EA4VXA^VV9%f!X;OEu52;l z02M(e0pYIvEjFhhf^G`hWTZtP*R>j!4m0lhX?!du%9e{%O9QeLqObyO7`n)Fd^B3i z@tY%Ij%A~@VUA~mLNFZQ1OA$@6v%TWsCAjZLV2$Khbt81daYpE*s}y2V-L`49cYr% zDT_woSONw0a$LP|ER_Yh3=W3z3j0@~^GCRQyyZ;W;>}Fs0}FS%gWLMWOYj{(i3hS2 zPGq0IA1^K5N0t=562yVY>iwCvC36>+U%&NrHe4V}z5O5Mj^xw9t;2&AqjMHD`myYp Kq$@Q$`+fl*400m? diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSendEventIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSendEventIcon.png.meta deleted file mode 100644 index 37f00457..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSendEventIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: bde76446ddfbd234488e8d591bc75e2f -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSequenceIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkSequenceIcon.png deleted file mode 100644 index ee09a93e7394c7144a9da7d39296670898f7420b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1207 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~Nw~nHrg!IU74$8X7wq8oIhUI$Joox*0l}yIL3- zJDIw`^t$9Hm*%GCmB93-AoRN6)C)=qxdlL*T~doO%TiO^it=+6z+Se>#O)SGoaRCG zrr>sq6HdMQK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk*39w++Zh-bwLM)NLn>~) znXxhJP=H8VakHv``R=xJoU*@oYCHBdK2Y8wYh~dvy^l|?mht79X6JNAfh7}kFPuv| zG2sr2;zxdsBLO+v=RBx?&|Lk1@4o8yIfr|-x(;Oo&u}~4bVy{GL93=uB3JN?Lz5O? z-r^w9w%4L>Yv!z9ckGTArf{fx7RkF_+<0 z#W`DngDrEGU)J?SJ^2Pq?-j%^x9gt%bulVDI-KX&1KymYynI(KgsT2!aQ>iLc4_LN z%6a)4bl8u-S%2{2jt#lD=TDfIY@zahmBYX2#c-#KEc?L9{hn2VK{nmzevlY*HmE4^ MboFyt=akR{0F3gVeE{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NwK8dzGIx;U9yI6DGE-PO&)(Zt-<#Kg?Z*wx6w z!qEt(*Cju>G&eP`1g19yq1OzjUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnqfYG!Lpb z1-DyFaO%|uIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@i{u8yrh=GC8+0(@_q~g|_ zX^vip9VFb0T}AGsO>C7@P_%v@xV!kFXvs^?l7%>ol*D?`o{Ia(K2td1^VujP2< z_wLUJDWAZZYCm*WZ(!%&z^!e}ZGBE^&LQ0|IchbpA6oQDn6eFi=N#M>+WNnE`i3(`Zw{EvIbgVF>()bGt1Y^e9`C3>{j-5l=3w#C4|9TdzPP3I zC!&Kddwa{{JqHpmGQBtcx?yo_(w0}}yU%}qJzs2YbA)`|ocBVLA3xo4=h&B5GWwGC mZtNAD-Z1YybUnG8ftlf%^8(olpOj6YBF59z&t;ucLK6Uio3Z2o diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStackedActionIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStackedActionIcon.png.meta deleted file mode 100644 index cfbdbf9d..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStackedActionIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: dacf20a036b1f5e41886d84ac4a47779 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStackedConditionalIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStackedConditionalIcon.png deleted file mode 100644 index a9df3146bd9993800672077d95c301ce2e474897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1289 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 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStartIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStartIcon.png.meta deleted file mode 100644 index 38313f06..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkStartIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 8c35407905159694e8b83df15d3b039b -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUntilFailureIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUntilFailureIcon.png deleted file mode 100644 index 8a1da43906f9e41b4fdeda82a91270d7001ca78d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2406 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 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUntilSuccessIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUntilSuccessIcon.png.meta deleted file mode 100644 index 9b3eff79..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUntilSuccessIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: f2e750025a5812640919385b75319d6f -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUtilitySelectorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUtilitySelectorIcon.png deleted file mode 100644 index 8a7a0deb3ef74f23c8e1899cd20925947756bf78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmV-Y0_fW9g~_690gM5hhU` zs*bQhPqdd*B~*IUergh7Cffm38FSPhO(V>7m82`KeGAIx;Dkv~f>|NEa?2O!r%kcM zE9&i~i$pc2iv2rjieM&}SA1?3onml?6HEdI_}oRst%dk=K?!RCyIVIAeZJ0LU=&*L z1glw{Id&J6F#I^EqATKu?E@PHA)E*yswQFi+`|Qr>iAdqc<;lo~wiyI$!8^MIU+b=f7uf799aq@QHWO(X(mi7C9ed2MhbDv9gz&}_T^&n! zdF9;_7|~qT*eW^)#y|!ye|ob7c2^~641FY$|N7TQ0aK(?_JoC4g$})n)%_yp+aRH} z6O5A_Ep}|Wsu@mmQ~WHe?9sZil9fo^S>*g)VlT`>`V8Z21c`lxQ^{ay3IG5A diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUtilitySelectorIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUtilitySelectorIcon.png.meta deleted file mode 100644 index 1b4d07ed..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkUtilitySelectorIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 9d36cd363c3e08246a6e9eaf5ad99d69 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkWaitIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkWaitIcon.png deleted file mode 100644 index 6ad623f082756ffb736a9d24c0c01b8e1ba81241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1852 zcmbVNX;2eq7!E;Dgjl4Yf>>f0L=ci}ASVf!WCH{UHxh7ALb8EKl8u{1B9s{qsG{iT z4~wXHAn1s4i2{~#qzGz?A|7~aR1mRtP_eWfP`gpE{o(kdJG=WG`##U}e(y0`92*@* znC&(jhrZhtA;8n8c}zgsCA4 zB_|#XozlWqJW>{l>NpfiZf-6)H-HQynG}G{W?MLDG=I#(U%y_9$_)Nmz2`Io2&6$Y z^@;0s5G5Yc!#Ri?%ZJi)8jQv6>p~Vo%o|P&qQa6QQ-iQPM+0e5F~}ofU&soTfhWqX2B?|&w_PCVFH7=G+Cup zz`1%KOL{(?7K9MhI!F=nN4JWDD4s=K#PGu>~MNr3r-~iw1xq z(iB$le_}?#oS|5X<3GhRy@gevW%{}FvBl@+fwWl1AXsZCtw)=&j#G<4exl*-%QA^N zD$e=BBL|c8%=y5%3oE-8%qVv83a+qoGHnY#8o!Si$9LOtqq-uPxo>Nw-x(J*C=CxZ z;?wAY>dhsN^U_Mv9X;qJAH?q^wWT8yEn^Q)iVqBy28}&?kpF(PEx#{lIC^R6uddyS zqiybfWl<50^LvMnFwH1w_g|ASvwtYZ&y2bNPKMUG7xL!)ytuEStUcN;ctzU8-r?KL zf}Zo}n?L6C=?rS{IOuvCe`Pbp9CUHFhk02`r{1LQ+4uCgnN{SlAu>H^FTQ7^qpSUr z&76Y)ox!iUPtR`hHlMx~m%+`lA{=}F&Kzv8qM06)ikfHi+RokfX!ey2UEkxw_}@;b zl^thS&HC|g1EF{5<0N)=Z!M?LfWtOMF#&h?JlmvMb8&OsT)e4Zk>ftWnx;&o;0- zalTrKH=3OvST7Qn|Tf=ADGJByT%=}t`oA? zuBy2$y0WsaX0v?zyJr;xJG&$YhMfp*1-)(yM?6mzGH-42daHhtX_uz*usJ@`b+|8n zk?}Xz=Y*b=j+*i#eu77}Hk8bX8^%bZedKG6Pm>_*6~2jQwPHCh;@W8HtH7o{yfb$& z`=_1e;(6k8tH(F~UU)d7a&FDOp*7wqX*ET>!N|^R15NGa z?#nJWEUK#4BE_rfo!|QCN4=W&`nvbrSuyUKYF}{QN+kYc@d>B9Vpmc^%? zdaV=60*l*b!bVTsmhFB|lk-My(C&AS(D3yYk!E4{ct~3RgU25>y=w}=JK$DScQ^Pi R;N)BWXJSz_SSv{1^bf=y+d=>U diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkWaitIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkWaitIcon.png.meta deleted file mode 100644 index cebcd00d..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/DarkWaitIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: b4b59e888607422409f1efa599af34ae -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightActionIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightActionIcon.png deleted file mode 100644 index 7e4184b60747e4237d21982d875afaa1335baeec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1404 zcmbVMeM}o=94;Rr8wNkZ+{WkILAyDMfxi^~(MPdB~9HDyf3^N?}HT3MYxiUY;(hTXjUkayqvpAs&W>S9zLLEVm9hXAS9y|3UhuW#CYnVgw(=1E@(j) z&U}L+9BV-<^-hg5WQRU(UyA@MT1woWmU@qgMe}zf<_IYh1fawqk$^uak`W8K!b{5Y z*fxeDD<)FC1zmNj%2|fkc>yANwN~ZP0DusL8tC){0h9=?0XU|SZ$brhq@Eyg1G09Z zvYNnpNf%YHrX{Z|s85nYB!-2}L9S6&?d$3Tx9Fzr>zo=P`B{hW6X3*Jj znlfoF3^xdXl#JCi{Qi(a^p#?^LgM zn`Lm+_3~diw9=6a3}n-=EWbc|({9XOzg^ZE2X(nA~d-_p&X7+y1MMLk+cwvzrU9xa)$_ljF=?9dzc7Gk4q3 zhmbHxqNhkmh#;uIhae)5qO9m83=AO%sa}G>EQ~pk62*IY+YR70{`$dIw!{`T)9|CX6ERb)7V zVThutX(c;|2U9(~gjAPkV_cT16E;PKx-4Ck#vlg6a759<^yZ@_8Yps@9`L2yDLn>9 zmF_76_D}U@rKvF~DAQe?AY}1GK!sQYmO8GPycMR4x;&ZN+YAkg5Ih#9x04!7^??{N zAn>_7PRY%(!0&glUZ3C3wgb-1a*Uh2ekbeYeSV(n06Py&q8W0I&j^W~SY#EZM={oU zhA9*Zu7byfj1h(n27|T+$2keYX-;Zbw49phC@Bcglnh133eteBC=R1M4$~yl?IWmq zSynT5%0vprSfb9bF1LN85-^qeKU7uAXcK4PZodB%HnWpDWHQi1c|#(N%Q@^&Iv+Ej zh>?*+XuMR#zEOmcIf`@;>-U4>1Bxc2f_b8dPo?;zW@1s3U{VOvM8TyfG9Qb26A@3q z8;C_XmW?L@(Lf{-^>z5XZXq7vU6{eaEgPg-F&~ z`|>tjHw_NP)5lhCE&kqGJlxe*vm|uiKec|KC(_sQna$o@$lc*z9z~Y@8_GZUwM9YZpD#)J@Gvezx`sN_1D6l`m(ZhTBfaX6@Y12lmBH#(Rak I(V_Ey0P}2HEdT%j diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCompositeIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCompositeIcon.png.meta deleted file mode 100644 index 93ff04ba..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCompositeIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 7fb12c74939f50b41b1679eb8f9e79ab -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalEvaluator.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalEvaluator.png deleted file mode 100644 index 28b0af74f4417da451bd9375a3b79f1c98449c17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2020 zcmaJ?c~}#78V&*yE{`=>T8@qpU2sD}AcV|74#BFiR%=C5jzUVyqHB?Qq7q?CC81c0Rez*S3? za3(BOl&JI(Qh5=K0Ww&r(y+<*JHI3Y zDg~RI6U~d@p~-N8Ds6)n&f35i$u|_qK?ON}B@kzXZ~--pNdcp}SfhiCZ1M|T2%kH* zX=LC91S?{be@jZt69CDG76ziJQQ`6kIvrp#sdPp(lS!ulkrDJrS_J+w!|4ntnh8b5 z052ah9!;yrhcY>-FJs{=Hn{-9P>4n|7z|WH6cy1bX>5Kvg*2%Rh6jLD@z^N#eAte}_jA#1W5!C1_S&i;xnec+qj8c?Fr$#uBGy~-E{y$W$ zeudUynegxV{!d|@s1${1nXnEi(aQ10Dtt!n= zNILi3VU_t~Ti4tB!V69A+yz|Nv_#gLuvzFP%w5P?5dPl6kj%v6q}LMzY<7?F#a{aekzm!gjL z=coSgBjVxd>G@nwUwrubwQGU>pW7w|LN-fWC*4m0+b-32zc#V(=|gRq&(Tq6-oYUV z+q|T8{;^sKGtDJAfk7NePaBO9cm!8yQP*ofTWAx+tXiL7tXe`0sw@l=`%H&z45{PJ z=}TDZeb0AnTal&2Z79-{Si@=YD<2wxQgq&-uFDR1S>+#&MJ~v2sg;BgA8Rj!23d&LN%fn442-QZrR;a}Fe*gfv)jD} z#my%VGQ7>)gu5F>ISKwT*WZmcmb4XbXdhTZz(WNOkjV6UId zoNH^k1AGuTMmZQ)E#dS(+Rcey<*izHRcK@}X?9E%p%Z`YHG8i*?@fHpK>- zzIdPFlb!Q6b9+E&{z^qwfqVaw))il6MS*CXzsGWyZAnXAc&U~Nt5>X0W@;XCbe+lb z``01u*vX^E)~|`KN-rEgi#)RE#XUUI53fyxm2_O%DxP#?ua@uoZr)(p5A056MmM{B zXZmICUzO|TE2|x*?#0z@k|zw$r#9E?#+Bw}(w2i!ZEZP0gx$SIkIbq2EW2WUSL(jI z2Ev>1XM5@^7|oqZIaT_8eMSDCx_#qLZ@Fo61^ZOh!OM5V=Xt)<*P5O+T7da) zscM_nQjQA;YVT0q;oIvPpZ)VA-$Q$rudNksb(NP#2nC`v((YsY=>E5e@=HGDJr@=| z*9};InONQ~GTzZXb)YrE^<~6&Z@p!I^7o5*cDho&+Pe0_Gt=0v-p=v(sPOg^tJm87 zE~oij9j>X@JFKL8zCmEm1L#NsBWRLky*Q_9d;h9C)>hW}+~5 zmO*d8qJXoU)5L!~3<@E(eA>M}_*l!v=|!WZ0c-krp&B3{k5;EY;MmVh{YG$WVLI5+ zWA9QM_2xrXH%(kk;mHDW8Fen*C1U8O1`r|-@^96;^V_C^uMF`nHkV)JF4*s=vVm5^ zP{?5Dqn6aELCmtZSUKwdEhmaS`QCB%?OzhFxSMm7Xag_i#5a1W5$nBGBMlXlzkHQn9X_D<>1^@=>XJrQ<&^DUUHOn}oioWh z^tFcB`yggsx-dmNW n^k7o={w2E~u0w%7#APnw+yl5X)@*p>ymz@Ne9osylJfrmI1(jA diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalEvaluator.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalEvaluator.png.meta deleted file mode 100644 index ad355f7e..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalEvaluator.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 3d3c18273075b3f40b6c921943f33964 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalIcon.png deleted file mode 100644 index 9cf68ab0de0487ce098b09d4edad173bcddef528..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1052 zcmaJ=U1-x#7|jrdZtWga&?#ul9(1xMO}k`kT%B#xx`G+AEvy?1mL<1q*peHQJKOGM z-4J09!lw8$VZONsQ4xF*M0^wxggrP=6dWQdlQ{%M(4jZo+WBA&N$wBlobS8eckXmg z_epo%zB+;+-0?0kfyWl-+g^+R2hR1^;Gq#k(amg)>h< z2SIG3v{V|UrBi|eby{{XbY3?xn;<$m^QNqf07MRfVa*6qUmiZDNKFk=y`1Eg%m~P8 zUE>x=j(4Y&@ew7UQk}=ij=X>cbbw?sua6qGkPlKNT>;OXZH6LC5Hu2`Hj+w9J!Ax0 zfaGYuNAa>O$@4VZ%JDqgLi)U{kMZJ{_pq%3#|yqTa`T~ZG)v702{E=A3$KDy79mq$ zm|QML=lnFZh8Z>x2sj!(p9dp6cELb$-ecHJWd#w~ilv!Ig9hm+%0qAr1u2~A#u0S0 zB5T;2Wx@qx^0LXWwAVRO87N8rhw6F-ZKDL(%J-kbcB)_kCIM_XW+}LFnIA*l`uDZqbRpmNX&`lg!1eSIds4)xbWa-F) zRyCK_SXI4Eu39}8Z&faXlVP03{?+L67Iu#_t=JYXD#ix}cDsdb{o(zt7x+rd#Kll5 z|LXJH>AE86I>8CgRwr%@WWFu-0)A=dvinzk;r63X_pbNNHDB@d5w5l7rH{4L*YC-z zZ*KKB?#}QNamjao8WBwcQ`dgZPhKS2Z=OH)gl=pYelYg#;QF4KhPRW4 z=L-wQLZ&$ToY|eU_x{KR??m0(Tx$a>%P;E(i@z^O#TsJ$(0;8DUSXa48jp61cf*5I Fe*kQdSA_ro diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalIcon.png.meta deleted file mode 100644 index 0b2e4c2f..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightConditionalIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 2963cf3eb0c036449829254b2074c4c3 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCooldownIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCooldownIcon.png deleted file mode 100644 index e668755894c81883660a89520cd176c9f2f12173..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2188 zcmbVOc~ld39uF0QQr(JJL_tVH5ojSN3CXMhbCv)Rl28&4#2fyMOrl$Nt{T{I2ik^S$4jg2=Vs zEOJ=kfI^`b@k2NwWcIVZ^U=uHJ#W1YGA)O>QdkVd!D%ubh+--sIf&t_W$~a0lqu6w zE`qC3sCjX!C@CxzgaZmljgwhra0ay&L8DNsgAH1lA_;^saxh+{VPKzjbYU?nB?Bv= z2nYf#8%$7zWavO~#@Z-FMv{WA#0CdpRvQ3>Kn=n&j6t2O(E|ns_AM`ftgXj*Eat5U zoW#JsGfFCm#IPY9h@s%f{t5z-h@nz(!~hDFO7z2!2t*Q|fIL)xVgNv)0;E99`+-HY z>6CGRh{JoY3)wNS2{5b$@c6W}G+Y`P2kGMRL^_>r zSLjq)SOsY?Rz{f|N`)C%#L{;zsI>yY2V#x>eV~w#;SDk^o`@sh)oQC>Z>9CH2>jiQ zk4o#K(zPI71nQwwodU^6oaY=EiQOM7vI-*B01-MBk`!4o2U4V}K@H63FtErCPN`A? z1S*Xc7{DfRIdlS-OeC_{G$M;d3nWpfOj;n1Jjd}dY#^D;WwF?F8k^1~61hAUm&c7O(kDP#3|maa z_()V5C6uQ3wWjBtw;WKX+5#$hI!KLq8(%>65&c|30Ex!rkmzI@o692-nN%8+$)m9e zBr4(rg^hiWRsKIQ!z0Gvt;O*_#WHthvoq_NXO`q)_7F?Y6yk0?c{Tq zQHCK)nL0r%arx=0Aokj-?Ea|XT^ADvMKO{|^hu28s85a4pvb2>XK@+!e)RIxmB2}+ z{o$UXU8ga_+xx0=q>I+q3&ZNi?a%M{+m7feCHZiJb4RF8l2g)tc=m_PhLM<3!_&T^ z@6GeNP6oEoe>tc>@S?LKWME)GPA%hJChbo(iYL;^r^FEvyInjymN{RV4eGFsHZCPB z%e^Q+YrcFrT-I`X(0K93nf-CU+SNJ)n8@Z0T40FteN7ER?C~cP)Q$Jk ztfBBBli2JcoxYq!%P)4#YG^-cl60?VwDB9inY8Uwi|zIj-_SzSC9|Tj!fxzdrv5B* zir<{yn%kYW*{&lm`CwD7x7zK@rw_aL?YJ3ax1ofQk~RNKFbl0*iiB4~B zFKXx~H=bTwBA{S_OPEC7N%DF$zUT5@FMTQg>6)m9O ziTtT5#O;)DuLSa#j9iU(*=IHyKM_hK-aZyi0&BOHI1$--_t3WMUzPKFN;p?L;@3Nc zM#sb))3EB+)hO20Kx3?`QC-}J(e33^wenHdLHcmomnx z4p^blBgO06bL$F*4rTPtCd7vdy|3_{h`P{tE`hURZuH`haHXHv7Sj>q^ diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCooldownIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCooldownIcon.png.meta deleted file mode 100644 index 7ebfeb37..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightCooldownIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 480c79a18119d2a488b5d984211463f1 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightDecoratorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightDecoratorIcon.png deleted file mode 100644 index 4641a4e98789dd34b5ed07b44fb37b37e000d6df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1199 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NvfnwgtB8yg#1I6E2}8oIh!7@3&4x>y<;J3AUW znpwEP^t$9Hm*%GCmB93-AoLpH)C)=qxdlL*T~doO%TiO^it=+6z+Se>#OW3zH=O1{ z^`_uv@OxETl(ytg87?nL;978H@ zy_tERx5+@@m~O|ztD+SNjA0i9=Nz0Fb5Js-k+tFlm)*|=E53UCYFM(7on_~%a!+S3 zug{NvyyIWcW7s`GCyFJFVcxB2$>t|M&)GdiR3|i4(}U>%1Dinuqt5b6UpGv(y*BsM zwRN*Lsyvt#I8A<%YT}N+tWA6eoSXWTwyj<-%zE_O^-H%}-JF!?y*gR9>%*IwyLGl6 zIJNnmU2D7afl~hm$L8_yD|_=yJ+j8poW+7m*E`0U+3)$44c|PQy1XCVwBP95)1H5( z^p&(6pWfQc^D=j(yrYx%9k90Abx$g9|K-22_Inl|K4|8k+G|_6SY%~lQ?5e)+Pt+J ziZ?ojTbxTRQJxv{;8NgC6Hlk^vqDeK_FgSe^E}LDFUI&MPoI&EVL!iTj{)COGf)xY M>FVdQ&MBb@0Q&8n0RR91 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightDecoratorIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightDecoratorIcon.png.meta deleted file mode 100644 index cb4250cf..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightDecoratorIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 1ee7d6a0873e3d942b556d3093d8173f -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightEventIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightEventIcon.png deleted file mode 100644 index 4988c53c611eaf3bf4d87273236aa8153e903d5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1505 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NxVxH-8vyP7*&8k#s68oIhUnwXnfn3$M38kn0I zyPBE9^t$9Hm*%GCmB93-AoRN6)C)=qxdlL*T~doO%TiO^it=+6z+Se>#O)SGoaRCG zrr>sq6HdMQK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk)+>LjEMZ_^3iWhx45_&F zX69M%kU)_G_q%mAxH_@y3SQC~<&x0S==8s7M@YcS<_y8U)Fx^7f|th~1UluFQyl|e zN3pT3joP9qrOGNEq%>>xofEIiA95UDeeQ+L^HTXe-1h6<_wD(4cINMMJHPkIvowk? zFFVv7>D?mya0mDNE8;6dvU=7DuafzAyJ2RH-TZsPi7CbxD_5s|K5v%>kjW^19xy5*=A-%w}ckQfp-g_-^-ZD<#cw)tS4v0zo6leeQ+q8mf`qdk= zRxVk3YMRi)*#=sRmb=`!?Y@g~*@G_8o9!QrP8~{oc5lxvJN>Qu&UU?7qWW99imOIC zRrnv%_J^~jtl19-?Obz`TmZ- zF643k;@wvHtQ~Bxu6~uT;IUK}v-hZ9w40gx_nw>-`I9ka>08w%nq9JATXZ{`@8)Bz zv+@tcbPk(+@s`y4uV%7ji)U{7L+6y;&nD#RSx(nb+Owo=m7mGeOR!D< zQ}e_vp&nvi*ZpWP^Kd)$Mkq|(KG0={x2L%Ef^)AX%iF(c{3ggBK VDOmHZFBVkjdb;|#taD0e0sxt_InDq8 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightEventIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightEventIcon.png.meta deleted file mode 100644 index 0b8eb5b2..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightEventIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: b1382ad24c668174c9a6e0bd00f229e3 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightHasReceivedEventIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightHasReceivedEventIcon.png deleted file mode 100644 index c71ebf470648befb9a39b2cf1b87bae9193834e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1158 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~Nw~8yPzrxS2UxI6E2{8oIh!7@C?n8<<--n;RLr zSy(v2^t$9Hm*%GCmB93-AoM!n)C)=qxdlL*T~doO%TiO^it=+6z+Se>#O)RfoaRCG zrr>sqB~HEiK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk)?XdpnF6!KFHaZ8kcwMx zW+d`88*sF?zR|h&-)8Tb+4eD;bZw``fXP8zrd>66c^40SAzJ;;=>DuXsmW0maJ(?Ce<52J- z=Cz?SmWjkJ4{#Himz=F>FQaLHR+Ha8a&~~{(eCO!0T0Zxn-{niHKw^ocnW8=rE#x$ zVDMy~oD9S2LT)bBvZlWc*XCXG_|1OrCxblyAAY--1FT^5_@hVygNA%(x$*LZo1l`x M)78&qol`;+0L|cqZU6uP diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightHasReceivedEventIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightHasReceivedEventIcon.png.meta deleted file mode 100644 index 984ae17d..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightHasReceivedEventIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 69959064b54a0cb4cb077dbb6967a3e1 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIdleIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIdleIcon.png deleted file mode 100644 index 7ec001850c28a09a7841f96493148cbf8bd520b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1631 zcmaJ>c~BE)9F02l2%rKg5)s!GQ6kA^0|}B6nUF(b4F$px9RFaGEXjh&hU`KDt<$N4 zN+4sQ;{jg93LcdaQ7i}o4xm*OEpkYicv5kuv{)@ri$%IY!2VIXv%B9h@4esgz4>g> zQJdZ93_6WQbCX9(VyQ9E`OTk8{e5$`&7uZxQmP`AcnWDj%qUHy#nmVvHy}DR7DcpK z>9^1@8f^}U#i>Y@Vyi%d8`y{w!?qes6q`m13%8mOO&Ur9YE*|Ah2YD&Mi9WXLNJl1 z;3!ODRF6ewn^9$URGcO|O%tjG!#4q8RskhoKuH9!8g>{7fmH}j=nAO0a~lGI2?&`c z1m7p6QbYq{+>8P|b`VR$fnk8pXT!lfJ|7MQxEz=Zaj2Kif`bJ-zJMD7Og4C9<7OQMhlYkaHMm?BgOjKkEYQ{2At;~!YfQga?*vz?zXVjbIYG=+xG9wqFl7XBD`>%tZ z+M?X!oKD-8T1*=sHBxRjQ?@?Es%Fq=vpeJxQJl5+*J4FvylBY}FE1TZ@7`JH&0?OZ zKC>e}A>Zz(avLqlSyp`S$?htn5_>N5TQGVN^75`albMvC14erE#x1V6={WGCS6TbK z`ge00U7E{EUkvOM9{zGwP`2)_kmz?1ck7|T+s}8YQ`d?Lc@-BDYkHPO_16Ihwv2UM z__{5{^HGx~NwRFbaeD;o=}Aecu&m;S@P;@;l2A?$UsQjRCT7`g=EXnVJajJ5yF-fk za#O*J>i9Pc$L5ZH^sGp)@l;-460@3logTC9U_Q6Iv;A?~+XZdaSL60`T3t_ef|W5x z`(LM}OP8M@q)Xpz+tWDc@l8v~avm|{V{cixcXQbg&&`r2Yu~Ub*L!`>-$y!*w8JeLYc_rFXaiQE%F?g^jU|()#dgSN!tz-U!Hp8<$ z8(SHdMj8fE+kD1!?EpW2VWo7t^i`s|v4`pVEW)iE^R;XX{P|c^gQIlN_28XcLd|f0 zdd>v&TQK zEOH%L*H-#M=l9iR|HC!(H1AQ*#^_9s-Jh=2)YT)3uHJ&ne{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR^Z`oay)D~1LXFv#>P5)1SV^$hfLb3y(Bt1d1HN<}yWtLoyA%7Rq=pw#00 z(xPNwe55JEGy}s9zeOO0K-XCL7i9t?B{9b(Ke;qFHLt|e#a0O@qnDDIVr5`v;bd;& zY~<=ylcOS(cjOR+OKs01jWPOf2@h8kiVaIJy{F8e2HK z0$uNDX5r}QX5nmLWaj2(Vd|^|)tf?2nCSx@qYp|PNQng|1WbV-COqi_Iq=Mrng`4= zMZm1F|37Oc0|VnRPZ!6Kid%1H8hRggkZ2R0y^USbX}aEBt2Ex5tlWNjva1$P^ZP4! zF0XKX{Q`>+c6avauaq(zfAMq4F6r{z>pknpdxZ|&>6aEx(l27ypYr`d#jlTd?^dss zI=*qz@{Nn1NKi;__Z)Md*Q{56sx}CIKAo9YmUuGy8SJ3`|VmcR-3tg#4*M3g7czyfzRGaqkii*tgZt&0 z%Nf6mNi;q-Js^1PgEG@Ur`gvY=q!`2>wMG5-O9B8?TUoU57!v9$j?)M7VtD?YYRtS z-_N5Htsi7K>;Gn$-y?nDcvpG9WGX5~D;3Mwf*UHx3vIVCg!0ESx%{Qv*} diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightInverterIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightInverterIcon.png.meta deleted file mode 100644 index 27cc51c8..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightInverterIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 8d991ea2b725c214c85580d5647c578c -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIteratorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIteratorIcon.png deleted file mode 100644 index 2e7feaad05902525efffca73885e1c3f72b22199..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1980 zcmaJ?X;c&E8V*KNHfaR}l!{}jZ8T&h3xrTj2$3y-NrZ?{$ue0A$%JGukxP*R_JT-l z(F>JROR5}E3lu~RxFSmx3rH0(3YJQ#Vi8NxiyXDki51%)mpf->zU4g6^S!g)eu^tXSG807DlpXh)L%iu5xEP|AiSdCZ$O9as@Iiw{@?HHn2t4G)<6nni{FO{c)Fdzd}8eItXx3d?qfJPC5 zO`r?N0(~f`)`VvoKv8ClSe}_G4^m*)zYnm@EJQ#H!cxGjP16}!<`C>lT^2I8Z3A}o+ zNHl{&$rAGTuVNvq5Ud)8^(+#}WHJ#=0Yu24B2j{Zg6tYpDgi+dj5~C&)J)JB-X?uNBblXo5`{>%mox_y2>w4*t9^|& z!b0%xeE+AgQM^MBl7yfU$}q^0#wp*ihtjh`4WJZ;3}OgMn>)ogH3UOOHKYeZMGOF! zpwTHHlX2}!yg3N=P7X%!La>MeQKM0?!k7V}fdM=^m&y;MP{R0J4wuiTazpua zP9U8_R>fkx9;%_cvUas8=T0Ih(2O2cnK?UCcX@Qp|vo!PP5-_jcE3RVx zTxj!hNk}pzdt?96=(#P#J@)Bq+ainC#s_tX+YN}Vuc>a-pim3R5j>9Ae7pC6CS1J9 z^YW1BMzpB@BP+S4*UP1ZTQcRkWb3LHTy9;pBeuZns-ycc%jVsCEY!O3y#KDkC)T}4 zQG9glNPBZ6p`mUvPk3W?WQp5eCUoFb)5OmgngV{iF#BcD(?R34qcK$?rz2j67H)BQ z4Chu>u8ytpdE>;}ZkL_#E8{~loK{H|{lQ@u+`Xy&$ybfp3G4Qv`v%|J09VBlTtQv(b4_k{`;KcbG^K7 zdv|(QbTwdYrBNHyv@_!=9tHj91f|ug)DnD8+xbgz_VmlAn(qM0MI?n%BT3}l#CAFfN-qVqrOcz=vP)f7sE`&Z~x9o(HdJ zyPg|#jdE&h8nG?=^xD#UL05ji75TlPVatEINbLAfEVxXh|dY%WY;f8mOAF2HbJV*q;>~HiN1oaJSx@boBK_XsG3V&(PcBxK-5P#Y!twl_ zfA8Bw+exuc*D<^gG{t3pyiFJ>@pZ&=H!eS;$zjxFSbq3V)MvA9!(-mlN-buFKa>RG zn~FAt6Tqi$>qc79yZXk^qsOW1m&sNK@{_EXIDJv$r_4ln(j`#vqO+_h#;=N7?EfMv zY2%`vmPvh&QgN4*wq^6!!_1=Ys4C@o1~-Z6yJb3W;tu644?n=A$`HGw^Iv7T(o^x> zok!Q?)H@Vh@?0w9Renewcz}y4@9vICpEywAeP=;^wx2q7WoA=bMtx)gN0MJrd@ep| z+v$=Qz3FuR-7Nahw%`?e_O(`x?F=R~s@8qsQS44RS%zm{m`c7X-`(CLRX?c9(Q$-`xBl9XA3+;g&C_?p1t054;V1kEtP%a4;62prRJz_ci+S% z(}z8o$-@N8EG=?8e&68C-aKpCamzlE%5Xx_i}T2;gg0}coQiXN&x?-z`;Q-L?A(7v yRTubqmPk9j*jyv{4vn=95k_YuuB=Nt7x|!QlaZUBo2+N;_i02}46l}(lKUr6eISnj diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIteratorIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIteratorIcon.png.meta deleted file mode 100644 index 9f5d7374..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightIteratorIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 5b924a7ff18f0544aaa585af94ac536c -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightLogIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightLogIcon.png deleted file mode 100644 index 1bdbb22b9ca44eb01f35982dad817460e2d3cf51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NwKxLO*RxSAPTI6E2|8oIhUxj8$#nmL*oI2jo` z85=vo^t$9Hm*%GCmB93-AoQBx)C)=qxdlL*T~doO%TiO^it=+6z+Se>#O)SCoaRCG zrr>sq5l+4OK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk)>W0NUJMM3lAbP(Ar-gY zL^^UEa^QJ$>y`DFOX4r0x$2IpzjEF4bf1!cwMn!Bm@_TmT+Kpni>jSn+K0f?#>Zh_|iw$cNPnL2yx7B-1tnM_t@#x#6 zhW{>y=LpRa%CX9t5!@7{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NxVxtO^+nwyzhI9s|H8oIh!SQwjFxSAU}I=MKy z8kt(c^t$9Hm*%GCmB93-AoN<`)C)=qxdlL*T~doO%TiO^it=+6z+Se>#O)SSoaRCG zrr>sq8BV?WK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk)^C%YqZt?&ojqL~Ln>~) zxv@8^#X*4K!Ci@Zg9UF?&o14x$xrr^oY}tS2htI$6QVxJJhalS?Mo2!Snq4Fe8$a$ zLlc!|&bYf_}%r>UZ4$GhMEPMMsQws_ZPs;W|^yixd*+@rS&nug5M zzSgx<_~(kP(c56QhHpdInyd|FYrHWnF;1}NI+iV}d zTZ2oRqiOA>Ll?K{YNgwr5B~pgvdT$SHPy0X+DEvH-dVOB@cHAzspzu5dfw%FPO!h! l3>rCoAYP2q`4QW|$Z&@t-AD19b3Let@pScbS?83{1OWSgs>c8T diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightOnInterruptIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightOnInterruptIcon.png.meta deleted file mode 100644 index 2fe4cd14..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightOnInterruptIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 98f584ca47ddad64d9878314395ce160 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightOnPhysicsCallbackIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightOnPhysicsCallbackIcon.png deleted file mode 100644 index 74f52177a1c4d266d9aa1d21047aa5db0c86ffdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2438 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 Wf{TBNW=HFSiVIIyKbLh*2~7Z|T#N(& diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelIcon.png.meta deleted file mode 100644 index f74f54f3..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 8a4a401bcfb527a48a08351efaf92e14 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelSelectorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelSelectorIcon.png deleted file mode 100644 index 1cc2f62a538fc0ec9083a0fe4e8c7c715bfe5ac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1376 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NxV7?`@5xVaiy8kzt@-PO&>$k@@%#lXeX%*4#t z+0huL*Cju>G&eP`1g19yq1OnfUQklVEdbi=l3J8mmYU*Ll%J~r_OewbPPe$Y;WQ7b zHwCv_3~=hz2RcR{6tPGV4HE*U9uO0rY=Inj!cWZuruHIWvfkR^%*(*Qc*WDjF{I+w zn+QYi!wwR@E&?p==kmB_wm!1oV6XU-^KHQQvhXEyTb)YF3^xbM9yxiiVYQ@@X{>6Lm+7Vh>SY?YC&-Qo#7v3_B3+5%H!RQmsI!GWR71VrD7eW z6;}ekUHp7OS6Dl7xnLrD+lDf0*&}=rN*p>7+x? z(>wh{Mdv*?(E8>abG*fldzq!kU&ggo?b#0>+TP4KywzCg)H}m{!PjN@iqh{+sNWuG mnR9<_BqXe(4|@F&O<<7TdrxZ7{7V->WuB+2pUXO@geCyhzVq_{ diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelSelectorIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelSelectorIcon.png.meta deleted file mode 100644 index a7bd3f87..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightParallelSelectorIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 108591b5d7a6bd94383d16a62cb3b4a7 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightPerformInterruptionIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightPerformInterruptionIcon.png deleted file mode 100644 index 5e577d945cf9b8f85b91c85e0ea044c3f3e355bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1334 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 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomProbabilityIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomProbabilityIcon.png.meta deleted file mode 100644 index 016c1eb8..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomProbabilityIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 6c5770241610a4c4aae4ac3af0ac8bf8 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSelectorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSelectorIcon.png deleted file mode 100644 index d147a58af30375037bd5023abe7352f3a90a7f12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1346 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~Nv<8=1PAxtSYV8kzt@-PO&>z`(@O(!|`!!p+p! z!o>`x*Cju>G&eP`1g19yq1ObbUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnqfXG!Lpb z1-Dy_aO%|uIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@i?u|`e#K6F~&C|s(q~g|_ z84q)t4Fp;jzG5nAaZ6&fa*}B55pZh|Ji%e$WaA{Es3V{W(ad zkM*lc8gx0YEt$(OcfD@sW8saGY7sfUhlQ**F-E*HKCb&c_4s@JmC?R$>aH%4zO44I z{D#biS^PQ7V*mF(<9fc!Wzn^Wr-vJC&$hTo{k$=~Y6B9P@No<%|!qVFk_4v@j zkflv$Bf^vxcGhd`4muLbrftm@{qV+>h{F~W&z#e4{<>n$Jj1$$Gc>ugc(vk}6;Aqc zbBXqGoz{bQUzYI+hv?sXxaccO&Z3ny?UL$0xqYstp3gg<@WJLX_YrU3yOGn*TRJUj z6!p&WZJoMo9zUD^=KqfC)z3xhZ!kz?TFo4`^g@to(BCbN{ZG3LZcBRQ?Kz+$b=jf5 zmtS+j#hE7;nay4Ce&3%xm$ikojg~5LJGL&{EF|&v&>W?O>76&McqgBaH$A+2rFg*i z*h3$7?zkv2uPU$fdQ4(m3Cr7JyEl-q<@+(8`9GHdgX8h7LTpQ&azUkmdKI;Vst E057-YV*mgE diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSelectorIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSelectorIcon.png.meta deleted file mode 100644 index b15f82b7..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSelectorIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 7638e4bc5a1f4cd488801902387ec5ea -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSequenceIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRandomSequenceIcon.png deleted file mode 100644 index 7af07e3555dd675ded1556a31efeb3091764c04a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1296 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 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRepeaterIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRepeaterIcon.png.meta deleted file mode 100644 index 5831f6a7..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightRepeaterIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: bb415ca6de87c3d49ab9a94fe8a6fca8 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnFailureIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnFailureIcon.png deleted file mode 100644 index 4575c17b16fe00b86c009668c05022ac8894f35b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1662 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2c=CsU^h>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR^Z`oay)D~1LXFv#>P5)1SV^$hfLb3y(Bt1d1HN<}yWtLoyA%7Rq=pw#00 z(xPNwe55JEGy}s9zeOO0K-XCL7i9t?B{9b(Ke;qFHLt|e#a0O@qnDDIVr5`v;bd;& zY~<=xAZ!`CVki~X(!CPo&HE=HEd7S66f z*E^b7I6AsnI2#z5xw%=G0^JVLn?g>Q=>r|34@w+Ji3KJEOo1RKJm~{D@XV8%2h1@= zz^rjDC1@1`1JgQB7srr_TW@Zh?-mM_Vfe7T&;F!*z&)1mjvLAC0ZTZnZe9{dg7t|7ot@UzB_#r!_M z>L&xuS%QZSDJgiQ$LLMxK6v&_@L8e#j*Dw2@ct6s7p};}{_J7G?A9$&YgcU1VD)LL z)A~@IH=FOH*Z-B5bhg;CY^+~AU7&kf>(Z-#RLlhyHlBX3Z5c7^uGC4JUG+=%9$DF~ zYVqFiNVH&Tj9|e-hh-CjkBKsN9}RNM7CltgQsLgzc4(nR1jp&zS=C`Hdi1BC<`Us+ zo|GV@b8fTuLYv-jv8sm&R&&?+s0lNN8u;XiG(Pq0=6=`u`fHWJRIkvs!w+S%9^`F5 zedy`rCQ+B$Z_7efUu}9?^wZRI!{wJb2esl)=xjH?Al1v3&;6umC!5{;_j9Cf&HTUF>+5}4P>tZ}>gTe~DWM4fB+YWK diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnFailureIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnFailureIcon.png.meta deleted file mode 100644 index f309e992..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnFailureIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 7d32c9b05505df24a94069606f3b823d -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnSuccessIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightReturnSuccessIcon.png deleted file mode 100644 index 5e53fef34cdeb9c05f0c74bc7a0886e08671a448..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1517 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 I()9d)0Mt>0ga7~l diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSelectorIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSelectorIcon.png.meta deleted file mode 100644 index 3ebbf28b..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSelectorIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: de3acf0e386a26246b8bc999b1ef8e32 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSendEventIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSendEventIcon.png deleted file mode 100644 index c54939866c9eeb6bc9e7122765b1766637c18a9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1111 zcmaJ=T}TvB7#+#97A=U9G?HN~DsXppR(IST++y9?t))g}-EfnB9B1yjgU;M>=Gu-L z_=7zdsQ6$IQBefZOPEj)WxhlpRu4Tyg<3}CLs<~`8r@M>duSVG=KgTb`Of{m?+(`0 z9xZf~I0%9$j2`1-cr3TSEqVA~I?$Mdhhh{?pn8}@Y0&^gP=?KbjH+S_hyhXVY@Y_z z1hI)y;t7-xPH+-bU80R~S*niN1W|p&(nYBiAhH>>C|ZE}`FM&V6*)jPcm=nhhd@d> z)@6YDuG+ZN)hhXA>d0ZT+TyT)3Xn)zYMW+qR)AX31A1_obtrf9FUxtV$hC*U(F{4s#rVitEW8R(DTH*6 zrqk)PD_!A&MhngO{eD}+<8fky)9locXgM{rETg~!Q!*4CDNrMAMX?!npa6xPt{y?v z*JU+xEloIKv?b~^<8s?a$^Zr7|4>z3N1G@HHvIlm*o=4TfQ|tZb{G;aT(Zm#rE?(z zhzJ^S2-`AQtV=-z%@owhP(4c?Y)~{Arp-euctPNznu$bB0#QCdVFj0>$egz-SjATH zL0>57VVH2l9}2NymiPMH6+R~H_hz^}lsZ(Pp$u2v;MQd2+O44KI5H0m&wE(?cC&>`JI!K<+(+ProPQZ ziH}p4Mi##^k?5VuMSglq_u13SuYT-3<0+ZH@@;f~u%>L{#q8DLfv49Wl%1jmw@LNN z5_(00>@Yd^vg-18~?-wh+hgR!`nU_a|fg@My+MQ{VRI4ZS(Ud|&*-)yCgT_EnFD LYx#RMP5plW>|Aoj diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSendEventIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSendEventIcon.png.meta deleted file mode 100644 index b99ba8a0..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSendEventIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 6d03b96c0f79bee4ab2e14fc82aa0031 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSequenceIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSequenceIcon.png deleted file mode 100644 index 10d6b645c15c6059158fdfae7751c4fc82bab79e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~Nw~JGq${o0+*-8X7wq8oIh!I2xH)m{ z+1wDO*Cju>G&eP`1g19yq1P3sUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnrq$G!Lpb z1-DzAaq86vIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@i)={7F2bd+kdAc};RNQ)V zVqz|47P87E=jIP&xSb(=&t{UKhzE|Jico;DfqtVW>Bf%>FVdQ&MBb@ E0C~rSU;qFB diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSequenceIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSequenceIcon.png.meta deleted file mode 100644 index 04c5327d..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightSequenceIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 4a7b39d8e0d056a4a9d8eb390b4bc9b8 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStackedActionIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStackedActionIcon.png deleted file mode 100644 index 219a93337a74d3fe4aca93ea9427e784ed676f9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1165 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~NwKnmL)e8krebI6DGE-PO&)$=TS+&Bff&)X~Dp z#oP&|*Cju>G&eP`1g19yq1OuxqMbWR5mq%zZD(k^8{b`_SJToIMAamKILm@WLvA%}k;~GqLUN8b|rf zdnYU9eBPj%{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~Nv)XC7&(7?#V(ZtZy z(!dm^*Cju>G&eP`1g19yq1ObbUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnpsK$K@7? z-W1$!F~X@=ALtl;P{bldG)xGXdO%EgvITPB2|qOtnA(eg$@d0(mBBIc7gHFf$g5YKEalibzSr{m^6)=cXclvzykO$<%EVpm zx3BuK-&os}nX}NZJ-Tdor66OW_S@u`CT}_zTwL;b^hWWL|%HobM8}lz} zx_;DQhS=8yQ(HRKHke%%n)#Ns#_bAE@0q9db#*U0mdH+x^Y+^LKqz$QUiLei z_|7vFD*oc171Xk7TEw@xLgq>ejSG#U6LRua^YN!&R8$DM)OX~<##a^hw|lunt80N!i?G$OIKgp00i_>zopr0Bl9R$p8QV diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStackedConditionalIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStackedConditionalIcon.png.meta deleted file mode 100644 index 395cc887..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStackedConditionalIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 86fbf527a2c761e45bc4a47cf4894902 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStartIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStartIcon.png deleted file mode 100644 index 6ca4b8a9832860f819c1d89cdc727e15f836d738..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW~I!Kh>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j1kGxJjN%ZoL^ z>V18!JoAc667!N%JzZ>-fF|f=W~Nv<8XB8gni{)WI9oa!8oIhUI+`0e8<`uMx;Z#O)SmoaRCG zrr>sq3r@ZIK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk*6x8<)fpHV^*mi1Ln>}1 z{rUgj{%`=3505iXk5$E$gNym(N)74`IIVFqH8o9B_}VVkx1;p6n6j?Zj7*PK1F3|? zlm701@hBldY*`inO!%}}77 zxlmf*{IayEes2Zb*6mDbsE`tnZ&edr#o+eEPh-QgMWO3UtOceseiT*N_A zzE>+qeOR->r&ayzM+ff~Plr34N7l1>S4)WB;6L)Z;m47L>;sRrIo)mxfqeO4MRWVD z9W1=k9wEFB|2u27G+zBEpYipK#RR@InYmLWK?>YuZT86U2qZAP2=|<^pu+kcs5J3( L^>bP0l+XkK_IsKN diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStartIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStartIcon.png.meta deleted file mode 100644 index 58c1d784..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightStartIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: df820d6e71423194188c7dcb1c1ae2e2 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilFailureIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilFailureIcon.png deleted file mode 100644 index 7c96e466400546bc5416253347668e18b306230e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2536 zcmbVOc|25m8y|`oM6yM%rct4o)vTe$j6uyHiOEu?nZaP@jG3_~qUBm!Y%LRA8O7Ct z&?J>^bt74-D?)~%<&(5XE^gg3mEQM{KKGCJe9k$)?fd;c&+qv?&-t7TZ%;Qps5uk@ zf#`X-(|o|zPW5PMf^W+`0cv2gMC!_tZU#c7acnUULg4~CcrXtEJB;VUV{;RtTX>ET z$h=U#FH6c|GRPc2fMBaIh*7UhP9#qX+rbOt3!UKOjo08XKGzBEk7J^k zA}TMO@17{;ZBF#`XN~}Y8nZLeT7IP zo#5Y`Vllm8R6xvw;SgAR4hoHi;qeHx0}hWz+rcm>GzN(RZ@fL)fsDhGF$CE63l3Tn zb3@5KH2Qa2;K&IcE|rSNNMu}G93l>j0K{QPG>Jq~X<#t+Ai`dfAe6G>?S&GnIRzR| z!V&XDQa&JrsTA2efEcM09Q5?t76c+D^M|ld@;y*s$dK`D5fY6+Aq4`}zP_R*QXk%b z-S{b5;+r7iA$@ofAV$mq&m+`ojts``-wmmNpf_YMF&{h>b`%ZZ#0YposRzvo4z3`$ zd@dP=%SbONH2TJ#|LH6ma6gBvDHDzhu zsZ*zlX9C6ADJdx{iA0t*6pC4V$*f7&=>6GTFn57Fx zOoJmMBO{p1d!rXn9lAb8Z0Av(Z$}YQilz>kuIa6VX_S5Vz4N)AGE`)-E?*Y%%plO( z+M22~kzUf5U51k8k2MXVD{oy`roXX~=H=xTl$`vx=B`Fg$o>}Q_TjRX3>T%L$iOia zv#-BQ?IMT?4jxG6a5%ZYXtlcKTV0VX5h%`AhiqY>XMS^kjV_+dxmcbsYG?hlsA;IY zynHq_bz{dS`>AdF=v6mJ&C8pQcV})HOMX(Smy?-!@Ss7*X=m#aD>HsD%BNMgy>nm8 zXL%hWofWm>v3u2J1f7;frBeObjvZA%ejvpV43=g+?JvJ7++Q<=wGI%Z}r~f@`vnvUM1m4xLVAFQt z_(hQsqP^Q~t;=ope$0m%Wt+FQ?=a3=O`%IyvqrO6^&g5MZ(`RB3=Ax)QS7;U!;@a> zbtJnNpj4GIHw7b#O1x2i&+^M(Z;y(e8L&FW_N1Qef!B$14;&~lfaYdrFHIZ2v~>cb zLpZ5XKd|E0UVDY&Oko)`HzQ+-5%l(hiN3MPgjOrjzc$0yC!0RwDHvjeFZX^Bg}~Lj)28}uvp>z zD$isZHpxL$ym@wIz0qk`zxCLS<|jv1h|L@L`FA=x)@7dX{LjP%Wlm>(V*mOmpJY}TylYY|fXn$_zjYZ2$nGmJB0#r>8JHu5JE6ARzg zpdK_T7a}SQE6$vGLG$!%FPbg1t@wOBq-R^~QRw38fG*$Pnwkru&o&7h5 zO-V&P^F&QT{qtted+&6V3+`^g0+tIDgYw5&I}s6k&PI7gq%;aRuJg1PBY_6oRN8P-bo)9<(fR44v@D%Tl9(x z7VVHHDGoFQ2HaEZL}dM{@n`GM8$!E0tS9Dhe7eW;ZF{=gYxGO*UDNsm1vzjbr&epK6awk51SllD75~7F1Q) nB{YBWueH@_Gm$A%=9@vzF6m1C;@*|0`uFm1^`xD12}%10v^Ohi diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilFailureIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilFailureIcon.png.meta deleted file mode 100644 index a633251c..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilFailureIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 3d29cc3223984f44291c0e423a0aa6c6 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilSuccessIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilSuccessIcon.png deleted file mode 100644 index 66f1c9dfc2f479ce13fe7576da423b9c0408bd73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2436 zcmbVOc{r4N8=f#^M4P4XX&TuZvlz2!a>gv07-UP9G8;3P#VlqxvS%3LoEBv)sgF*J zXrdyOENS^ti9#-P5XVWUPMfryGb(-GA6@5<@4epl{Vnfv-}m!-mg{=+1N^*=L6#r@ z0ANhpL=M!B>*t@v`r5ZmPWU42uv$t9lLiT6q;iIs10b@6Ob(dFXT)*>ISh7k;tkFQ z06;f}7aS%Hqx<4nLcS|w-o{nI7irM|zy?o+h{1~INWn}_EKfjyJZou%fO%{JWUD(J zP8X3lT;8S>F()X+FPN1Q&%&`Go*Tg%6nHHGpCe^}75oH&1g{`KKJ((W^Z9KU1pL`V z8c%?HaVm@+0452=9I(5q845m;fB|x;EemMePM5liv7D&DZN*gkmf+2z-T;VW2fBsybttHYx z&VSwbuC*jMS;T<_awI~Tn5E4}jO_wg8@qoNnm5#XgZCHnv`JwkkcBK6pCgdc$OMS? ziz}PQ#>3HAFAR!=q>yoNiW>sqMZzMyys#LgJDP~aP~8?dzK5lvs1!7XgvF9@6a<1o z#Zo9(3Y_Xr#^Ep+G#b5tr3oZbhJeLc(B)}$zhW`}h{cn{9EMaV4i*X%7AhcsE0hW) zT%ia|3POV&xAFvRpL0!M;xps_YBeeDe#i zJMt0g>06shxaLtu@~CcodBxb#+p3joJj{Lb5utiT`;IQqtlmO@@c^L#-OaFy2akn`0 z{oL7v#yx4<>0%(r^9I-|^7;{=(Ix-KBbcmVRRr1V`Qs|H$hEt>0kHSKBAy!=8J}DK zNZ;mkMdgLAAQ!{4H>p73BH@e4W$RVw8x7IduS|KjDKDlB$wn;hL2LExTPhubI@6Zc z0X>XWA%$N3EtV%;S|~GddcEW6MvjNai~>w9qo&`R5=RX3_0bYqSQd-P@FO)fvD6$eF8>okxcO5eSSJa(Mla0Q82`4KfjtMRl z6%|41`-cu5YOyhxLR;mimIeYWuI5nVBCKDA-{nE0ib{Mo#Q=K-*p==a+=H)&i`@d9Y~l0YCtROd`pI2PEolwroV;a99! z(K$ADBqKf?1@!mz9Z)Kj7|o-^H}zbVS-Jexe{=_C4$P%qu8_%Ohu(fn`{k%lVPPTL z)}ni&PwMx`aBJ>Jj)&T~742V?U)UM;%qL zfaadus(5J6$>lyJ|K9g*ZfA{nj}+_=`QqRydsso^jo8Xx8%tvaX~yuM*Wh zlo}fP;Ep=W4T-d`@S92m4V;b)SQYs(-gjnlNi9K#>EztBNw@K>L?ZD<0c|Tx1?Pv9 zcaM^Fi*FjA)oc2p+xaT!vN9Xh6j|rjGJLtJY-xXAUusS^X|P7l-G`#)oD~> zw_|WZq}*72zTT>CdReXR{rmTq{_vbxOOibRBywD?Yx0cFl$}`?jopdf@1)!5bQU?-jxW$&V%PIu32o z+mCD@L^|*Ku)E!N_Drdd{Y|sFF^xEP^BZCFv*#;!7&Ki~JG{2Z>KK-6;?e9qvquf-hf@>6%IE0gb`8Vp=xwIi)93ZgA||?tiD%S1o6Gmw5j+-M)?bt1 z-_|%;T9jOq{bYRu_oH9`(2xt>!viQ!_bSaE^0mSZZQkq5{N4Dk#cA;HzC8mf6=+Ln pXiVhuzwXyEcMqypekca$0wxN&XFkR*PMZHOqEY=pn3 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilSuccessIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilSuccessIcon.png.meta deleted file mode 100644 index 348a83a7..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUntilSuccessIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 4e9ac4f2dd8bfe741a5f889efb1ade67 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUtilitySelectorIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUtilitySelectorIcon.png deleted file mode 100644 index 172e817e78740a2f50b327f0adf3c3ed9e6ba07b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmV-#0+9WQP)CRK-*})PC@ZFq6FpRXL`pUwtFYbR(IrbnR23TskLAf?~`H zt3Ph}0R6-lOFW_8oVrLxg%BVPnFx%9$tv*-jLr#rzUpoihkF5H?)f6ggkA)q*S z6Vd1EJOTsPf=5`*s?4#4Q^N3L?-E@pzSusnkrTqPBqXXxSbnZ{!GkLPm3+Ll;bT+6 zTgBBYbwZeY*oJ>I#YcsYle!5f60t~;aAdOT=?doM_yAv44%jC(nckWPc1ShfnVHx^ zhp^b&t~3Rwm@S^KE*OgilPPpF2-t#mb}>fls)T3Q>?{md*p+T3(om$k$J{%#m|^!- zK3)~VYfE%REZ}9Otoo)R4fgGv%93cj+faKv9?RB4>y9Z?-Jsuv6-!`um4im#Mk4vE ze{mErMmnW$2}x{(4y}q6{UYaEBcat3jFTK8cBs0lDNb`^{LJaSb0te)Zp@Lov&iYS z#GaUi#2H4Z1c`lxQ^?wb-^+(DrkRO15l-NP;2<~%J|8~<3;-;hxX^xXp85a)002ov JPDHLkV1mNQ8fO3i diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUtilitySelectorIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUtilitySelectorIcon.png.meta deleted file mode 100644 index b3afa102..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightUtilitySelectorIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: db3d0b77c7f9e0b4f9157aa03178836a -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightWaitIcon.png b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightWaitIcon.png deleted file mode 100644 index 772fbb4989044b2614b61b4adb809fabf084e504..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2338 zcmbVOdsI?+9;eJ|G^aAh%yJ~k)$svb5CoDjo{B}dNJwQF!c_?25?m83jY>;xGJIyK z(_?j;G!wDLu{vg!noXOI+i1Bpl|4+;w8pZghjXcH_m9r}vG?5jdwxHk@B5sa8L=YN z$-&(Lg+e*;!q`G&_P2f0ry}FmX{#q8(>$0Xfg_R zCy%2E+1!u1kR2VPfMG2Shf7LI!X^>1kS-nvP^nZK2Z0cPNCfDO8dz!w(C8OUFt92y&td~?q6bQEFCC?A)N?<5+*7jLIJ^$UIA&*tVlB2 zCrYW2LrMB?Z0Y&nEgRG+H-U1l4pO7v$Csx3jD9YeLLzerY$}tASPlRb4i#|*Phhdw z6av8JU_N5y|4+9*u9b((K%wk~JT^mQ z=owtKc6l_%rNPnB@n@{R0YL#uV(K%XYcyvY9cm$XVqrhn1tte@?J$J ztu$LtD;?YC~8?S1dZy1M$bv?)pp@+VK8Y%sZmY_nMKSPG?Ry!p;>_TIhc<~ln!33d()ZQ6XL zrKLs1*6Q_n2MsVB7*E)5pj%g6S51=?9iOJs$z-zNuI_GQli3$D-_7k(os*N(gXHAo z%cswrc|{h5vi}uF6s%Twb44>>Yq{K=^6@6N=7N>X@UGw8dT*Y|%X43aUZHq&XKtaM z(MTd+`eVDvU%KonkiDEjB9W*V%#le4x2}(m?`wXW%5&Z6_~6m=uk= zL&H0uIU3{ZTY*Y7+F3I8qu*Rt;@y5L*}uQOc05HW?EEz+Cnv~iwKlZ&rkpQc7Pjzs z`Y8<#hnwpWQ6_X^bk7W&YPqs5)Es`TlznSkCZiSVcp8|cs;Q}o^7t~;qyFDLJ?>E= z5j^*ohc_0@$=JM zxwi#;{zh_f6{yvYfNg1cd3gt0kN-z>zi9k&;+M*J zLA^|{Cs-kCstp(Bn?U`nBzx=00f8N9-KE@;DGBQa94|AN~IWXXR`-if! z`*z3X?{d|2aAJ1k1WePk%{ttGirWUQ-*u>}DqzLP-K?xE$DyGiPo9G+W9pE_w3FU- znJqRC7hR=0My*`=>n0eE&Ue|hhx?DjjT>vs^mVdSzq;u7)34O$s;jG`p0#W%d$3Fl zPa5_qBIQ0gcg$k3XhWUvj*gB}Mq;Y!hV_H%y+AN{*`!eOd4rsDZaaX%yROi$oBv~cWANrY+vh~4tn7OWkqGB9eXy{ z`>>{QZ`xQ3^JE8)j~jos=&sk{jvF_Qi5Gi{!_SsJwA=D%y&3;od!xYl4~~O<$w~T= z>9X$GZfh3Lh@Mem?!ZO*SL;`kUoT`d82d)*FS z<~uTFc*oQWxFh#0ZSoD*`&tuI(b3)ueEeO1Ud7uLQ6*lo!vk07^*5!%!#P00QODLy zyEUfJfc|wD0C*Z$96=eW+1{l-1StGV4zzpp7gcvZo|bd!3!KX3QfB+~SNJcFEYs92 z83+psL93d}(!P34)rNDeN7I&@vqPtYg0_vn*NP>Qm(Ct83mJ{wjgJXtFOMo0M!zB^ zI(o~G<>lb=!pe#hCr%U_jYbIQJm2W_V%{F-40j~`hZkDKmCti;X`tNanyR|GvGBOK zhm~-FrG0Ecqn9fyCA0S0CecrMXls3aecz$iDKW;3hKkE=Z9sN*_PZ=?eCiKb&Tr4` zTD!8Qil*8s^S7jTc6QEDtJPbBHw06kbfw)dYw3r{=fh{mzL^wyD6#g&7HMp3uN5~0 zp7Gp7SeFdl7Q0 irgmgJt)Ou06gSj`W~Ss+UeR0IUki`3f_;Lye*2$U{Kj|y diff --git a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightWaitIcon.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightWaitIcon.png.meta deleted file mode 100644 index 68a4b26f..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Icons/Tasks/LightWaitIcon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: e1cb9cb566a90fb4489bf31465b99747 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers.meta deleted file mode 100644 index 12434e65..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fa7ae1b2addcf87409cb38b62daefec5 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/AddOnsManager.cs b/Packages/com.opsive.behaviordesigner/Editor/Managers/AddOnsManager.cs deleted file mode 100644 index d2f9cd8e..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/AddOnsManager.cs +++ /dev/null @@ -1,18 +0,0 @@ -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Managers -{ - using Opsive.Shared.Editor.Managers; - - /// - /// Draws a list of all of the available add-ons. - /// - [OrderedEditorItem("Add-Ons", 12)] - public class AddOnsManager : Opsive.Shared.Editor.Managers.AddOnsManager - { - protected override string AddOnsURL => "https://opsive.com/asset/BehaviorDesigner/AddOnsList.txt"; - } -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/AddOnsManager.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers/AddOnsManager.cs.meta deleted file mode 100644 index 4a6f7433..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/AddOnsManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cdcf33bfa5dc24248a6152f89300f0c2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/AssetInfo.cs b/Packages/com.opsive.behaviordesigner/Editor/Managers/AssetInfo.cs deleted file mode 100644 index 91f62507..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/AssetInfo.cs +++ /dev/null @@ -1,19 +0,0 @@ -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Managers -{ - /// - /// Static class defining information about the asset. - /// - public static class AssetInfo - { - public static string Version { get => "2.1.12"; } - - public static string Name { get => "Behavior Designer Pro"; } - - public static string PackageName => "com.opsive.behaviordesigner"; - } -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/AssetInfo.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers/AssetInfo.cs.meta deleted file mode 100644 index 47c4fd49..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/AssetInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fa07a5b0e063044478181a6a40bf038e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/BehaviorMainWindow.cs b/Packages/com.opsive.behaviordesigner/Editor/Managers/BehaviorMainWindow.cs deleted file mode 100644 index 39a37285..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/BehaviorMainWindow.cs +++ /dev/null @@ -1,68 +0,0 @@ -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Managers -{ - using Opsive.Shared.Editor.Managers; - using UnityEditor; - using UnityEngine; - - /// - /// The MainManagerWindow is an editor window which contains all of the sub managers. This window draws the high level menu options and draws - /// the selected sub manager. - /// - [InitializeOnLoad] - public class BehaviorMainWindow : MainManagerWindow - { - protected override string AssetName => AssetInfo.Name; - protected override string AssetVersion => AssetInfo.Version; - protected override string UpdateCheckURL => string.Format("https://opsive.com/asset/UpdateCheck.php?asset=BehaviorDesigner&type={0}&version={1}&unityversion={2}&devplatform={3}&targetplatform={4}", - AssetInfo.Name.Replace(" ", ""), AssetInfo.Version, Application.unityVersion, Application.platform, EditorUserBuildSettings.activeBuildTarget); - protected override string LatestVersionKey => "Opsive.BehaviorDesigner.Editor.LatestVersion"; - protected override string LastUpdateCheckKey => "Opsive.BehaviorDesigner.Editor.LastUpdateCheck"; - protected override string ManagerNamespace => "Opsive.BehaviorDesigner.Editor"; - - /// - /// Initializes the Main Manager. - /// - [MenuItem("Tools/Opsive/Behavior Designer/Welcome", false, 30)] - public static MainManagerWindow ShowWindow() - { - var window = EditorWindow.GetWindow(false, "Behavior Window"); - window.minSize = new Vector2(680, 670); - return window; - } - - /// - /// Initializes the Main Manager and shows the Samples Manager. - /// - [MenuItem("Tools/Opsive/Behavior Designer/Samples", false, 31)] - public static void ShowSamplesManagerWindow() - { - var window = ShowWindow(); - window.Open(typeof(SamplesManager)); - } - - /// - /// Initializes the Main Manager and shows the Integrations Manager. - /// - [MenuItem("Tools/Opsive/Behavior Designer/Integrations", false, 32)] - public static void ShowIntegrationsManagerWindow() - { - var window = ShowWindow(); - window.Open(typeof(IntegrationsManager)); - } - - /// - /// Initializes the Main Manager and shows the Add-Ons Manager. - /// - [MenuItem("Tools/Opsive/Behavior Designer/Add-Ons", false, 33)] - public static void ShowAddOnsManagerWindow() - { - var window = ShowWindow(); - window.Open(typeof(AddOnsManager)); - } - } -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/BehaviorMainWindow.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers/BehaviorMainWindow.cs.meta deleted file mode 100644 index b7bc7df5..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/BehaviorMainWindow.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7eb87493a412def42ab4459e90b63fad -timeCreated: 1500568651 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/Images.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers/Images.meta deleted file mode 100644 index 39f8df3f..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/Images.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 95d69bf54d5801d408dfe7e5f6aa0436 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/Images/Editor.png b/Packages/com.opsive.behaviordesigner/Editor/Managers/Images/Editor.png deleted file mode 100644 index cd8ace6e87c107e2af9d3e2ed9a024a99df944c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6697 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 Znp&`2OUwNT_^&@_dRj*CQce4?{{aOHI&uI2 diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/Images/Repository.png.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers/Images/Repository.png.meta deleted file mode 100644 index 7e95041e..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/Images/Repository.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 020153b61b65cf34f82ccc9b186cb700 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/IntegrationsManager.cs b/Packages/com.opsive.behaviordesigner/Editor/Managers/IntegrationsManager.cs deleted file mode 100644 index ae5c8be3..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/IntegrationsManager.cs +++ /dev/null @@ -1,18 +0,0 @@ -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Managers -{ - using Opsive.Shared.Editor.Managers; - - /// - /// Draws a list of all of the available integrations. - /// - [OrderedEditorItem("Integrations", 11)] - public class IntegrationsManager : Opsive.Shared.Editor.Managers.IntegrationsManager - { - protected override string IntegrationsURL => "https://opsive.com/asset/BehaviorDesigner/IntegrationsList.txt"; - } -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/IntegrationsManager.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers/IntegrationsManager.cs.meta deleted file mode 100644 index 8968dc8b..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/IntegrationsManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 722bac958cec61240b407653551d0dfc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/Opsive.BehaviorDesigner.Editor.Managers.asmdef b/Packages/com.opsive.behaviordesigner/Editor/Managers/Opsive.BehaviorDesigner.Editor.Managers.asmdef deleted file mode 100644 index 25e125a2..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/Opsive.BehaviorDesigner.Editor.Managers.asmdef +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "Opsive.BehaviorDesigner.Editor.Managers", - "rootNamespace": "Opsive.BehaviorDesigner.Editor.Managers", - "references": [ - "GUID:734d92eba21c94caba915361bd5ac177", - "GUID:e0cd26848372d4e5c891c569017e11f1", - "GUID:bbb15c76beca87041af309d0035105a2", - "GUID:27cb7fd045e5bb44f8c617ce69325b1d", - "GUID:97a55b351d7460f4f87d2ad07066bf4e", - "GUID:cf0567158f87e3c4c9be32bb870ec7b9" - ], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [ - { - "name": "com.unity.entities", - "expression": "1.3.5", - "define": "UNITY_ENTITIES" - } - ], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/Opsive.BehaviorDesigner.Editor.Managers.asmdef.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers/Opsive.BehaviorDesigner.Editor.Managers.asmdef.meta deleted file mode 100644 index fbb053ae..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/Opsive.BehaviorDesigner.Editor.Managers.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: d923cf8fc4ca8464bb84bcfbec68a2ff -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/SamplesManager.cs b/Packages/com.opsive.behaviordesigner/Editor/Managers/SamplesManager.cs deleted file mode 100644 index 03d8e2a7..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/SamplesManager.cs +++ /dev/null @@ -1,24 +0,0 @@ -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Managers -{ - using Opsive.Shared.Editor.Managers; - - /// - /// Draws a list of all of the available samples. - /// - [OrderedEditorItem("Samples", 10)] - public class SamplesManager :Manager - { - public override void BuildVisualElements() - { - ManagerUtility.ShowControlBox("Import Samples", "Imports the sample scenes. These scenes use the universal render pipeline.", null, "Import Samples", () => - { - ManagerUtility.ImportSample(AssetInfo.PackageName); - }, m_ManagerContentContainer, true); - } - } -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/SamplesManager.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers/SamplesManager.cs.meta deleted file mode 100644 index 8ce200a5..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/SamplesManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3790a505de4b60244afbd23f13ead000 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/Startup.cs b/Packages/com.opsive.behaviordesigner/Editor/Managers/Startup.cs deleted file mode 100644 index fa5197e5..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/Startup.cs +++ /dev/null @@ -1,72 +0,0 @@ -#if !OPSIVE_IMPORT_DEBUG -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Managers -{ - using Opsive.Shared.Editor.Import; - using System.IO; - using UnityEditor; - using UnityEngine; - - /// - /// Shows the welcome screen and check for minimum installed packages. - /// - [InitializeOnLoad] - public class Startup - { - private const string c_ImportStatusPath = "Assets/Opsive/ImportStatus.asset"; - - /// - /// Perform editor checks as soon as the scripts are done compiling. - /// - static Startup() - { - EditorApplication.update += EditorStartup; - } - - /// - /// Show the editor window if it hasn't been shown before. - /// - private static void EditorStartup() - { - if (EditorApplication.isCompiling) { - return; - } - - EditorApplication.update -= EditorStartup; - AssetDatabase.Refresh(); - ImportStatus importStatus = null; - var importStatusAssets = AssetDatabase.FindAssets("t:ImportStatus"); - if (importStatusAssets != null && importStatusAssets.Length > 0) { - for (int i = 0; i < importStatusAssets.Length; ++i) { - var path = AssetDatabase.GUIDToAssetPath(importStatusAssets[i]); - if (string.IsNullOrEmpty(path)) { - path = importStatusAssets[i]; - } - importStatus = AssetDatabase.LoadAssetAtPath(path, typeof(ImportStatus)) as ImportStatus; - if (importStatus != null) { - break; - } - } - } - if (importStatus == null) { - // The import status hasn't been created yet. Create it in the same location as the Opsive folder. - importStatus = ScriptableObject.CreateInstance(); - Directory.CreateDirectory(Path.GetDirectoryName(c_ImportStatusPath)); - AssetDatabase.CreateAsset(importStatus, c_ImportStatusPath); - AssetDatabase.Refresh(); - } - - if (!importStatus.BehaviorWindowShown) { - var window = BehaviorMainWindow.ShowWindow(); - window.Open(typeof(WelcomeScreenManager)); - importStatus.BehaviorWindowShown = true; - EditorUtility.SetDirty(importStatus); - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/Startup.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers/Startup.cs.meta deleted file mode 100644 index 2137502e..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/Startup.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9075c8a032fa68945bf2d25260aa36ee -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/WelcomeScreenManager.cs b/Packages/com.opsive.behaviordesigner/Editor/Managers/WelcomeScreenManager.cs deleted file mode 100644 index 59d712d8..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/WelcomeScreenManager.cs +++ /dev/null @@ -1,181 +0,0 @@ -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Managers -{ - using Opsive.Shared.Editor.Managers; - using UnityEditor; - using UnityEngine.UIElements; - - /// - /// Shows a starting window with useful links. - /// - [OrderedEditorItem("Welcome", 0)] - public class WelcomeScreenManager : Opsive.Shared.Editor.Managers.WelcomeScreenManager - { - private const string c_GraphDesignerSymbol = "GRAPH_DESIGNER"; - private const string c_EditorTextureGUID = "d52eae9187aad5b41aff6dd60e49247a"; - private const string c_RepositoryTextureGUID = "020153b61b65cf34f82ccc9b186cb700"; - - private VisualElement m_EntityHelpBoxContainer; - - /// - /// The name of the asset. - /// - protected override string AssetName => AssetInfo.Name; - - /// - /// The version of the asset. - /// - protected override string AssetVersion => AssetInfo.Version; - - /// - /// Should the large documentation image be added? - /// - protected override bool AddLargeDocumentationImage => false; - - /// - /// Returns the URL for the documentation page. - /// - /// The URL for the documentation page. - protected override string GetDocumentationURL() - { - return "https://opsive.com/support/documentation/behavior-designer-pro/"; - } - - /// - /// Returns the URL for the videos page. - /// - /// The URL for the videos page. - protected override string GetVideosURL() - { - return "https://opsive.com/videos?pid=28276"; - } - - /// - /// Returns the URL for the asset page. - /// - /// The URL for the asset page. - protected override string GetAssetURL() - { - return "https://assetstore.unity.com/packages/slug/298743"; - } - - /// - /// Checks to ensure the required packages are installed. - /// - /// The parent VisualElement. - protected override void AddHeader(VisualElement parent) - { - EditorApplication.update += CheckForEntities; - -#if !UNITY_ENTITIES - m_EntityHelpBoxContainer = ManagerUtility.AddHelpBox(parent, "Behavior Designer requires the Entities package. Press the button below to install.", HelpBoxMessageType.Error, "Install", (HelpBox helpbox, Button actionButton) => - { - helpbox.text = "Installing the entities package. Unity will reimport after the package has been installed.\n\n" + - "Restart Unity if you receive compiler errors after Unity has reimported.\n\n" + - "Behavior Designer can be access from the Tools/Opsive/Behavior Designer/Editor menu."; - helpbox.messageType = HelpBoxMessageType.Info; - actionButton.SetEnabled(false); - m_WelcomeLabel.style.display = DisplayStyle.None; - - UnityEditor.PackageManager.Client.Add("com.unity.entities"); - }); - m_WelcomeLabel.style.display = DisplayStyle.None; -#else - base.AddHeader(parent); -#endif - } - - /// - /// Checks for the Entity package installation. - /// - private void CheckForEntities() - { -#if !GRAPH_DESIGNER && UNITY_ENTITIES - AddSymbol(c_GraphDesignerSymbol); - EditorApplication.update -= CheckForEntities; - - if (m_EntityHelpBoxContainer != null) { - m_EntityHelpBoxContainer.style.display = DisplayStyle.None; - m_WelcomeLabel.style.display = DisplayStyle.Flex; - } -#elif GRAPH_DESIGNER - if (m_EntityHelpBoxContainer != null) { - m_EntityHelpBoxContainer.style.display = DisplayStyle.None; - m_WelcomeLabel.style.display = DisplayStyle.Flex; - } -#endif - } - - /// - /// Adds the specified symbol to the compiler definitions. - /// - /// The symbol to add. - private static void AddSymbol(string symbol) - { - // Set on all available build targets. - var buildTargets = System.Enum.GetValues(typeof(BuildTarget)) as BuildTarget[]; - foreach (var buildTarget in buildTargets) { - if (buildTarget is BuildTarget.NoTarget) { - continue; - } - - var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(buildTarget); - if (!BuildPipeline.IsBuildTargetSupported(buildTargetGroup, buildTarget)) { - continue; - } - -#if UNITY_2023_1_OR_NEWER - var namedBuildTarget = UnityEditor.Build.NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup); - var symbols = PlayerSettings.GetScriptingDefineSymbols(namedBuildTarget); -#else - var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup); -#endif - if (symbols.Contains(symbol)) { - continue; - } - symbols += (";" + symbol); -#if UNITY_2023_1_OR_NEWER - PlayerSettings.SetScriptingDefineSymbols(namedBuildTarget, symbols); -#else - PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, symbols); -#endif - } - } - - /// - /// Adds the resource images to the parent element. - /// - /// The parent that the images should be added to. - protected override void AddImages(VisualElement parent) - { - AddLargeImage(parent, c_EditorTextureGUID, () => { -#if GRAPH_DESIGNER - BehaviorDesignerWindow.ShowWindow(); -#else - UnityEngine.Debug.LogError("Error: Unable to open the Behavior Designer window. Ensure the Entities package has been installed."); -#endif - }); - - // Documentation and Videos. - AddImageRow(parent, c_SmallDocumentationTextureGUID, GetDocumentationURL(), - c_VideosTextureGUID, GetVideosURL()); - - // Repository and Downloads. - AddImageRow(parent, c_RepositoryTextureGUID, "https://opsive.com/assets/behavior-designer-pro-subscription", - c_DownloadsTextureGUID, IntegrationsManager.GetDownloadsLink()); - - // Forum and Discord. - AddImageRow(parent, c_ForumTextureGUID, "https://opsive.com/forum/", - c_DiscordTextureGUID, "https://discord.gg/QX6VFgc"); - // Review and Showcase. - AddImageRow(parent, c_ReviewTextureGUID, GetAssetURL(), - c_ShowcaseTextureGUID, "https://opsive.com/showcase/"); - // Professional Services. - AddImageRow(parent, c_ProfessionalServicesTextureGUID, "https://opsive.com", string.Empty, string.Empty); - } - } -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/Managers/WelcomeScreenManager.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/Managers/WelcomeScreenManager.cs.meta deleted file mode 100644 index 8d9eeb6d..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/Managers/WelcomeScreenManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5b1cb06d692d68543b5f50cb2c132e42 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews.meta b/Packages/com.opsive.behaviordesigner/Editor/NodeViews.meta deleted file mode 100644 index fd7436fb..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ef9baff9776e9c84fb838d40b31cff61 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/EventNodeViewControl.cs b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/EventNodeViewControl.cs deleted file mode 100644 index e3c60db4..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/EventNodeViewControl.cs +++ /dev/null @@ -1,118 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Controls.NodeViews -{ - using Opsive.Shared.Editor.UIElements.Controls; - using Opsive.BehaviorDesigner.Runtime; - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.GraphDesigner.Editor; - using Opsive.GraphDesigner.Editor.Controls.NodeViews; - using Opsive.GraphDesigner.Editor.Elements; - using Opsive.GraphDesigner.Editor.Events; - using Opsive.GraphDesigner.Runtime; - using Unity.Entities; - using UnityEngine.UIElements; - using UnityEngine; - using UnityEditor; - - /// - /// Adds UI elements within the event node. - /// - [ControlType(typeof(IEventNode))] - public class EventNodeViewControl : NodeViewBase - { - private const string c_DarkSuccessIconGUID = "240eed9b6e6dc004f94216f1e9fcc390"; - private const string c_LightSuccessIconGUID = "cf3f27e8ca1f20f4680890e078c7613a"; - private const string c_DarkFailureIconGUID = "8d159db7a8da43e41a50a77e43cfd6ba"; - private const string c_LightFailureIconGUID = "c3622912d9f7bcd41a54a95add672423"; - - private IEventNode m_Node; - private GraphWindow m_GraphWindow; - private BehaviorTree m_BehaviorTree; - private EventNode m_EventNode; - - private Image m_ExecutionStatusIcon; - private Texture m_SuccessIcon; - private Texture m_FailureIcon; - - /// - /// Addes the UIElements for the specified runtime node to the editor Node within the graph. - /// - /// A reference to the GraphWindow. - /// The parent UIElement that should contain the node UIElements. - /// The node that the control represents. - public override void AddNodeView(GraphWindow graphWindow, VisualElement parent, object node) - { - graphWindow.rootVisualElement.styleSheets.Add(Shared.Editor.Utility.EditorUtility.LoadAsset("9c6834c10d404ac4b95be745f4411f96")); // TaskStyles.uss - - m_Node = node as IEventNode; - m_GraphWindow = graphWindow; - m_BehaviorTree = m_GraphWindow.Graph as BehaviorTree; - m_EventNode = parent.GetFirstAncestorOfType(); - - // AddNodeView can be called multiple times. Ensure there is only one execution status image. - var previousExecutionStatus = m_EventNode.Q("event-execution-status"); - if (previousExecutionStatus != null) { - previousExecutionStatus.parent.Remove(previousExecutionStatus); - } - m_ExecutionStatusIcon = new Image(); - m_ExecutionStatusIcon.name = "event-execution-status"; - parent.parent.Add(m_ExecutionStatusIcon); // The execution status icon should be placed behind every node element. - m_ExecutionStatusIcon.SendToBack(); - - m_SuccessIcon = Shared.Editor.Utility.EditorUtility.LoadAsset(EditorGUIUtility.isProSkin ? c_DarkSuccessIconGUID : c_LightSuccessIconGUID); - m_FailureIcon = Shared.Editor.Utility.EditorUtility.LoadAsset(EditorGUIUtility.isProSkin ? c_DarkFailureIconGUID : c_LightFailureIconGUID); - - m_ExecutionStatusIcon.RegisterCallback(c => - { - GraphEventHandler.RegisterEvent(GraphEventType.WindowUpdate, UpdateNode); - }); - m_ExecutionStatusIcon.RegisterCallback(c => - { - GraphEventHandler.UnregisterEvent(GraphEventType.WindowUpdate, UpdateNode); - }); - } - - /// - /// Updates the node with the current execution status icon. - /// - private void UpdateNode() - { - if (m_BehaviorTree == null || m_BehaviorTree.Entity == Entity.Null || m_Node.ConnectedIndex == ushort.MaxValue || !m_BehaviorTree.World.EntityManager.Exists(m_BehaviorTree.Entity)) { - return; - } - - var connectedNode = m_GraphWindow.Graph.LogicNodes[m_Node.ConnectedIndex]; - // The tree may not be initialized. - if (connectedNode.RuntimeIndex == ushort.MaxValue) { - return; - } - var taskComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - var taskComponent = taskComponents[connectedNode.RuntimeIndex]; - if (taskComponent.Status == TaskStatus.Success) { - m_ExecutionStatusIcon.image = m_SuccessIcon; - } else if (taskComponent.Status == TaskStatus.Failure) { - m_ExecutionStatusIcon.image = m_FailureIcon; - } else if (m_ExecutionStatusIcon.image != null) { - m_ExecutionStatusIcon.image = null; - } - - if (m_ExecutionStatusIcon.image != null) { - m_ExecutionStatusIcon.style.width = m_ExecutionStatusIcon.image.width; - } - - if (taskComponent.Status == TaskStatus.Running || taskComponent.Status == TaskStatus.Queued) { - m_EventNode.SetColorState(ColorState.Active, 0); - } else { - var nodeIndex = m_GraphWindow.GraphEditor.GetNodeIndex(m_Node); - m_EventNode.SetColorState(m_GraphWindow.Graph.IsNodeEnabled(false, nodeIndex) ? ColorState.Default : ColorState.Disabled, 0.5f); - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/EventNodeViewControl.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/EventNodeViewControl.cs.meta deleted file mode 100644 index 1cbbe555..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/EventNodeViewControl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6c90fafbcac7a174c9d9b765d9065ef0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/Opsive.BehaviorDesigner.Editor.Controls.NodeViews.asmdef b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/Opsive.BehaviorDesigner.Editor.Controls.NodeViews.asmdef deleted file mode 100644 index dba7113b..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/Opsive.BehaviorDesigner.Editor.Controls.NodeViews.asmdef +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "Opsive.BehaviorDesigner.Editor.Controls.NodeViews", - "rootNamespace": "", - "references": [ - "GUID:734d92eba21c94caba915361bd5ac177", - "GUID:d8b63aba1907145bea998dd612889d6b", - "GUID:e0cd26848372d4e5c891c569017e11f1", - "GUID:bbb15c76beca87041af309d0035105a2", - "GUID:27cb7fd045e5bb44f8c617ce69325b1d", - "GUID:f9fbcd65fc33f6847b0f124cf7e891b6", - "GUID:97a55b351d7460f4f87d2ad07066bf4e", - "GUID:cf0567158f87e3c4c9be32bb870ec7b9", - "GUID:e9319bc8ab9315745bdf80aeffa01d6d" - ], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [ - { - "name": "com.unity.entities", - "expression": "1.3.5", - "define": "UNITY_ENTITIES" - } - ], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/Opsive.BehaviorDesigner.Editor.Controls.NodeViews.asmdef.meta b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/Opsive.BehaviorDesigner.Editor.Controls.NodeViews.asmdef.meta deleted file mode 100644 index fcb9f7fa..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/Opsive.BehaviorDesigner.Editor.Controls.NodeViews.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 98e4b74cf0784f4458e03260557a6cc4 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/PriorityEvaluatorNodeViewControl.cs b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/PriorityEvaluatorNodeViewControl.cs deleted file mode 100644 index 95000b2d..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/PriorityEvaluatorNodeViewControl.cs +++ /dev/null @@ -1,95 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Controls.NodeViews -{ - using Opsive.GraphDesigner.Editor; - using Opsive.GraphDesigner.Editor.Events; - using Opsive.GraphDesigner.Runtime; - using Opsive.BehaviorDesigner.Runtime; - using Opsive.BehaviorDesigner.Runtime.Systems; - using Opsive.BehaviorDesigner.Runtime.Tasks.Decorators; - using Opsive.Shared.Editor.UIElements.Controls; - using Unity.Entities; - using UnityEngine; - using UnityEngine.UIElements; - - /// - /// Implements TypeControlBase for the PriorityEvaluator type. - /// - [ControlType(typeof(PriorityEvaluator))] - public class PriorityEvaluatorNodeViewControl : TaskNodeViewControl - { - private BehaviorTree m_BehaviorTree; - private ILogicNode m_Node; - private ushort m_PriorityEvaluatorComponentIndex = ushort.MaxValue; - - private Label m_PriorityValueLabel; - - /// - /// Addes the UIElements for the specified runtime node to the editor Node within the graph. - /// - /// A reference to the GraphWindow. - /// The parent UIElement that should contain the node UIElements. - /// The node that the control represents. - public override void AddNodeView(GraphWindow graphWindow, VisualElement parent, object node) - { - base.AddNodeView(graphWindow, parent, node); - - if (!Application.isPlaying) { - return; - } - - m_BehaviorTree = graphWindow.Graph as BehaviorTree; - m_Node = node as ILogicNode; - - parent.RegisterCallback(c => - { - GraphEventHandler.RegisterEvent(GraphEventType.WindowUpdate, UpdateUtilityValue); - }); - parent.RegisterCallback(c => - { - GraphEventHandler.UnregisterEvent(GraphEventType.WindowUpdate, UpdateUtilityValue); - }); - - m_PriorityValueLabel = new Label(); - m_PriorityValueLabel.style.alignSelf = Align.Center; - parent.Add(m_PriorityValueLabel); - } - - /// - /// Updates the utility value. - /// - private void UpdateUtilityValue() - { - if (m_BehaviorTree == null || m_BehaviorTree.Entity == Entity.Null || m_Node.RuntimeIndex == ushort.MaxValue) { - return; - } - - var taskObjectComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - if (m_PriorityEvaluatorComponentIndex == ushort.MaxValue) { - // Find the corresponding index of the TaskObject. - for (int i = 0; i < taskObjectComponents.Length; ++i) { - if (taskObjectComponents[i].Index == m_Node.RuntimeIndex) { - m_PriorityEvaluatorComponentIndex = (ushort)i; - break; - } - } - - if (m_PriorityEvaluatorComponentIndex == ushort.MaxValue) { - return; - } - } - - var priorityEvaluator = m_BehaviorTree.GetTask(taskObjectComponents[m_PriorityEvaluatorComponentIndex].Index) as PriorityEvaluator; - if (priorityEvaluator == null) { - return; - } - m_PriorityValueLabel.text = "Value: " + priorityEvaluator.GetPriorityValue(); - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/PriorityEvaluatorNodeViewControl.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/PriorityEvaluatorNodeViewControl.cs.meta deleted file mode 100644 index fd08bbd9..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/PriorityEvaluatorNodeViewControl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a9387930721f1dd42909d2053f5063ef -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/StackedTaskNodeViewControl.cs b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/StackedTaskNodeViewControl.cs deleted file mode 100644 index dc778f06..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/StackedTaskNodeViewControl.cs +++ /dev/null @@ -1,134 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Controls.NodeViews -{ - using Opsive.GraphDesigner.Editor; - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.Shared.Editor.UIElements.Controls; - using UnityEngine.UIElements; - using UnityEditor; - using UnityEngine; - - /// - /// Implements TypeControlBase for the StackedTask type. - /// - [ControlType(typeof(StackedTask))] - public class StackedTaskNodeViewControl : TaskNodeViewControl - { - private const float c_ActiveIconRotationSpeed = 30; - - /// - /// Displays information about the nested task within the Stacked Task. - /// - private class TaskView : VisualElement - { - private const string c_DarkActiveIconGUID = "1230b934cbd748345b13125468a34720"; - private const string c_LightActiveIconGUID = "e57f179ee476f274dbe537179e67bf04"; - - private int m_Index; - private Image m_ActiveImage; - private float m_CurrentRotation; - - /// - /// TaskView constructor. - /// - /// The index of the task. - /// A reference to the task. - public TaskView(int index, Task task) - { - m_Index = index; - - var horizontalLayout = new VisualElement(); - horizontalLayout.AddToClassList("horizontal-layout"); - horizontalLayout.style.height = 18; - var label = new Label(task.ToString()); - label.style.flexGrow = 1; - horizontalLayout.Add(label); - m_ActiveImage = new Image(); - m_ActiveImage.image = Shared.Editor.Utility.EditorUtility.LoadAsset(EditorGUIUtility.isProSkin ? c_DarkActiveIconGUID : c_LightActiveIconGUID); - m_ActiveImage.style.width = 16; - m_ActiveImage.style.height = 16; - m_ActiveImage.style.display = DisplayStyle.None; - horizontalLayout.Add(m_ActiveImage); - - Add(horizontalLayout); - } - - /// - /// Updates the status of the task. - /// - /// The index that is active. - public void UpdateStatus(int activeIndex) - { - m_ActiveImage.style.display = (m_Index == activeIndex ? DisplayStyle.Flex : DisplayStyle.None); - if (m_Index == activeIndex) { - if (Application.isPlaying) { - m_CurrentRotation += c_ActiveIconRotationSpeed; - m_ActiveImage.style.rotate = new Rotate(Angle.Degrees(m_CurrentRotation)); - } - } else { - m_CurrentRotation = 0f; - m_ActiveImage.style.rotate = new Rotate(Angle.Degrees(0f)); - } - } - } - - private StackedTask m_StackedTask; - private TaskView[] m_TaskViews; - - /// - /// Addes the UIElements for the specified runtime node to the editor Node within the graph. - /// - /// A reference to the GraphWindow. - /// The parent UIElement that should contain the node UIElements. - /// The node that the control represents. - public override void AddNodeView(GraphWindow graphWindow, VisualElement parent, object node) - { - base.AddNodeView(graphWindow, parent, node); - - m_StackedTask = node as StackedTask; - if (m_StackedTask.Tasks == null) { - return; - } - - var tasks = m_StackedTask.Tasks; - m_TaskViews = new TaskView[tasks.Length]; - for (int i = 0; i < tasks.Length; ++i) { - var task = m_StackedTask.Tasks[i]; - // The task no longer exists. Replace it. - if (task == null) { - tasks[i] = new UnknownTask(); - m_StackedTask.Tasks = tasks; - } - m_TaskViews[i] = new TaskView(i, m_StackedTask.Tasks[i]); - parent.Add(m_TaskViews[i]); - } - } - - /// - /// Internal method which updates the node with the current execution status. - /// - /// The status of the task. - protected override TaskStatus UpdateNodeInternal() - { - var activeIndex = -1; - TaskStatus status; - if ((status = base.UpdateNodeInternal()) == TaskStatus.Running && m_StackedTask.Tasks.Length > 1) { - activeIndex = m_StackedTask.ActiveIndex; - for (int i = 0; i < m_TaskViews.Length; ++i) { - m_TaskViews[i].UpdateStatus(activeIndex); - } - } else { - for (int i = 0; i < m_TaskViews.Length; ++i) { - m_TaskViews[i].UpdateStatus(activeIndex); - } - } - return status; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/StackedTaskNodeViewControl.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/StackedTaskNodeViewControl.cs.meta deleted file mode 100644 index 9d011c5a..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/StackedTaskNodeViewControl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 40ae380983a04824fb14ea4a89343e87 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/TaskNodeViewControl.cs b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/TaskNodeViewControl.cs deleted file mode 100644 index 8b14d136..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/TaskNodeViewControl.cs +++ /dev/null @@ -1,288 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Controls.NodeViews -{ - using Opsive.Shared.Editor.UIElements.Controls; - using Opsive.BehaviorDesigner.Runtime; - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.GraphDesigner.Editor; - using Opsive.GraphDesigner.Editor.Controls.NodeViews; - using Opsive.GraphDesigner.Editor.Elements; - using Opsive.GraphDesigner.Editor.Events; - using Opsive.GraphDesigner.Runtime; - using Unity.Entities; - using UnityEngine.UIElements; - using UnityEngine; - using UnityEditor; - - /// - /// Adds UI elements within the task node. - /// - [ControlType(typeof(IAction))] - [ControlType(typeof(IConditional))] - [ControlType(typeof(IComposite))] - [ControlType(typeof(IDecorator))] - public class TaskNodeViewControl : NodeViewBase - { - private const string c_DarkConditionalAbortLowerPriorityIconGUID = "ba6528926e3f4f7438d3b9737f595ec6"; - private const string c_LightConditionalAbortLowerPriorityIconGUID = "20be04a2e46cb9d40b601dccdfbe153b"; - private const string c_DarkConditionalAbortSelfIconGUID = "ff3ba64f23e708645b24cc7509b5ebe5"; - private const string c_LightConditionalAbortSelfIconGUID = "5d44e66bacdbe51408dd30e519c2b318"; - private const string c_DarkConditionalAbortBothIconGUID = "1c01950cc0f1c994cb5ff3576969ebbf"; - private const string c_LightConditionalAbortBothIconGUID = "90b22fc04519bdb44b4d83665e86381d"; - - private const string c_DarkSuccessIconGUID = "240eed9b6e6dc004f94216f1e9fcc390"; - private const string c_LightSuccessIconGUID = "cf3f27e8ca1f20f4680890e078c7613a"; - private const string c_DarkSuccessReevaluateIconGUID = "0a5037ce131729b4fa0ffa9e1e13d387"; - private const string c_LightSuccessReevaluateIconGUID = "bba6bdc3af0aac44dadd1ca3a8485b05"; - private const string c_DarkFailureIconGUID = "8d159db7a8da43e41a50a77e43cfd6ba"; - private const string c_LightFailureIconGUID = "c3622912d9f7bcd41a54a95add672423"; - private const string c_DarkFailureReevaluateIconGUID = "26de8afeb313fd84291f98e68db44df7"; - private const string c_LightFailureReevaluateIconGUID = "5a6d713911c8ec3488639e2934329033"; - - private ILogicNode m_Node; - private GraphWindow m_GraphWindow; - private BehaviorTree m_BehaviorTree; - - private Image m_ExecutionStatusIcon; - private Image m_ConditionalAbortIcon; - private LogicNode m_LogicNode; - - private Texture m_SuccessIcon; - private Texture m_SuccessReevaluateIcon; - private Texture m_FailureIcon; - private Texture m_FailureReevaluateIcon; - - /// - /// Addes the UIElements for the specified runtime node to the editor Node within the graph. - /// - /// A reference to the GraphWindow. - /// The parent UIElement that should contain the node UIElements. - /// The node that the control represents. - public override void AddNodeView(GraphWindow graphWindow, VisualElement parent, object node) - { - graphWindow.rootVisualElement.styleSheets.Add(Shared.Editor.Utility.EditorUtility.LoadAsset("9c6834c10d404ac4b95be745f4411f96")); // TaskStyles.uss - - m_Node = node as ILogicNode; - m_GraphWindow = graphWindow; - m_BehaviorTree = m_GraphWindow.Graph as BehaviorTree; - m_LogicNode = parent.GetFirstAncestorOfType(); - - if (node is IConditionalAbortParent conditionalAbortParent) { - m_ConditionalAbortIcon = new Image(); - m_ConditionalAbortIcon.name = "conditional-abort-icon"; - parent.parent.Add(m_ConditionalAbortIcon); - SetConditionalAbortIcon(conditionalAbortParent); - - m_ConditionalAbortIcon.RegisterCallback(c => - { - GraphEventHandler.RegisterEvent(GraphEventType.NodeValueUpdated, UpdateNodeValue); - }); - m_ConditionalAbortIcon.RegisterCallback(c => - { - GraphEventHandler.UnregisterEvent(GraphEventType.NodeValueUpdated, UpdateNodeValue); - }); - } - - // Subtree references can click into its references. - if (m_Node is ISubtreeReference) { - m_LogicNode.RegisterCallback(OnSubtreeRferenceMouseDown); - } - - // AddNodeView can be called multiple times. Ensure there is only one execution status image. - var previousExecutionStatus = m_LogicNode.Q("execution-status"); - if (previousExecutionStatus != null) { - previousExecutionStatus.parent.Remove(previousExecutionStatus); - } - m_ExecutionStatusIcon = new Image(); - m_ExecutionStatusIcon.name = "execution-status"; - parent.parent.Add(m_ExecutionStatusIcon); // The execution status icon should be placed behind every node element. - m_ExecutionStatusIcon.SendToBack(); - - m_SuccessIcon = Shared.Editor.Utility.EditorUtility.LoadAsset(EditorGUIUtility.isProSkin ? c_DarkSuccessIconGUID : c_LightSuccessIconGUID); - m_SuccessReevaluateIcon = Shared.Editor.Utility.EditorUtility.LoadAsset(EditorGUIUtility.isProSkin ? c_DarkSuccessReevaluateIconGUID : c_LightSuccessReevaluateIconGUID); - m_FailureIcon = Shared.Editor.Utility.EditorUtility.LoadAsset(EditorGUIUtility.isProSkin ? c_DarkFailureIconGUID : c_LightFailureIconGUID); - m_FailureReevaluateIcon = Shared.Editor.Utility.EditorUtility.LoadAsset(EditorGUIUtility.isProSkin ? c_DarkFailureReevaluateIconGUID : c_LightFailureReevaluateIconGUID); - - m_ExecutionStatusIcon.RegisterCallback(c => - { - GraphEventHandler.RegisterEvent(GraphEventType.WindowUpdate, UpdateNode); - m_GraphWindow.OnSelectionChange += OnSelectionChange; - }); - m_ExecutionStatusIcon.RegisterCallback(c => - { - GraphEventHandler.UnregisterEvent(GraphEventType.WindowUpdate, UpdateNode); - m_GraphWindow.OnSelectionChange -= OnSelectionChange; - }); - OnSelectionChange(Selection.activeObject); - } - - /// - /// Sets the conditional abort icon. - /// - /// The conditional abort node. - private void SetConditionalAbortIcon(IConditionalAbortParent conditionalAbortParent) - { - if (conditionalAbortParent.AbortType == ConditionalAbortType.LowerPriority) { - m_ConditionalAbortIcon.image = Shared.Editor.Utility.EditorUtility.LoadAsset(EditorGUIUtility.isProSkin ? c_DarkConditionalAbortLowerPriorityIconGUID : c_LightConditionalAbortLowerPriorityIconGUID); - } else if (conditionalAbortParent.AbortType == ConditionalAbortType.Self) { - m_ConditionalAbortIcon.image = Shared.Editor.Utility.EditorUtility.LoadAsset(EditorGUIUtility.isProSkin ? c_DarkConditionalAbortSelfIconGUID : c_LightConditionalAbortSelfIconGUID); - } else if (conditionalAbortParent.AbortType == ConditionalAbortType.Both) { - m_ConditionalAbortIcon.image = Shared.Editor.Utility.EditorUtility.LoadAsset(EditorGUIUtility.isProSkin ? c_DarkConditionalAbortBothIconGUID : c_LightConditionalAbortBothIconGUID); - } else { - m_ConditionalAbortIcon.image = null; - } - } - - /// - /// A value has been updated for the specified node. - /// - /// The node that has been updated. - private void UpdateNodeValue(object node) - { - if (node != m_Node) { - return; - } - - SetConditionalAbortIcon(node as IConditionalAbortParent); - } - - /// - /// Updates the node with the current execution status. - /// - private void UpdateNode() - { - UpdateNodeInternal(); - } - - /// - /// Internal method which updates the node with the current execution status. - /// - /// The status of the task. - protected virtual TaskStatus UpdateNodeInternal() - { - if (m_BehaviorTree == null || m_BehaviorTree.Entity == Entity.Null || m_Node.RuntimeIndex == ushort.MaxValue || !m_BehaviorTree.World.EntityManager.Exists(m_BehaviorTree.Entity)) { - // The task is no longer active. Reset the status while keeping the previous execution state. - m_LogicNode.SetColorState(m_GraphWindow.GraphEditor.IsNodeHierarchyEnabled(m_Node) ? ColorState.Default : ColorState.Disabled, 0.5f); - if (m_ExecutionStatusIcon.image != null) { - if (m_ExecutionStatusIcon.image == m_SuccessReevaluateIcon) { - m_ExecutionStatusIcon.image = m_SuccessIcon; - } else if (m_ExecutionStatusIcon.image == m_FailureReevaluateIcon) { - m_ExecutionStatusIcon.image = m_FailureIcon; - } - m_ExecutionStatusIcon.style.width = m_ExecutionStatusIcon.image.width; - } - return TaskStatus.Inactive; - } - - var taskComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - var taskComponent = taskComponents[m_Node.RuntimeIndex]; - if (taskComponent.Status == TaskStatus.Success) { - if (taskComponent.Reevaluate) { - m_ExecutionStatusIcon.image = m_SuccessReevaluateIcon; - } else { - m_ExecutionStatusIcon.image = m_SuccessIcon; - } - } else if (taskComponent.Status == TaskStatus.Failure) { - if (taskComponent.Reevaluate) { - m_ExecutionStatusIcon.image = m_FailureReevaluateIcon; - } else { - m_ExecutionStatusIcon.image = m_FailureIcon; - } - } else if (m_ExecutionStatusIcon.image != null) { - m_ExecutionStatusIcon.image = null; - } - - if (m_ExecutionStatusIcon.image != null) { - m_ExecutionStatusIcon.style.width = m_ExecutionStatusIcon.image.width; - } - - if (taskComponent.Status == TaskStatus.Running || taskComponent.Status == TaskStatus.Queued) { - m_LogicNode.SetColorState(ColorState.Active, 0); - } else { - m_LogicNode.SetColorState(m_GraphWindow.GraphEditor.IsNodeHierarchyEnabled(m_Node) ? ColorState.Default : ColorState.Disabled, 0.5f); - } - return taskComponent.Status; - } - - /// - /// Enables or disables the NodeView. - /// - /// True if the NodeView is enabled. - public override void SetEnabled(bool enable) - { - if (m_ConditionalAbortIcon != null) { - m_ConditionalAbortIcon.SetEnabled(enable); - } - } - - /// - /// The mouse has been pressed. - /// - /// The event that triggered the press. - private void OnSubtreeRferenceMouseDown(MouseDownEvent evt) - { - if (evt.clickCount != 2) { - return; - } - - var subtreeReference = m_Node as ISubtreeReference; - if (subtreeReference.Subtrees == null) { - return; - } - - for (int i = 0; i < subtreeReference.Subtrees.Length; ++i) { - var subtree = subtreeReference.Subtrees[i]; - if (subtree == null) { - continue; - } - - Selection.activeObject = subtree; - } - } - - /// - /// The GraphWindow selection has changed. - /// - /// The new selection. - private void OnSelectionChange(UnityEngine.Object selection) - { - if (!Application.isPlaying || m_BehaviorTree == null || m_BehaviorTree.Entity == Entity.Null || !m_BehaviorTree.enabled || !m_BehaviorTree.Baked) { - return; - } - - // The behavior tree was baked. Ensure the BehaviorTree component is pointing to the correct Entity. - var worlds = World.All; - var foundEntity = false; - for (int i = 0; i < worlds.Count; ++i) { - var defaultEntities = worlds[i].EntityManager.GetAllEntities(Unity.Collections.Allocator.Temp); - if (defaultEntities != null) { - var originalGuid = m_BehaviorTree.World.EntityManager.GetComponentData(m_BehaviorTree.Entity); - - foreach (var defaultEntity in defaultEntities) { - if (worlds[i].EntityManager.HasComponent(defaultEntity)) { - var entityGuid = worlds[i].EntityManager.GetComponentData(defaultEntity); - if (originalGuid.OriginatingId == entityGuid.OriginatingId) { - m_BehaviorTree.World = worlds[i]; - m_BehaviorTree.Entity = defaultEntity; - foundEntity = true; - break; - } - } - } - defaultEntities.Dispose(); - if (foundEntity) { - m_BehaviorTree.Baked = false; - break; - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/TaskNodeViewControl.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/TaskNodeViewControl.cs.meta deleted file mode 100644 index 0057d337..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/TaskNodeViewControl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 34ab799a714c2db4ab2d69566510bfc4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/UtilityEvaluatorNodeViewControl.cs b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/UtilityEvaluatorNodeViewControl.cs deleted file mode 100644 index 67fda654..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/UtilityEvaluatorNodeViewControl.cs +++ /dev/null @@ -1,95 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Controls.NodeViews -{ - using Opsive.GraphDesigner.Editor; - using Opsive.GraphDesigner.Editor.Events; - using Opsive.GraphDesigner.Runtime; - using Opsive.BehaviorDesigner.Runtime; - using Opsive.BehaviorDesigner.Runtime.Systems; - using Opsive.BehaviorDesigner.Runtime.Tasks.Decorators; - using Opsive.Shared.Editor.UIElements.Controls; - using Unity.Entities; - using UnityEngine; - using UnityEngine.UIElements; - - /// - /// Implements TypeControlBase for the UtilityEvaluator type. - /// - [ControlType(typeof(UtilityEvaluator))] - public class UtilityEvaluatorNodeViewControl : TaskNodeViewControl - { - private BehaviorTree m_BehaviorTree; - private ILogicNode m_Node; - private ushort m_UtilityEvaluatorComponentIndex = ushort.MaxValue; - - private Label m_UtilityValueLabel; - - /// - /// Addes the UIElements for the specified runtime node to the editor Node within the graph. - /// - /// A reference to the GraphWindow. - /// The parent UIElement that should contain the node UIElements. - /// The node that the control represents. - public override void AddNodeView(GraphWindow graphWindow, VisualElement parent, object node) - { - base.AddNodeView(graphWindow, parent, node); - - if (!Application.isPlaying) { - return; - } - - m_BehaviorTree = graphWindow.Graph as BehaviorTree; - m_Node = node as ILogicNode; - - parent.RegisterCallback(c => - { - GraphEventHandler.RegisterEvent(GraphEventType.WindowUpdate, UpdateUtilityValue); - }); - parent.RegisterCallback(c => - { - GraphEventHandler.UnregisterEvent(GraphEventType.WindowUpdate, UpdateUtilityValue); - }); - - m_UtilityValueLabel = new Label(); - m_UtilityValueLabel.style.alignSelf = Align.Center; - parent.Add(m_UtilityValueLabel); - } - - /// - /// Updates the utility value. - /// - private void UpdateUtilityValue() - { - if (m_BehaviorTree == null || m_BehaviorTree.Entity == Entity.Null || m_Node.RuntimeIndex == ushort.MaxValue) { - return; - } - - var taskObjectComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - if (m_UtilityEvaluatorComponentIndex == ushort.MaxValue) { - // Find the corresponding index of the TaskObject. - for (int i = 0; i < taskObjectComponents.Length; ++i) { - if (taskObjectComponents[i].Index == m_Node.RuntimeIndex) { - m_UtilityEvaluatorComponentIndex = (ushort)i; - break; - } - } - - if (m_UtilityEvaluatorComponentIndex == ushort.MaxValue) { - return; - } - } - - var utilityEvaluator = m_BehaviorTree.GetTask(taskObjectComponents[m_UtilityEvaluatorComponentIndex].Index) as UtilityEvaluator; - if (utilityEvaluator == null) { - return; - } - m_UtilityValueLabel.text = "Value: " + System.Math.Round(utilityEvaluator.GetUtilityValue(), 3); - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/UtilityEvaluatorNodeViewControl.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/UtilityEvaluatorNodeViewControl.cs.meta deleted file mode 100644 index ecb0e9e7..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/UtilityEvaluatorNodeViewControl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a1a209242018ecc418ad24f5427f88f1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/WaitNodeViewControl.cs b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/WaitNodeViewControl.cs deleted file mode 100644 index 39e3c316..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/WaitNodeViewControl.cs +++ /dev/null @@ -1,111 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Editor.Controls.NodeViews -{ - using Opsive.BehaviorDesigner.Runtime; - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - using Opsive.GraphDesigner.Editor; - using Opsive.GraphDesigner.Editor.Events; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Editor.UIElements.Controls; - using Unity.Entities; - using UnityEngine; - using UnityEngine.UIElements; - - /// - /// Implements TypeControlBase for the Wait type. - /// - [ControlType(typeof(Wait))] - public class WaitNodeViewControl : TaskNodeViewControl - { - private BehaviorTree m_BehaviorTree; - private ILogicNode m_Node; - private ushort m_WaitComponentIndex = ushort.MaxValue; - private ProgressBar m_ProgressBar; - - /// - /// Addes the UIElements for the specified runtime node to the editor Node within the graph. - /// - /// A reference to the GraphWindow. - /// The parent UIElement that should contain the node UIElements. - /// The node that the control represents. - public override void AddNodeView(GraphWindow graphWindow, VisualElement parent, object node) - { - base.AddNodeView(graphWindow, parent, node); - - if (!Application.isPlaying) { - return; - } - - m_BehaviorTree = graphWindow.Graph as BehaviorTree; - m_Node = node as ILogicNode; - - parent.RegisterCallback(c => - { - GraphEventHandler.RegisterEvent(GraphEventType.WindowUpdate, UpdateWaitProgress); - }); - parent.RegisterCallback(c => - { - GraphEventHandler.UnregisterEvent(GraphEventType.WindowUpdate, UpdateWaitProgress); - }); - - m_ProgressBar = new ProgressBar(); - parent.Add(m_ProgressBar); - } - - /// - /// Updates the wait progress bar. - /// - private void UpdateWaitProgress() - { - if (m_BehaviorTree == null || m_BehaviorTree.Entity == Entity.Null || m_Node.RuntimeIndex == ushort.MaxValue) { - m_ProgressBar.style.display = DisplayStyle.None; - return; - } - - var waitComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - if (m_WaitComponentIndex == ushort.MaxValue) { - // Find the corresponding index of the WaitComponent. - for (int i = 0; i < waitComponents.Length; ++i) { - if (waitComponents[i].Index == m_Node.RuntimeIndex) { - m_WaitComponentIndex = (ushort)i; - break; - } - } - - if (m_WaitComponentIndex == ushort.MaxValue) { - return; - } - } - - var waitComponent = waitComponents[m_WaitComponentIndex]; - if (waitComponent.PauseTime != 0) { - return; - } - m_ProgressBar.highValue = (float)waitComponent.WaitDuration; - - var taskComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - var elapsed = -1f; - if (taskComponents[m_Node.RuntimeIndex].Status == Runtime.Tasks.TaskStatus.Running) { - elapsed = Mathf.Clamp(Time.time - (float)waitComponent.StartTime, 0, (float)waitComponent.WaitDuration); - m_ProgressBar.value = elapsed; - } else if (taskComponents[m_Node.RuntimeIndex].Status == Runtime.Tasks.TaskStatus.Success) { - elapsed = (float)waitComponent.WaitDuration; - m_ProgressBar.value = elapsed; - } else if (taskComponents[m_Node.RuntimeIndex].Status == Runtime.Tasks.TaskStatus.Inactive) { - m_ProgressBar.value = 0; - } - - m_ProgressBar.title = (elapsed >= 0 ? System.Math.Round(elapsed, 2).ToString() + "/" : string.Empty) + System.Math.Round(waitComponent.WaitDuration, 2).ToString() + "s"; - if (m_ProgressBar.style.display == DisplayStyle.None) { - m_ProgressBar.style.display = DisplayStyle.Flex; - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/WaitNodeViewControl.cs.meta b/Packages/com.opsive.behaviordesigner/Editor/NodeViews/WaitNodeViewControl.cs.meta deleted file mode 100644 index 12da59d9..00000000 --- a/Packages/com.opsive.behaviordesigner/Editor/NodeViews/WaitNodeViewControl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c971440ad87a6904daefedbbbd9b5cd4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Editor/Opsive.BehaviorDesigner.Editor.dll b/Packages/com.opsive.behaviordesigner/Editor/Opsive.BehaviorDesigner.Editor.dll deleted file mode 100644 index 87e3cef3da66fb18d5962e9bb5bb38e4726cac79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56320 zcmcG%3t(JTwKu-zoHJ*hN#ZJCkbs@N>U2;T>^!^q2*yolW7~8=7gD~ zrG!9h5#$O8g1uTmp@IsCfO1g;`9x4rL5p%hd|gp4;_E8H^-cNz*4pQsIg_N~z5nkk z%szXqz4qE`uf6u#YwxpXa^|@=kWNGfK5xHG^aVWm-(pGsak3x9<Sw2K+}T&CAI#f3^4+`Zd%6b(?4kN?x%&L@Kz-jp{qi*%>UZ0{xwf*hXrse=?FypR z0gd)9+t=r|_ET!8j|JuseIFQ2VL$OlJnK0h;3Oe=l(F3W&wWxo%AGnoEq*VP^8dxB z12PK#Hh}LMl|4=xpg2mt|0Yq#aVRE4*As<(1!2Ia`QWyp+$BSRKm7s{l==G#NdDCm zUD%e-_1irpGDzRKZ$D7wZn~Igshj_wKCfoI;vdVVQIHz1AbM!n(Xy2M&ywVv0EJKm zqhL`wnk92KCFkhWDg4PQ*hFU3)JMyB%rtX^pBW_4VW>F}3z^5vL68*6fy#hOwmB5f zQh0WQmccMaX*PkMMjr$}*sVpEvk_EfER@AUEfEFBvwQQXJD8~iI%-~@I;NLJT58Bl z9nK_yN*b1tLB;HTuI=)u=8~WlY-y(qc&ozvNz5mWqD&2vW@%3$Cjq9+WKP{?m7r4? zHG6XYE2uiVP1B7`tq_UqL3$5lhrL>bi&+fhXnPEzik$XaMC?@;CFdFpb&N7um$J6cTxK znhSY?tjm<}%0RYk)J)qALft_7PhO7fp=E^`%%f4TPIZihK~OT8Tt5@x4w+giWj8UE z@DET7<>(yBn}Kz0Ld`485sNhLq$vf=@AsewCyVr`*|LNtUkBmP;iJ3p$jk%_^!h05 z$OUSSg0BlqItue~fLO;T!ODn-Th5>rA;4&hFze>&wrAi|Ky_uk1Uowr}qC3 zC!eHKO4wpFc<#Uk*__b#)=>U47`bdP{{=jh)|Bnv1RCfRG{dZ!mib4gyYlHnjIlFd z(mMI*q6yHcV}WcSl?|k!+m&P-_0*A>g-V!0<#cqJTQ8n%F^W183d|!=EH6?-Ni{07 zROaRrkPnj?@{Qq+CTEg?HY_>{=chCu@8JF%WuGI18}B#>SRdc)3^I7$a`SsU;_Q~A zdyBwoy*P*>txRWBxTHvv(TiiNXiUpwru&LCMwRPxV8XEDI&B07Y`_WWqmqfHXSW@l z<5oa^p)bGI%TK;Mi~3w0!(xE!Qm-gl#b``51LJN`IouVzprvJ6xJ5!ka6yK~lhGVy zvP>%qqJ=i3u~anf1sN+EI`}L6)=;mZiy_4-87-jLgD`T#5?OAx!-#HoRoi zqr*bUbZ|Ki7oh{IDK^%DA{~^*bc>npWaJe;_=129(}muf$q@=V(rG(70ME#F57vQ} zm?6)qV>&Dvwv~d`1f%d7I4v`lJyAE>B6^EyRI%l!;S7S5ie>9``xLZcNSZknS?DoH z=~&i4spA_p`a9aJkT#9Bl-`mwS`xbbE~&_=utdcOrIJR+Q4s6H^^h%UqBSu-Rq`-O z40|zZsM;uGt5by^kwRwY6^5)(i^)8*S19G%OHgbtMKTNnoD$Q8Sv*@$VMF8r$FLQ4 zDxDs}kaKHs3fFU3cPxN;pNv?M*6(OKPczfBG0UUv<>oMZQs_`QhGf)=I!uCTG*6bY zPpoxnO)pV#Fw+QDMc)*pop9U<))%jOJOJEog;gP4O>~@&;t4wxReFp03zu^T9C6Dc zArbhP!3-_SYPpa?B6>?w(@mwg^yb4EOjr}1>&wt*6AOA1jSfmPaJf z@o_9m&UpFMm$Z^C8xXUofjn$TTgfV`>VMzRLT*U&%drBT_QNb!vf8T7G@)Zj!*6`; zVFhKKXL@roDB>nf^$0~$$FyWvGcs@oW|{_d~WgS_jhFNu3 zdb_zqQ#!ABP!AU?F+!ZRf@<<8+IFUjY zGNK5RQPYa52CN7w)LC^cwZu5nD^SHw8>SUGY(?!exIxK>RDl&u#(;=9yn^jhi$K(h zw1YOXIcr#v^yXs*Yh{`>jpJL?Xp;V+;JM9iPpp{KW(`BAdaJ%=GUcB_RAI%g-H&;l zS&fp+nJh$hxL_ ztfrPJ3fUwEnU=H0c6pXHtJwHrr*W@W*{ObQSV1eY1qKa6n5ffU zyH2Owc4u3&$G4lcvc-1YP8a8j*RJB_wd;0U#uV~2Y_{U4bruB2z&Bt{HdqbN9|DpV zt7YNSZ^6Eld9+%so&O=ailnzB+d3ZQylJ&XHm5h^arlUnKdev=PX$A0hmVle#`0Tjma3ebYt3Ca z5A%pRzJnf-6-l;te2#Obg?Zi1{o~HHAGX@vP6<+Vs@?5WJ38e8LGe#)GxMx@B38Sv zQ{E^^g~ie-r?vpa+VidXUTrSoPI_(&L;a?X&o096-Q3)HB0SRJk3v4YR}{aw<`UIcBxRkIMD zLsG83)9P%gmQt_4v2M?~L(_reLTjP)#q?>y^N1cP)~Aw%~b9tCBuS&EisrfIf|7p4qADTQGx-j(Z`Ke^@+W94h!F^i75R zDtN!F7?{RFV$7~M98N$7PN=;RXIwKV6c70YN%AHDu~VI?(1&AG%7X*`)^CJG5ssW% zSOq^$FV%TLALPcl0_?--q8JDEkedwsSU_!i;@Q(C?i!XerjorRwnx};m>A{7P)$N3 zqo_04Pd*Q(Y(dDi9Px7<4jb#juH} zPR2W~0<9v!_KmF|=0v#h3A<1d{L54_-Z|nfv&vM&9W>!0BCaoz{~=`F9*b1kFDU%Fka}YPA=1mApdC#;`P!R{KqEU~?H{84#Vp&6udo7VQJIAY%43QO5 zoyNirwme{H%uyP4PYd@#9%V_&kvn60)i}xQtlU zmZ9=wRikUzFo7O^4I7@;=OfqmVFE`($#lm{ut`Xr4)ZE2X6*DSS!30-#IZLCZ%#%# zzNV;L!XwBWw$ko$jGc*vkMNM9A|tj9>~t278QDqJB+*uSV%u=`MxJdru-`U#L&f@L z4&!VCVx!Y(D~+Cp;jGYc-XaiEwAgs)Y)$4^-oh&Bek<>EavVJ;b=h z*D@wpeS>~SA})jdL2>o9qEIAUofTKUPLnfm?5p|QLyn;Mw9Y*kVgGgnTEt5PE|(Jt zoUf}rC7)>Wp+m4^KS=!Tddo|!I-WvEG#Pb6%J1<(2fI<&D^FxBBqoNOm(U-k%2LU2 zb|z_90A(#ec?1>1hbwhCt!c)VY%?lCPrQI|MV$Gxemk8EqC>&ir+QsD0WGLAe1raq z&f)zB6eu@eP|Fuo$)z5q3$0FFx$6Vqh>JkPKaX13ySgt8k+WyM>>ofAB@FIFC;EUe5-`AGn58_F}|pwr=oByA30hsQ8N3!(qWkJd=gW}846t;HDYI>mTiM` zvTQp}AZezO(QG|?ZtU!ED#q(~(29nfJk}{VCd?+aJ;c;#{T`eg+-=8o&@HBD{BRQ9 z*oyN`)LpL1WP%oFRg#0T6wX2>I2N+X{82V*h2t(o%sNKH#iKJc$L&~UM?xxx2QM~p zmdJ{y)Oj?bv4z`Yv9+>SaM!HE986i3D_`YU`8a&4BCFC_F3qC9s2nRDA22IYmd;{Q z*F9KPCFHW8KZ}L3pgBNFa|nSJUR>%YOb&;}t$?BN?xAF6$oj`4Tyzg)&bHSKLEqmD*!@wdk+z>ByL-?-pY2nh)$tobXb&tFsg zeW)cAa%=LaPgwH-)J#c0bP~a79Of5o?AEYTu4h|v!mrWJZ1wCEtrzJS;9Nf3>dQk6F}8Z7jJz|L`pF-9?*qG%zUvuE(i6GT=FYKNCn zEa4Jbe>z@Ktn(nXL0k1=i;x-bA*XuHU}5n$(-8utK71t>5SRy)?^5ddcaNd`F|?tJ zfjEXHDqjHHDG=DN23DxsF+G2{ln-^>JZ3<6DAjtP*vm^}RuG(a%L$I;dj417quR2! zqelKsz?mJ$`LvcjS;INVg+Qu^G{%;WXx2emAw;tsN|}xgS#tGBQFB7*%*e}*mmOK&K0mFQi!q$dmDu5ovngY@4h35lv+{|yB{@M zV(OWe>B|SoEHAreo)3CHY|voD-VMq;g2C~kX1A;QwewmPS!MvVt@S=NI(Qp+dk_gk z;&#}qW_j(bF1B;!MD1j7Z6(^;>0>**5It_08L{&y8HURbv`qE^nF6;rghV_OED$cE z*q*OnuT9h*RJ7F)uB<`!C~HZ{Fms#?)rxRji*PqS%X@FI#B8Bm8I5W4ZQO)`6XkZ` zi#pHZk%HUln9mtL@=nH&V(+Ie%UE%H4|fbvXq2O(&YM7l=tQuo%w9$#6tXWtrnSMP z-Uq0~a-mBBDW$N-=2!?Xo#KW)0{k$y#D`5R4nhlDjl-*T*@{{TtJ1yX5Of=||6nO%82*R1Zla6I(bF}$MSdpB&&hz~;aGQ^v~bILc2EtW23>)sjRcgGU0 zRN)Z#K~yMQ0ZGQK{jm@$iRViPlw{&HhV3qBdODF2?7l=ohi6e*QFV#1mw*S$H}T{=mrHqa;_l@?F*!fNtQ>RyUr)}B$Df>R zB$e5Eo(taOEH}!7<)&+M6HZZHF|(Jt)A0Y*6vd)joT4RCO)ya(kckSpc+XvdCl4i- zb+|WP*3^cZ%NmMhVv|_%>)AH3L}QvUEhewGKiB9G7~v*O$$WQrBYcHxFUoO5Hy@*k zD@kJRl|I)Xrw-XFKSs7knDyA@7o%5R&D7uObQ^cD3$R zM2N%tNoZNwV*Yh3;F&mN+8;*WFXu#EL&pZFfi6ej2}PQqHw*7WUfpdxgxdSLNX2xT z+>3|d!X7i%06lyH2(b8P@V+kET5j59ywnM#B0cPK;?kC$dB4Mkra-P%)|dPn-?DVY zYxyT(jqhnk=|_kWDUg5_p+_?s)z=kp&A!Fu%kv9sBh3`~^vtzfpxYRpXta{@^GqlJ z_c61X>s5{9oH)It5g{0{3W&G(D)=ZSFYfv4nGZ0Hsby}!b9fFK9!1Nz>dt8fYd(h{ z_6PB7&R~*9l`31R1Q5egq{`LvNpmepnZtqOL2z&`o>Spwz_Cz%7&6))LZ0-H4He)3 zP$bBI1O=hYzcQxqVWjbJ{z0aNi;m*d_?U@MQC&*44>KwhR@F@{|0wtS79dA0$nNm_ z4v@Oyr!WrwKNt^o2FT}*=Z5hYI4zEZ|@ATmd|u4+)_?TIij?NjxgQFnJ(fGiq0L%J5j*Cg+rv-#9BdoY8LJSI%UI7vVz0nXzMmVqPacc-S$F+u_v!u1l?*! zvtlg22Hsy{kJtKhbvhx(?y@W9v-aI+!hRSDg=_53^D|_GkKmrg7dUU)kH{nQMSe^Q z8z!G7Wx1a+_P65+yY%(hnR8;4(q{}h3}SSAhYjg4RD$AnJALKV?*#M#_bOO0C0_9k zO&Pk4uPfoLLKbU*9D%aJ(0gpL(9_nZCKep~8;vkKm8>dKo@jiOte20MRSk}kb*oR- zIX+p7VkQNvqI9L(359*~IKqlNUwlelRC|K^? z`QHj%I~L)W+Or5Tuj5(8?6VPyMBrZJJT#QbJjS-d-%|UMWLWp`54$6025YgAM>orSB!aTXqjl>YT*7}GkC z!6cP+_{(@UI|d;I;<2Q-wPbysR9v5Z1 zvY%qb35oqx=7jK;9U0%&f#sc-N?O@d@#3Vi@>n&ztyWoyJCWAmQMhdbd1gHdf6e)r zWo;gXlQwY5@-?tR%g*Z^t6XM2AFezEGC(+h#;Yzw+5BEi`31gLvlefEEcqe|&OWgH zu)_A&!RfkFFx0pgRCt;tj5}C(%~Z#k0qJczm8|Kg<~&}?)qH^IN4^1KypB%U-$Z7F zg`9U$vGiL&wwzlEi!&=$;XVpVZQ)zT5Tg+ve<5a+9O3gR58t4<92=js6}M{aXHbOx zxZ*H*k>9f@Ol7{!DRj>lXO%n_)Y}``VNZ*+7xTlN;z)`@zsHaN0=5>QBcP(Y~og(ebkYX@9&oruJqRN zyO%7!ItvzcOljdNj(q6_cWhd}>5LZN&cS_}&X>^=%(I~bc8d#}GmcgBU{%h5Bn@h$ zikd9;l1Iy$F(Qvr!rdrQ&f6)Us=Dvz$YVds=HN$8)Ql)|#t1(gEuw#3dt%!&GE<%2 zx_7~y4q|D;ZJmX)V8S>az^R|v5{B;ZMP4=rzV{!Zs-y`u;pL}ke-~|l(QIc%x0E>< zw*ueeF9T_nq7?1oRU)qyj$`4)6c_s!e*SN`94A-r@zTZq9`n`g=kZX{K#i8c*)mpt z@2;%x`_3u%T%wF-VjqM!&??{*Rle_xki|eqb~8AQV(J@C7OT2prbZE87-sb-e63-c zmoe?g3!ogHj?o-N5Qd1BQ{^Lv@a-){^Wp?F!%I;|4i4cZPm`_n3FPA$w!e>BaDvW? z$lo(Dq~+`+FSt-dUW9>l!Qt={>iU@FKhIl-W9DTbDExrSj+vvJceXleuk%9`9FM_^ ziUH1cJqA}Chrx*GZG=_ktZ7OMV`X|nvE1)tdEhuKeX3ppwejwRUko&Q8s)XqGP!j`7+H8k+~8PeiA1UO9W zJrb0+!r0{g9A#7$%SQCV)nG4Qi-e@FFnTt}DigI6r#sQkJhuJ!vrPD|KU(r^ABO{M z;*3&#*bK#uB2+RQq>SbWBl5RH2y;Yg95b)=4PkKyJ-*Vz{z}(PTuFFJcan3;r~rBA zv%J?k@?v^JUi>%#XENJ>9YuE`Aj3-P^B{H1L9oQ3Jf8r-`f<+T8S)Lj*8MYKgt_7R zp!}*q4~Tf&Ba}yoaw5xdBT%fjR*zh9IJL3;ie_F#f~Zox?dEW2 zCgr~^TJUJ{RD#D%{~+4L`}TNt3%>ss_tn8E zpR|qdcEk}9VaVhi6!!M{N;FqWIbMP*Ika*Q2h}SJJ`Fr9U&2(a;>1+-^OxW~t+py$ zW&a8}yvNM^np@+SRp{*YVrxt|zNtxQN?b2H{QNy2SBF9XzUcvup2era5l`XxFm+g5 zFh_{#!*^kejk^XB`!{HWLkom;oihUH#Ze5XdLfrer!v1~(eSd2b&B_4oo|Dp@Ik1R zUx=Bb2zL##l1Ep&b@D%f4AUCz|3bY{1oFnwPrF5F=eGtT_U}-5#Qr_AuEMpS)UoOq zh$>T7a)cQw8(~Wv<;25_`bOD935vOozAjMp=pPieYV-}am^mqhzX{anPZi!6{cnfh zn0XVrQTQVlve!Yl^CvuT-I~L%5M<#7tm^#l(WAnjQKTF-ZV=mlVL}{qvsQ3ZxupwB zQ%!b0t^pKfXC`XIBZ#sv;l%Q}rOZw=40CZKFl8?Y3R@os@4tfL=tHj3PQ0kmPaTwK&9~28$e{qkC54DnWOzMHQ z7O?+01b$Jo+!%!yH_YB=8Z75Gm`0_M`5O<=-;uaRj8z66iqoph zTfocK8#^TfEsUQl>ad4jnSca?O`*z=W8NWMsS;MfZ7U@LVAe{9A;*p#q)&wo#*wr2S3cqnAR6Jf)7T4Q(xRDG%tdiiY<#Y$B7#~o)gE7-10lbjl$t2wCEEs zUkm$z&JMHAe!ykN%v(5rEAqTl$_oEO0EinWWYDe{fZk(p+i@6-h~7q6Wp3O!A8N7fF4qphr#oovZJViJz8sZ{bhc&6dlSkVLJc~42 znFbRpD#m~{UHYj4Pp;59_GsP|eK>(9pHqQ~f7^=RuPy~M1b{WB9R$aggrPFL5x|0{ zUO~zC3S+9kIP8WoCfhtt#io^OmzAMevBOL~@0Dh+$5~l9a2bv{j0|qKfpi;?6^y)r zl~99*)o~cl4U@hFnb1dmPwNq>9hh9ZkvO&UZV-VW!CdYIm*!~^yqfjsU1}M_AnK;QJ85h3BS{;h2fd zmRU&n5O=wVs?aeLGsG-dTzbsBhx2d_Ue!-{h0>p6<|i3Z3F<-;$>=l@act_&zow*N zSAh&?22Eu)P7CqU&rb0JVsfR-Ay%ZOmaYcj#i^Ko+P4t~IpY<%qqj8pXd|p6y9U{$ zS!o_ioyJx(37|b0NmE>XiBw_>_7mJ@*ha{Q*_NH}Q&o%Q1KblK_O=yHt&~%1Hrs_x zdDq@`teY@!1OYk4LAPs}y=u$H)SfyanvePvYo{-Dij0lLsV%lVEs>eVB~JS=N5VM4 zAE(-@bzd_jZWvPGw}IFmbh}>h74?emI=YnoDK^>BbY?mVK$}b5j#19t2I%3reN|9@a!qh4%O&k`C$|FPJeviFmJ%zgR;r| zhM#xSO|53LxIr7gKFF5TL!o>sHW7DqcnmJMf627tn@|*xpRX&*i>WH7PyPwOqrl2= zZzzoGhDgdBup{ln?hQe-w|Vq7oQR*DD5CROCb7)Qh!aIel%r9hGyuDeKJAQu1y;((d%zT8!Q7)RR9Wx(w5tn1d#v8wVeCr@O%3X$^<%jaKv)}D>kQcQ^E;UA* z@PJCh2cm0)6%1pMQPWi)ZANk71aOO*#h<&gv5&!OY1nh+iJJ%i!Y#K0%AmDuvt~LC zD!v#?^-mk&R_&`mt&K2i-JXX^Ls*al_Izfhjj%vII<@c@-#Ds}P2HW?2(IrEdDYS4 zOE4-GRGy6%nl(A`!*≫!!;}J~`Y~*M`w>wo&PXMRlVTWp1PIJf9p94Cr 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 - /// Container for managing behavior tree logic. - /// - public class BehaviorTree : MonoBehaviour, IGraph, IGraphComponent, ISharedVariableContainer - { - [Tooltip("The name of the behavior tree.")] - [SerializeField] [Delayed] private string m_GraphName = "Behavior Tree"; - [Tooltip("A user specified ID for the graph.")] - [SerializeField] [Delayed] private int m_Index; - [Tooltip("The graph data.")] - [SerializeField] private BehaviorTreeData m_Data = new BehaviorTreeData(); - [Tooltip("Should the behavior tree start when the component is enabled?")] - [SerializeField] private bool m_StartWhenEnabled = true; - [Tooltip("Should the behavior tree pause when the tree is disabled?")] - [SerializeField] private bool m_PauseWhenDisabled; - [Tooltip("Specifies when the behavior tree should be updated.")] - [SerializeField] private UpdateMode m_UpdateMode; - [Tooltip("Specifies how many tasks should be updated during a single tick.")] - [SerializeField] private EvaluationType m_EvaluationType; - [Tooltip("The maximum number of tasks that can run if the evaluation type is set to EvaluationType.Count.")] - [SerializeField] [Range(1, ushort.MaxValue)] private int m_MaxEvaluationCount = 1; - [Tooltip("A reference to the subtree.")] - [SerializeField] private Subtree m_Subtree; - - private GameObject m_GameObject; - private World m_World; - private Entity m_Entity; - private Dictionary m_NodeIndexByRuntimeIndex = new Dictionary(); - private static Dictionary s_BehaviorTreeByEntity = new Dictionary(); - private static EventNodeComparer s_EventNodeComparer = new EventNodeComparer(); - private bool m_SubtreeOverride; - - public string Name { get => m_GraphName; set => m_GraphName = value; } - public int Index { get => m_Index; set => m_Index = value; } - public int UniqueID { get => m_Data.UniqueID; } - public UnityEngine.Object Parent { get { - if (this == null) { return null; } - return Application.isPlaying && m_GameObject != null ? m_GameObject : gameObject; - } } - private BehaviorTreeData Data { get => !Application.isPlaying && m_Subtree != null ? m_Subtree.Data : m_Data; } - public bool StartWhenEnabled { get => m_StartWhenEnabled; set => m_StartWhenEnabled = value; } - public bool PauseWhenDisabled { get => m_PauseWhenDisabled; set => m_PauseWhenDisabled = value; } - public UpdateMode UpdateMode { get => m_UpdateMode; set => m_UpdateMode = value; } - public EvaluationType EvaluationType { get => m_EvaluationType; set => m_EvaluationType = value; } - public int MaxEvaluationCount { get => m_MaxEvaluationCount; set => m_MaxEvaluationCount = Mathf.Max(1, Mathf.Min(ushort.MaxValue, value)); } - public IGraph Subgraph - { - get => m_Subtree; - set - { - if (m_Subtree == (Subtree)value) { - return; - } - - var active = IsActive(); - ClearTree(); - m_Subtree = value as Subtree; - m_SubtreeOverride = false; - InheritSubtree(false); - if (active && !IsPaused()) { - StartBehavior(); - } -#if UNITY_EDITOR - // Generate a new ID so the graph reloads. - if (Application.isPlaying) { - m_Data.RuntimeUniqueID = Guid.NewGuid().GetHashCode(); - } -#endif - } - } - - public ILogicNode[] LogicNodes { get => Data.LogicNodes; set => Data.LogicNodes = value as ITreeLogicNode[]; } - public ITreeLogicNode[] TreeLogicNodes { get => Data.LogicNodes; set => Data.LogicNodes = value; } - public IEventNode[] EventNodes { get => Data.EventNodes; set => Data.EventNodes = value; } - public SharedVariable[] SharedVariables { get => m_Data.SharedVariables; set => m_Data.SharedVariables = value; } - public SharedVariableGroup[] SharedVariableGroups { -#if UNITY_EDITOR - get => m_Data.SharedVariableGroups; - set => m_Data.SharedVariableGroups = value; -#else - get => null; - set { } -#endif - } - public ushort[] DisabledLogicNodes { get => Data.DisabledLogicNodes; set => Data.DisabledLogicNodes = value; } - public ushort[] DisabledEventNodes { get => Data.DisabledEventNodes; set => Data.DisabledEventNodes = value; } - - public SharedVariable.SharingScope VariableScope { get => SharedVariable.SharingScope.Graph; } - public World World { get => m_World; set { m_World = value; } } - public Entity Entity { get => m_Entity; set { m_Entity = value; } } - public bool Baked { get; set; } - public static int BehaviorTreeCount { get => s_BehaviorTreeByEntity.Count; } - - public LogicNodeProperties[] LogicNodeProperties { -#if UNITY_EDITOR - get => Data.LogicNodeProperties; - set => Data.LogicNodeProperties = value; -#else - get => null; - set { } -#endif - } - public NodeProperties[] EventNodeProperties { -#if UNITY_EDITOR - get => Data.EventNodeProperties; - set => Data.EventNodeProperties = value; -#else - get => null; - set { } -#endif - } - public GroupProperties[] GroupProperties { -#if UNITY_EDITOR - get => Data.GroupProperties; - set => Data.GroupProperties = value; -#else - get => null; - set { } -#endif - } - public TaskStatus Status { get - { - if (!Application.isPlaying || m_World == null || m_Entity == null || m_Data == null || m_Data.LogicNodes == null || Data.EventNodes == null) { return TaskStatus.Inactive; } - - // Find the Start event node. - Start startEventNode = null; - for (int i = 0; i < m_Data.EventNodes.Length; ++i) { - if (m_Data.EventNodes[i].GetType() == typeof(Start)) { - startEventNode = m_Data.EventNodes[i] as Start; - } - } - if (startEventNode == null || startEventNode.ConnectedIndex >= m_Data.LogicNodes.Length) { return TaskStatus.Inactive; } - - // The runtime index will match with the correct Entity TaskComponent. - var runtimeIndex = m_Data.LogicNodes[startEventNode.ConnectedIndex].RuntimeIndex; - var taskComponents = m_World.EntityManager.GetBuffer(m_Entity); - if (runtimeIndex >= taskComponents.Length) { return TaskStatus.Inactive; } - - // Retun the status of the task that the Start node is connected to. This is the current tree status. - return taskComponents[runtimeIndex].Status; - } } - - // Flow callbacks. - public Action OnBehaviorTreeStarted; - public Action OnBehaviorTreeStopped; - public Action OnBehaviorTreeDestroyed; - - // Physics callbacks. - public Action OnBehaviorTreeCollisionEnter; - public Action OnBehaviorTreeCollisionExit; - public Action OnBehaviorTreeCollisionEnter2D; - public Action OnBehaviorTreeCollisionExit2D; - public Action OnBehaviorTreeTriggerEnter; - public Action OnBehaviorTreeTriggerExit; - public Action OnBehaviorTreeTriggerEnter2D; - public Action OnBehaviorTreeTriggerExit2D; - public Action OnBehaviorTreeControllerColliderHit; - - // Event callbacks. - public Action OnWillSave; - public Action OnDidSave; - public Action OnWillLoad; - public Action OnDidLoad; - - // Coroutine support. - private Dictionary> m_ActiveTaskCoroutines; - - /// - /// Serializes the behavior tree. - /// - public void Serialize() - { - Data.Serialize(); - if (m_Subtree != null) { - m_Data.SerializeSharedVariables(); - } - } - - /// - /// Deserialize the behavior tree. - /// - /// Should the behavior tree be force deserialized? - /// True if the tree was deserialized. - public bool Deserialize(bool force = false) - { - if (this == null) { - return false; - } - - // Force the deserialization if the tree hasn't been deserialized yet at runtime. - if (Application.isPlaying && m_GameObject == null) { - force = true; - m_GameObject = gameObject; - } - - var deserialized = false; - if (m_Subtree != null) { - deserialized = InheritSubtree(force); - } else if (m_Data != null) { - deserialized = m_Data.Deserialize(this, this, force, Application.isPlaying, Application.isPlaying); - } - - // Initialize tasks after deserialization. This is only needed at edit time as the tasks are initialized elsewhere at runtime. - if (!Application.isPlaying && deserialized && m_Data != null && m_Data.LogicNodes != null) { - for (int i = 0; i < m_Data.LogicNodes.Length; ++i) { - if (m_Data.LogicNodes[i] is Task task) { - task.Initialize(this, (ushort)i); - } - } - } - - return deserialized; - } - - /// - /// Inherits the subtree tasks and variables. - /// - /// Should the behavior tree be force deserialized? - /// True if the subtree was inherited. - private bool InheritSubtree(bool force) - { - if (m_Subtree == null) { - if (Application.isPlaying) { - m_Data.EventNodes = null; - m_Data.LogicNodes = null; - m_Data.SubtreeNodesReferences = null; - m_Data.DisabledLogicNodes = null; - m_Data.DisabledEventNodes = null; -#if UNITY_EDITOR - m_Data.EventNodeProperties = null; - m_Data.LogicNodeProperties = null; - m_Data.SharedVariableGroups = null; - m_Data.GroupProperties = null; -#endif - } - return false; - } - - // The local behavior tree variables should be used. - m_Data.DeserializeSharedVariables(this, force, false); - if (m_Subtree.DeserializeSharedVariables(force || (Application.isPlaying && !m_SubtreeOverride)) && Application.isPlaying && !m_SubtreeOverride && m_Data.SharedVariables != null) { - // Set the binding on the subtree before the tasks are loaded. This is necessary because a new SharedVariable instance may need to be created. - for (int i = 0; i < m_Data.SharedVariables.Length; ++i) { - m_Subtree.Data.OverrideVariableBinding(this, m_Data.SharedVariables[i]); - } - } - // Subtrees will not have access to GameObject or Scene variables. Copy the reference from the parent tree in order to allow the subtree to correctly load all of the SharedVariables. - if (Application.isPlaying && !m_SubtreeOverride && m_Data.VariableByNameMap != null) { - foreach (var variableMap in m_Data.VariableByNameMap) { - var sharedVariable = variableMap.Value; - if (sharedVariable.Scope == SharedVariable.SharingScope.GameObject || sharedVariable.Scope == SharedVariable.SharingScope.Scene) { - var variableAssignment = new BehaviorTreeData.VariableAssignment(sharedVariable.Name, sharedVariable.Scope); - if (m_Subtree.Data.VariableByNameMap.ContainsKey(variableAssignment)) { - continue; - } - m_Subtree.Data.VariableByNameMap.Add(variableAssignment, sharedVariable); - } - } - } - - if (!m_Subtree.Deserialize(force || (Application.isPlaying && !m_Subtree.Pooled && !m_SubtreeOverride), false, Application.isPlaying, false)) { - return false; - } - - // Copy the deserialized objects at runtime to ensure each object is unique. - if (Application.isPlaying && !m_SubtreeOverride) { - m_Data.OverrideData(this, m_Subtree.Data, m_Data.SharedVariables, m_Subtree.Pooled); - m_GameObject = gameObject; - m_SubtreeOverride = true; - } - - return true; - } - - /// - /// Adds the specified node. - /// - /// The node that should be added. - public void AddNode(ILogicNode node) - { - Data.AddNode(node as ITreeLogicNode); - } - - /// - /// Removes the specified node. - /// - /// The node that should be removed. - /// True if the node was removed. - public bool RemoveNode(ILogicNode node) - { - return Data.RemoveNode(node as ITreeLogicNode); - } - - /// - /// Adds the specified event node. - /// - /// The event node that should be added. - public void AddNode(IEventNode eventNode) - { - Data.AddNode(eventNode); - } - - /// - /// Removes the specified event node. - /// - /// The event node that should be removed. - /// True if the event node was removed. - public bool RemoveNode(IEventNode eventNode) - { - return Data.RemoveNode(eventNode); - } - - /// - /// Returns the Node of the specified type. - /// - /// The type of Node that should be retrieved. - /// The Node of the specified type (can be null). - public ILogicNode GetNode(Type type) - { - return Data.GetNode(type); - } - - /// - /// Returns the EventNode of the specified type. - /// - /// The type of EventNode that should be retrieved. - /// The EventNode of the specified type (can be null). If the node is found the index will also be returned. - public (IEventNode, ushort) GetEventNode(Type type) - { - return Data.GetEventNode(type); - } - - /// - /// The component has been enabled. - /// - private void OnEnable() - { - if (m_World != null && m_StartWhenEnabled) { - StartBehavior(); - } - } - - /// - /// The component has started. - /// - private void Start() - { - if (m_StartWhenEnabled) { - StartBehavior(); - } - } - - /// - /// Starts the behavior tree. - /// - /// True if the behavior tree was started. - public bool StartBehavior() - { - var world = m_World == null ? World.DefaultGameObjectInjectionWorld : m_World; - var entity = m_Entity == Entity.Null ? world.EntityManager.CreateEntity() : m_Entity; - return StartBehavior(world, entity); - } - - /// - /// Starts the behavior tree. - /// - /// The world that should contain the behavior tree. - /// The entity that should contain the behavior tree. - /// True if the behavior tree was started. - public bool StartBehavior(World world, Entity entity) - { - return StartBehavior(world, entity, typeof(Start)); - } - - /// - /// Starts the behavior tree. - /// - /// The world that contains the entity. - /// The entity that should contain the behavior tree. - /// The type of branch that should be started. - /// True if the behavior tree was started. - public bool StartBehavior(World world, Entity entity, Type startBranchType) - { - if (world == null) { - return false; - } - - if (s_BehaviorTreeByEntity.ContainsKey(entity)) { - // The behavior tree may be paused. - if (IsPaused(world, entity)) { - world.EntityManager.SetComponentEnabled(entity, true); - if (OnBehaviorTreeStarted != null) { - OnBehaviorTreeStarted(); - } - // Tasks can implement a pause specific interface. - var tasks = Data.LogicNodes; - for (int i = 0; i < tasks.Length; ++i) { - if (!(tasks[i] is IPausableTask pausableTask)) { - continue; - } - pausableTask.Resume(world, entity); - } - return true; - } - // The tree cannot be started multiple times. - return false; - } - s_BehaviorTreeByEntity.Add(entity, this); - - if (!InitializeTree(world, entity)) { - return false; - } - - if (OnBehaviorTreeStarted != null) { - OnBehaviorTreeStarted(); - } - return StartBranch(startBranchType); - } - - /// - /// Initializes the tree within DOTS for all of the event tasks. - /// - /// True if the behavior tree was initialized. - internal bool InitializeTree() - { - var world = m_World == null ? World.DefaultGameObjectInjectionWorld : m_World; - var entity = m_Entity == Entity.Null ? world.EntityManager.CreateEntity() : m_Entity; - return InitializeTree(world, entity); - } - - /// - /// Initializes the tree within DOTS for all of the event tasks. - /// - /// The world that contains the entity. - /// The entity that should contain the behavior tree. - /// True if the behavior tree was initialized. - internal bool InitializeTree(World world, Entity entity) - { - if (!Deserialize(false)) { - enabled = false; - return false; - } - - if (m_Data.EventNodes == null || world == null) { - return false; - } - - // The tree may be reinitialized with the same world/entity. - m_World = world; - m_Entity = entity; - - // The tree may have already been initialized. - if (world.EntityManager.HasComponent(entity)) { - return true; - } - - // Initialize the branch according to the connected index. This will ensure when the task is referencing other - // tasks the index will be correct. - var eventNodes = m_Data.EventNodes; - HashSet disabledNodes = null; - if (m_Data.DisabledEventNodes != null && m_Data.DisabledEventNodes.Length > 0) { - disabledNodes = new HashSet(); - for (int i = 0; i < m_Data.DisabledEventNodes.Length; ++i) { - disabledNodes.Add(eventNodes[m_Data.DisabledEventNodes[i]]); - } - } -#if UNITY_EDITOR - var eventNodeProperties = Data.EventNodeProperties; - Array.Sort(eventNodes, eventNodeProperties, s_EventNodeComparer); - Data.EventNodeProperties = eventNodeProperties; -#endif - Array.Sort(eventNodes, s_EventNodeComparer); - // The disabled event nodes array only stores the index. Update the index with the sorted value. - if (disabledNodes != null) { - var index = 0; - var disabledEventNodes = m_Data.DisabledEventNodes; - for (int i = 0; i < eventNodes.Length; ++i) { - if (disabledNodes.Contains(eventNodes[i])) { - disabledEventNodes[index] = (ushort)i; - index++; - } - } - m_Data.DisabledEventNodes = disabledEventNodes; - } - - for (int i = 0; i < eventNodes.Length; ++i) { - InitializeBranch(world, entity, eventNodes[i]); - } - return true; - } - - /// - /// Initialize the specified event branch within DOTS. - /// - /// The world that the entity exists in. - /// The entity that the branch should be added to. - /// The task that should be setup. - private void InitializeBranch(World world, Entity entity, IEventNode eventTask) - { - if (Data.LogicNodes == null) { - return; - } - - // There must be a starting event node. - if (eventTask == null || eventTask.ConnectedIndex >= Data.LogicNodes.Length) { - return; - } - - if (!world.EntityManager.HasBuffer(entity)) { - var taskComponentBuffer = world.EntityManager.AddBuffer(entity); - taskComponentBuffer.EnsureCapacity(Data.LogicNodes.Length); - } - - DynamicBuffer branchComponents; - if (world.EntityManager.HasBuffer(entity)) { - branchComponents = world.EntityManager.GetBuffer(entity); - } else { - branchComponents = world.EntityManager.AddBuffer(entity); - } - var startBranchIndex = (ushort)branchComponents.Length; - branchComponents.Add(new BranchComponent() { ActiveIndex = ushort.MaxValue, NextIndex = ushort.MaxValue, LastActiveIndex = ushort.MaxValue, CanExecute = true }); - - ComponentUtility.AddEvaluationComponent(world, entity, m_Data.LogicNodes.Length, m_EvaluationType, m_MaxEvaluationCount); - world.EntityManager.AddComponent(entity); - world.EntityManager.AddComponent(entity); - // A manual update mode will require the user to call the Tick method. - if (m_UpdateMode == UpdateMode.Manual) { - world.EntityManager.SetComponentEnabled(entity, false); - world.EntityManager.SetComponentEnabled(entity, false); - } - - // Get the required parent system groups. - var traversalTaskSystemGroup = world.GetOrCreateSystemManaged(); - var reevaluateTaskSystemGroup = world.GetOrCreateSystemManaged(); - var interruptTaskSystemGroup = world.GetOrCreateSystemManaged(); - - // Add the necessary cleanup systems. - var behaviorTreeSystemGroup = world.GetOrCreateSystemManaged(); - behaviorTreeSystemGroup.AddSystemToUpdateList(world.GetOrCreateSystem()); - behaviorTreeSystemGroup.AddSystemToUpdateList(world.GetOrCreateSystem()); - - var canReevaluate = false; - var taskComponents = world.EntityManager.GetBuffer(entity); - var taskOffset = (ushort)(eventTask.ConnectedIndex - taskComponents.Length); - for (int i = eventTask.ConnectedIndex; i < m_Data.LogicNodes.Length; ++i) { - // Don't initialize tasks that aren't connected to the event node. - if (i > eventTask.ConnectedIndex && m_Data.LogicNodes[i].ParentIndex == ushort.MaxValue) { - break; - } - - taskComponents = world.EntityManager.GetBuffer(entity); - - // Determine the branch index based off of the parent. If the parent is a parallel node then the node will be part of a new branch. - var branchIndex = startBranchIndex; - if (m_Data.LogicNodes[i].ParentIndex != ushort.MaxValue) { - branchComponents = world.EntityManager.GetBuffer(entity); - var parentIndex = m_Data.LogicNodes[i].ParentIndex; - if (m_Data.LogicNodes[parentIndex] is IParallelNode) { - branchIndex = (ushort)branchComponents.Length; - } else { - branchIndex = taskComponents[parentIndex - taskOffset].BranchIndex; - } - - // A new branch component may need to be added to keep track of the active task index for that branch. - if (branchIndex >= branchComponents.Length) { - branchComponents.Add(new BranchComponent() { ActiveIndex = ushort.MaxValue, NextIndex = ushort.MaxValue, LastActiveIndex = ushort.MaxValue, CanExecute = true }); - } - } - - // The TaskComponent index will be different from the LogicNode index if the tree has a gap of tasks that are not connected. - // The RuntimeIndex maps the LogicNode index to the TaskComponent index. - var node = m_Data.LogicNodes[i]; - node.RuntimeIndex = (ushort)(node.Index - taskOffset); - m_Data.LogicNodes[i] = node; - if (!m_NodeIndexByRuntimeIndex.ContainsKey(node.RuntimeIndex)) { // The index will already exist if multiple entities use the same MonoBehaviour. - m_NodeIndexByRuntimeIndex.Add(node.RuntimeIndex, node.Index); - } - - if (m_Data.LogicNodes[i] is IAuthoringTask authoringTask) { - authoringTask.AddBufferElement(world, entity, gameObject); - taskComponents = world.EntityManager.GetBuffer(entity); - taskComponents.Add(new TaskComponent { - Status = TaskStatus.Inactive, - Index = node.RuntimeIndex, - ParentIndex = AdjustByIndexOffset(m_Data.LogicNodes[i].ParentIndex, taskOffset), - SiblingIndex = AdjustByIndexOffset(m_Data.LogicNodes[i].SiblingIndex, taskOffset), - BranchIndex = branchIndex, - FlagComponentType = authoringTask.Flag, - Disabled = !IsNodeEnabled(true, m_Data.LogicNodes[i].ParentIndex) || !IsNodeEnabled(true, i), - }); - - world.EntityManager.AddComponent(entity, authoringTask.Flag); - world.EntityManager.SetComponentEnabled(entity, authoringTask.Flag, false); - traversalTaskSystemGroup.AddSystemToUpdateList(world.GetOrCreateSystem(authoringTask.SystemType)); - } else if (m_Data.LogicNodes[i] is Task taskObject) { - taskObject.AddBufferElement(world, entity, GetHashCode(), node.RuntimeIndex); - taskComponents = world.EntityManager.GetBuffer(entity); - taskComponents.Add(new TaskComponent { - Status = TaskStatus.Inactive, - Index = node.RuntimeIndex, - ParentIndex = AdjustByIndexOffset(m_Data.LogicNodes[i].ParentIndex, taskOffset), - SiblingIndex = AdjustByIndexOffset(m_Data.LogicNodes[i].SiblingIndex, taskOffset), - BranchIndex = branchIndex, - FlagComponentType = typeof(TaskObjectFlag), - Disabled = !IsNodeEnabled(true, m_Data.LogicNodes[i].ParentIndex) || !IsNodeEnabled(true, i), - }); - world.EntityManager.AddComponent(entity, typeof(TaskObjectFlag)); - world.EntityManager.SetComponentEnabled(entity, typeof(TaskObjectFlag), false); - traversalTaskSystemGroup.AddSystemToUpdateList(world.GetOrCreateSystem(typeof(TaskObjectSystem))); - - taskObject.Initialize(this, node.RuntimeIndex); - } else { - Debug.LogError("Error: Unknown Task Type.", this); - continue; - } - - // Conditional tasks can be reevaluated. - if (m_Data.LogicNodes[i] is IConditional && m_Data.LogicNodes[i].ParentIndex != ushort.MaxValue) { - var reevaluateFlag = new ComponentType(); - Type reevaluateSystem; - if (m_Data.LogicNodes[i] is IAuthoringTask conditionalAuthoringTask) { - if (m_Data.LogicNodes[i] is IReevaluateResponder reevaluateTask) { - reevaluateFlag = reevaluateTask.ReevaluateFlag; - reevaluateSystem = reevaluateTask.ReevaluateSystemType; - } else { - Debug.LogWarning($"Warning: The task {m_Data.LogicNodes[i]} doesn't have a separate reevaluation tag. This may lead to unexpected results. It is recommend " + - $"that the task implements the IReevaluate interface."); - reevaluateFlag = conditionalAuthoringTask.Flag; - reevaluateSystem = conditionalAuthoringTask.SystemType; - } - } else { - reevaluateFlag = typeof(TaskObjectReevaluateFlag); - reevaluateSystem = typeof(TaskObjectReevaluateSystem); - } - world.EntityManager.AddComponent(entity, reevaluateFlag); - world.EntityManager.SetComponentEnabled(entity, reevaluateFlag, false); - ComponentUtility.AddInterruptComponents(world.EntityManager, entity); - reevaluateTaskSystemGroup.AddSystemToUpdateList(world.GetOrCreateSystem(reevaluateSystem)); - - // Ignore any decorator tasks when determining the parent. Composite tasks can only be a conditional abort parent. - IComposite parentComposite = null; - ushort parentIndex; - var compositeParentIndex = m_Data.LogicNodes[i].ParentIndex; - do { - parentComposite = m_Data.LogicNodes[compositeParentIndex] as IComposite; - parentIndex = compositeParentIndex; - compositeParentIndex = m_Data.LogicNodes[compositeParentIndex].ParentIndex; - } while (compositeParentIndex != ushort.MaxValue && parentComposite == null); - - var abortParent = parentComposite as IConditionalAbortParent; - if (abortParent != null && abortParent.AbortType != ConditionalAbortType.None) { - canReevaluate = true; - var lowerPriorityLowerIndex = ushort.MaxValue; - var lowerPriorityUpperIndex = ushort.MaxValue; - // Lower Priority aborts are recursive allowing a nested conditional task to be reevaluated even if the direct - // parent's sibling isn't active. - if (abortParent.AbortType == ConditionalAbortType.LowerPriority || abortParent.AbortType == ConditionalAbortType.Both) { - var parentChildCount = m_Data.GetChildCount(m_Data.LogicNodes[parentIndex], m_Data.LogicNodes); - lowerPriorityLowerIndex = AdjustByIndexOffset((ushort)(parentIndex + parentChildCount), taskOffset); - var parentTranversalIndex = parentIndex; - IConditionalAbortParent parentAbortParent = null; - while (parentTranversalIndex != ushort.MaxValue && ((parentAbortParent = m_Data.LogicNodes[parentTranversalIndex] as IConditionalAbortParent) != null || m_Data.LogicNodes[parentTranversalIndex] is IDecorator)) { - if (parentAbortParent != null && parentAbortParent.AbortType != ConditionalAbortType.LowerPriority && parentAbortParent.AbortType != ConditionalAbortType.Both) { - break; - } - parentIndex = parentTranversalIndex; - parentTranversalIndex = m_Data.LogicNodes[parentTranversalIndex].ParentIndex; - } - - // The conditional abort can reevaluate up to the rightmost task of the parent. - parentTranversalIndex = parentTranversalIndex != ushort.MaxValue ? parentTranversalIndex : parentIndex; - parentChildCount = m_Data.GetChildCount(m_Data.LogicNodes[parentTranversalIndex], m_Data.LogicNodes); - lowerPriorityUpperIndex = AdjustByIndexOffset((ushort)(parentTranversalIndex + parentChildCount), taskOffset); - } - var selfPriorityUpperIndex = ushort.MaxValue; - if (abortParent.AbortType == ConditionalAbortType.Self || abortParent.AbortType == ConditionalAbortType.Both) { - if (m_Data.LogicNodes[parentIndex].SiblingIndex == ushort.MaxValue) { - selfPriorityUpperIndex = (ushort)(parentIndex + m_Data.GetChildCount(m_Data.LogicNodes[parentIndex], m_Data.LogicNodes)); - } else { - selfPriorityUpperIndex = (ushort)(m_Data.LogicNodes[parentIndex].SiblingIndex - 1); - } - } - - var reevaluateTaskComponents = world.EntityManager.AddBuffer(entity); - var reevaluateTaskComponent = new ReevaluateTaskComponent() - { - Index = node.RuntimeIndex, - AbortType = abortParent.AbortType, - ReevaluateFlagComponentType = reevaluateFlag, - LowerPriorityLowerIndex = lowerPriorityLowerIndex, - LowerPriorityUpperIndex = lowerPriorityUpperIndex, - SelfPriorityUpperIndex = selfPriorityUpperIndex, - }; - - reevaluateTaskComponents.Add(reevaluateTaskComponent); - } - } - - // Add any systems that respond to interrupts. - if (m_Data.LogicNodes[i] is IInterruptResponder interruptResponder) { - interruptTaskSystemGroup.AddSystemToUpdateList(world.GetOrCreateSystem(interruptResponder.InterruptSystemType)); - } - } - - if (canReevaluate) { - reevaluateTaskSystemGroup.AddSystemToUpdateList(world.GetOrCreateSystem(typeof(ReevaluateSystem))); - } - - // The event task may perform its own logic. - if (eventTask is IEventNodeEntityReceiver entityReceiver) { - entityReceiver.AddBufferElement(world, entity, gameObject, taskOffset); - } - if (eventTask is IEventNodeGameObjectReceiver gameObjectReceiver) { - gameObjectReceiver.Initialize(this); - } - - traversalTaskSystemGroup.SortSystems(); - } - - /// - /// Adjusts the index by the specified offset. - /// - /// The index that should be adjusted. - /// The offset that should be adjusted by. - /// THe index by the specified offset. - private ushort AdjustByIndexOffset(ushort index, ushort offset) - { - if (index == ushort.MaxValue) { return index; } - return (ushort)(index - offset); - } - - /// - /// Stars the branch with the specified event task type. - /// - /// The branch that should be started. - /// True if the branch was started. - public bool StartBranch(Type eventTaskType) - { - if (m_World == null || m_Entity == Entity.Null) { - return false; - } - - return StartBranch(m_World, m_Entity, eventTaskType); - } - - /// - /// Stars the branch with the specified event task type. - /// - /// The world that the entity exists in. - /// The entity that contains the branch. - /// The branch that should be started. - /// True if the branch was started. - public bool StartBranch(World world, Entity entity, Type eventTaskType) - { - if (!s_BehaviorTreeByEntity.ContainsKey(entity)) { - return StartBehavior(world, entity, eventTaskType); - } - - if (m_Data.EventNodes == null || entity.Index == 0 || !Application.isPlaying) { - return false; - } - - for (int i = 0; i < m_Data.EventNodes.Length; ++i) { - if (m_Data.EventNodes[i].GetType() == eventTaskType) { - // The branch cannot start if it is disabled. - if (!IsNodeEnabled(false, i)) { - Debug.LogError($"Error: Unable to start the {eventTaskType.Name} branch because the node is disabled.", this); - return false; - } - - return StartBranch(world, entity, m_Data.EventNodes[i]); - } - } - - Debug.LogError($"Error: Unable to start the {eventTaskType.Name} branch because it can't be found.", this); - return false; - } - - /// - /// Starts the branch with the specified event task. - /// - /// The branch that should be started. - /// True if the branch was started. - public bool StartBranch(IEventNode eventTask) - { - if (m_World == null || m_Entity == Entity.Null) { - return false; - } - - return StartBranch(m_World, m_Entity, eventTask); - } - - /// - /// Starts the branch with the specified event task. - /// - /// The world that the entity exists in. - /// The entity that contains the branch. - /// The branch that should be started. - /// True if the branch was started. - public bool StartBranch(World world, Entity entity, IEventNode eventTask) - { - if (!Application.isPlaying || entity == Entity.Null) { - return false; - } - - // The branch can't be started if it's not connected to any tasks. - if (eventTask.ConnectedIndex == ushort.MaxValue) { - Debug.LogError($"Error: Unable to start the {eventTask.GetType().Name} branch because it doesn't have a connecting task.", this); - return false; - } - - // The tree needs to be setup before the branch can start. - if (!world.EntityManager.HasBuffer(entity)) { - InitializeTree(); - } - - var connectedIndex = m_Data.LogicNodes[eventTask.ConnectedIndex].RuntimeIndex; - return StartBranch(world, entity, connectedIndex, m_UpdateMode == UpdateMode.EveryFrame); - } - - /// - /// Starts the branch. This method is static allowing for alread-baked entities to be able to start the branch. - /// - /// The world that the entity exists in. - /// The entity that contains the branch. - /// The index of the starting task. - /// Should the branch start evaluation? If false the tree will manually need to be ticked. - /// True if the branch was started. - internal static bool StartBranch(World world, Entity entity, ushort connectedIndex, bool startEvaluation) - { - var taskComponents = world.EntityManager.GetBuffer(entity); - if (connectedIndex >= taskComponents.Length) { - Debug.LogError($"Error: Unable to start the branch on entity {entity} because the start index is greater than the task count."); - return false; - } - - var startTask = taskComponents[connectedIndex]; - // The branch can't be started twice or if it is disabled. - if (startTask.Status == TaskStatus.Queued || startTask.Status == TaskStatus.Running || startTask.Disabled) { - return false; - } - - var systemGroup = world.GetExistingSystemManaged(); - if (systemGroup == null) { - systemGroup = World.DefaultGameObjectInjectionWorld.GetExistingSystemManaged(); - if (systemGroup == null) { - return false; - } - } - systemGroup.Enabled = true; - - // The branch can start. - startTask.Status = TaskStatus.Queued; - taskComponents[connectedIndex] = startTask; - - var activeFlag = taskComponents[connectedIndex].FlagComponentType; - world.EntityManager.SetComponentEnabled(entity, activeFlag, true); - - var branchComponents = world.EntityManager.GetBuffer(entity); - var branchIndex = taskComponents[connectedIndex].BranchIndex; - var branchComponent = branchComponents[branchIndex]; - branchComponent.ActiveIndex = branchComponent.NextIndex = connectedIndex; - branchComponent.LastActiveIndex = ushort.MaxValue; - branchComponent.ActiveFlagComponentType = activeFlag; - branchComponents[branchIndex] = branchComponent; - - ComponentUtility.ResetEvaluationComponent(world, entity); - - if (startEvaluation) { - world.EntityManager.SetComponentEnabled(entity, true); - world.EntityManager.SetComponentEnabled(entity, true); - } - return true; - } - - /// - /// Returns the behavior tree component specified by the entity. - /// - /// The entity that should be retrieved. - /// The behavior tree component specified by the ID. - public static BehaviorTree GetBehaviorTree(Entity entity) - { - if (s_BehaviorTreeByEntity.TryGetValue(entity, out var behaviorTree)) { - return behaviorTree; - } - return null; - } - - /// - /// Returns the task at the specified index. - /// - /// The index of the task. - /// The task at the specified index. - public ITreeLogicNode GetTask(int index) - { - Deserialize(); - - if (m_Data.LogicNodes == null || index < 0 || index >= m_Data.LogicNodes.Length) { - return null; - } - if (Application.isPlaying && m_NodeIndexByRuntimeIndex.Count > 0) { - return m_Data.LogicNodes[m_NodeIndexByRuntimeIndex[index]]; - } - return m_Data.LogicNodes[index]; - } - - /// - /// Finds the task with the specified type. - /// - /// The first task found with the specified type (can be null). - public T FindTask() where T : Task - { - Deserialize(); - - if (m_Data.LogicNodes == null || m_Data.LogicNodes.Length == 0) { - return null; - } - - for (int i = 0; i < m_Data.LogicNodes.Length; ++i) { - if (m_Data.LogicNodes[i] is T task) { - return task; - } - if (m_Data.LogicNodes[i] is IContainerNode containerNode) { - if (containerNode.Nodes == null) { - continue; - } - for (int j = 0; j < containerNode.Nodes.Length; ++j) { - if (containerNode.Nodes[j] is T stackedTask) { - return stackedTask; - } - } - } - - } - - return null; - } - - /// - /// Finds the tasks with the specified type. This method does not have any allocations. - /// - /// A pre-initialized array that will contain the found tasks. - /// The number of tasks found with the specified type. - public int FindTasks(T[] foundTasks) where T : Task - { - if (foundTasks == null || foundTasks.Length == 0) { - return 0; - } - - Deserialize(); - if (m_Data.LogicNodes == null || m_Data.LogicNodes.Length == 0) { - return 0; - } - - var count = 0; - for (int i = 0; i < m_Data.LogicNodes.Length; ++i) { - if (m_Data.LogicNodes[i] is T task) { - foundTasks[count] = task; - count++; - if (count == foundTasks.Length) { - return count; - } - } - if (m_Data.LogicNodes[i] is IContainerNode containerNode) { - if (containerNode.Nodes == null) { - continue; - } - for (int j = 0; j < containerNode.Nodes.Length; ++j) { - if (containerNode.Nodes[j] is T stackedTask) { - foundTasks[count] = stackedTask; - count++; - if (count == foundTasks.Length) { - return count; - } - } - } - } - - } - - return count; - } - - /// - /// Finds the tasks with the specified type. - /// - /// An array containing the found tasks. - public T[] FindTasks() where T : Task - { - Deserialize(); - - if (m_Data.LogicNodes == null || m_Data.LogicNodes.Length == 0) { - return null; - } - - // Assume the maximum number of tasks will be found. The array will be resized before returning. - var foundTasks = new T[m_Data.LogicNodes.Length]; - var count = FindTasks(foundTasks); - if (foundTasks.Length != count) { - Array.Resize(ref foundTasks, count); - } - return foundTasks; - } - - /// - /// Ticks the behavior tree. The UpdateMode must be set to Manual. - /// The behavior tree will not be executed instantaneously. It will instead be ticked the next time the DOTS system group is updated. - /// - public void Tick() - { - if (m_UpdateMode != UpdateMode.Manual) { - Debug.LogWarning("Warning: The behavior tree UpdateMode must be set to Manual in order to be ticked manually.", this); - return; - } - - if (m_World == null || m_Entity == Entity.Null) { - Debug.LogWarning("Warning: The behavior tree must be started in order for it to be ticked manually.", this); - return; - } - - Tick(m_World, m_Entity); - } - - /// - /// Ticks the behavior tree. - /// The behavior tree will not be executed instantaneously. It will instead be ticked the next time the DOTS system group is updated. - /// - /// The world that the entity exists in. - /// The entity that contains the behavior tree. - public static void Tick(World world, Entity entity) - { - if (world == null || entity.Index == 0) { - return; - } - world.EntityManager.SetComponentEnabled(entity, true); - } - - /// - /// Reevaluates the SubtreeReferences by calling the EvaluateSubtrees method. - /// - public void ReevaluateSubtreeReferences() - { - if (!m_Data.ReevaluateSubtreeReferences(this, this, ClearTree)) { - return; - } - - // Restart the tree. - InitializeTree(); - if (enabled && m_GameObject.activeSelf) { - StartBehavior(); - } - } - - /// - /// Stops or pauses the behavior tree. - /// - /// Should the behavior tree be paused? - /// True if the behavior tree was stopped or paused. - public bool StopBehavior(bool pause = false) - { - return StopBehavior(m_World, m_Entity, pause); - } - - /// - /// Stops or pauses the behavior tree. - /// - /// The world that the entity exists in. - /// The entity that contains the behavior tree. - /// Should the behavior tree be paused? - /// True if the behavior tree was stopped or paused. - public bool StopBehavior(World world, Entity entity, bool pause = false) - { - if (world == null || !world.IsCreated || entity == Entity.Null) { - return false; - } - - // The tree could be stopped after it has been paused. - if (world.EntityManager.HasComponent(entity)) { - world.EntityManager.SetComponentEnabled(entity, false); - } - if (world.EntityManager.HasComponent(entity)) { - world.EntityManager.SetComponentEnabled(entity, false); - } - - if (!s_BehaviorTreeByEntity.ContainsKey(entity)) { - return false; - } - - // Notify those interested that the behavior tree has been stopped. - if (OnBehaviorTreeStopped != null) { - OnBehaviorTreeStopped(pause); - } - - // Tasks can implement a pause and end specific callback. - var tasks = Data.LogicNodes; - for (int i = 0; i < tasks.Length; ++i) { - if (pause) { - if (!(tasks[i] is IPausableTask pausableTask)) { - continue; - } - pausableTask.Pause(world, entity); - } else if (tasks[i] is Task task) { - task.OnEnd(); - } - } - - // Removing the EnabledFlag and EvaluationComponent is sufficient to pause the tree. - if (pause) { - return true; - } - - s_BehaviorTreeByEntity.Remove(entity); - - StopBehavior(world, entity); - - return true; - } - - /// - /// Stops the behavior tree. This method should only be called from an ECS system. - /// - /// The world that the entity exists in. - /// The entity that contains the behavior tree. - public static void StopBehavior(World world, Entity entity) - { - if (world == null || entity.Index == 0) { - return; - } - - var branchComponents = world.EntityManager.GetBuffer(entity); - var taskComponents = world.EntityManager.GetBuffer(entity); - for (int i = 0; i < branchComponents.Length; ++i) { - var branchComponent = branchComponents[i]; - if (branchComponent.ActiveIndex == ushort.MaxValue) { - continue; - } - - // Stop all of the active tasks within the branch. - var taskIndex = branchComponent.ActiveIndex; - while (taskIndex != ushort.MaxValue) { - var taskComponent = taskComponents[taskIndex]; - taskComponent.Status = TaskStatus.Inactive; - taskComponent.Reevaluate = false; - taskComponents[taskIndex] = taskComponent; - - taskIndex = taskComponent.ParentIndex; - } - - world.EntityManager.SetComponentEnabled(entity, branchComponent.ActiveFlagComponentType, false); - branchComponent.ActiveIndex = branchComponent.NextIndex = branchComponent.LastActiveIndex = ushort.MaxValue; - branchComponent.ActiveFlagComponentType = new ComponentType(); - branchComponent.InterruptType = InterruptType.None; - branchComponent.InterruptIndex = 0; - branchComponents[i] = branchComponent; - } - - // Stop all reevaluations. - if (world.EntityManager.HasBuffer(entity)) { - var reevaluateTaskComponents = world.EntityManager.GetBuffer(entity); - for (int i = 0; i < reevaluateTaskComponents.Length; ++i) { - if (reevaluateTaskComponents[i].ReevaluateStatus == ReevaluateStatus.Inactive) { - continue; - } - - var reevaluateTaskComponent = reevaluateTaskComponents[i]; - world.EntityManager.SetComponentEnabled(entity, reevaluateTaskComponent.ReevaluateFlagComponentType, false); - reevaluateTaskComponent.ReevaluateStatus = ReevaluateStatus.Inactive; - reevaluateTaskComponent.OriginalStatus = TaskStatus.Inactive; - - reevaluateTaskComponents[i] = reevaluateTaskComponent; - } - } - } - - /// - /// Restarts the behavior tree. - /// - /// True if the behavior tree was restarted. - public bool RestartBehavior() - { - if (!IsActive()) { - return false; - } - if (!StopBehavior()) { - return false; - } - return StartBehavior(); - } - - /// - /// Clears all of the tree components. - /// - private void ClearTree() - { - ClearTree(m_World, m_Entity); - } - - /// - /// Clears all of the tree components. - /// - /// The world that the entity exists in. - /// The entity that contains the behavior tree. - private void ClearTree(World world, Entity entity) - { - if (world == null || entity == Entity.Null || Data.LogicNodes == null) { - return; - } - - StopBehavior(world, entity, false); - - world.EntityManager.RemoveComponent(entity); - world.EntityManager.RemoveComponent(entity); - ComponentUtility.RemoveEvaluationComponent(world, entity); - - var branchComponents = world.EntityManager.GetBuffer(entity); - var taskComponents = world.EntityManager.GetBuffer(entity); - branchComponents.Clear(); - taskComponents.Clear(); - if (world.EntityManager.HasBuffer(entity)) { - var reevaluateTaskComponents = world.EntityManager.GetBuffer(entity); - reevaluateTaskComponents.Clear(); - } - - for (int i = 0; i < m_Data.LogicNodes.Length; ++i) { - if (m_Data.LogicNodes[i] is IAuthoringTask authoringTask) { - authoringTask.ClearBufferElement(world, entity); - if (world.EntityManager.HasComponent(entity, authoringTask.Flag)) { - world.EntityManager.RemoveComponent(entity, authoringTask.Flag); - } - if (m_Data.LogicNodes[i] is IReevaluateResponder reevaluateTask) { - if (world.EntityManager.HasComponent(entity, reevaluateTask.ReevaluateFlag)) { - world.EntityManager.RemoveComponent(entity, reevaluateTask.ReevaluateFlag); - } - } - } else if (m_Data.LogicNodes[i] is Task task) { - task.ClearBufferElement(world, entity); - if (m_Data.LogicNodes[i] is IConditional) { - if (world.EntityManager.HasComponent(entity, typeof(TaskObjectReevaluateFlag))) { - world.EntityManager.RemoveComponent(entity, typeof(TaskObjectReevaluateFlag)); - } - if (world.EntityManager.HasComponent(entity, typeof(InterruptFlag))) { - world.EntityManager.RemoveComponent(entity, typeof(InterruptFlag)); - } - } - if (world.EntityManager.HasComponent(entity, typeof(TaskObjectFlag))) { - world.EntityManager.RemoveComponent(entity, typeof(TaskObjectFlag)); - } - } - } - - for (int i = 0; i < m_Data.EventNodes.Length; ++i) { - if (m_Data.EventNodes[i] is IEventNodeEntityReceiver entityReceiver) { - entityReceiver.ClearBufferElement(world, entity); - } - } - - m_NodeIndexByRuntimeIndex.Clear(); - } - - /// - /// Returns the SharedVariable with the specified name. - /// - /// The name of the SharedVariable that should be retrieved. - /// The SharedVariable with the specified name (can be null). - public SharedVariable GetVariable(PropertyName name) - { - return GetVariable(name, SharedVariable.SharingScope.Graph); - } - - /// - /// Returns the SharedVariable with the specified name and scope. - /// - /// The name of the SharedVariable that should be retrieved. - /// The scope of the SharedVariable that should be retrieved. - /// The SharedVariable with the specified name (can be null). - public SharedVariable GetVariable(PropertyName name, SharedVariable.SharingScope scope) - { - Deserialize(); - - return m_Data.GetVariable(this, name, scope); - } - - /// - /// Returns the SharedVariable of the specified name. - /// - /// The name of the SharedVariable that should be retrieved. - /// The SharedVariable with the specified name (can be null). - public SharedVariable GetVariable(PropertyName name) - { - return GetVariable(name, SharedVariable.SharingScope.Graph); - } - - /// - /// Returns the SharedVariable of the specified name. - /// - /// The name of the SharedVariable that should be retrieved. - /// The scope of the SharedVariable that should be retrieved. - /// The SharedVariable with the specified name (can be null). - public SharedVariable GetVariable(PropertyName name, SharedVariable.SharingScope scope) - { - Deserialize(); - - return m_Data.GetVariable(this, name, scope); - } - - /// - /// Sets the value of the SharedVariable. - /// - /// The type of SharedVarible. - /// The name of the SharedVariable. - /// The value of the SharedVariable. - /// True if the value was set. - public bool SetVariableValue(PropertyName name, T value) - { - return SetVariableValue(name, value, SharedVariable.SharingScope.Graph); - } - - /// - /// Sets the value of the SharedVariable. - /// - /// The type of SharedVarible. - /// The name of the SharedVariable. - /// The value of the SharedVariable. - /// The scope of the SharedVariable that should be set. - /// True if the value was set. - public bool SetVariableValue(PropertyName name, T value, SharedVariable.SharingScope scope) - { - Deserialize(); - - return m_Data.SetVariableValue(this, name, value, scope); - } - - /// - /// Gets the behavior tree save data. - /// - /// Specifies which variables should be saved. Graph variables will automatically be saved. - /// The save data if the behavior tree can be saved. - public SaveManager.SaveData? Save(SaveManager.VariableSaveScope variableSaveScope = 0) - { - if (OnWillSave != null) { - OnWillSave(this); - } - var saveData = SaveManager.Save(new BehaviorTree[] { this }, variableSaveScope); - if (OnDidSave != null) { - OnDidSave(this, saveData.HasValue); - } - return saveData; - } - - /// - /// Saves the behavior tree at the specified file path. - /// - /// The file path to save the behavior tree at. The file will be replaced if it already exists. - /// Specifies which variables should be saved. Graph variables will automatically be saved. - /// True if the behavior tree was successfully saved. - public bool Save(string filePath, SaveManager.VariableSaveScope variableSaveScope = 0) - { - if (OnWillSave != null) { - OnWillSave(this); - } - var success = SaveManager.Save(new BehaviorTree[] { this }, filePath, variableSaveScope); - if (OnDidSave != null) { - OnDidSave(this, success); - } - return success; - } - - /// - /// Loads the behavior tree from the specified file path. - /// - /// The file path to load the behavior tree at. - /// Optional callback after the graph variables have been restored. - /// True if the behavior tree was successfully loaded. - public bool Load(string filePath, Action afterVariablesRestored = null) - { - if (OnWillLoad != null) { - OnWillLoad(this); - } - var success = SaveManager.Load(new BehaviorTree[] { this }, filePath, afterVariablesRestored); - if (OnDidLoad != null) { - OnDidLoad(this, success); - } - return success; - } - - /// - /// Loads the behavior tree from the specified save data. - /// - /// The data associated with the behavior tree. - /// Optional callback after the graph variables have been restored. - /// True if the behavior tree was successfully loaded. - public bool Load(SaveManager.SaveData saveData, Action afterVariablesRestored = null) - { - if (OnWillLoad != null) { - OnWillLoad(this); - } - var success = SaveManager.Load(new BehaviorTree[] { this }, saveData, afterVariablesRestored); - if (OnDidLoad != null) { - OnDidLoad(this, success); - } - return success; - } - - /// - /// Starts the task courtine with the specified name. - /// - /// The task that the coroutine belongs to. - /// The name of the coroutine method. - /// The created routine (can be null). - public Coroutine StartTaskCoroutine(Task task, string coroutineName) - { - var method = task.GetType().GetMethod(coroutineName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); - if (method == null) { - Debug.LogError($"Error: The coroutine {coroutineName} cannot be started due to the method not being found on {task.GetType()}."); - return null; - } - - if (m_ActiveTaskCoroutines == null) { - m_ActiveTaskCoroutines = new Dictionary>(); - } - var taskCoroutine = new TaskCoroutine(this, (IEnumerator)method.Invoke(task, new object[] { }), coroutineName); - if (!m_ActiveTaskCoroutines.TryGetValue(coroutineName, out var taskCoroutines)) { - taskCoroutines = new List(); - m_ActiveTaskCoroutines.Add(coroutineName, taskCoroutines); - } - taskCoroutines.Add(taskCoroutine); - - return taskCoroutine.Coroutine; - } - - /// - /// Starts the task courtine with the specified name. - /// - /// The task that the coroutine belongs to. - /// The name of the coroutine method. - /// The input parameter to the coroutine. - /// The created routine (can be null). - public Coroutine StartTaskCoroutine(Task task, string coroutineName, object value) - { - var method = task.GetType().GetMethod(coroutineName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); - if (method == null) { - Debug.LogError($"Error: The coroutine {coroutineName} cannot be started due to the method not being found on {task.GetType()}."); - return null; - } - - if (m_ActiveTaskCoroutines == null) { - m_ActiveTaskCoroutines = new Dictionary>(); - } - var taskCoroutine = new TaskCoroutine(this, (IEnumerator)method.Invoke(task, new object[] { value }), coroutineName); - if (!m_ActiveTaskCoroutines.TryGetValue(coroutineName, out var taskCoroutines)) { - taskCoroutines = new List(); - m_ActiveTaskCoroutines.Add(coroutineName, taskCoroutines); - } - taskCoroutines.Add(taskCoroutine); - - return taskCoroutine.Coroutine; - } - - /// - /// Stops the task courtine with the specified name. - /// - /// The name of the coroutine method. - public void StopTaskCoroutine(string coroutineName) - { - if (!m_ActiveTaskCoroutines.TryGetValue(coroutineName, out var taskCoroutines)) { - return; - } - - for (int i = 0; i < taskCoroutines.Count; ++i) { - taskCoroutines[i].Stop(); - } - } - - /// - /// Stops all of the task coroutines. - /// - public void StopAllTaskCoroutines() - { - if (m_ActiveTaskCoroutines == null) { - return; - } - - foreach (var entry in m_ActiveTaskCoroutines) { - var taskCoroutines = entry.Value; - for (int i = 0; i < taskCoroutines.Count; ++i) { - taskCoroutines[i].Stop(); - } - } - } - - /// - /// The TaskCoroutine has ended. - /// - /// The coroutine that has ended. - /// The name of the coroutine. - public void TaskCoroutineEnded(TaskCoroutine taskCoroutine, string coroutineName) - { - if (!m_ActiveTaskCoroutines.TryGetValue(coroutineName, out var taskCoroutines)) { - return; - } - - taskCoroutines.Remove(taskCoroutine); - if (taskCoroutines.Count == 0) { - m_ActiveTaskCoroutines.Remove(coroutineName); - } - } - - /// - /// OnCollisionEnter callback. - /// - /// The resulting collision. - private void OnCollisionEnter(Collision collision) - { - if (OnBehaviorTreeCollisionEnter != null) { - OnBehaviorTreeCollisionEnter(collision); - } - } - - /// - /// OnCollisionExit callback. - /// - /// The resulting collision. - private void OnCollisionExit(Collision collision) - { - if (OnBehaviorTreeCollisionExit != null) { - OnBehaviorTreeCollisionExit(collision); - } - } - - /// - /// OnCollisionEnter2D callback. - /// - /// The resulting collision. - private void OnCollisionEnter2D(Collision2D collision) - { - if (OnBehaviorTreeCollisionEnter2D != null) { - OnBehaviorTreeCollisionEnter2D(collision); - } - } - - /// - /// OnCollisionExit2D callback. - /// - /// The resulting collision. - private void OnCollisionExit2D(Collision2D collision) - { - if (OnBehaviorTreeCollisionExit2D != null) { - OnBehaviorTreeCollisionExit2D(collision); - } - } - - /// - /// OnTriggerEnter callback. - /// - /// The overlapping collider. - private void OnTriggerEnter(Collider other) - { - if (OnBehaviorTreeTriggerEnter != null) { - OnBehaviorTreeTriggerEnter(other); - } - } - - /// - /// OnTriggerExit callback. - /// - /// The collider that is no longer overlapping. - private void OnTriggerExit(Collider other) - { - if (OnBehaviorTreeTriggerExit != null) { - OnBehaviorTreeTriggerExit(other); - } - } - - /// - /// OnTriggerEnter2D callback. - /// - /// The overlapping collider. - private void OnTriggerEnter2D(Collider2D other) - { - if (OnBehaviorTreeTriggerEnter2D != null) { - OnBehaviorTreeTriggerEnter2D(other); - } - } - - /// - /// OnTriggerExit2D callback. - /// - /// The collider that is no longer overlapping. - private void OnTriggerExit2D(Collider2D other) - { - if (OnBehaviorTreeTriggerExit2D != null) { - OnBehaviorTreeTriggerExit2D(other); - } - } - - /// - /// OnControllerColliderHit callback. - /// - /// The hit result. - private void OnControllerColliderHit(ControllerColliderHit hit) - { - if (OnBehaviorTreeControllerColliderHit != null) { - OnBehaviorTreeControllerColliderHit(hit); - } - } - -#if UNITY_EDITOR - /// - /// OnDrawGizmos callback. - /// - private void OnDrawGizmos() - { - if (!enabled) { - return; - } - - if (m_Data != null && m_Data.LogicNodes != null) { - for (int i = 0; i < m_Data.LogicNodes.Length; ++i) { - if (m_Data.LogicNodes[i] is Task task) { - task.OnDrawGizmos(this); - } - } - } - } - - /// - /// OnDrawGizmos callback. - /// - private void OnDrawGizmosSelected() - { - if (!enabled) { - return; - } - - if (m_Data != null && m_Data.LogicNodes != null) { - for (int i = 0; i < m_Data.LogicNodes.Length; ++i) { - if (m_Data.LogicNodes[i] is Task task) { - task.OnDrawGizmosSelected(this); - } - } - } - } -#endif - - /// - /// The behavior tree has been disabled. - /// - private void OnDisable() - { - if (m_Entity == Entity.Null) { - return; - } - - StopBehavior(m_World, m_Entity, m_PauseWhenDisabled); - } - - /// - /// The behavior tree has been destroyed. - /// - private void OnDestroy() - { - if (m_Entity == Entity.Null) { - return; - } - - if (OnBehaviorTreeDestroyed != null) { - OnBehaviorTreeDestroyed(); - } - StopBehavior(m_World, m_Entity, false); - m_GameObject = null; - } - - /// - /// Is the node with the specified index enabled? - /// - /// Is the node a LogicNode? - /// The index of the node. - /// True if the node with the specified index is enabled. - public bool IsNodeEnabled(bool logicNode, int index) - { - return Data.IsNodeEnabled(logicNode, index); - } - - /// - /// Is the node with the specified index active? - /// - /// Is the node a LogicNode? - /// The index of the node. - /// True if the node with the specified index is active. - public bool IsNodeActive(bool logicNode, int index) - { - if (!Application.isPlaying || m_Entity == Entity.Null) { - return false; - } - - var taskComponents = m_World.EntityManager.GetBuffer(m_Entity); - var logicNodeIndex = index; - if (!logicNode && m_Data.EventNodes != null && index < m_Data.EventNodes.Length) { - // Find the logic node that the event node is connected to. - logicNodeIndex = m_Data.EventNodes[index].ConnectedIndex; - } - if (logicNodeIndex >= taskComponents.Length) { - return false; - } - var taskComponent = taskComponents[logicNodeIndex]; - return taskComponent.Status == TaskStatus.Running; - } - - /// - /// Returns true if the behavior tree is active. - /// - /// True if the behavior tree is active. - public bool IsActive() - { - return IsActive(m_Entity); - } - - /// - /// Returns true if the behavior tree is active. - /// - /// The entity that contains the behavior tree. - /// True if the behavior tree is active. - public bool IsActive(Entity entity) - { - if (entity == Entity.Null) { - return false; - } - return s_BehaviorTreeByEntity.ContainsKey(entity); - } - - /// - /// Returns true if the behavior tree is paused. - /// - /// True if the behavior tree is paused. - public bool IsPaused() - { - return IsPaused(m_World, m_Entity); - } - - /// - /// Returns true if the behavior tree is paused. - /// - /// The world that the entity exists in. - /// The entity that contains the behavior tree. - /// True if the behavior tree is paused. - public bool IsPaused(World world, Entity entity) - { - if (!IsActive(entity)) { - return false; - } - return world.EntityManager.HasComponent(entity) && !world.EntityManager.IsComponentEnabled(entity); - } - - /// - /// Copies the graph onto the current graph. - /// - /// The graph that should be copied. - public void Clone(IGraph other) - { - m_Data = new BehaviorTreeData(); - m_Data.EventNodes = other.EventNodes; - m_Data.LogicNodes = other.LogicNodes as ITreeLogicNode[]; - m_Data.SharedVariables = other.SharedVariables; - m_Data.DisabledLogicNodes = other.DisabledLogicNodes; - m_Data.DisabledEventNodes = other.DisabledEventNodes; - -#if UNITY_EDITOR - m_Data.EventNodeProperties = other.EventNodeProperties; - m_Data.LogicNodeProperties = other.LogicNodeProperties; - m_Data.GroupProperties = other.GroupProperties; - m_Data.SharedVariableGroups = other.SharedVariableGroups; -#endif - - m_Data.Serialize(); - } - - /// - /// Overrides ToString. - /// - /// The desired string value. - public override string ToString() - { - return $"{m_GraphName} (Index {m_Index})"; - } - - /// - /// Returns the hashcode of the graph. - /// - /// The hashcode of the graph. - public override int GetHashCode() - { - if (m_Subtree != null) { - return m_Subtree.GetHashCode(); - } - return base.GetHashCode(); - } - - /// - /// Callback when the domain should be reloaded. - /// - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - private static void Reinitialize() - { - s_BehaviorTreeByEntity = new Dictionary(); - } - - /// - /// Enables the baked behavior tree system. - /// - /// The world that the system has been added to. - public static void EnableBakedBehaviorTreeSystem(World world) - { - if (world == null) { - return; - } - - EnableBakedBehaviorTreeSystem(world.Unmanaged); - } - - /// - /// Enables the baked behavior tree system. - /// - /// The unmanged world that the system has been added to. - public static void EnableBakedBehaviorTreeSystem(WorldUnmanaged world) - { - world.GetExistingSystemState().Enabled = true; - } - - /// - /// Converts the behavior tree to a DOTS entity. - /// - public class BehaviorTreeBaker : Baker - { - private static MethodInfo s_GetTypeOfSystemMethod; - - /// - /// Bakes the behavior tree to the DOTS entity. - /// - /// The authoring behavior tree. - public override void Bake(BehaviorTree behaviorTree) - { - if (!behaviorTree.StartWhenEnabled || !behaviorTree.enabled) { - return; - } - - var entity = GetEntity(behaviorTree, TransformUsageFlags.Dynamic); - var worlds = World.All; - for (int i = 0; i < worlds.Count; ++i) { - if (worlds[i].EntityManager.Exists(entity)) { - if (!behaviorTree.InitializeTree(worlds[i], entity)) { - continue; - } - - var connectedIndex = GetStartTaskConnectedIndex(behaviorTree); - if (connectedIndex == -1 || connectedIndex == ushort.MaxValue) { - return; - } - - var taskComponents = worlds[i].EntityManager.GetBuffer(entity); - var tagStableTypeHash = new ulong[taskComponents.Length]; - for (int j = 0; j < taskComponents.Length; ++j) { - tagStableTypeHash[j] = TypeManager.GetTypeInfo(taskComponents[j].FlagComponentType.TypeIndex).StableTypeHash; - } - ulong[] ReevaluateFlagStableTypeHash = null; - if (worlds[i].EntityManager.HasBuffer(entity)) { - var reevaluateTaskComponents = worlds[i].EntityManager.GetBuffer(entity); - ReevaluateFlagStableTypeHash = new ulong[reevaluateTaskComponents.Length]; - for (int j = 0; j < reevaluateTaskComponents.Length; ++j) { - ReevaluateFlagStableTypeHash[j] = TypeManager.GetTypeInfo(reevaluateTaskComponents[j].ReevaluateFlagComponentType.TypeIndex).StableTypeHash; - } - } - - AddComponentObject(entity, new BakedBehaviorTree - { - StartEventConnectedIndex = connectedIndex, - StartEvaluation = behaviorTree.UpdateMode == UpdateMode.EveryFrame, - ReevaluateTaskSystems = GetTaskSystems(worlds[i]), - InterruptTaskSystems = GetTaskSystems(worlds[i]), - TraversalTaskSystems = GetTaskSystems(worlds[i]), - TagStableTypeHashes = tagStableTypeHash, - ReevaluateFlagStableTypeHashes = ReevaluateFlagStableTypeHash, - }); - behaviorTree.Baked = true; - } - } - } - - /// - /// Returns the index of the node connection for the start event task. - /// - /// The interested behavior tree. - /// The index of the node connection for the start event task. - private int GetStartTaskConnectedIndex(BehaviorTree behaviorTree) - { - // The behavior tree has to first be initialized. - if (behaviorTree.World == null || behaviorTree.Entity == Entity.Null) { - Debug.LogError($"Error: Unable to retrieve the connected index on behavior tree {behaviorTree}. The behavior tree has to first be initialized."); - return -1; - } - - var data = behaviorTree.Data; - for (int i = 0; i < data.EventNodes.Length; ++i) { - if (data.EventNodes[i].GetType() == typeof(Start)) { - // The connected index may not be valid. - if (data.EventNodes[i].ConnectedIndex == ushort.MaxValue) { - return ushort.MaxValue; - } - - // The branch cannot start if it is disabled. - if (!behaviorTree.IsNodeEnabled(false, i)) { - return -1; - } - - return data.LogicNodes[data.EventNodes[i].ConnectedIndex].RuntimeIndex; - } - } - return -1; - } - - /// - /// Returns all of the system type indicies within the systems of the specified type. - /// - /// The world that the systems were added to. - /// The system type indicies within the systems of the specified type (can be null). - private string[] GetTaskSystems(World world) where T : ComponentSystemGroup - { - var systemGroup = world.GetExistingSystemManaged(); - if (systemGroup == null) { - return null; - } - - var systems = systemGroup.GetAllSystems(); - if (systems.Length == 0) { - systems.Dispose(); - return null; - } - - // Use reflection to call WorldUnmanaged.GetTypeOfSystem. This method is only called during baking at edit time so reflection is ok, though it would be better - // if this method was eventually made public. - if (s_GetTypeOfSystemMethod == null) { - s_GetTypeOfSystemMethod = typeof(WorldUnmanaged).GetMethod("GetTypeOfSystem", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); - if (s_GetTypeOfSystemMethod == null) { - Debug.LogError("Error: Unable to find WorldUnmanaged.GetTypeOfSystem. Please email support@opsive.com with your Unity version and Entity package version."); - return null; - } - } - - var systemTypes = new string[systems.Length]; - for (int i = 0; i < systems.Length; ++i) { - var systemTypeIndex = TypeManager.GetSystemTypeIndex((Type)s_GetTypeOfSystemMethod.Invoke(world.Unmanaged, new object[] { systems[i] })); - systemTypes[i] = systemTypeIndex.ToString(); - } - systems.Dispose(); - return systemTypes; - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTree.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTree.cs.meta deleted file mode 100644 index cbdaf1c8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTree.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0cdaa3305fa954c45a80c9662aa6f425 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: e0a8f1df788b6274a9a24003859dfa7e, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeData.cs b/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeData.cs deleted file mode 100644 index b66f8de3..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeData.cs +++ /dev/null @@ -1,1674 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime -{ - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.BehaviorDesigner.Runtime.Tasks.Events; - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Utility; - using System; - using System.Collections; - using System.Collections.Generic; - using System.Reflection; - using UnityEngine; - - /// - /// Storage class for the graph data. - /// - [System.Serializable] - public partial class BehaviorTreeData - { - [Tooltip("The serialized Task data.")] - [SerializeField] private Serialization[] m_TaskData; - [Tooltip("The serialized EventTask data.")] - [SerializeField] private Serialization[] m_EventTaskData; - [Tooltip("The serialized SharedVariable data.")] - [SerializeField] private Serialization[] m_SharedVariableData; - [Tooltip("The serialized disabled event nodes data.")] - [SerializeField] private Serialization[] m_DisabledEventNodesData; - [Tooltip("The serialized disabled logic nodes data.")] - [SerializeField] private Serialization[] m_DisabledLogicNodesData; - [Tooltip("The unique ID of the data.")] - [SerializeField] private int m_UniqueID; - - private ITreeLogicNode[] m_Tasks; - private IEventNode[] m_EventTasks; - private SharedVariable[] m_SharedVariables; - private ushort[] m_DisabledLogicNodes; - private ushort[] m_DisabledEventNodes; - private Dictionary m_VariableByNameMap; - private int m_RuntimeUniqueID; - - public ITreeLogicNode[] LogicNodes - { - get => m_Tasks; - set { - if (value == null) { - m_Tasks = null; - } else { - if (m_Tasks == null) { - m_Tasks = new ITreeLogicNode[value.Length]; - } else if (m_Tasks.Length != value.Length) { - Array.Resize(ref m_Tasks, value.Length); - } - for (int i = 0; i < value.Length; ++i) { - m_Tasks[i] = value[i]; - } - } - } - } - public IEventNode[] EventNodes - { - get => m_EventTasks; - set { - if (value == null) { - m_EventTasks = null; - } else { - if (m_EventTasks == null) { - m_EventTasks = new IEventNode[value.Length]; - } else if (m_EventTasks.Length != value.Length) { - Array.Resize(ref m_EventTasks, value.Length); - } - for (int i = 0; i < value.Length; ++i) { - m_EventTasks[i] = value[i]; - } - } - } - } - public SharedVariable[] SharedVariables { get => m_SharedVariables; set => m_SharedVariables = value; } - public int UniqueID { get => m_RuntimeUniqueID != 0 ? m_RuntimeUniqueID : m_UniqueID; } - public ushort[] DisabledLogicNodes { get => m_DisabledLogicNodes; set => m_DisabledLogicNodes = value; } - public ushort[] DisabledEventNodes { get => m_DisabledEventNodes; set => m_DisabledEventNodes = value; } - internal Dictionary VariableByNameMap { get => m_VariableByNameMap; set => m_VariableByNameMap = value; } - internal int RuntimeUniqueID { set => m_RuntimeUniqueID = value; } - -#if UNITY_EDITOR - [Tooltip("The serialized logic node properties data.")] - [SerializeField] private Serialization[] m_LogicNodePropertiesData; - [Tooltip("The serialized event node properties data.")] - [SerializeField] private Serialization[] m_EventNodePropertiesData; - [Tooltip("The serialized group properties data.")] - [SerializeField] private Serialization[] m_GroupPropertiesData; - [Tooltip("The serialized shared variables group data.")] - [SerializeField] private Serialization[] m_SharedVariableGroupsData; - - private LogicNodeProperties[] m_LogicNodeProperties; - private NodeProperties[] m_EventNodeProperties; - private GroupProperties[] m_GroupProperties; - [System.NonSerialized] private SharedVariableGroup[] m_SharedVariableGroups; - - public LogicNodeProperties[] LogicNodeProperties { get => m_LogicNodeProperties; set { m_LogicNodeProperties = value; } } - public NodeProperties[] EventNodeProperties { get => m_EventNodeProperties; set { m_EventNodeProperties = value; } } - public GroupProperties[] GroupProperties { get => m_GroupProperties; set => m_GroupProperties = value; } - public SharedVariableGroup[] SharedVariableGroups { get => m_SharedVariableGroups; set => m_SharedVariableGroups = value; } -#endif - - private ResizableArray m_SubtreeNodesReference; - private ResizableArray m_VariableFields; - [System.NonSerialized] private bool m_Deserializing; - - internal ResizableArray SubtreeNodesReferences { get => m_SubtreeNodesReference; set => m_SubtreeNodesReference = value; } - - /// - /// Default constructor. - /// - public BehaviorTreeData() - { - m_UniqueID = Guid.NewGuid().GetHashCode(); - } - - /// - /// Adds the specified node. - /// - /// The node that should be added. - public void AddNode(ITreeLogicNode node) - { - if (m_Tasks == null) { - m_Tasks = new ITreeLogicNode[1]; - } else { - Array.Resize(ref m_Tasks, m_Tasks.Length + 1); - } - node.Index = (ushort)(m_Tasks.Length - 1); - node.ParentIndex = ushort.MaxValue; - node.SiblingIndex = ushort.MaxValue; - node.RuntimeIndex = ushort.MaxValue; - m_Tasks[m_Tasks.Length - 1] = node; - } - - /// - /// Removes the specified logic node. - /// - /// The node that should be removed. - /// True if the node was removed. - public bool RemoveNode(ITreeLogicNode node) - { - if (m_Tasks == null || node.Index >= m_Tasks.Length) { - return false; - } - - var dest = new ITreeLogicNode[m_Tasks.Length - 1]; - Array.Copy(m_Tasks, dest, node.Index); - Array.Copy(m_Tasks, node.Index + 1, dest, node.Index, m_Tasks.Length - node.Index - 1); - m_Tasks = dest; - return true; - } - - /// - /// Adds the specified event node. - /// - /// The event node that should be added. - public void AddNode(IEventNode eventNode) - { - if (m_EventTasks == null) { - m_EventTasks = new IEventNode[1]; - } else { - Array.Resize(ref m_EventTasks, m_EventTasks.Length + 1); - } - m_EventTasks[m_EventTasks.Length - 1] = eventNode; - } - - /// - /// Removes the specified event node. - /// - /// The event node that should be removed. - /// True if the event node was removed. - public bool RemoveNode(IEventNode eventNode) - { - if (m_EventTasks == null) { - return false; - } - - var index = m_EventTasks.IndexOf(eventNode); - if (index == -1) { - return false; - } - - var dest = new IEventNode[m_EventTasks.Length - 1]; - Array.Copy(m_EventTasks, dest, index); - Array.Copy(m_EventTasks, index + 1, dest, index, m_EventTasks.Length - index - 1); - m_EventTasks = dest; - return true; - } - - /// - /// Serializes the behavior tree. - /// - public void Serialize() - { - if (Application.isPlaying) { - return; - } - - m_TaskData = Serialization.Serialize(m_Tasks, ValidateSerializedObject); - m_EventTaskData = Serialization.Serialize(m_EventTasks, ValidateSerializedObject); - SerializeSharedVariables(); - m_DisabledEventNodesData = Serialization.Serialize(m_DisabledEventNodes); - m_DisabledLogicNodesData = Serialization.Serialize(m_DisabledLogicNodes); - m_UniqueID = Guid.NewGuid().GetHashCode(); - -#if UNITY_EDITOR - // Ensure the node data is up to date. - if (m_LogicNodeProperties != null && m_Tasks != null && m_LogicNodeProperties.Length <= m_Tasks.Length) { - for (int i = 0; i < m_LogicNodeProperties.Length; ++i) { - var nodeData = m_LogicNodeProperties[i].Data; - nodeData.ParentIndex = m_Tasks[i].ParentIndex; - nodeData.SiblingIndex = m_Tasks[i].SiblingIndex; - nodeData.IsParent = m_Tasks[i] is IParentNode; - m_LogicNodeProperties[i].Data = nodeData; - } - } - m_LogicNodePropertiesData = Serialization.Serialize(m_LogicNodeProperties); - m_EventNodePropertiesData = Serialization.Serialize(m_EventNodeProperties); - m_GroupPropertiesData = Serialization.Serialize(m_GroupProperties); -#endif - } - - /// - /// Validates the serialized object. - /// - /// The type of object. - /// The field that the object belongs to. - /// The value of the object - /// The validated object. - public static Serialization.ValidatedObject ValidateSerializedObject(Type type, FieldInfo field, object value) - { - if (value == null) { - return new Serialization.ValidatedObject() { Type = type, Obj = value }; - } - - // Replace ILogicNode with ushort index values. - if (typeof(IList).IsAssignableFrom(type)) { - var elementType = Serializer.GetElementType(type); - if (typeof(ILogicNode).IsAssignableFrom(elementType)) { - if (field == null || field.GetCustomAttribute() == null) { - var tasks = value as IList; - if (tasks == null) { - return new Serialization.ValidatedObject() { Type = type, Obj = value }; - } - - var indexValues = new ushort[tasks.Count]; - for (int i = 0; i < indexValues.Length; ++i) { - indexValues[i] = ((ILogicNode)tasks[i]).Index; - } - return new Serialization.ValidatedObject() { Type = typeof(ushort[]), Obj = indexValues }; - } - } else if (Application.isPlaying && (typeof(GameObject).IsAssignableFrom(elementType) || typeof(Component).IsAssignableFrom(elementType))) { // Scene objects cannot be serialized at runtime. - var listValue = value as IList; - if (listValue != null) { - IList objects; - if (type.IsArray) { - objects = Array.CreateInstance(elementType, listValue.Count); - } else { - if (type.IsGenericType) { - objects = Activator.CreateInstance(typeof(List<>).MakeGenericType(elementType)) as IList; - } else { - objects = Activator.CreateInstance(type) as IList; - } - } - for (int i = 0; i < listValue.Count; ++i) { - GameObject gameObjectValue = null; - if (listValue[i] is Component componentValue) { - gameObjectValue = componentValue.gameObject; - } else { - gameObjectValue = listValue[i] as GameObject; - } - if (gameObjectValue != null && gameObjectValue.scene.IsValid()) { - if (type.IsArray) { - objects[i] = null; - } else { - objects.Add(null); - } - } else { - if (type.IsArray) { - objects[i] = listValue[i]; - } else { - objects.Add(listValue[i]); - } - } - } - listValue = objects; - } - return new Serialization.ValidatedObject() { Type = type, Obj = listValue }; - } - } else if (typeof(ILogicNode).IsAssignableFrom(type)) { - if (field == null || field.GetCustomAttribute() == null) { - return new Serialization.ValidatedObject() { Type = typeof(ushort), Obj = ((ILogicNode)value).Index }; - } - } else if (Application.isPlaying && (typeof(GameObject).IsAssignableFrom(type) || typeof(Component).IsAssignableFrom(type))) { // Scene objects cannot be serialized at runtime. - GameObject gameObjectValue = null; - if (value is Component componentValue) { - gameObjectValue = componentValue.gameObject; - } else { - gameObjectValue = value as GameObject; - } - if (gameObjectValue != null && gameObjectValue.scene.IsValid()) { - return new Serialization.ValidatedObject() { Type = type, Obj = null }; - } - } - return new Serialization.ValidatedObject() { Type = type, Obj = value }; - } - - /// - /// Serializes the SharedVariables. This allows the SharedVariables to be serialized independently. - /// - public void SerializeSharedVariables() - { - if (Application.isPlaying) { - return; - } - - m_SharedVariableData = Serialization.Serialize(m_SharedVariables); -#if UNITY_EDITOR - m_SharedVariableGroupsData = Serialization.Serialize(m_SharedVariableGroups); -#endif - - // Update the mapping for any variable name changes. - if (m_VariableByNameMap == null) { - m_VariableByNameMap = new Dictionary(); - } else { - m_VariableByNameMap.Clear(); - } - if (m_SharedVariables != null) { - for (int i = 0; i < m_SharedVariables.Length; ++i) { - if (m_SharedVariables[i] == null) { - continue; - } - m_VariableByNameMap.Add(new VariableAssignment(m_SharedVariables[i].Name, m_SharedVariables[i].Scope), m_SharedVariables[i]); - } - } - } - - /// - /// Deserialize the behavior tree. - /// - /// The component that the graph is being deserialized from. - /// The graph that is being deserialized. - /// Should the behavior tree be force deserialized? - /// Should the shared variables be force deserialized? - /// Should the subtrees be injected into the behavior tree? - /// Can the SharedVariables be deep copied? - /// A list of SharedVariables that should override the current SharedVariable value. - /// True if the tree was deserialized. - public bool Deserialize(IGraphComponent graphComponent, IGraph graph, bool force, bool forceSharedVariables, bool injectSubtrees, bool canDeepCopyVariables = true, SharedVariableOverride[] sharedVariableOverrides = null) - { - // No need to deserialize if the data is already deserialized. - if (!force && ((m_Tasks != null && m_TaskData != null && m_Tasks.Length == m_TaskData.Length) || (m_EventTasks != null && m_EventTaskData != null && m_EventTasks.Length == m_EventTaskData.Length))) { - // SharedVariables may still need to be deserialized separately. - DeserializeSharedVariables(graph, false, canDeepCopyVariables, sharedVariableOverrides); - - if (Application.isPlaying && m_RuntimeUniqueID == 0) { - m_RuntimeUniqueID = m_UniqueID; - } - return true; - } - - return DeserializeInternal(graphComponent, graph, force, forceSharedVariables, injectSubtrees, canDeepCopyVariables, sharedVariableOverrides); - } - - /// - /// Internal method which deserialize the behavior tree. - /// - /// The component that the graph is being deserialized from. - /// The graph that is being deserialized. - /// Should the behavior tree be force deserialized? - /// Should the shared variables be force deserialized? - /// Should the subtrees be injected into the behavior tree? - /// Can the SharedVariables be deep copied? - /// A list of SharedVariables that should override the current SharedVariable value. - /// True if the tree was deserialized. - private bool DeserializeInternal(IGraphComponent graphComponent, IGraph graph, bool force, bool forceSharedVariables, bool injectSubtrees, bool canDeepCopyVariables, SharedVariableOverride[] sharedVariableOverrides = null) - { - // Prevent the tree from being deserialized recusrively. - if (m_Deserializing) { - Debug.LogError($"Error: Unable to deserialize {graph}. This can be caused by recursive subtree references."); - return false; - } - - m_Deserializing = true; - m_RuntimeUniqueID = Application.isPlaying ? m_UniqueID : 0; - m_VariableFields = null; - var errorState = false; -#if UNITY_EDITOR - // Deserialize the properties first so it can be used elsewhere. - if (m_LogicNodePropertiesData != null && m_LogicNodePropertiesData.Length > 0) { - m_LogicNodeProperties = new LogicNodeProperties[m_LogicNodePropertiesData.Length]; - for (int i = 0; i < m_LogicNodePropertiesData.Length; ++i) { - try { - m_LogicNodeProperties[i] = m_LogicNodePropertiesData[i].DeserializeFields(MemberVisibility.Public) as LogicNodeProperties; - } catch (Exception e) { - m_LogicNodeProperties[i] = new LogicNodeProperties(); - Debug.LogError($"Error: Unable to load task editor data at index {i} due to exception:\n{e}"); - } - } - } else { - m_LogicNodeProperties = null; - } - if (m_EventNodePropertiesData != null && m_EventNodePropertiesData.Length > 0) { - m_EventNodeProperties = new NodeProperties[m_EventNodePropertiesData.Length]; - for (int i = 0; i < m_EventNodePropertiesData.Length; ++i) { - m_EventNodeProperties[i] = m_EventNodePropertiesData[i].DeserializeFields(MemberVisibility.Public) as NodeProperties; - } - } else { - m_EventNodeProperties = null; - } - if (m_GroupPropertiesData != null && m_GroupPropertiesData.Length > 0) { - m_GroupProperties = new GroupProperties[m_GroupPropertiesData.Length]; - for (int i = 0; i < m_GroupPropertiesData.Length; ++i) { - m_GroupProperties[i] = m_GroupPropertiesData[i].DeserializeFields(MemberVisibility.Public) as GroupProperties; - } - } else { - m_GroupProperties = null; - } -#endif - DeserializeSharedVariables(graph, forceSharedVariables, canDeepCopyVariables, sharedVariableOverrides); - - // The disabled node indicies need to be deserialized before the nodes. - if (m_DisabledEventNodesData != null && m_DisabledEventNodesData.Length > 0 && m_EventTaskData != null) { - m_DisabledEventNodes = new ushort[m_DisabledEventNodesData.Length]; - var offset = 0; - for (int i = 0; i < m_DisabledEventNodesData.Length; ++i) { - m_DisabledEventNodes[i] = (ushort)m_DisabledEventNodesData[i].DeserializeFields(MemberVisibility.Public); - // The node index may no longer be valid. - if (m_DisabledEventNodes[i - offset] >= m_EventTaskData.Length) { - offset++; - } - } - if (offset > 0) { - Array.Resize(ref m_DisabledEventNodes, m_DisabledEventNodes.Length - offset); - } - } else { - m_DisabledEventNodes = null; - } - if (m_DisabledLogicNodesData != null && m_DisabledLogicNodesData.Length > 0 && m_TaskData != null) { - m_DisabledLogicNodes = new ushort[m_DisabledLogicNodesData.Length]; - var offset = 0; - for (int i = 0; i < m_DisabledLogicNodesData.Length; ++i) { - m_DisabledLogicNodes[i - offset] = (ushort)m_DisabledLogicNodesData[i].DeserializeFields(MemberVisibility.Public); - // The node index may no longer be valid. - if (m_DisabledLogicNodes[i - offset] >= m_TaskData.Length) { - offset++; - } - } - if (offset > 0) { - Array.Resize(ref m_DisabledLogicNodes, m_DisabledLogicNodes.Length - offset); - } - } else { - m_DisabledLogicNodes = null; - } - - ResizableArray taskReferences = null; - if (m_SubtreeNodesReference != null) { - m_SubtreeNodesReference.Clear(); - } - if (m_TaskData != null && m_TaskData.Length > 0) { - m_Tasks = new ITreeLogicNode[m_TaskData.Length]; - for (int i = 0; i < m_TaskData.Length; ++i) { - try { - var task = m_TaskData[i].DeserializeFields(MemberVisibility.Public, ValidateDeserializedTypeObject, (object fieldInfoObj, object task, object value) => - { - var validatedValue = ValidateDeserializedObject(fieldInfoObj, task, value, ref m_VariableByNameMap, ref taskReferences, sharedVariableOverrides); - if (validatedValue != null && validatedValue is SharedVariable sharedVariable && sharedVariable.Scope == SharedVariable.SharingScope.Graph) { - if (m_VariableFields == null) { m_VariableFields = new ResizableArray(); } - m_VariableFields.Add(new VariableField() { Field = fieldInfoObj as FieldInfo, Task = task, Name = sharedVariable.Name }); - } - return validatedValue; - }) as ILogicNode; - if (task is ITreeLogicNode treeLogicNode) { - m_Tasks[i] = treeLogicNode; - } else if (task is ILogicNode) { - Debug.LogError($"Error: The task {m_TaskData[i].ObjectType} at index {i} must implement ITreeLogicNode."); - } - } catch (Exception e) { - Debug.LogError($"Error: Unable to load task {m_TaskData[i].ObjectType} at index {i} due to exception:\n{e}"); - } - - // Account for tasks where the object no longer exists. - if (m_Tasks[i] == null) { -#if UNITY_EDITOR - if (m_LogicNodeProperties[i].Data.IsParent) { - m_Tasks[i] = new UnknownParentTaskNode(m_TaskData[i].ObjectType); - } else { - m_Tasks[i] = new UnknownTaskNode(m_TaskData[i].ObjectType); - } - m_Tasks[i].Index = (ushort)i; - m_Tasks[i].ParentIndex = m_LogicNodeProperties[i].Data.ParentIndex; - m_Tasks[i].SiblingIndex = m_LogicNodeProperties[i].Data.SiblingIndex; -#else - if (i + 1 < m_Tasks.Length && m_Tasks[i + 1] != null && m_Tasks[i + 1].ParentIndex == i) { - m_Tasks[i] = new UnknownParentTaskNode(m_TaskData[i].ObjectType); - } else { - m_Tasks[i] = new UnknownTaskNode(m_TaskData[i].ObjectType); - } - m_Tasks[i].Index = (ushort)i; -#endif - } - - // The RuntimeIndex is assigned later when the tree is initialized. - m_Tasks[i].RuntimeIndex = ushort.MaxValue; -#if UNITY_EDITOR - // Sanity checks. - if (m_Tasks[i].Index >= m_TaskData.Length) { m_Tasks[i].Index = (ushort)i; } - if (m_Tasks[i].ParentIndex != ushort.MaxValue && m_Tasks[i].ParentIndex >= m_TaskData.Length) { m_Tasks[i].ParentIndex = ushort.MaxValue; } - if (m_Tasks[i].SiblingIndex != ushort.MaxValue && m_Tasks[i].SiblingIndex >= m_TaskData.Length) { m_Tasks[i].SiblingIndex = ushort.MaxValue; } -#endif - - if (injectSubtrees) { - // If the previous task is a parent the current task has to be a child otherwise the tree is in an error state. The error will also occur - // if there is only one task and that task is a parent task. - if ((m_Tasks[i].ParentIndex != ushort.MaxValue && (i > 0 && m_Tasks[i - 1] is IParentNode && m_Tasks[i].ParentIndex != m_Tasks[i - 1].Index)) || (m_Tasks[i] is IParentNode && i + 1 == m_Tasks.Length)) { - Debug.LogError($"Error: {graph} contains the parent task {m_Tasks[i].GetType().Name} which does not have any children. All parent tasks must contain at least one child.", graph.Parent); - errorState = true; - continue; - } - - // Subtrees will be evaluated after all tasks are assigned. - if (m_Tasks[i] is ISubtreeReference subtreeReference) { - // Subtrees can be nested. - subtreeReference.EvaluateSubtrees(graphComponent); - var subtrees = subtreeReference.Subtrees; - if (subtrees != null) { - // The parent must be able to accept the number of subtrees that there are. - var parentIndex = m_Tasks[i].ParentIndex; - IParentNode parentNode = null; - if (parentIndex != ushort.MaxValue) { - parentNode = m_Tasks[parentIndex] as IParentNode; - } - - if ((parentNode == null && subtrees.Length > 1) || (parentNode != null && subtrees.Length > parentNode.MaxChildCount)) { - Debug.LogError($"Error: {graph} on object {graph.Parent} contains multiple subtrees as the starting task or as a child of a parent task which cannot contain so many children (such as a decorator).", graph.Parent); - errorState = true; - continue; - } - - var deserializedNodes = new ITreeLogicNode[subtrees.Length][]; - for (int j = 0; j < subtrees.Length; ++j) { - if (subtrees[j] == null) { - continue; - } - if (!subtrees[j].Deserialize(graphComponent, force && !subtrees[j].Pooled, forceSharedVariables && !subtrees[j].Pooled, true, true, subtreeReference.SharedVariableOverrides)) { - errorState = true; - break; - }; - if (subtrees[j].Data.m_VariableFields != null && subtrees[j].Data.m_VariableFields.Count > 0) { - if (m_VariableFields == null) { m_VariableFields = new ResizableArray(); ; } - m_VariableFields.AddRange(subtrees[j].Data.m_VariableFields); - } - // Keep a reference to the deserialized nodes. This will ensure they are unique and do not get overwritten. - deserializedNodes[j] = subtrees[j].TreeLogicNodes; - - // Add any new subtree variables to the current tree. - if (subtrees[j].SharedVariables != null) { - // In order to reduce allocations the first loop will determine the number of variables that need to be added. - var length = subtrees[j].SharedVariables.Length; - var variableCount = 0; - for (int k = 0; k < length; ++k) { - var subtreeVariable = subtrees[j].SharedVariables[k]; - if (GetVariable(graph, subtreeVariable.Name, SharedVariable.SharingScope.Graph) == null) { - variableCount++; - } - } - - // And the second loop will actually add the variables. - if (variableCount > 0) { - var insertIndex = 0; - if (m_SharedVariables == null) { - m_SharedVariables = new SharedVariable[variableCount]; - m_VariableByNameMap = new Dictionary(); - } else { - insertIndex = m_SharedVariables.Length; - Array.Resize(ref m_SharedVariables, m_SharedVariables.Length + variableCount); - } - for (int k = 0; k < length; ++k) { - var subtreeVariable = subtrees[j].SharedVariables[k]; - if (!m_VariableByNameMap.ContainsKey(new VariableAssignment(subtreeVariable.Name, SharedVariable.SharingScope.Graph))) { - m_SharedVariables[insertIndex] = subtreeVariable; - m_VariableByNameMap.Add(new VariableAssignment(subtreeVariable.Name, SharedVariable.SharingScope.Graph), subtreeVariable); - insertIndex++; - } - } - } - } - } - - // Do not add the subtree if it causes an error. - if (!errorState) { - if (m_SubtreeNodesReference == null) { m_SubtreeNodesReference = new ResizableArray(); } - m_SubtreeNodesReference.Add(new SubtreeNodesReference() - { - SubtreeReference = subtreeReference, - NodeIndex = (ushort)i, - Subtrees = subtrees, - Nodes = deserializedNodes - }); - } - } - } - } - } - } else { - m_Tasks = null; - } - - // Subtrees should be injected into the tree. - InjectSubtrees(); - - // Add the event tasks after the subtrees have been injected to ensure the connected index is correct. - if (m_EventTaskData != null && m_EventTaskData.Length > 0) { - m_EventTasks = new IEventNode[m_EventTaskData.Length]; - for (int i = 0; i < m_EventTaskData.Length; ++i) { - m_EventTasks[i] = m_EventTaskData[i].DeserializeFields(MemberVisibility.Public, ValidateDeserializedTypeObject, (object fieldInfoObj, object task, object value) => - { - var validatedValue = ValidateDeserializedObject(fieldInfoObj, task, value, ref m_VariableByNameMap, ref taskReferences, sharedVariableOverrides); - if (validatedValue != null && validatedValue is SharedVariable sharedVariable && sharedVariable.Scope == SharedVariable.SharingScope.Graph) { - if (m_VariableFields == null) { m_VariableFields = new ResizableArray(); } - m_VariableFields.Add(new VariableField() { Field = fieldInfoObj as FieldInfo, Task = task, Name = sharedVariable.Name }); - } - return validatedValue; - }) as IEventNode; - - if (m_SubtreeNodesReference != null) { - // A subtree may have injected nodes before the originally connected index. Modify the index to match the injection. - var offset = 0; - for (int j = 0; j < m_SubtreeNodesReference.Count; ++j) { - if (m_SubtreeNodesReference[j].NodeIndex >= m_EventTasks[i].ConnectedIndex) { - break; - } - offset += m_SubtreeNodesReference[j].NodeCount - 1; - } - if (offset > 0) { - m_EventTasks[i].ConnectedIndex += (ushort)offset; - } - } - - if (m_EventTasks[i] == null) { - m_EventTasks[i] = new UnknownEventTask(); - } - } - } else { - m_EventTasks = null; - } - - // After the tree has been deserialized the task references need to be assigned. - AssignTaskReferences(m_Tasks, taskReferences); - - m_Deserializing = false; - - return !errorState; - } - - /// - /// Validates the object type when deserializing. - /// - /// The type of object that should be validated. - /// The field that contains the object. - /// The validated type. - public static Type ValidateDeserializedTypeObject(Type type, FieldInfo field) - { - if (typeof(IList).IsAssignableFrom(type)) { - var elementType = Serializer.GetElementType(type); - if (typeof(ILogicNode).IsAssignableFrom(elementType) && (field == null || field.GetCustomAttribute() == null)) { - return typeof(ushort[]); - } - } else if (typeof(ILogicNode).IsAssignableFrom(type) && (field == null || field.GetCustomAttribute() == null)) { - return typeof(ushort); - } - return type; - } - - /// - /// Validates the object when deserializing. - /// - /// The FieldInfo that is being deserialized. - /// The object being deserialized. - /// The value of the field. - /// A reference to the map between the VariableAssignment and SharedVariable. - /// A reference to the list of task references that need to be resolved later. - /// A list of SharedVariables that should override the current SharedVariable value. - /// The validated object. - public static object ValidateDeserializedObject(object fieldInfoObj, object target, object value, ref Dictionary variableByNameMap, - ref ResizableArray taskReferences, SharedVariableOverride[] sharedVariableOverrides = null) - { - var fieldInfo = fieldInfoObj as FieldInfo; - if (fieldInfo == null) { - return value; - } - - var type = fieldInfo.FieldType; - if (value == null) { - // A SharedVariable object should always exist. - if (!type.IsAbstract && typeof(SharedVariable).IsAssignableFrom(type)) { - return Activator.CreateInstance(type); - } - return null; - } - - if (typeof(IList).IsAssignableFrom(type)) { - var elementType = Serializer.GetElementType(type); - if (typeof(ILogicNode).IsAssignableFrom(elementType) && fieldInfo.GetCustomAttribute() == null) { - // The task reference will be assigned after all of the tasks have been deserialized. - if (taskReferences == null) { taskReferences = new ResizableArray(); } - taskReferences.Add(new TaskAssignment() { Field = fieldInfo, Target = target, Value = value }); - } else if (typeof(SharedVariable).IsAssignableFrom(elementType)) { - var listValue = value as IList; - if (listValue != null) { - for (int i = 0; i < listValue.Count; ++i) { - var sharedVariableElement = listValue[i] as SharedVariable; - if (variableByNameMap != null && sharedVariableElement != null && !string.IsNullOrEmpty(sharedVariableElement.Name)) { - if (variableByNameMap.TryGetValue(new VariableAssignment(sharedVariableElement.Name, sharedVariableElement.Scope), out var mappedSharedVariable)) { - if (Application.isPlaying && sharedVariableElement.Scope == SharedVariable.SharingScope.Dynamic && sharedVariableElement.GetType() != mappedSharedVariable.GetType()) { - Debug.LogError($"Error: The dynamic variables with name {sharedVariableElement.Name} have different types. All dynamic variables must have the same type."); - listValue[i] = sharedVariableElement; - } else { - listValue[i] = GetOverrideVariable(sharedVariableOverrides, mappedSharedVariable, false); - } - } else if (sharedVariableElement.Scope == SharedVariable.SharingScope.Dynamic) { - // New dynamic variables should have the default value. - var sharedVariableValueType = sharedVariableElement.GetType().GetGenericArguments()[0]; - if (sharedVariableValueType.IsValueType) { - sharedVariableElement.SetValue(Activator.CreateInstance(sharedVariableValueType)); - } else { - sharedVariableElement.SetValue(null); - } - - // Dynamic variables are created when the task is deserialized. The variable needs to be added to the mapping so it can be reused. - variableByNameMap.Add(new VariableAssignment(sharedVariableElement.Name, sharedVariableElement.Scope), sharedVariableElement); - listValue[i] = sharedVariableElement; - } - } - - } - return listValue; - } - } - } else if (typeof(ILogicNode).IsAssignableFrom(type) && fieldInfo.GetCustomAttribute() == null) { - // The task reference will be assigned after all of the tasks have been deserialized. - if (taskReferences == null) { taskReferences = new ResizableArray(); } - taskReferences.Add(new TaskAssignment() { Field = fieldInfo, Target = target, Value = value }); - } else if (typeof(SharedVariable).IsAssignableFrom(type)) { - var sharedVariable = value as SharedVariable; - if (variableByNameMap != null && sharedVariable != null && !string.IsNullOrEmpty(sharedVariable.Name)) { - if (variableByNameMap.TryGetValue(new VariableAssignment(sharedVariable.Name, sharedVariable.Scope), out var mappedSharedVariable)) { - if (Application.isPlaying && sharedVariable.Scope == SharedVariable.SharingScope.Dynamic && sharedVariable.GetType() != mappedSharedVariable.GetType()) { - Debug.LogError($"Error: The dynamic variables with name {sharedVariable.Name} have different types. Dynamic variables with the same name must have the same type."); - return sharedVariable; - } - var val = GetOverrideVariable(sharedVariableOverrides, mappedSharedVariable, false); - return val; - } else if (Application.isPlaying && sharedVariable.Scope == SharedVariable.SharingScope.Dynamic) { - // New dynamic variables should have the default value. - var sharedVariableValueType = sharedVariable.GetType().GetGenericArguments()[0]; - if (sharedVariableValueType.IsValueType) { - sharedVariable.SetValue(Activator.CreateInstance(sharedVariableValueType)); - } else { - sharedVariable.SetValue(null); - } - - // Dynamic variables are created when the task is deserialized. The variable needs to be added to the mapping so it can be reused. - variableByNameMap.Add(new VariableAssignment(sharedVariable.Name, sharedVariable.Scope), sharedVariable); - return sharedVariable; - } - } - } - - return value; - } - - /// - /// Deserializes the SharedVariables. This allows the SharedVariables to be deserialized independently. - /// - /// The graph that is being deserialized. - /// Should the variables be forced deserialized? - /// Can the SharedVariables be deep copied? - /// A list of SharedVariables that should override the current SharedVariable value. - /// True if the SharedVariables were deserialized. - public bool DeserializeSharedVariables(IGraph graph, bool force, bool canDeepCopy, SharedVariableOverride[] sharedVariableOverrides = null) - { - // No need to deserialize if the data is already deserialized. - if (!force && (m_SharedVariables != null || m_VariableByNameMap != null -#if UNITY_EDITOR - || m_SharedVariableGroups != null -#endif - )) { - return false; - } - - if (m_SharedVariableData != null && m_SharedVariableData.Length > 0) { - m_SharedVariables = new SharedVariable[m_SharedVariableData.Length]; - for (int i = 0; i < m_SharedVariableData.Length; ++i) { - try { - m_SharedVariables[i] = m_SharedVariableData[i].DeserializeFields(MemberVisibility.Public) as SharedVariable; - } catch (Exception e) { - Debug.LogError($"Error: Unable to load variable {m_SharedVariableData[i].ObjectType} at index {i} due to exception:\n{e}"); - } - - if (m_SharedVariables[i] == null) { - var unknownSharedVariableData = m_SharedVariableData[i]; - unknownSharedVariableData.ObjectType = typeof(UnknownSharedVariable).FullName; - m_SharedVariables[i] = unknownSharedVariableData.DeserializeFields(MemberVisibility.Public) as SharedVariable; - - Debug.LogError($"Error: Unable to deserialize SharedVariable {m_SharedVariables[i].Name} of type {m_SharedVariableData[i].ObjectType}."); - } - - // The override variable can set a value specific for the subtree. - if (Application.isPlaying) { - m_SharedVariables[i].Initialize(); - - var overrideVariable = GetOverrideVariable(sharedVariableOverrides, m_SharedVariables[i], true); - // If the overridden scope is self then only the value should be overridden and not the SharedVariable reference. - if (overrideVariable != null && overrideVariable.Scope == SharedVariable.SharingScope.Self) { - m_SharedVariables[i].SetValue(overrideVariable.GetValue()); - } - } - } - } else { - m_SharedVariables = null; - } - m_VariableByNameMap = PopulateSharedVariablesMapping(graph, canDeepCopy); - -#if UNITY_EDITOR - if (m_SharedVariableGroupsData != null && m_SharedVariableGroupsData.Length > 0) { - m_SharedVariableGroups = new SharedVariableGroup[m_SharedVariableGroupsData.Length]; - for (int i = 0; i < m_SharedVariableGroupsData.Length; ++i) { - m_SharedVariableGroups[i] = m_SharedVariableGroupsData[i].DeserializeFields(MemberVisibility.Public) as SharedVariableGroup; - } - } else { - m_SharedVariableGroups = null; - } -#endif - - return true; - } - - /// - /// Returns the override SharedVariable from the source SharedVariable. - /// - /// The list of override SharedVariables. - /// The variable that should be overridden. - /// Is the method being called when the variables are being deserialized? - /// The override SharedVariable (can be null). - private static SharedVariable GetOverrideVariable(SharedVariableOverride[] sharedVariableOverrides, SharedVariable graphVariable, bool deserialize) - { - if (sharedVariableOverrides == null) { - return deserialize ? null : graphVariable; - } - - for (int i = 0; i < sharedVariableOverrides.Length; ++i) { - var overrideVariable = sharedVariableOverrides[i].Override; - // Empty variables indicate that the variable should not be overridden. - if (overrideVariable == null || overrideVariable.Scope == SharedVariable.SharingScope.Empty) { - continue; - } - - // The override variable should be used if the name and the type matches. - var sourceVariable = sharedVariableOverrides[i].Source; - if (sourceVariable.GetType() != graphVariable.GetType() || sourceVariable.Name != graphVariable.Name) { - continue; - } - - // If the scope is self then the graphVariable value should be updated instead of completely replaced. - if (overrideVariable.Scope == SharedVariable.SharingScope.Self) { - graphVariable.SetValue(overrideVariable.GetValue()); - return graphVariable; - } - - return overrideVariable; - } - - return graphVariable; - } - - /// - /// Populates the SharedVariable Mapping at runtime. - /// - /// The graph that is being deserialized. - /// Can the SharedVariables be deep copied? - /// A reference to the map between the VariableAssignment and SharedVariable. - public static Dictionary PopulateSharedVariablesMapping(IGraph graph, bool canDeepCopy) - { - var variableByNameMap = new Dictionary(); - PopulateSharedVariablesMapping(graph, graph.SharedVariables, SharedVariable.SharingScope.Graph, canDeepCopy, ref variableByNameMap); - - if (graph.Parent is GameObject parentGameObject) { - var gameObjectSharedVariablesContainer = parentGameObject.GetComponent(); - if (gameObjectSharedVariablesContainer != null) { - gameObjectSharedVariablesContainer.Deserialize(false); - PopulateSharedVariablesMapping(graph, gameObjectSharedVariablesContainer.SharedVariables, SharedVariable.SharingScope.GameObject, canDeepCopy, ref variableByNameMap); - } - } - - var sceneSharedVariablesContainer = SceneSharedVariables.Instance; - if (sceneSharedVariablesContainer != null) { - sceneSharedVariablesContainer.Deserialize(false); - PopulateSharedVariablesMapping(graph, sceneSharedVariablesContainer.SharedVariables, SharedVariable.SharingScope.Scene, canDeepCopy, ref variableByNameMap); - } - - var projectSharedVariablesContainer = ProjectSharedVariables.Instance; - if (projectSharedVariablesContainer != null) { - projectSharedVariablesContainer.Deserialize(false); - PopulateSharedVariablesMapping(graph, projectSharedVariablesContainer.SharedVariables, SharedVariable.SharingScope.Project, canDeepCopy, ref variableByNameMap); - } - return variableByNameMap; - } - - /// - /// Populates the name variables mapping with the specified SharedVariables. - /// - /// The graph that is being deserialized. - /// The SharedVariables that should be populated. - /// The scope of SharedVariables. - /// Can the SharedVariables be deep copied? - /// A reference to the map between the VariableAssignment and SharedVariable. - private static void PopulateSharedVariablesMapping(IGraph graph, SharedVariable[] sharedVariables, SharedVariable.SharingScope scope, bool canDeepCopy, ref Dictionary variableByNameMap) - { - if (sharedVariables == null) { - return; - } - - var deepCopy = canDeepCopy && graph is Subtree && scope == SharedVariable.SharingScope.Graph; // Deep copy variables so the instance is not bound to the subtree. - for (int i = 0; i < sharedVariables.Length; ++i) { - if (sharedVariables[i] == null) { - continue; - } - if (variableByNameMap.ContainsKey(new VariableAssignment(sharedVariables[i].Name, scope))) { -#if UNITY_EDITOR - Debug.LogWarning("Warning: Multiple SharedVariables with the same name have been added. Please email support@opsive.com with the steps to reproduce this warning. Thank you."); -#endif - continue; - } - var val = new VariableAssignment(sharedVariables[i].Name, scope); - variableByNameMap.Add(val, deepCopy ? CopyUtility.DeepCopy(sharedVariables[i]) as SharedVariable : sharedVariables[i]); - } - } - - /// - /// When the behavior tree loads not all tasks will be deserialized instantly. TaskA may reference TaskB but TaskB hasn't - /// been deserialized yet. The TaskAssignment data structure will store all of the references that need to be restored after - /// the behavior tree has fully been deserialized. - /// - /// The tasks that belong to the graph. - /// The tasks that should be referenced. - public static void AssignTaskReferences(ILogicNode[] tasks, ResizableArray taskReferences) - { - if (taskReferences == null) { - return; - } - - for (int i = 0; i < taskReferences.Count; ++i) { - var taskReference = taskReferences[i]; - var fieldType = taskReference.Field.FieldType; - object value = null; - - // The field can be a list or single value. - if (typeof(IList).IsAssignableFrom(fieldType)) { - var elements = (IList)taskReferences[i].Value; - if (fieldType.IsArray) { - // The field type is an array. Create a new array with all of the task instances. - var array = Array.CreateInstance(Serializer.GetElementType(fieldType), elements.Count) as ILogicNode[]; - for (int j = 0; j < array.Length; ++j) { - var index = (ushort)elements[j]; - if (index < tasks.Length) { - array[j] = tasks[index]; - } - } - value = array; - } else { - // The field type is a list. Create a new list with all of the task instances. - IList taskList; - if (fieldType.IsGenericType) { - taskList = Activator.CreateInstance(typeof(List<>).MakeGenericType(Serializer.GetElementType(fieldType))) as IList; - } else { - taskList = Activator.CreateInstance(fieldType) as IList; - } - - for (int j = 0; j < elements.Count; ++j) { - var index = (ushort)elements[j]; - if (index < tasks.Length) { - taskList.Add(tasks[index]); - } - } - value = taskList; - } - } else { // Single ILogicNode value. - var index = (ushort)taskReference.Value; - if (index < tasks.Length) { - value = tasks[index]; - } - } - if (value != null) { - taskReference.Field.SetValue(taskReference.Target, value); - } - } - } - - /// - /// Injects the subtree into the task list. - /// - private void InjectSubtrees() - { - if (m_SubtreeNodesReference == null || m_SubtreeNodesReference.Count == 0) { - return; - } - - // The behavior tree must generate a new ID when subtrees are injected. - m_RuntimeUniqueID = Guid.NewGuid().GetHashCode(); - - var taskCount = 0; - var subtreeReferenceCount = 0; - var subtreeAssignments = new ResizableArray(); - var lastParentIndex = m_Tasks[m_SubtreeNodesReference[0].NodeIndex].ParentIndex; - var parentIndexOffset = 0; - for (int i = 0; i < m_SubtreeNodesReference.Count; ++i) { - var subtreeReference = m_Tasks[m_SubtreeNodesReference[i].NodeIndex] as ISubtreeReference; - var subtrees = subtreeReference.Subtrees; - if (subtrees != null) { - var indexOffset = (ushort)0; // The index offset is relative to each individual ISubtreeReference task. - - // The parent index will change based on the number of tasks that have been added. - var parentIndex = m_Tasks[m_SubtreeNodesReference[i].NodeIndex].ParentIndex; - if (parentIndex != ushort.MaxValue && (parentIndex > lastParentIndex || (i > 0 && lastParentIndex == ushort.MaxValue))) { - parentIndexOffset = (ushort)(taskCount - subtreeReferenceCount); - lastParentIndex = parentIndex; - } else if (parentIndex < lastParentIndex) { - parentIndexOffset = 0; - lastParentIndex = parentIndex; - } - - // Calculate the parent index offset based on previously injected subtrees - for (int j = 0; j < subtrees.Length; ++j) { - if (subtrees[j] == null || subtrees[j].LogicNodes == null || subtrees[j].EventNodes == null) { - continue; - } - - // The subtree should start from the start node. - var startNode = subtrees[j].GetEventNode(typeof(Start)); // Returns (IEventNode, index). - if (startNode.Item1 == null || startNode.Item1.ConnectedIndex == ushort.MaxValue || !subtrees[j].IsNodeEnabled(false, startNode.Item2)) { - continue; - } - - var firstNode = m_SubtreeNodesReference[i].Nodes[j][startNode.Item1.ConnectedIndex]; - var subtreeNodeCount = GetChildCount(firstNode, m_SubtreeNodesReference[i].Nodes[j]) + 1; // firstNode should be included in addition to the children. - taskCount += subtreeNodeCount; - subtreeAssignments.Add(new SubtreeAssignment() - { - ReferenceIndex = i, - NodeIndex = m_SubtreeNodesReference[i].NodeIndex, - SubtreeIndex = j, - Subtree = subtrees[j], - NodeCount = (ushort)subtreeNodeCount, - IndexOffset = indexOffset, - ParentIndex = (ushort)(parentIndex + parentIndexOffset), - SiblingIndex = m_Tasks[m_SubtreeNodesReference[i].NodeIndex].SiblingIndex, -#if UNITY_EDITOR - NodePropertiesPosition = m_LogicNodeProperties[m_SubtreeNodesReference[i].NodeIndex].Position, - Collapsed = m_LogicNodeProperties[m_SubtreeNodesReference[i].NodeIndex].Collapsed -#endif - }); - indexOffset += (ushort)subtreeNodeCount; - } - - // Update the parent index offset for the next subtree reference - if (indexOffset > 0) { // Subtree References may not contain any valid subtrees. - subtreeReferenceCount++; - } - var subtreeNodesReferenceOrig = m_SubtreeNodesReference[i]; - subtreeNodesReferenceOrig.NodeCount = indexOffset; - m_SubtreeNodesReference[i] = subtreeNodesReferenceOrig; - } - } - - if (taskCount == 0) { - return; - } - - var targetCount = m_Tasks.Length + taskCount - subtreeReferenceCount; - var originalTaskCount = m_Tasks.Length; - if (m_Tasks.Length != targetCount) { - Array.Resize(ref m_Tasks, targetCount); -#if UNITY_EDITOR - Array.Resize(ref m_LogicNodeProperties, targetCount); -#endif - } - - // Make space for all of the subtree tasks. - var addedTasks = 0; - for (int i = 0; i < subtreeAssignments.Count; ++i) { - var subtreeIndex = (ushort)(subtreeAssignments[i].NodeIndex + addedTasks); - var subtreeTaskCount = subtreeAssignments[i].NodeCount - (subtreeAssignments[i].IndexOffset == 0 ? 1 : 0); - if (subtreeTaskCount > 0) { // subtreeTaskCount will be zero if a single task replaces the reference task. - for (int j = originalTaskCount - 1 + addedTasks; j > subtreeIndex; --j) { - var node = m_Tasks[j]; - node.Index += (ushort)subtreeTaskCount; - if (node.ParentIndex > subtreeIndex && node.ParentIndex != ushort.MaxValue) { - node.ParentIndex += (ushort)subtreeTaskCount; - } - if (node.SiblingIndex > subtreeIndex && node.SiblingIndex != ushort.MaxValue) { - node.SiblingIndex += (ushort)subtreeTaskCount; - } - m_Tasks[j + subtreeTaskCount] = node; - m_Tasks[j] = null; -#if UNITY_EDITOR - m_LogicNodeProperties[j + subtreeTaskCount] = m_LogicNodeProperties[j]; -#endif - } - - // The parents need to adjust their sibling index offsets for the newly added nodes. This should only be done with an index offset of 0 - // as grouped subtrees have the same parents. - if (subtreeAssignments[i].IndexOffset == 0) { - var parentIndex = m_Tasks[subtreeIndex].ParentIndex; - while (parentIndex != ushort.MaxValue) { - var parentNode = m_Tasks[parentIndex]; - if (parentNode.SiblingIndex != ushort.MaxValue) { - parentNode.SiblingIndex += (ushort)subtreeTaskCount; - m_Tasks[parentIndex] = parentNode; - } - parentIndex = parentNode.ParentIndex; - } - } - - // Any disabled nodes after the insertion needs to shift. - var lastDisabledNodeIndex = 0; - if (m_DisabledLogicNodes != null) { - for (int j = 0; j < m_DisabledLogicNodes.Length; ++j) { - if (m_DisabledLogicNodes[j] > subtreeIndex) { - m_DisabledLogicNodes[j] += (ushort)subtreeTaskCount; - } else { // Remember the last index that was greater than the subtree index so any disabled subtree nodes can be inserted. - lastDisabledNodeIndex = j + 1; - } - } - } - - // If the parent reference task is disabled then all subtree nodes should be disabled. - var subtreeDisabledLogicNodes = subtreeAssignments[i].Subtree.DisabledLogicNodes; - if (!IsNodeEnabled(true, m_SubtreeNodesReference[subtreeAssignments[i].ReferenceIndex].NodeIndex)) { - subtreeDisabledLogicNodes = new ushort[subtreeAssignments[i].NodeCount]; - for (ushort j = 0; j < subtreeDisabledLogicNodes.Length; ++j) { - subtreeDisabledLogicNodes[j] = j; - } - } - - // The subtree may have disabled tasks. - if (subtreeDisabledLogicNodes != null && subtreeDisabledLogicNodes.Length > 0) { - var subtreeDisabledLength = subtreeDisabledLogicNodes.Length; - // Ensure all of the disabled logic nodes have been transferred. - for (int j = subtreeDisabledLength - 1; j >= 0; --j) { - if (subtreeDisabledLogicNodes[j] > subtreeTaskCount) { - subtreeDisabledLength--; - } - } - - if (subtreeDisabledLength > 0) { - if (m_DisabledLogicNodes == null) { - m_DisabledLogicNodes = new ushort[subtreeDisabledLength]; - } else { - Array.Resize(ref m_DisabledLogicNodes, m_DisabledLogicNodes.Length + subtreeDisabledLength); - } - var originalLength = m_DisabledLogicNodes.Length - subtreeDisabledLength; - for (int j = lastDisabledNodeIndex; j < originalLength; ++j) { - m_DisabledLogicNodes[j + subtreeDisabledLength] = m_DisabledLogicNodes[j]; - } - for (int j = 0; j < subtreeDisabledLength; ++j) { - if (subtreeDisabledLogicNodes[j] > subtreeTaskCount) { - continue; - } - m_DisabledLogicNodes[lastDisabledNodeIndex + j] = (ushort)(subtreeIndex + subtreeDisabledLogicNodes[j]); - } - } - } - } - // Tasks were added to the tree. Update the tree to the correct indicies. - var subtreeAssignment = subtreeAssignments[i]; - subtreeAssignment.IndexOffset = (ushort)(addedTasks + (subtreeAssignments[i].IndexOffset == 0 ? 0 : 1)); - subtreeAssignments[i] = subtreeAssignment; - - addedTasks += subtreeTaskCount; - } - - // Populate the tasks with the subtree. - for (int i = 0; i < subtreeAssignments.Count; ++i) { - var subtreeIndex = (ushort)(subtreeAssignments[i].NodeIndex + subtreeAssignments[i].IndexOffset); - var subtreeParentIndex = subtreeAssignments[i].ParentIndex; -#if UNITY_EDITOR - var positionOffset = Vector2.zero; -#endif - for (int j = 0; j < subtreeAssignments[i].NodeCount; ++j) { - var node = m_SubtreeNodesReference[subtreeAssignments[i].ReferenceIndex].Nodes[subtreeAssignments[i].SubtreeIndex][j]; - // The node needs to be copied if it isn't pooled to prevent the same node from being used in multiple trees. - if (!m_SubtreeNodesReference[subtreeAssignments[i].ReferenceIndex].Subtrees[subtreeAssignments[i].SubtreeIndex].Pooled) { - var copiedNode = CopyUtility.DeepCopy(node) as ITreeLogicNode; - if (m_VariableFields != null && m_VariableFields.Count > 0) { - // Replace the old node reference with the updated reference. - var nodeMap = new Dictionary(); - nodeMap.Add(node, copiedNode); - if (node is IContainerNode containerNode) { - if (containerNode.Nodes != null) { - var copiedContainerNode = copiedNode as IContainerNode; - for (int k = 0; k < containerNode.Nodes.Length; ++k) { - nodeMap.Add(containerNode.Nodes[k], copiedContainerNode.Nodes[k]); - } - } - } - for (int k = 0; k < m_VariableFields.Count; ++k) { - if (nodeMap.TryGetValue(m_VariableFields[k].Task, out var copiedTask)) { - var variableField = m_VariableFields[k]; - variableField.Task = copiedTask; - m_VariableFields[k] = variableField; - } - } - } - node = copiedNode; - } - node.Index = (ushort)(subtreeIndex + j); - node.RuntimeIndex = ushort.MaxValue; - if (j == 0) { - node.ParentIndex = subtreeParentIndex; - subtreeParentIndex = node.Index; // The subsequent subtree tasks should use the first subtree task as the parent reference. - // If there's a next subtree from the same reference task, point to its first node. Otherwise, use the original SiblingIndex. - if (i + 1 < subtreeAssignments.Count && subtreeAssignments[i + 1].ReferenceIndex == subtreeAssignments[i].ReferenceIndex) { - // Point to the first node of the next subtree. - var nextSubtreeIndex = (ushort)(subtreeAssignments[i + 1].NodeIndex + subtreeAssignments[i + 1].IndexOffset); - node.SiblingIndex = nextSubtreeIndex; - } else { - // Use the original SiblingIndex from the reference task. - node.SiblingIndex = subtreeAssignments[i].SiblingIndex != ushort.MaxValue ? (ushort)(subtreeIndex + subtreeAssignments[i].NodeCount) : ushort.MaxValue; - } - } else { - // Adjust the subsequent subtree tasks by the location of the insertion. - node.ParentIndex += subtreeParentIndex; - if (node.SiblingIndex != ushort.MaxValue) { - node.SiblingIndex += subtreeIndex; - } - } - m_Tasks[subtreeIndex + j] = node; -#if UNITY_EDITOR - var nodeProperties = CopyUtility.DeepCopy(subtreeAssignments[i].Subtree.LogicNodeProperties[j]) as LogicNodeProperties; - nodeProperties.GuidString = Guid.NewGuid().ToString(); - if (j == 0) { - // Keep the tasks in the same relative position as the subtree reference. - positionOffset = subtreeAssignments[i].NodePropertiesPosition - subtreeAssignments[i].Subtree.LogicNodeProperties[j].Position; - } else { - // Apply a small offset for stacked subtrees so they are not directly overlapping. - positionOffset += new Vector2(2, 2); - } - nodeProperties.Position += positionOffset; - nodeProperties.Collapsed = subtreeAssignments[i].Collapsed; - m_LogicNodeProperties[subtreeIndex + j] = nodeProperties; -#endif - } - } - } - - /// - /// Returns the Node of the specified type. - /// - /// The type of Node that should be retrieved. - /// The Node of the specified type (can be null). - public ITreeLogicNode GetNode(Type type) - { - if (m_Tasks == null) { - return null; - } - - for (int i = 0; i < m_Tasks.Length; ++i) { - if (m_Tasks[i].GetType() == type) { - return m_Tasks[i]; - } - } - return null; - } - - /// - /// Returns the event node of the specified type. - /// - /// The type of EventNode that should be retrieved. - /// The EventNode of the specified type (can be null). If the node is found the index will also be returned. - public (IEventNode, ushort) GetEventNode(Type type) - { - if (m_EventTasks == null) { - return (null, ushort.MaxValue); - } - - for (ushort i = 0; i < m_EventTasks.Length; ++i) { - if (m_EventTasks[i].GetType() == type) { - return (m_EventTasks[i], i); - } - } - return (null, ushort.MaxValue); - } - - /// - /// Returns the total number of children belonging to the specified node. - /// - /// The node to retrieve the child count of. - /// All of the nodes that belong to the graph. - /// The total number of children belonging to the specified node. - public int GetChildCount(ITreeLogicNode node, ITreeLogicNode[] nodes) - { - if (node.SiblingIndex != ushort.MaxValue) { - return node.SiblingIndex - node.Index - 1; - } - - if (node.Index + 1 == nodes.Length) { - return 0; - } - - var child = nodes[node.Index + 1]; - if (child.ParentIndex != node.Index) { - return 0; - } - - // Determine the child count based off of the sibling index. - while (child.SiblingIndex != ushort.MaxValue) { - child = nodes[child.SiblingIndex]; - } - - return child.Index - node.Index + GetChildCount(child, nodes); - } - - /// - /// Reevaluates the SubtreeReferences by calling the EvaluateSubtrees method. - /// - /// The component that the graph is being deserialized from. - /// The graph that is being reevaluated. - /// Action that should be done before the tasks are swapped. - /// True if the subtree was reevaluated. - public bool ReevaluateSubtreeReferences(IGraphComponent graphComponent, IGraph graph, Action onBeforeReevaluationSwap) - { - // The tree must contain tasks. - if (!Application.isPlaying || m_Tasks == null || m_Tasks.Length == 0) { - return false; - } - - // Subtree references must exist. - if (m_SubtreeNodesReference == null || m_SubtreeNodesReference.Count == 0) { - return false; - } - - if (onBeforeReevaluationSwap != null) { - onBeforeReevaluationSwap(); - } - - // Find the new reevaluated nodes. - for (int i = m_SubtreeNodesReference.Count - 1; i >= 0; --i) { - var subtreeNodesReference = m_SubtreeNodesReference[i]; - var subtreeReference = m_SubtreeNodesReference[i].SubtreeReference; - subtreeReference.EvaluateSubtrees(graphComponent); - var reevaluatedSubtrees = subtreeReference.Subtrees; - ITreeLogicNode[][] reevaluatedNodes; - if (reevaluatedSubtrees == null) { - continue; - } - - // The parent must be able to accept the number of subtrees that there are. - var parentIndex = m_Tasks[m_SubtreeNodesReference[i].NodeIndex].ParentIndex; - IParentNode parentNode = null; - if (parentIndex != ushort.MaxValue) { - parentNode = m_Tasks[parentIndex] as IParentNode; - } - - if ((parentNode == null && reevaluatedSubtrees.Length > 1) || (parentNode != null && reevaluatedSubtrees.Length > parentNode.MaxChildCount)) { - Debug.LogError($"Error: the reevaluated graph contains multiple subtrees as the starting task or as a child of a parent task which cannot contain so many children (such as a decorator)."); - continue; - } - - reevaluatedNodes = new ITreeLogicNode[reevaluatedSubtrees.Length][]; - var errorState = false; - for (int j = 0; j < reevaluatedSubtrees.Length; ++j) { - if (reevaluatedSubtrees[j] == null) { - continue; - } - if (!reevaluatedSubtrees[j].Deserialize(graphComponent, true, true, true, true, subtreeReference.SharedVariableOverrides)) { - errorState = true; - break; - }; - // Keep a reference to the deserialized nodes. This will ensure they are unique and do not get overwritten. - reevaluatedNodes[j] = reevaluatedSubtrees[j].TreeLogicNodes; - } - if (errorState) { - continue; - } - - // The subtree index will be offsetted from the original index value if there are multiple subtree references. - var nodeOffset = 0; - for (int j = i - 1; j >= 0; --j) { - nodeOffset += m_SubtreeNodesReference[j].NodeCount - 1; - } - - // All of the reevaluated nodes have been determined. Remove the old subtree nodes. - var nodeCount = m_SubtreeNodesReference[i].NodeCount; - - // Replace the first node with the subtree reference, and remove the rest of the added nodes. - m_Tasks[m_SubtreeNodesReference[i].NodeIndex + nodeOffset] = m_SubtreeNodesReference[i].SubtreeReference as ITreeLogicNode; - for (int j = m_SubtreeNodesReference[i].NodeIndex + nodeOffset + 1; j < m_Tasks.Length - nodeCount + 1; ++j) { - m_Tasks[j] = m_Tasks[j + nodeCount - 1]; - m_Tasks[j].Index = (ushort)j; - if (m_Tasks[j].ParentIndex != ushort.MaxValue && m_Tasks[j].ParentIndex > m_SubtreeNodesReference[i].NodeIndex + nodeOffset) { - m_Tasks[j].ParentIndex -= (ushort)(nodeCount - 1); - } - if (m_Tasks[j].SiblingIndex != ushort.MaxValue && m_Tasks[j].SiblingIndex > m_SubtreeNodesReference[i].NodeIndex + nodeOffset) { - m_Tasks[j].SiblingIndex -= (ushort)(nodeCount - 1); - } - -#if UNITY_EDITOR - m_LogicNodeProperties[j] = m_LogicNodeProperties[j + nodeCount - 1]; -#endif - } - - // Restore the original sibling index value for parent nodes. - parentIndex = m_Tasks[m_SubtreeNodesReference[i].NodeIndex + nodeOffset].ParentIndex; - while (parentIndex != ushort.MaxValue) { - var parentTask = m_Tasks[parentIndex]; - if (parentTask.SiblingIndex != ushort.MaxValue) { - parentTask.SiblingIndex -= (ushort)(nodeCount - 1); - m_Tasks[parentIndex] = parentTask; - } - parentIndex = parentTask.ParentIndex; - } - - // Restore the original ConnectedIndex value. - if (m_EventTasks != null) { - for (int j = 0; j < m_EventTasks.Length; ++j) { - if (m_EventTasks[j].ConnectedIndex > m_SubtreeNodesReference[i].NodeIndex) { - m_EventTasks[j].ConnectedIndex -= (ushort)(nodeCount - 1); - } - } - } - Array.Resize(ref m_Tasks, m_Tasks.Length - nodeCount + 1); -#if UNITY_EDITOR - Array.Resize(ref m_LogicNodeProperties, m_LogicNodeProperties.Length - nodeCount + 1); -#endif - - // Replace the old nodes with the new nodes. - subtreeNodesReference.Nodes = reevaluatedNodes; - m_SubtreeNodesReference[i] = subtreeNodesReference; - - // The disabled nodes also need to be removed. - var subtrees = m_SubtreeNodesReference[i].Subtrees; - var disabledNodesCount = 0; - for (int j = 0; j < subtrees.Length; ++j) { - if (subtrees[j].DisabledLogicNodes == null || subtrees[j].DisabledLogicNodes.Length == 0) { - continue; - } - disabledNodesCount += subtrees[j].DisabledLogicNodes.Length; - } - if (disabledNodesCount > 0) { - if (m_DisabledLogicNodes.Length > disabledNodesCount) { // The local tree may not have any disabled nodes. - for (int j = 0; j < m_DisabledLogicNodes.Length - disabledNodesCount; ++j) { - if (m_DisabledLogicNodes[j] >= m_SubtreeNodesReference[i].NodeIndex + nodeOffset + 1) { - m_DisabledLogicNodes[j] = (ushort)(m_DisabledLogicNodes[j + disabledNodesCount] - nodeCount + 1); - } - } - } - Array.Resize(ref m_DisabledLogicNodes, m_DisabledLogicNodes.Length - disabledNodesCount); - } - } - - // The tasks array has been restored to the original set of nodes with the ISubtreeReference. Inject the new nodes. - InjectSubtrees(); - - // Modify the ConnectedIndex to match the injection. - if (m_EventTasks != null && m_SubtreeNodesReference != null) { - for (int i = 0; i < m_EventTasks.Length; ++i) { - var offset = 0; - for (int j = 0; j < m_SubtreeNodesReference.Count; ++j) { - if (m_SubtreeNodesReference[j].NodeIndex >= m_EventTasks[i].ConnectedIndex) { - break; - } - offset += m_SubtreeNodesReference[j].NodeCount - 1; - } - if (offset != 0) { - m_EventTasks[i].ConnectedIndex += (ushort)offset; - } - } - } - - return true; - } - - /// - /// Returns the SharedVariable with the specified name. - /// - /// The graph that the data belongs to. - /// The name of the SharedVariable that should be retrieved. - /// The scope of the SharedVariable that should be retrieved. - /// The SharedVariable with the specified name (can be null). - public SharedVariable GetVariable(IGraph graph, PropertyName name, SharedVariable.SharingScope scope) - { - if (m_VariableByNameMap == null) { - DeserializeSharedVariables(graph, false, true, null); - } - - if (m_VariableByNameMap != null && m_VariableByNameMap.TryGetValue(new VariableAssignment(name, scope), out var variable)) { - return variable; - } - - return null; - } - - /// - /// Returns the SharedVariable of the specified type. - /// - /// The graph that the data belongs to. - /// The name of the SharedVariable that should be retrieved. - /// The scope of the SharedVariable that should be retrieved. - /// The SharedVariable with the specified name (can be null). - public SharedVariable GetVariable(IGraph graph, PropertyName name, SharedVariable.SharingScope scope) - { - return GetVariable(graph, name, scope) as SharedVariable; - } - - /// - /// Sets the value of the SharedVariable. - /// - /// The type of SharedVarible. - /// The graph that the data belongs to. - /// The name of the SharedVariable. - /// The value of the SharedVariable. - /// The scope of the SharedVariable that should be set. - /// True if the value was set. - public bool SetVariableValue(IGraph graph, PropertyName name, T value, SharedVariable.SharingScope scope) - { - if (m_VariableByNameMap == null) { - DeserializeSharedVariables(graph, false, true, null); - } - - if (m_VariableByNameMap == null || !m_VariableByNameMap.TryGetValue(new VariableAssignment(name, scope), out var variable)) { - return false; - } - - (variable as SharedVariable).Value = value; - return true; - } - - /// - /// Overrides the SharedVariable binding. The name must match an exsting variable. - /// - /// The graph that the data belongs to. - /// The reference to the SharedVariable. - internal void OverrideVariableBinding(IGraph graph, SharedVariable variable) - { - if (string.IsNullOrEmpty(variable.Name)) { - return; - } - - DeserializeSharedVariables(graph, false, true, null); - var dirty = false; - if (m_SharedVariables != null) { - for (int i = 0; i < m_SharedVariables.Length; ++i) { - if (m_SharedVariables[i].Name == variable.Name) { - var variableType = variable.GetType(); - if (variableType.IsGenericType && variableType.GetGenericTypeDefinition().IsAssignableFrom(typeof(SharedVariableBinding<>))) { - m_SharedVariables[i] = variable.Clone() as SharedVariable; - dirty = true; - } - break; - } - } - } - - if (dirty) { - m_VariableByNameMap = PopulateSharedVariablesMapping(graph, true); - } - } - - /// - /// Replaces the data with the specified BehaviorTreeData. - /// - /// The graph that the current data belongs to. - /// The data that should be replaced. - /// The SharedVariables of the current graph. - internal void OverrideData(IGraph graph, BehaviorTreeData other, SharedVariable[] originalSharedVariables, bool updateFields) - { - EventNodes = other.EventNodes; - LogicNodes = other.LogicNodes; - SubtreeNodesReferences = other.SubtreeNodesReferences; - m_SharedVariables = other.SharedVariables; - m_SharedVariableData = other.m_SharedVariableData; - m_VariableByNameMap = PopulateSharedVariablesMapping(graph, false); - m_DisabledLogicNodes = other.DisabledLogicNodes; - m_DisabledEventNodes = other.DisabledEventNodes; - // The other tree may be pooled. Update the variable references to point to the local graph variables. - if (updateFields && other.m_VariableFields != null) { - for (int i = 0; i < other.m_VariableFields.Count; ++i) { - var variableField = other.m_VariableFields[i]; - var localVariable = GetVariable(graph, variableField.Name, SharedVariable.SharingScope.Graph); - if (localVariable != null) { - variableField.Field.SetValue(variableField.Task, localVariable); - } - } - } - // The original tree variable value should override the other variable value. - if (originalSharedVariables != null) { - for (int i = 0; i < originalSharedVariables.Length; ++i) { - OverrideVariableValue(graph, originalSharedVariables[i]); - } - } -#if UNITY_EDITOR - m_EventNodeProperties = other.EventNodeProperties; - m_LogicNodeProperties = other.LogicNodeProperties; - m_SharedVariableGroups = other.SharedVariableGroups; - m_SharedVariableGroupsData = other.m_SharedVariableGroupsData; - m_GroupProperties = other.GroupProperties; -#endif - } - - /// - /// Overrides the SharedVariable value. The name must match an exsting variable. - /// - /// The graph that the data belongs to. - /// The reference to the SharedVariable. - /// True if the value was overridden. - private bool OverrideVariableValue(IGraph graph, SharedVariable variable) - { - if (string.IsNullOrEmpty(variable.Name)) { - return false; - } - - var dirty = false; - if (m_SharedVariables != null) { - for (int i = 0; i < m_SharedVariables.Length; ++i) { - if (m_SharedVariables[i].Name == variable.Name) { - var variableType = variable.GetType(); - if (m_SharedVariables[i].GetType() == variableType) { - m_SharedVariables[i].SetValue(variable.GetValue()); - dirty = true; - } - break; - } - } - } - - return dirty; - } - - /// - /// Is the node with the specified index enabled? - /// - /// Is the node a LogicNode? - /// The index of the node. - /// True if the node with the specified index is enabled. - public bool IsNodeEnabled(bool logicNode, int index) - { - if (index == ushort.MaxValue) { - return true; - } - - var disabledNodes = logicNode ? m_DisabledLogicNodes : m_DisabledEventNodes; - if (disabledNodes == null) { - return true; - } - for (int i = 0; i < disabledNodes.Length; ++i) { - if (disabledNodes[i] == index) { - return false; - } - } - return true; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeData.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeData.cs.meta deleted file mode 100644 index eb15828e..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b88607c73749e1f47b8bb1ed0b34a7a8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeDataStructures.cs b/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeDataStructures.cs deleted file mode 100644 index f2d76ff0..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeDataStructures.cs +++ /dev/null @@ -1,117 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime -{ - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Utility; - using System.Collections.Generic; - using System.Reflection; - using UnityEngine; - - /// - /// Storage class for the graph data. - /// - public partial class BehaviorTreeData - { - /// - /// Data structure which contains the properties for a subtree that will be injected. - /// - private struct SubtreeAssignment - { - [Tooltip("The index of the SubtreeNodesReference element.")] - public int ReferenceIndex; - [Tooltip("The index of the ISubtreeReference task.")] - public ushort NodeIndex; - [Tooltip("The index of the Subtree.")] - public int SubtreeIndex; - [Tooltip("The subtree that the task references.")] - public Subtree Subtree; - [Tooltip("The offset of the index. This will change as subtrees are added.")] - public ushort IndexOffset; - [Tooltip("The original parent index of the ISubtreeReference task.")] - public ushort ParentIndex; - [Tooltip("The original sibling index of the ISubtreeReference task.")] - public ushort SiblingIndex; - [Tooltip("The number of nodes that are a child of the ISubtreeReference.")] - public ushort NodeCount; -#if UNITY_EDITOR - [Tooltip("The position of the ISubtreeReference task.")] - public Vector2 NodePropertiesPosition; - [Tooltip("Is the ISubtreeReference task collapsed?")] - public bool Collapsed; -#endif - } - - /// - /// Contains a reference to the subtree index and nodes. - /// - internal struct SubtreeNodesReference - { - [Tooltip("The ISubtreeReference.")] - public ISubtreeReference SubtreeReference; - [Tooltip("The index of the ISubtreeReference.")] - public ushort NodeIndex; - [Tooltip("The total number of nodes contained within the ISubtreeReference.")] - public ushort NodeCount; - [Tooltip("A reference to the subtrees that are loaded.")] - public Subtree[] Subtrees; - [Tooltip("The deserialized nodes.")] - public ITreeLogicNode[][] Nodes; - } - - /// - /// Keeps a reference to the graph variables allowing them to be overwritten if a subtree is set. - /// - private struct VariableField - { - [Tooltip("The field that the SharedVariable is assigned to.")] - public FieldInfo Field; - [Tooltip("The task that the SharedVariable is assigned to.")] - public object Task; - [Tooltip("The name of the SharedVariable.")] - public string Name; - } - - /// - /// Internal data structure for referencing a SharedVariable to its name/scope. - /// - public struct VariableAssignment - { - [Tooltip("The name of the SharedVariable.")] - public PropertyName Name; - [Tooltip("The scope of the SharedVariable.")] - public SharedVariable.SharingScope Scope; - - /// - /// VariableAssignment constructor. - /// - /// The name of the SharedVariable. - /// The scope of the SharedVariable. - public VariableAssignment(PropertyName name, SharedVariable.SharingScope scope) - { - Name = name; - Scope = scope; - } - } - - /// - /// Internal data structure for restoring a task reference after it has been deserialized. - /// - public struct TaskAssignment - { - [Tooltip("The field of the task.")] - public FieldInfo Field; - [Tooltip("The task that the field belongs to.")] - public object Target; - [Tooltip("The value of the field. This will be the task object that should be assigned after the tree has been loaded.")] - public object Value; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeDataStructures.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeDataStructures.cs.meta deleted file mode 100644 index 7aa7fe3e..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/BehaviorTreeDataStructures.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0ca426c026a6a06469dc2d4a512ef855 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Components.meta b/Packages/com.opsive.behaviordesigner/Runtime/Components.meta deleted file mode 100644 index 87788c5a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Components.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3f13872ff04404c4da862a21fe89cac6 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Components/BakedBehaviorTree.cs b/Packages/com.opsive.behaviordesigner/Runtime/Components/BakedBehaviorTree.cs deleted file mode 100644 index ca4d22a8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Components/BakedBehaviorTree.cs +++ /dev/null @@ -1,120 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Components -{ - using Opsive.BehaviorDesigner.Runtime.Groups; - using Opsive.BehaviorDesigner.Runtime.Systems; - using Unity.Entities; - using UnityEngine; - - /// - /// Indicates that the behavior tree was baked. - /// - public class BakedBehaviorTree : IComponentData - { - [Tooltip("The index of the connected start task.")] - public int StartEventConnectedIndex; - [Tooltip("Should the behavior tree be started after it has been baked?")] - public bool StartEvaluation; - [Tooltip("The indicies of the reevaluate task systems.")] - public string[] ReevaluateTaskSystems; - [Tooltip("The indicies of the interrupt task systems.")] - public string[] InterruptTaskSystems; - [Tooltip("The indicies of the traversal task systems.")] - public string[] TraversalTaskSystems; - [Tooltip("The hashes that correspond to the TaskComponent's ComponentType.")] - public ulong[] TagStableTypeHashes; - [Tooltip("The hashes that correspond to the ReevaluateTaskComponent's ComponentType.")] - public ulong[] ReevaluateFlagStableTypeHashes; - } - - /// - /// The behavior tree has been baked. Start the tree using the baked data. - /// - public partial struct StartBakedBehaviorTreeSystem : ISystem - { - /// - /// Restricts when the system should run. - /// - /// The current SystemState. - private void OnCreate(ref SystemState state) - { - state.RequireForUpdate(); - state.Enabled = false; - } - - /// - /// Starts the baked behavior tree. - /// - /// The current SystemState. - private void OnUpdate(ref SystemState state) - { - state.Enabled = false; - - // The components are baked, but systems are not baked. Create the required systems within the current world. - var reevaluateTaskSystemGroup = state.World.GetOrCreateSystemManaged(); - var interruptTaskSystemGroup = state.World.GetOrCreateSystemManaged(); - var traversalTaskSystemGroup = state.World.GetOrCreateSystemManaged(); - - // Add the necessary cleanup systems. - var behaviorTreeSystemGroup = state.World.GetOrCreateSystemManaged(); - behaviorTreeSystemGroup.AddSystemToUpdateList(state.World.GetOrCreateSystem()); - behaviorTreeSystemGroup.AddSystemToUpdateList(state.World.GetOrCreateSystem()); - - var canReevaluate = false; - var ecb = new EntityCommandBuffer(state.WorldUpdateAllocator); - foreach (var (bakedBehaviorTree, entity) in SystemAPI.Query().WithEntityAccess()) { - AddSystems(state.World, reevaluateTaskSystemGroup, bakedBehaviorTree.ReevaluateTaskSystems); - AddSystems(state.World, interruptTaskSystemGroup, bakedBehaviorTree.InterruptTaskSystems); - AddSystems(state.World, traversalTaskSystemGroup, bakedBehaviorTree.TraversalTaskSystems); - - // ComponentTypes cannot be serialized. Convert the StableTypeHash to a ComponentType. - var taskComponents = state.World.EntityManager.GetBuffer(entity); - for (int i = 0; i < taskComponents.Length; ++i) { - var taskComponent = taskComponents[i]; - taskComponent.FlagComponentType = ComponentType.FromTypeIndex(TypeManager.GetTypeIndexFromStableTypeHash(bakedBehaviorTree.TagStableTypeHashes[i])); - taskComponents[i] = taskComponent; - } - - if (state.World.EntityManager.HasBuffer(entity)) { - var reevaluateComponents = state.World.EntityManager.GetBuffer(entity); - canReevaluate = true; - for (int i = 0; i < reevaluateComponents.Length; ++i) { - var reevaluateComponent = reevaluateComponents[i]; - reevaluateComponent.ReevaluateFlagComponentType = ComponentType.FromTypeIndex(TypeManager.GetTypeIndexFromStableTypeHash(bakedBehaviorTree.ReevaluateFlagStableTypeHashes[i])); - reevaluateComponents[i] = reevaluateComponent; - } - } - - // All of the systems have been added. Start the behavior tree. - BehaviorTree.StartBranch(state.World, entity, (ushort)bakedBehaviorTree.StartEventConnectedIndex, bakedBehaviorTree.StartEvaluation); - ecb.RemoveComponent(entity); - } - if (canReevaluate) { - reevaluateTaskSystemGroup.AddSystemToUpdateList(state.World.GetOrCreateSystem()); - } - ecb.Playback(state.EntityManager); - ecb.Dispose(); - } - - /// - /// Adds the systems indicated by the SystemTypeIndex to the specified group. - /// - /// The current World. - /// The group that the systems should be added to. - /// The types of systems that should be added. - private void AddSystems(World world, ComponentSystemGroup group, string[] systemTypes) - { - if (systemTypes == null) { return; } - - for (int i = 0; i < systemTypes.Length; ++i) { - group.AddSystemToUpdateList(world.GetOrCreateSystem(Shared.Utility.TypeUtility.GetType(systemTypes[i]))); - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Components/BakedBehaviorTree.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Components/BakedBehaviorTree.cs.meta deleted file mode 100644 index 04a6b14f..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Components/BakedBehaviorTree.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f68d4eca856988e4a8f4073516e7de57 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Components/BehaviorTreeComponents.cs b/Packages/com.opsive.behaviordesigner/Runtime/Components/BehaviorTreeComponents.cs deleted file mode 100644 index 7b5be0ce..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Components/BehaviorTreeComponents.cs +++ /dev/null @@ -1,261 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Components -{ - using Opsive.BehaviorDesigner.Runtime.Tasks; - using System.Runtime.InteropServices; - using Unity.Collections; - using Unity.Entities; - using UnityEngine; - - /// - /// The runtime DOTS data associated with a task. - /// - [System.Serializable] - public struct TaskComponent : IBufferElementData - { - [Tooltip("The index of the task within the behavior tree.")] - public ushort Index; - [Tooltip("The index of the parent task within the behavior tree.")] - public ushort ParentIndex; - //public ushort m_ParentIndex; - //public ushort ParentIndex { get { return m_ParentIndex; } set { UnityEngine.Debug.Log(Index + " parent: " + value); m_ParentIndex = value; } } - [Tooltip("The index of the sibling task within the behavior tree.")] - public ushort SiblingIndex; - //public ushort m_SiblingIndex; - //public ushort SiblingIndex { get { return m_SiblingIndex; } set { UnityEngine.Debug.Log(Index + " sibling: " + value); m_SiblingIndex = value; } } - [Tooltip("The index of the branch the task executes within.")] - public ushort BranchIndex; - //public ushort m_BranchIndex; - //public ushort BranchIndex { get { return m_BranchIndex; } set { UnityEngine.Debug.Log(Index + " branch: " + value); m_BranchIndex = value; } } - [Tooltip("The component type responsible for indicating that the task is active.")] - public ComponentType FlagComponentType; - [Tooltip("Is the task disabled?")] - [MarshalAs(UnmanagedType.U1)] - public bool Disabled; - [Tooltip("The current execution status of the task.")] - //public TaskStatus Status; - [SerializeField] private TaskStatus m_Status; - public TaskStatus Status { - get => m_Status; - set { - m_Status = value; - CanReevaluate = value != TaskStatus.Inactive; - //UnityEngine.Debug.Log(string.Format("{0} status: {1}", Index, value)); - } - } - [Tooltip("Can the task be reevaluated with conditional aborts?")] - [MarshalAs(UnmanagedType.U1)] - public bool CanReevaluate; - [Tooltip("Is the task being reevaluated with conditional aborts?")] - [MarshalAs(UnmanagedType.U1)] - public bool Reevaluate; - //public bool m_Reevaluate; - //public bool Reevaluate { get { return m_Reevaluate; } set { UnityEngine.Debug.Log(Index + " reevaluate: " + value + " " + GetHashCode()); m_Reevaluate = value; } } - } - - /// - /// Specifies when the behavior tree should be updated. - /// - public enum UpdateMode - { - EveryFrame, // The behavior tree should be updated every frame. - Manual // The behavior tree should be updated manually via a user script. - } - - /// - /// Specifies how many tasks should be evaluated. Evaluation will end if all branches return a status of TaskStatus.Running. - /// - public enum EvaluationType : byte - { - EntireTree, // Evaluates up to all of the tasks within the tree. - Count // Evaluates up to the specified MaxEvaluationCount. - } - - /// - /// Specifies if the tree should be evaluated. - /// - public struct EvaluationComponent32 : IComponentData - { - [Tooltip("Specifies how many tasks should be updated during a single tick.")] - public EvaluationType EvaluationType; - [Tooltip("The maximum number of tasks that can run if the evaluation type is set to EvaluationType.Count.")] - public ushort MaxEvaluationCount; - [Tooltip("A bitmask of the tasks that have been evaluated. For EvaluationType.Count, the last element stores the execution count.")] - public FixedList32Bytes EvaluatedTasks; - } - - /// - /// Specifies if the tree should be evaluated. - /// - public struct EvaluationComponent64 : IComponentData - { - [Tooltip("Specifies how many tasks should be updated during a single tick.")] - public EvaluationType EvaluationType; - [Tooltip("The maximum number of tasks that can run if the evaluation type is set to EvaluationType.Count.")] - public ushort MaxEvaluationCount; - [Tooltip("A bitmask of the tasks that have been evaluated. For EvaluationType.Count, the last element stores the execution count.")] - public FixedList64Bytes EvaluatedTasks; - } - - /// - /// Specifies if the tree should be evaluated. - /// - public struct EvaluationComponent128 : IComponentData - { - [Tooltip("Specifies how many tasks should be updated during a single tick.")] - public EvaluationType EvaluationType; - [Tooltip("The maximum number of tasks that can run if the evaluation type is set to EvaluationType.Count.")] - public ushort MaxEvaluationCount; - [Tooltip("A bitmask of the tasks that have been evaluated. For EvaluationType.Count, the last element stores the execution count.")] - public FixedList128Bytes EvaluatedTasks; - } - - /// - /// Specifies if the tree should be evaluated. - /// - public struct EvaluationComponent512 : IComponentData - { - [Tooltip("Specifies how many tasks should be updated during a single tick.")] - public EvaluationType EvaluationType; - [Tooltip("The maximum number of tasks that can run if the evaluation type is set to EvaluationType.Count.")] - public ushort MaxEvaluationCount; - [Tooltip("A bitmask of the tasks that have been evaluated. For EvaluationType.Count, the last element stores the execution count.")] - public FixedList512Bytes EvaluatedTasks; - } - - /// - /// Specifies if the tree should be evaluated. - /// - public struct EvaluationComponent4096 : IComponentData - { - [Tooltip("Specifies how many tasks should be updated during a single tick.")] - public EvaluationType EvaluationType; - [Tooltip("The maximum number of tasks that can run if the evaluation type is set to EvaluationType.Count.")] - public ushort MaxEvaluationCount; - [Tooltip("A bitmask of the tasks that have been evaluated. For EvaluationType.Count, the last element stores the execution count.")] - public FixedList4096Bytes EvaluatedTasks; - } - - /// - /// Specifies how the branch was interrupted. - /// - public enum InterruptType : byte - { - None, // No interrupt. - Branch, // A conditional abort or utility selector triggered the interruption. - ImmediateSuccess, // The branch was interrupted with a success status. - ImmediateFailure, // The branch was interrupted with a failure status. - } - - /// - /// The runtime DOTS data associated with a branch. - /// - public struct BranchComponent : IBufferElementData - { - [Tooltip("The index of the task that is currently active.")] - public ushort ActiveIndex; - //public ushort m_ActiveIndex; - //public ushort ActiveIndex { get { return m_ActiveIndex; } set { Debug.Log(string.Format("Active: {0}", value)); m_ActiveIndex = value; } } - [Tooltip("The index of the task that should execute next.")] - public ushort NextIndex; - //public ushort m_NextIndex; - //public ushort NextIndex { get { return m_NextIndex; } set { Debug.Log(string.Format("Next: {0}", value)); m_NextIndex = value; } } - [Tooltip("The index of the last active task.")] - public ushort LastActiveIndex; - [Tooltip("The component tag that is active.")] - public ComponentType ActiveFlagComponentType; - //public ComponentType m_ActiveFlagComponentType; - //public ComponentType ActiveFlagComponentType { get { return m_ActiveFlagComponentType; } set { Debug.Log(string.Format("Tag: {0}", value)); m_ActiveFlagComponentType = value; } } - [Tooltip("Specifies how the branch is interrupted.")] - public InterruptType InterruptType; - //public InterruptType m_InterruptType; - //public InterruptType InterruptType { get { return m_InterruptType; } set { m_InterruptType = value; Debug.Log("Interrupt Type " + value); } } - [Tooltip("The index of the task that caused an interruption. A value of 0 indicates no interruption.")] - public ushort InterruptIndex; - [Tooltip("Specifies if the branch can execute tasks. Set to false when all tasks in the branch have executed this tick.")] - public bool CanExecute; - //public bool m_CanExecute; - //public bool CanExecute { get { return m_CanExecute; } set { m_CanExecute = value; Debug.Log("Can Execute " + value); } } - } - - /// - /// Specifies if the tree can be evaluated. - /// - public struct EvaluateFlag : IComponentData, IEnableableComponent { } - - /// - /// Specifies if the tree is enabled. - /// - public struct EnabledFlag : IComponentData, IEnableableComponent { } - - /// - /// Flag used to indicate when the branch should be interrupted. - /// - public struct InterruptFlag : IComponentData, IEnableableComponent { } - - /// - /// Flag used to indicate that the branch has been interrupted. - /// - public struct InterruptedFlag : IComponentData, IEnableableComponent { } - - /// - /// Specifies the reevaluation status of the task. - /// - public enum ReevaluateStatus : byte - { - Inactive, // The task is not being reevaluated. - Active, // The task is currently being reevaluated. - Dirty // The task was reevaluated and triggered a change. - } - - /// - /// The runtime DOTS data associated with conditional aborts. - /// - public struct ReevaluateTaskComponent : IBufferElementData - { - [Tooltip("The index of the task.")] - public ushort Index; - [Tooltip("The type of conditional abort.")] - public ConditionalAbortType AbortType; - [Tooltip("The lower bound index of the next task if a lower priority abort is specified.")] - public ushort LowerPriorityLowerIndex; - [Tooltip("The upper bound index of the next task if a lower priority abort is specified.")] - public ushort LowerPriorityUpperIndex; - [Tooltip("The upper bound index of the next task if a self priority abort is specified.")] - public ushort SelfPriorityUpperIndex; - [Tooltip("The original status of the task.")] - public TaskStatus OriginalStatus; - [Tooltip("The tag specifiying the task should be reevaluated.")] - public ComponentType ReevaluateFlagComponentType; - [Tooltip("The current reevaluation status of the task.")] - public ReevaluateStatus ReevaluateStatus; - } - - /// - /// Runtime representation of IEventNodes that can run its own entity logic. - /// - public interface IEventNodeEntityReceiver - { - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The offset between the connected index and the runtime index. - void AddBufferElement(World world, Entity entity, GameObject gameObject, ushort taskOffset); - - /// - /// Clears the IBufferElementData from the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be cleared from. - void ClearBufferElement(World world, Entity entity); - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Components/BehaviorTreeComponents.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Components/BehaviorTreeComponents.cs.meta deleted file mode 100644 index 3ec4234b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Components/BehaviorTreeComponents.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 12b6df69a20daeb4ab4ce1ccaa7bc7ec -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Groups.meta b/Packages/com.opsive.behaviordesigner/Runtime/Groups.meta deleted file mode 100644 index e0e65918..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Groups.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d9c918e9af659ea4fb420fd6af1433b7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Groups/BeforeTraversalSystemGroup.cs b/Packages/com.opsive.behaviordesigner/Runtime/Groups/BeforeTraversalSystemGroup.cs deleted file mode 100644 index b1d926d8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Groups/BeforeTraversalSystemGroup.cs +++ /dev/null @@ -1,46 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Groups -{ - using Opsive.BehaviorDesigner.Runtime.Systems; - using Unity.Entities; - - /// - /// Grouping for the systems that should before other systems. - /// - [UpdateInGroup(typeof(BehaviorTreeSystemGroup), OrderFirst = true)] - public partial class BeforeTraversalSystemGroup : ComponentSystemGroup - { - } - - /// - /// Grouping for the task systems that should reevaluate. - /// - [UpdateInGroup(typeof(BeforeTraversalSystemGroup))] - public partial class ReevaluateTaskSystemGroup : ComponentSystemGroup - { - } - - /// - /// Grouping for the systems that run before the tree execution. - /// - [UpdateInGroup(typeof(BehaviorTreeSystemGroup))] - public partial class InterruptSystemGroup : ComponentSystemGroup - { - } - - /// - /// Grouping for the task systems that can cause interrupts. - /// - [UpdateInGroup(typeof(InterruptSystemGroup))] - [UpdateAfter(typeof(InterruptSystem))] - [UpdateBefore(typeof(InterruptCleanupSystem))] - public partial class InterruptTaskSystemGroup : ComponentSystemGroup - { - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Groups/BeforeTraversalSystemGroup.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Groups/BeforeTraversalSystemGroup.cs.meta deleted file mode 100644 index 075d5be5..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Groups/BeforeTraversalSystemGroup.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 83e6fa82f6125e140a3d0bd4737feeb3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Groups/BehaviorTreeSystemGroup.cs b/Packages/com.opsive.behaviordesigner/Runtime/Groups/BehaviorTreeSystemGroup.cs deleted file mode 100644 index 51b8ed88..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Groups/BehaviorTreeSystemGroup.cs +++ /dev/null @@ -1,80 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Groups -{ - using Opsive.BehaviorDesigner.Runtime.Systems; - using Unity.Entities; - using UnityEngine; - - /// - /// System group which runs all of the behavior tree systems. - /// - [UpdateInGroup(typeof(SimulationSystemGroup))] - [UpdateAfter(typeof(BeginSimulationEntityCommandBufferSystem))] - public partial class BehaviorTreeSystemGroup : ComponentSystemGroup - { - private bool m_Alive; - - public bool Alive { get => m_Alive; } - - /// - /// Disable the group if there are no behavior trees. - /// - [RuntimeInitializeOnLoadMethod] - private static void Init() - { - if (BehaviorTree.BehaviorTreeCount > 0) { - return; - } - - var worlds = World.All; - for (int i = 0; i < worlds.Count; ++i) { - var systemGroup = worlds[i].GetExistingSystemManaged(); - if (systemGroup == null) { - continue; - } - systemGroup.Enabled = false; - } - } - - /// - /// The group has been created. - /// - protected override void OnCreate() - { - base.OnCreate(); - - m_Alive = true; - } - - /// - /// Update the system group. - /// - protected override void OnUpdate() - { - base.OnUpdate(); - - // Stop running if all trees have completed. - var systemHandle = World.GetExistingSystem(); - var system = EntityManager.WorldUnmanaged.GetUnsafeSystemRef(systemHandle); - if (!system.Active) { - Enabled = false; - } - } - - /// - /// The group has been destroyed. - /// - protected override void OnDestroy() - { - base.OnDestroy(); - - m_Alive = false; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Groups/BehaviorTreeSystemGroup.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Groups/BehaviorTreeSystemGroup.cs.meta deleted file mode 100644 index 182c14bf..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Groups/BehaviorTreeSystemGroup.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 905219e69953a5e479911f095744ec54 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Groups/TaskSystemGroup.cs b/Packages/com.opsive.behaviordesigner/Runtime/Groups/TaskSystemGroup.cs deleted file mode 100644 index 5c0567ae..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Groups/TaskSystemGroup.cs +++ /dev/null @@ -1,41 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Groups -{ - using System; - using Unity.Entities; - using UnityEngine; - - /// - /// Group that executes all of the tasks. - /// - [UpdateInGroup(typeof(TraversalSystemGroup))] - public partial class TraversalTaskSystemGroup : ComponentSystemGroup - { - [Tooltip("Callback before the outher tasks are updated.")] - public Action OnPreUpdate; - [Tooltip("Callback after the outher tasks are updated.")] - public Action OnPostUpdate; - - /// - /// Updates the group. - /// - protected override void OnUpdate() - { - if (OnPreUpdate != null) { - OnPreUpdate(); - } - - base.OnUpdate(); - - if (OnPostUpdate != null) { - OnPostUpdate(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Groups/TaskSystemGroup.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Groups/TaskSystemGroup.cs.meta deleted file mode 100644 index bbe78a11..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Groups/TaskSystemGroup.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f48a72a09e70b944a82639a4d549f090 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Groups/TraversalSystemGroup.cs b/Packages/com.opsive.behaviordesigner/Runtime/Groups/TraversalSystemGroup.cs deleted file mode 100644 index 5985cbad..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Groups/TraversalSystemGroup.cs +++ /dev/null @@ -1,76 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Groups -{ - using Opsive.BehaviorDesigner.Runtime.Systems; - using Unity.Entities; - - /// - /// Main group for the systems that are responsible for traversing the behavior tree. - /// - [UpdateInGroup(typeof(BehaviorTreeSystemGroup))] - [UpdateAfter(typeof(InterruptSystemGroup))] - public partial class TraversalSystemGroup : ComponentSystemGroup - { - private SystemHandle m_EvaluationSystemHandle; - private SystemHandle m_DetermineEvaluationSystemHandle; - - /// - /// The group has been created. - /// - protected override void OnCreate() - { - base.OnCreate(); - - m_EvaluationSystemHandle = World.GetExistingSystem(); - m_DetermineEvaluationSystemHandle = World.GetExistingSystem(); - } - - /// - /// Updates the systems. Determines if the systems need to keep being evaluated. - /// - protected override void OnUpdate() - { -#if UNITY_EDITOR - var count = 0; -#endif - bool evaluate; - do { - base.OnUpdate(); - - var determineEvaluationSystem = EntityManager.WorldUnmanaged.GetUnsafeSystemRef(m_DetermineEvaluationSystemHandle); - determineEvaluationSystem.Complete(EntityManager); - evaluate = determineEvaluationSystem.Evaluate; - - var evaluationSystem = EntityManager.WorldUnmanaged.GetUnsafeSystemRef(m_EvaluationSystemHandle); - evaluationSystem.Complete(EntityManager); - -#if UNITY_EDITOR - if (evaluate) { - count++; - if (count == ushort.MaxValue / 10) { - UnityEngine.Debug.LogWarning("An infinite loop would have been caused by the TraversalSystemGroup. Please email support@opsive.com with steps to reproduce this error."); - break; - } - } -#endif - } while (evaluate); - } - - /// - /// The group has stopped running. - /// - protected override void OnStopRunning() - { - base.OnStopRunning(); - - var evaluationSystem = EntityManager.WorldUnmanaged.GetUnsafeSystemRef(m_EvaluationSystemHandle); - evaluationSystem.Complete(EntityManager, true); - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Groups/TraversalSystemGroup.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Groups/TraversalSystemGroup.cs.meta deleted file mode 100644 index c94ab491..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Groups/TraversalSystemGroup.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2c1ad397e3cdf7a44ae172b5ae92c2e4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Opsive.BehaviorDesigner.Runtime.asmdef b/Packages/com.opsive.behaviordesigner/Runtime/Opsive.BehaviorDesigner.Runtime.asmdef deleted file mode 100644 index 3427a478..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Opsive.BehaviorDesigner.Runtime.asmdef +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "Opsive.BehaviorDesigner.Runtime", - "rootNamespace": "Opsive.BehaviorDesigner.Runtime", - "references": [ - "GUID:e9319bc8ab9315745bdf80aeffa01d6d", - "GUID:d8e89a79cd8df884b8d5b3356783eb74", - "GUID:734d92eba21c94caba915361bd5ac177", - "GUID:2665a8d13d1b3f18800f46e256720795", - "GUID:e0cd26848372d4e5c891c569017e11f1", - "GUID:d8b63aba1907145bea998dd612889d6b", - "GUID:a5baed0c9693541a5bd947d336ec7659", - "GUID:8819f35a0fc84499b990e90a4ca1911f" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [ - { - "name": "com.unity.entities", - "expression": "1.3.5", - "define": "UNITY_ENTITIES" - } - ], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Opsive.BehaviorDesigner.Runtime.asmdef.meta b/Packages/com.opsive.behaviordesigner/Runtime/Opsive.BehaviorDesigner.Runtime.asmdef.meta deleted file mode 100644 index 14d256c4..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Opsive.BehaviorDesigner.Runtime.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f9fbcd65fc33f6847b0f124cf7e891b6 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Subtree.cs b/Packages/com.opsive.behaviordesigner/Runtime/Subtree.cs deleted file mode 100644 index 1dcc58a8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Subtree.cs +++ /dev/null @@ -1,298 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using System; - using UnityEngine; - - /// - /// The behavior tree stored within a Scriptable Object. - /// - [CreateAssetMenu(fileName = "Subtree", menuName = "Opsive/Behavior Designer/Subtree", order = 1)] - public class Subtree : ScriptableObject, IGraph, ISharedVariableContainer - { - [Tooltip("The behavior tree data.")] - [SerializeField] private BehaviorTreeData m_Data = new BehaviorTreeData(); - - public string Name { get => name; set => name = value; } - public SharedVariable.SharingScope VariableScope { get => SharedVariable.SharingScope.Graph; } - public BehaviorTreeData Data { get => m_Data; } - public UnityEngine.Object Parent { get => this; } - public ILogicNode[] LogicNodes { get => m_Data?.LogicNodes; set => m_Data.LogicNodes = value as ITreeLogicNode[]; } - public ITreeLogicNode[] TreeLogicNodes { get => m_Data?.LogicNodes; set => m_Data.LogicNodes = value; } - public IEventNode[] EventNodes { get => m_Data?.EventNodes; set => m_Data.EventNodes = value; } - public SharedVariable[] SharedVariables { get => m_Data?.SharedVariables; set => m_Data.SharedVariables = value; } - public SharedVariableGroup[] SharedVariableGroups { -#if UNITY_EDITOR - get => Data?.SharedVariableGroups; - set => Data.SharedVariableGroups = value; -#else - get => null; - set { } -#endif - } - public ushort[] DisabledLogicNodes { get => m_Data.DisabledLogicNodes; set => m_Data.DisabledLogicNodes = value; } - public ushort[] DisabledEventNodes { get => m_Data.DisabledEventNodes; set => m_Data.DisabledEventNodes = value; } - - public LogicNodeProperties[] LogicNodeProperties - { -#if UNITY_EDITOR - get => m_Data.LogicNodeProperties; - set => m_Data.LogicNodeProperties = value; -#else - get => null; - set { } -#endif - } - public NodeProperties[] EventNodeProperties - { -#if UNITY_EDITOR - get => m_Data.EventNodeProperties; - set => m_Data.EventNodeProperties = value; -#else - get => null; - set { } -#endif - } - public GroupProperties[] GroupProperties - { -#if UNITY_EDITOR - get => m_Data.GroupProperties; - set => m_Data.GroupProperties = value; -#else - get => null; - set { } -#endif - } - - public int UniqueID { get => m_Data.UniqueID; } - public bool Pooled { get; set; } - - /// - /// Serializes the behavior tree. - /// - public void Serialize() - { - m_Data.Serialize(); - } - - /// - /// Deserialize the behavior tree. - /// - /// Should the behavior tree be force deserialized? - /// True if the tree was deserialized. - public bool Deserialize(bool force = false) - { - return Deserialize(null, force, force, false, true, null); - } - - /// - /// Deserialize the behavior tree. - /// - /// Should the behavior tree be force deserialized? - /// Should the shared variables be force deserialized? - /// Should the subtrees be injected into the behavior tree? - /// Can the SharedVariables be deep copied? - /// True if the tree was deserialized. - public bool Deserialize(bool force, bool forceSharedVariables, bool injectSubtrees, bool canDeepCopyVariables = true) - { - return Deserialize(null, force, forceSharedVariables, injectSubtrees, canDeepCopyVariables, null); - } - - /// - /// Deserialize the behavior tree. - /// - /// The component that the graph is being deserialized from. - /// Should the behavior tree be force deserialized? - /// Should the shared variables be force deserialized? - /// Should the subtrees be injected into the behavior tree? - /// Can the SharedVariables be deep copied? - /// A list of SharedVariables that should override the current SharedVariable value. - /// True if the tree was deserialized. - public bool Deserialize(IGraphComponent graphComponent, bool force, bool forceSharedVariables, bool injectSubtrees, bool canDeepCopyVariables, SharedVariableOverride[] sharedVariableOverrides) - { - if (m_Data == null) { - return false; - } - - return m_Data.Deserialize(graphComponent, this, force, forceSharedVariables, injectSubtrees, canDeepCopyVariables, sharedVariableOverrides); - } - - /// - /// Deserializes the SharedVariables. This allows the SharedVariables to be deserialized independently. - /// - /// Should the variables be forced deserialized? - /// True if the SharedVariables were deserialized. - public bool DeserializeSharedVariables(bool force) - { - if (m_Data == null) { - return false; - } - - return m_Data.DeserializeSharedVariables(this, force, false); - } - - /// - /// Adds the specified logic node. - /// - /// The node that should be added. - public void AddNode(ILogicNode node) - { - m_Data.AddNode(node as ITreeLogicNode); - } - - /// - /// Removes the specified logic node. - /// - /// The node that should be removed. - /// True if the node was removed. - public bool RemoveNode(ILogicNode node) - { - return m_Data.RemoveNode(node as ITreeLogicNode); - } - - /// - /// Adds the specified event node. - /// - /// The event node that should be added. - public void AddNode(IEventNode eventNode) - { - m_Data.AddNode(eventNode); - } - - /// - /// Removes the specified event node. - /// - /// The event node that should be removed. - /// True if the event node was removed. - public bool RemoveNode(IEventNode eventNode) - { - return m_Data.RemoveNode(eventNode); - } - - /// - /// Returns the Node of the specified type. - /// - /// The type of Node that should be retrieved. - /// The Node of the specified type (can be null). - public ILogicNode GetNode(Type type) - { - return m_Data.GetNode(type); - } - - /// - /// Returns the EventNode of the specified type. - /// - /// The type of EventNode that should be retrieved. - /// The EventNode of the specified type (can be null). If the node is found the index will also be returned. - public (IEventNode, ushort) GetEventNode(Type type) - { - return m_Data.GetEventNode(type); - } - - /// - /// Returns the SharedVariable with the specified name. - /// - /// The name of the SharedVariable that should be retrieved. - /// The SharedVariable with the specified name (can be null). - public SharedVariable GetVariable(PropertyName name) - { - Deserialize(); - - return m_Data.GetVariable(this, name, SharedVariable.SharingScope.Graph); - } - - /// - /// Returns the SharedVariable of the specified name. - /// - /// The name of the SharedVariable that should be retrieved. - /// The SharedVariable with the specified name (can be null). - public SharedVariable GetVariable(PropertyName name) - { - Deserialize(); - - return m_Data.GetVariable(this, name, SharedVariable.SharingScope.Graph); - } - - /// - /// Sets the value of the SharedVariable. - /// - /// The type of SharedVarible. - /// The name of the SharedVariable. - /// The value of the SharedVariable. - /// True if the value was set. - public bool SetVariableValue(PropertyName name, T value) - { - Deserialize(); - - return m_Data.SetVariableValue(this, name, value, SharedVariable.SharingScope.Graph); - } - - /// - /// Is the node with the specified index enabled? - /// - /// Is the node a LogicNode? - /// The index of the node. - /// True if the node with the specified index is enabled. - public bool IsNodeEnabled(bool logicNode, int index) - { - return m_Data.IsNodeEnabled(logicNode, index); - } - - /// - /// Is the node with the specified index active? - /// - /// Is the node a LogicNode? - /// The index of the node. - /// True if the node with the specified index is active. - public bool IsNodeActive(bool logicNode, int index) - { - return false; // The subtree node itself is never active. - } - - /// - /// Copies the graph onto the current graph. - /// - /// The graph that should be copied. - public void Clone(IGraph other) - { - m_Data = new BehaviorTreeData(); - m_Data.EventNodes = other.EventNodes; - m_Data.LogicNodes = other.LogicNodes as ITreeLogicNode[]; - m_Data.SharedVariables = other.SharedVariables; - -#if UNITY_EDITOR - m_Data.EventNodeProperties = other.EventNodeProperties; - m_Data.LogicNodeProperties = other.LogicNodeProperties; - m_Data.GroupProperties = other.GroupProperties; -#endif - - m_Data.Serialize(); - } - - /// - /// Overrides ToString. - /// - /// The desired string value. - public override string ToString() - { - return name; - } - } - - /// - /// Attribute indicating that a ReorderableList should be used for the Subtree array. - /// - [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)] - public class SubtreeListAttribute : System.Attribute - { - - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Subtree.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Subtree.cs.meta deleted file mode 100644 index b2e463ef..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Subtree.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0ab170e3869205449b993a35614c2084 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: e0a8f1df788b6274a9a24003859dfa7e, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Systems.meta b/Packages/com.opsive.behaviordesigner/Runtime/Systems.meta deleted file mode 100644 index 5b02575d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Systems.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a33ce2113e48ee54f946531482da6261 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Systems/BeforeTraversalSystems.cs b/Packages/com.opsive.behaviordesigner/Runtime/Systems/BeforeTraversalSystems.cs deleted file mode 100644 index 6638c218..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Systems/BeforeTraversalSystems.cs +++ /dev/null @@ -1,412 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Systems -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Groups; - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Unity.Burst; - using Unity.Collections; - using Unity.Entities; - using UnityEngine; - - /// - /// System which checks for any tasks that should be reevaluated with conditional aborts. This system only marks the tasks, it does not do - /// the actual reevaluation or interruption. - /// - [UpdateInGroup(typeof(BeforeTraversalSystemGroup), OrderFirst = true)] - [DisableAutoCreation] - public partial struct ReevaluateSystem : ISystem - { - private EntityQuery m_Query; - - /// - /// Builds the query. - /// - /// THe current SystemState. - private void OnCreate(ref SystemState state) - { - m_Query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAll().WithAbsent().Build(); - } - - /// - /// Creates the ReevaluateJob. - /// - /// The current SystemState. - private void OnUpdate(ref SystemState state) - { - var ecb = new EntityCommandBuffer(Allocator.TempJob); - state.Dependency = new ReevaluateJob() - { - EntityCommandBuffer = ecb.AsParallelWriter(), - }.ScheduleParallel(m_Query, state.Dependency); - - // The job must run immediately for the next systems. - state.Dependency.Complete(); - ecb.Playback(state.EntityManager); - ecb.Dispose(); - } - - /// - /// Job which checks for any tasks that should be reevaluated with conditional aborts. This job only flags the tasks, it does not do - /// the actual reevaluation or interruption. - /// - [BurstCompile] - private partial struct ReevaluateJob : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - - /// - /// Executes the job. - /// - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of branch components. - /// An array of task components. - /// An array of reevaluate task components. - [BurstCompile] - public void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, in DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer reevaluateTaskComponents) - { - for (int i = 0; i < reevaluateTaskComponents.Length; ++i) { - var reevaluateTaskComponent = reevaluateTaskComponents[i]; - // The task may not be able to reevaluate. - var taskComponent = taskComponents[reevaluateTaskComponent.Index]; - if (!taskComponent.CanReevaluate || taskComponent.Disabled) { - continue; - } - - // The branch may not be active. - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (branchComponent.ActiveIndex == ushort.MaxValue) { - if (taskComponent.Reevaluate) { - taskComponent.Reevaluate = false; - taskComponents[reevaluateTaskComponent.Index] = taskComponent; - - reevaluateTaskComponent.ReevaluateStatus = ReevaluateStatus.Inactive; - reevaluateTaskComponents[i] = reevaluateTaskComponent; - } - continue; - } - - var reevaluate = false; - if (reevaluateTaskComponent.AbortType == ConditionalAbortType.Self || reevaluateTaskComponent.AbortType == ConditionalAbortType.Both) { - if (branchComponent.ActiveIndex > taskComponent.Index && branchComponent.ActiveIndex <= reevaluateTaskComponent.SelfPriorityUpperIndex) { - // Reevaluate. - reevaluate = true; - if (reevaluateTaskComponent.ReevaluateStatus == ReevaluateStatus.Inactive) { - reevaluateTaskComponent.ReevaluateStatus = ReevaluateStatus.Active; - EntityCommandBuffer.SetComponentEnabled(entityIndex, entity, reevaluateTaskComponent.ReevaluateFlagComponentType, true); - } - } - } - if (!reevaluate && (reevaluateTaskComponent.AbortType == ConditionalAbortType.LowerPriority || reevaluateTaskComponent.AbortType == ConditionalAbortType.Both)) { - if (branchComponent.ActiveIndex > reevaluateTaskComponent.LowerPriorityLowerIndex && branchComponent.ActiveIndex <= reevaluateTaskComponent.LowerPriorityUpperIndex) { - // Reevaluate. - reevaluate = true; - if (reevaluateTaskComponent.ReevaluateStatus == ReevaluateStatus.Inactive) { - reevaluateTaskComponent.ReevaluateStatus = ReevaluateStatus.Active; - EntityCommandBuffer.SetComponentEnabled(entityIndex, entity, reevaluateTaskComponent.ReevaluateFlagComponentType, true); - } - } - } - - // The task should no longer reevaluate. - if (!reevaluate && (taskComponent.Reevaluate || reevaluateTaskComponent.ReevaluateStatus == ReevaluateStatus.Dirty)) { - // The system needs to be kept active if there are other tasks with the same reevaluate tag. - var keepSystemActive = false; - for (int j = 0; j < reevaluateTaskComponents.Length; ++j) { - if (i == j) { - continue; - } - - if ((reevaluateTaskComponents[j].ReevaluateStatus == ReevaluateStatus.Active || reevaluateTaskComponents[j].ReevaluateStatus == ReevaluateStatus.Dirty) && - reevaluateTaskComponent.ReevaluateFlagComponentType == reevaluateTaskComponents[j].ReevaluateFlagComponentType) { - keepSystemActive = true; - break; - } - } - - if (!keepSystemActive) { - EntityCommandBuffer.SetComponentEnabled(entityIndex, entity, reevaluateTaskComponent.ReevaluateFlagComponentType, false); - } - // The task should always disable itself. - taskComponent.Reevaluate = false; - reevaluateTaskComponent.ReevaluateStatus = ReevaluateStatus.Inactive; - } else { - // Store the current status of the task. This status will be compared after the task is reevaluated within DetermineInterruptSystem. - reevaluateTaskComponent.OriginalStatus = taskComponent.Status; - } - - reevaluateTaskComponents[i] = reevaluateTaskComponent; - - taskComponent.Reevaluate = reevaluate; - taskComponents[reevaluateTaskComponent.Index] = taskComponent; - } - } - } - } - - /// - /// The tasks have been reevaluated. Compare the status to determine if an interrupt should occur. - /// - [UpdateInGroup(typeof(InterruptSystemGroup))] - [UpdateBefore(typeof(InterruptSystem))] - public partial struct ConditionalAbortsInvokerSystem : ISystem - { - private EntityQuery m_Query; - - /// - /// Builds the query. - /// - /// THe current SystemState. - private void OnCreate(ref SystemState state) - { - m_Query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAbsent().Build(); - } - - /// - /// Creates the jobs necessary for conditional aborts. - /// - /// The current SystemState. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var ecb = new EntityCommandBuffer(Allocator.TempJob); - state.Dependency = new ConditionalAbortsJob() - { - EntityCommandBuffer = ecb.AsParallelWriter() - }.ScheduleParallel(m_Query, state.Dependency); - - // The jobs must be run immediately for the next systems. - state.Dependency.Complete(); - ecb.Playback(state.EntityManager); - ecb.Dispose(); - } - - /// - /// Job which checks for any tasks that should be reevaluated with conditional aborts. This job only flags the tasks, it does not do - /// the actual reevaluation or interruption. - /// - [BurstCompile] - private partial struct ConditionalAbortsJob : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - - /// - /// Executes the job. - /// - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of branch components. - /// An array of task components. - /// An array of reevaluate task components. - [BurstCompile] - public void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer reevaluateTaskComponents) - { - for (int i = 0; i < reevaluateTaskComponents.Length; ++i) { - var reevaluateTaskComponent = reevaluateTaskComponents[i]; - var taskComponent = taskComponents[reevaluateTaskComponent.Index]; - - if (taskComponent.Reevaluate) { - if (reevaluateTaskComponent.OriginalStatus != taskComponent.Status) { - // The status is different. This will cause an interrupt. - var branchComponent = branchComponents[taskComponent.BranchIndex]; - // The task with the highest priority should cause the abort. - if (branchComponent.InterruptType == InterruptType.None || taskComponent.Index < branchComponent.InterruptIndex) { - branchComponent.InterruptIndex = taskComponent.Index; - branchComponent.InterruptType = InterruptType.Branch; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } else { - taskComponent.Status = TaskStatus.Inactive; - } - - taskComponent.Reevaluate = false; - taskComponents[reevaluateTaskComponent.Index] = taskComponent; - EntityCommandBuffer.SetComponentEnabled(entityIndex, entity, true); - - reevaluateTaskComponent.ReevaluateStatus = ReevaluateStatus.Dirty; - var reevaluateTaskComponentsBuffer = reevaluateTaskComponents; - reevaluateTaskComponentsBuffer[i] = reevaluateTaskComponent; - } - } - } - } - } - } - - /// - /// Processes any interrupts. - /// - [UpdateInGroup(typeof(InterruptSystemGroup))] - [UpdateAfter(typeof(ConditionalAbortsInvokerSystem))] - public partial struct InterruptSystem : ISystem - { - private EntityQuery m_Query; - - /// - /// Builds the query. - /// - /// THe current SystemState. - private void OnCreate(ref SystemState state) - { - m_Query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAll().Build(); - } - - /// - /// Creates the InterruptJob. - /// - /// The current SystemState. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var ecb = new EntityCommandBuffer(Allocator.TempJob); - state.Dependency = new InterruptJob() - { - EntityCommandBuffer = ecb.AsParallelWriter(), - }.ScheduleParallel(m_Query, state.Dependency); - - // The job must run immediately for the next systems. - state.Dependency.Complete(); - ecb.Playback(state.EntityManager); - ecb.Dispose(); - } - - /// - /// Triggers the interrupts. - /// - [BurstCompile] - private partial struct InterruptJob : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - - /// - /// Executes the job. - /// - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of branch components. - /// An array of task components. - [BurstCompile] - public void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, DynamicBuffer branchComponents, DynamicBuffer taskComponents) - { - for (ushort i = 0; i < branchComponents.Length; ++i) { - var branchComponent = branchComponents[i]; - if (branchComponent.InterruptType != InterruptType.None) { - var targetTaskComponent = taskComponents[branchComponent.InterruptIndex]; - var parentIndex = targetTaskComponent.ParentIndex == ushort.MaxValue ? targetTaskComponent.Index : targetTaskComponent.ParentIndex; - TaskStatus prevActiveNewStatus; - if (branchComponent.InterruptType == InterruptType.Branch) { - branchComponent.NextIndex = branchComponent.InterruptIndex; - branchComponents[i] = branchComponent; - - // Start the target task. - targetTaskComponent.Status = TaskStatus.Running; - // Set the target branch tasks to running. Any parent that uses conditional aborts should implement IInterruptResponder. - while (parentIndex != ushort.MaxValue && taskComponents[parentIndex].Status != TaskStatus.Running) { - var parentTaskComponent = taskComponents[parentIndex]; - parentTaskComponent.Status = TaskStatus.Running; - taskComponents[parentIndex] = parentTaskComponent; - parentIndex = parentTaskComponent.ParentIndex; - } - - prevActiveNewStatus = TaskStatus.Failure; - } else { // InterruptType.ImmediateSuccess/Failure. - targetTaskComponent.Status = branchComponent.InterruptType == InterruptType.ImmediateSuccess ? TaskStatus.Success : TaskStatus.Failure; - var targetBranchComponent = branchComponents[targetTaskComponent.BranchIndex]; - targetBranchComponent.NextIndex = targetTaskComponent.ParentIndex; - branchComponents[targetTaskComponent.BranchIndex] = targetBranchComponent; - - prevActiveNewStatus = targetTaskComponent.Status; - } - - // Determine if any other branches need to be interrupted. - for (ushort j = i; j < branchComponents.Length; ++j) { - if (i == j || TraversalUtility.IsParent((ushort)branchComponents[j].ActiveIndex, parentIndex, ref taskComponents)) { - AbortChildren((ushort)branchComponents[j].ActiveIndex, parentIndex, ref taskComponents, prevActiveNewStatus); - - // Reset any queued children. - var taskComponentBuffer = taskComponents; - var childCount = TraversalUtility.GetChildCount(branchComponent.ActiveIndex, ref taskComponentBuffer); - for (int k = 0; k < childCount; ++k) { - var childTaskComponent = taskComponents[branchComponent.ActiveIndex + k + 1]; - if (childTaskComponent.Status == TaskStatus.Queued) { - childTaskComponent.Status = TaskStatus.Inactive; - taskComponentBuffer[branchComponent.ActiveIndex + k + 1] = childTaskComponent; - } - } - - // If the branch is a parallel branch then reset the NextIndex. The current branch (i) will be interrupted normally above. - var localBranchComponent = branchComponents[j]; - if (localBranchComponent.InterruptType == InterruptType.None) { - localBranchComponent.NextIndex = ushort.MaxValue; - branchComponents[j] = localBranchComponent; - } - EntityCommandBuffer.SetComponentEnabled(entityIndex, entity, true); - } - } - - taskComponents[targetTaskComponent.Index] = targetTaskComponent; - } - } - } - - /// - /// Aborts all of the children within the specified branch. - /// - /// The index of the active task within the branch. - /// Aborts the tasks up to the specified parent index. - /// All of the tasks. - /// The abort status. - [BurstCompile] - private void AbortChildren(ushort activeIndex, ushort parentIndex, ref DynamicBuffer taskComponents, TaskStatus status) - { - while (activeIndex != ushort.MaxValue && activeIndex != parentIndex) { - var activeTask = taskComponents[activeIndex]; - activeTask.Status = status; - taskComponents[activeIndex] = activeTask; - activeIndex = activeTask.ParentIndex; - } - } - } - } - - /// - /// Cleanup the interrupts after they have run. - /// - [UpdateInGroup(typeof(InterruptSystemGroup), OrderLast = true)] - public partial struct InterruptCleanupSystem : ISystem - { - /// - /// Executes the system. - /// - /// The current SystemState. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - foreach (var (branchComponents, entity) in - SystemAPI.Query>().WithAll().WithEntityAccess()) { - for (int i = 0; i < branchComponents.Length; ++i) { - var branchComponent = branchComponents[i]; - if (branchComponent.InterruptType != InterruptType.None) { - // Reset the interruption. - branchComponent.InterruptType = InterruptType.None; - branchComponent.InterruptIndex = 0; - var branchComponentBuffer = branchComponents; - branchComponentBuffer[i] = branchComponent; - - state.EntityManager.SetComponentEnabled(entity, false); - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Systems/BeforeTraversalSystems.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Systems/BeforeTraversalSystems.cs.meta deleted file mode 100644 index 4cc57b4f..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Systems/BeforeTraversalSystems.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ffa99079a1d11e547943e43bd0446c86 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Systems/CleanupSystem.cs b/Packages/com.opsive.behaviordesigner/Runtime/Systems/CleanupSystem.cs deleted file mode 100644 index 40fbb367..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Systems/CleanupSystem.cs +++ /dev/null @@ -1,176 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Systems -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Groups; - using Unity.Burst; - using Unity.Burst.Intrinsics; - using Unity.Collections; - using Unity.Entities; - - /// - /// Resets the evaluation status. - /// - [DisableAutoCreation] - [UpdateInGroup(typeof(BehaviorTreeSystemGroup), OrderLast = true)] - [BurstCompile] - public partial struct EvaluationCleanupSystem : ISystem - { - private EntityQuery m_EvaluateCleanupQuery; - private ComponentTypeHandle m_EnabledComponentHandle; - private ComponentTypeHandle m_EvaluateComponentHandle; - private BufferTypeHandle m_BranchComponentHandle; - - /// - /// Creates the required objects for use within the job system. - /// - /// The current SystemState. - [BurstCompile] - private void OnCreate(ref SystemState state) - { - m_EvaluateCleanupQuery = new EntityQueryBuilder(Allocator.Temp) - .WithAll() - .WithAllRW() - .WithOptions(EntityQueryOptions.IgnoreComponentEnabledState) - .Build(ref state); - m_EnabledComponentHandle = state.GetComponentTypeHandle(); - m_EvaluateComponentHandle = state.GetComponentTypeHandle(); - m_BranchComponentHandle = state.GetBufferTypeHandle(); - } - - /// - /// Updates the data object values for use within the job system. - /// - /// The current SystemState. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - state.Dependency.Complete(); - - // Reset the evaluation status. - m_EnabledComponentHandle.Update(ref state); - m_EvaluateComponentHandle.Update(ref state); - m_BranchComponentHandle.Update(ref state); - var evaluationCleanupJob = new EvaluationCleanupJob() - { - EnabledComponentHandle = m_EnabledComponentHandle, - EvaluateComponentHandle = m_EvaluateComponentHandle, - BranchComponentHandle = m_BranchComponentHandle, - }; - state.Dependency = evaluationCleanupJob.ScheduleParallel(m_EvaluateCleanupQuery, state.Dependency); - } - - /// - /// Job that resets the EvaluationComponent component value. - /// - [BurstCompile(CompileSynchronously = true)] - public struct EvaluationCleanupJob : IJobChunk - { - [UnityEngine.Tooltip("A reference to the Enabled Component Handle.")] - public ComponentTypeHandle EnabledComponentHandle; - [UnityEngine.Tooltip("A reference to the Evaluate Component Handle.")] - public ComponentTypeHandle EvaluateComponentHandle; - [UnityEngine.Tooltip("A reference to the Branch Component Handle.")] - public BufferTypeHandle BranchComponentHandle; - - /// - /// Resets the EvaluationComponent component value. - /// - /// Block of memory that contains the entity and components. - /// The index of the chunk. - /// Should the enabled mask be used? - /// The bitwise enabled mask. - [BurstCompile] - public void Execute(in ArchetypeChunk chunk, int unfilteredChunkIndex, bool useEnabledMask, in v128 chunkEnabledMask) - { - var branchAccessor = chunk.GetBufferAccessor(ref BranchComponentHandle); - for (int i = 0; i < chunk.Count; i++) { - // If the chunk is enabled then it should be evaluated. - if (chunk.IsComponentEnabled(ref EnabledComponentHandle, i)) { - chunk.SetComponentEnabled(ref EvaluateComponentHandle, i, true); - } - - // Reset CanExecute for all branches so they can execute in the next tick. - var branchComponents = branchAccessor[i]; - for (int j = 0; j < branchComponents.Length; j++) { - var branchComponent = branchComponents[j]; - branchComponent.CanExecute = true; - branchComponent.LastActiveIndex = ushort.MaxValue; - branchComponents[j] = branchComponent; - } - } - } - } - } - - /// - /// Resets the InterruptedFlag enabled value. - /// - [DisableAutoCreation] - [UpdateInGroup(typeof(BehaviorTreeSystemGroup), OrderLast = true)] - [BurstCompile] - public partial struct InterruptedCleanupSystem : ISystem - { - private EntityQuery m_InterruptedCleanupQuery; - private ComponentTypeHandle m_InterruptedComponentHandle; - - /// - /// Creates the required objects for use within the job system. - /// - /// The current SystemState. - [BurstCompile] - private void OnCreate(ref SystemState state) - { - m_InterruptedCleanupQuery = new EntityQueryBuilder(Allocator.Temp) - .WithAll() - .Build(ref state); - m_InterruptedComponentHandle = state.GetComponentTypeHandle(); - } - - /// - /// Updates the data object values for use within the job system. - /// - /// The current SystemState. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - // Clean up the interrupted tag. - m_InterruptedComponentHandle.Update(ref state); - var interruptedJob = new InterruptedCleanupJob() - { - InterruptedComponentHandle = m_InterruptedComponentHandle, - }; - state.Dependency = interruptedJob.ScheduleParallel(m_InterruptedCleanupQuery, state.Dependency); - } - - /// - /// Job that resets the InterruptedFlag value. - /// - [BurstCompile(CompileSynchronously = true)] - public partial struct InterruptedCleanupJob : IJobChunk - { - [UnityEngine.Tooltip("A reference to the Interrupted Component Handle.")] - public ComponentTypeHandle InterruptedComponentHandle; - - /// - /// Resets the InterruptedFlag value. - /// - /// The entity that is being acted upon. - /// The index of the entity. - [BurstCompile] - public void Execute(in ArchetypeChunk chunk, int unfilteredChunkIndex, bool useEnabledMask, in v128 chunkEnabledMask) - { - for (int i = 0; i < chunk.Count; i++) { - // Only chunks with the tag enabled will be returned so there's no need to check if the tag is enabled. - chunk.SetComponentEnabled(ref InterruptedComponentHandle, i, false); - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Systems/CleanupSystem.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Systems/CleanupSystem.cs.meta deleted file mode 100644 index 2f9a2cc5..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Systems/CleanupSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 36ac1accbf78b7344be0384fd1edf942 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Systems/TaskObjectSystem.cs b/Packages/com.opsive.behaviordesigner/Runtime/Systems/TaskObjectSystem.cs deleted file mode 100644 index 9050a694..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Systems/TaskObjectSystem.cs +++ /dev/null @@ -1,217 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Systems -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Groups; - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime; - using Unity.Entities; - using UnityEngine; - - /// - /// Specifies that the node is an object task which can specify the next child that should run. - /// - public interface ITaskObjectParentNode - { - /// - /// Returns the index of the next child that should run. Set to ushort.MaxValue to ignore. - /// - ushort NextChildIndex { get; } - } - - /// - /// The DOTS data structure for the TaskObject class. - /// - public struct TaskObjectComponent : IBufferElementData - { - [Tooltip("The index of the task.")] - public ushort Index; - } - - /// - /// A DOTS flag indicating when an TaskObject node is active. - /// - public struct TaskObjectFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the TaskObject logic. - /// - [DisableAutoCreation] - [UpdateInGroup(typeof(TraversalTaskSystemGroup), OrderLast = true)] - public partial struct TaskObjectSystem : ISystem - { - /// - /// Updates the logic. - /// - /// The current state of the system. - private void OnUpdate(ref SystemState state) - { - // When the task is interrupted there is no callback which prevents Task.OnEnd from being called. Track the status within the referenced task object and if the status is different then - // the task was aborted and OnEnd needs to be called. - foreach (var (taskObjectComponents, taskComponents, entity) in - SystemAPI.Query, DynamicBuffer>().WithAll().WithEntityAccess()) { - var behaviorTree = BehaviorTree.GetBehaviorTree(entity); - if (behaviorTree == null) { - continue; - } - - for (int i = 0; i < taskObjectComponents.Length; ++i) { - var taskObjectComponent = taskObjectComponents[i]; - var taskComponent = taskComponents[taskObjectComponent.Index]; - if (taskComponent.Status == TaskStatus.Success || taskComponent.Status == TaskStatus.Failure) { - var task = behaviorTree.GetTask(taskObjectComponent.Index) as Task; - if (task.Status != taskComponent.Status) { - task.OnEnd(); - task.Status = taskComponent.Status; - } - } - } - } - - // Update the task objects. - foreach (var (taskObjectComponents, taskComponents, branchComponents, entity) in - SystemAPI.Query, DynamicBuffer, DynamicBuffer>().WithAll().WithEntityAccess()) { - - var behaviorTree = BehaviorTree.GetBehaviorTree(entity); - if (behaviorTree == null) { - continue; - } - - for (int i = 0; i < taskObjectComponents.Length; ++i) { - var taskObjectComponent = taskObjectComponents[i]; - var taskComponent = taskComponents[taskObjectComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute || branchComponent.ActiveIndex != taskComponent.Index) { - continue; - } - - var task = behaviorTree.GetTask(taskObjectComponent.Index) as Task; - if (taskComponent.Status == TaskStatus.Queued) { - task.Status = taskComponent.Status = TaskStatus.Running; - var taskComponentBuffer = taskComponents; - taskComponentBuffer[taskComponent.Index] = taskComponent; - - task.OnStart(); - } - if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - var status = task.OnUpdate(); - // Update the status if has changed. - if (status != taskComponent.Status) { - task.Status = taskComponent.Status = status; - var taskComponentBuffer = taskComponents; - taskComponentBuffer[taskComponent.Index] = taskComponent; - - // End the task if it is done running. - if (status != TaskStatus.Running) { - task.OnEnd(); - - branchComponent = branchComponents[taskComponent.BranchIndex]; - branchComponent.NextIndex = taskComponent.ParentIndex; - var branchComponentBuffer = branchComponents; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - } - } - - if (task is IParentNode && (task is ITaskObjectParentNode taskObjectParentNode)) { - if (status == TaskStatus.Running) { - // Parent object tasks do not have a direct way to set the next child. Use the ITaskObjectParentNode to switch the child task. - if (taskObjectParentNode.NextChildIndex != ushort.MaxValue && taskComponents[taskObjectParentNode.NextChildIndex].Status != TaskStatus.Running) { - branchComponent = branchComponents[taskComponent.BranchIndex]; - branchComponent.NextIndex = taskObjectParentNode.NextChildIndex; - var branchComponentBuffer = branchComponents; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - - var nextTaskComponent = taskComponents[taskObjectParentNode.NextChildIndex]; - nextTaskComponent.Status = TaskStatus.Queued; - var taskComponentBuffer = taskComponents; - taskComponentBuffer[taskObjectParentNode.NextChildIndex] = nextTaskComponent; - } - } else if (status == TaskStatus.Success || status == TaskStatus.Failure) { - // An interrupt should occur if the parent returns a success or failure status before the children. - var taskComponentBuffer = taskComponents; - var childCount = TraversalUtility.GetChildCount(taskComponent.Index, ref taskComponentBuffer); - var branchComponentBuffer = branchComponents; - var hasInterruptComponents = SystemAPI.HasComponent(entity); - var interruptedFlagEnabled = SystemAPI.IsComponentEnabled(entity); - for (ushort j = (ushort)(taskComponent.Index + 1); j < taskComponent.Index + 1 + childCount; ++j) { - var childTaskComponent = taskComponentBuffer[j]; - if (childTaskComponent.Status == TaskStatus.Running || childTaskComponent.Status == TaskStatus.Queued) { - childTaskComponent.Status = status; - taskComponentBuffer[j] = childTaskComponent; - - branchComponent = branchComponentBuffer[childTaskComponent.BranchIndex]; - if (!hasInterruptComponents) { - ComponentUtility.AddInterruptComponents(behaviorTree.World.EntityManager, entity); - hasInterruptComponents = true; - } - if (!interruptedFlagEnabled) { - SystemAPI.SetComponentEnabled(entity, true); - interruptedFlagEnabled = true; - } - if (branchComponent.ActiveIndex == childTaskComponent.Index) { - branchComponent.NextIndex = ushort.MaxValue; - branchComponentBuffer[childTaskComponent.BranchIndex] = branchComponent; - } - } - } - } - } - } - } - } - } - - /// - /// A DOTS tag indicating when an TaskObject node needs to be reevaluated. - /// - public struct TaskObjectReevaluateFlag : IComponentData, IEnableableComponent - { - } - - /// - /// Runs the TaskObject reevaluation logic. - /// - [DisableAutoCreation] - public partial struct TaskObjectReevaluateSystem : ISystem - { - /// - /// Updates the reevaluation logic. - /// - /// The current state of the system. - private void OnUpdate(ref SystemState state) - { - foreach (var (taskComponents, taskObjectComponents, entity) in - SystemAPI.Query, DynamicBuffer>().WithAll().WithEntityAccess()) { - for (int i = 0; i < taskObjectComponents.Length; ++i) { - var taskObjectComponent = taskObjectComponents[i]; - var taskComponent = taskComponents[taskObjectComponent.Index]; - if (!taskComponent.Reevaluate) { - continue; - } - var behaviorTree = BehaviorTree.GetBehaviorTree(entity); - if (behaviorTree == null) { - continue; - } - - var task = behaviorTree.GetTask(taskObjectComponent.Index) as IConditionalReevaluation; - var status = task.OnReevaluateUpdate(); - if (status != taskComponent.Status) { - taskComponent.Status = status; - var buffer = taskComponents; - buffer[taskComponent.Index] = taskComponent; - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Systems/TaskObjectSystem.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Systems/TaskObjectSystem.cs.meta deleted file mode 100644 index e8c518aa..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Systems/TaskObjectSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 203f2349f12650c4f887e6a0a3925c04 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Systems/TraversalSystems.cs b/Packages/com.opsive.behaviordesigner/Runtime/Systems/TraversalSystems.cs deleted file mode 100644 index 7eb9b623..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Systems/TraversalSystems.cs +++ /dev/null @@ -1,617 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Systems -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Groups; - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Unity.Burst; - using Unity.Collections; - using Unity.Entities; - using Unity.Jobs; - using UnityEngine; - - /// - /// Traverses and ensures the correct tasks are active. - /// - [UpdateInGroup(typeof(TraversalSystemGroup))] - [UpdateAfter(typeof(TraversalTaskSystemGroup))] - public partial struct EvaluationSystem : ISystem - { - private bool m_JobScheduled; - private EntityQuery m_Query; - private JobHandle m_Dependency; - private EntityCommandBuffer m_EntityCommandBuffer; - - /// - /// The system has been created. - /// - /// The state of the system. - private void OnCreate(ref SystemState state) - { - m_JobScheduled = false; - m_Query = SystemAPI.QueryBuilder().WithAllRW().WithAbsent().Build(); - } - - /// - /// Starts the job which traverses the tree. - /// - /// The current state of the system. - private void OnUpdate(ref SystemState state) - { - m_JobScheduled = true; - - m_EntityCommandBuffer = new EntityCommandBuffer(state.WorldUpdateAllocator); - m_Dependency = state.Dependency = new EvaluationJob() - { - EntityCommandBuffer = m_EntityCommandBuffer.AsParallelWriter(), - }.ScheduleParallel(m_Query, state.Dependency); - } - - /// - /// Completes the job and releases any memory. - /// - /// The running EntityManager. - /// Has the system been stopped? - [BurstCompile] - public void Complete(EntityManager entityManager, bool stopRunning = false) - { - if (!m_JobScheduled) { - return; - } - - if (!stopRunning) { - m_Dependency.Complete(); - m_EntityCommandBuffer.Playback(entityManager); - m_EntityCommandBuffer.Dispose(); - } - - m_JobScheduled = false; - } - - /// - /// Job which traverses the tree. - /// - [BurstCompile] - public partial struct EvaluationJob : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - - /// - /// Executes the job. - /// - /// The entity that is being acted upon. - /// The index of the entity.An array of branch components. - /// An array of task components. - [BurstCompile] - public void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents) - { - for (int i = 0; i < branchComponents.Length; ++i) { - var branchComponent = branchComponents[i]; - if (branchComponent.ActiveIndex != ushort.MaxValue && branchComponent.ActiveIndex == branchComponent.NextIndex) { - var activeTask = taskComponents[branchComponent.ActiveIndex]; - if (activeTask.Status == TaskStatus.Success || activeTask.Status == TaskStatus.Failure) { - branchComponent.NextIndex = activeTask.ParentIndex; - } - } - if (branchComponent.ActiveIndex != branchComponent.NextIndex) { - // Do not switch into a disabled task. - if (branchComponent.NextIndex != ushort.MaxValue && taskComponents[branchComponent.NextIndex].Disabled) { - var taskComponent = taskComponents[branchComponent.NextIndex]; - taskComponent.Status = TaskStatus.Inactive; - var taskComponentBuffer = taskComponents; - taskComponentBuffer[branchComponent.NextIndex] = taskComponent; - - branchComponent.NextIndex = branchComponent.ActiveIndex; - } else { - // The status for all children should be reset back to their inactive state if the next task is within a new branch. This will prevent - // the return status from being reset when the task ends normally. - var taskComponentBuffer = taskComponents; - if (branchComponent.NextIndex != ushort.MaxValue && - !TraversalUtility.IsParent((ushort)branchComponent.ActiveIndex, (ushort)branchComponent.NextIndex, ref taskComponentBuffer)) { - var nextTaskComponent = taskComponents[branchComponent.NextIndex]; - if (branchComponent.ActiveIndex != ushort.MaxValue && nextTaskComponent.Status != TaskStatus.Running) { // If the next task is already running then an interrupt has already reset the children. - var childCount = TraversalUtility.GetChildCount(branchComponent.NextIndex, ref taskComponentBuffer); - for (int j = 0; j < childCount; ++j) { - var childTaskComponent = taskComponents[branchComponent.NextIndex + j + 1]; - childTaskComponent.Status = TaskStatus.Inactive; - taskComponentBuffer[branchComponent.NextIndex + j + 1] = childTaskComponent; - } - } - nextTaskComponent.Status = nextTaskComponent.Status == TaskStatus.Running ? TaskStatus.Running : TaskStatus.Queued; - taskComponentBuffer[branchComponent.NextIndex] = nextTaskComponent; - } - branchComponent.ActiveIndex = branchComponent.NextIndex; - - // Change the component tag if the task type is different. - var componentType = branchComponent.ActiveIndex != ushort.MaxValue ? taskComponents[branchComponent.ActiveIndex].FlagComponentType : new ComponentType(); - if (componentType != branchComponent.ActiveFlagComponentType) { - if (branchComponent.ActiveFlagComponentType.TypeIndex != TypeIndex.Null) { - var deactivateTag = true; - for (int j = 0; j < branchComponents.Length; ++j) { - // The tag should be deactivated if no other tasks have the same tag type. - if (i != j && branchComponents[j].ActiveIndex != ushort.MaxValue && - branchComponent.ActiveFlagComponentType == branchComponents[j].ActiveFlagComponentType) { - deactivateTag = false; - break; - } - } - - // The task of that type is no longer active - disable the system to prevent it from running. - if (deactivateTag) { - EntityCommandBuffer.SetComponentEnabled(entityIndex, entity, branchComponent.ActiveFlagComponentType, false); - } - } - // A new system type should start. - if (branchComponent.ActiveIndex != ushort.MaxValue) { - var taskComponent = taskComponents[branchComponent.ActiveIndex]; - EntityCommandBuffer.SetComponentEnabled(entityIndex, entity, taskComponent.FlagComponentType, true); - } - branchComponent.ActiveFlagComponentType = componentType; - } - } - var branchComponentBuffer = branchComponents; - branchComponentBuffer[i] = branchComponent; - } - } - } - } - } - - /// - /// Loops through the active tasks to determine if the system should stay active for the current tick. - /// - [UpdateInGroup(typeof(TraversalSystemGroup))] - [UpdateAfter(typeof(EvaluationSystem))] - public partial struct DetermineEvaluationSystem : ISystem - { - [Tooltip("Should the group stay active? An inactive tree does not run.")] - public bool Active { get; private set; } - [Tooltip("Should the group be evaluated? This bool indicates if the entire tree should be evaluated instead of the reevaluation" + - "concept for conditional aborts. The tree will be reevaluated if any of the leaf tasks have a status of running.")] - public bool Evaluate { get; private set; } - - private bool m_JobScheduled; - private JobHandle m_Dependency; - - private EntityQuery m_Query32; - private EntityQuery m_Query64; - private EntityQuery m_Query128; - private EntityQuery m_Query512; - private EntityQuery m_Query4096; - private EntityCommandBuffer m_EntityCommandBuffer32; - private EntityCommandBuffer m_EntityCommandBuffer64; - private EntityCommandBuffer m_EntityCommandBuffer128; - private EntityCommandBuffer m_EntityCommandBuffer512; - private EntityCommandBuffer m_EntityCommandBuffer4096; - - private NativeArray m_Results; - - /// - /// The system has been created. - /// - /// The state of the system. - private void OnCreate(ref SystemState state) - { - Active = Evaluate = true; - m_JobScheduled = false; - m_Query32 = SystemAPI.QueryBuilder().WithAllRW().WithAll().WithAbsent().Build(); - m_Query64 = SystemAPI.QueryBuilder().WithAllRW().WithAll().WithAbsent().Build(); - m_Query128 = SystemAPI.QueryBuilder().WithAllRW().WithAll().WithAbsent().Build(); - m_Query512 = SystemAPI.QueryBuilder().WithAllRW().WithAll().WithAbsent().Build(); - m_Query4096 = SystemAPI.QueryBuilder().WithAllRW().WithAll().WithAbsent().Build(); - } - - /// - /// Executes the job to determine if the system should stay active and evaluating. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - Active = Evaluate = true; - m_JobScheduled = true; - - m_EntityCommandBuffer32 = new EntityCommandBuffer(Allocator.TempJob); - m_EntityCommandBuffer64 = new EntityCommandBuffer(Allocator.TempJob); - m_EntityCommandBuffer128 = new EntityCommandBuffer(Allocator.TempJob); - m_EntityCommandBuffer512 = new EntityCommandBuffer(Allocator.TempJob); - m_EntityCommandBuffer4096 = new EntityCommandBuffer(Allocator.TempJob); - - m_Results = new NativeArray(3, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); - for (int i = 0; i < m_Results.Length; ++i) { - m_Results[i] = false; - } - - // Chain jobs sequentially since they all write to the shared Results array. - m_Dependency = new DetermineEvaluationJob32() - { - EntityCommandBuffer = m_EntityCommandBuffer32.AsParallelWriter(), - Results = m_Results - }.ScheduleParallel(m_Query32, state.Dependency); - m_Dependency = new DetermineEvaluationJob64() - { - EntityCommandBuffer = m_EntityCommandBuffer64.AsParallelWriter(), - Results = m_Results - }.ScheduleParallel(m_Query64, m_Dependency); - m_Dependency = new DetermineEvaluationJob128() - { - EntityCommandBuffer = m_EntityCommandBuffer128.AsParallelWriter(), - Results = m_Results - }.ScheduleParallel(m_Query128, m_Dependency); - m_Dependency = new DetermineEvaluationJob512() - { - EntityCommandBuffer = m_EntityCommandBuffer512.AsParallelWriter(), - Results = m_Results - }.ScheduleParallel(m_Query512, m_Dependency); - m_Dependency = new DetermineEvaluationJob4096() - { - EntityCommandBuffer = m_EntityCommandBuffer4096.AsParallelWriter(), - Results = m_Results - }.ScheduleParallel(m_Query4096, m_Dependency); - - state.Dependency = m_Dependency; - } - - /// - /// Completes the job and releases any memory. - /// - /// The running EntityManager. - [BurstCompile] - public void Complete(EntityManager entityManager) - { - if (!m_JobScheduled) { - return; - } - - m_Dependency.Complete(); - m_EntityCommandBuffer32.Playback(entityManager); - m_EntityCommandBuffer32.Dispose(); - m_EntityCommandBuffer64.Playback(entityManager); - m_EntityCommandBuffer64.Dispose(); - m_EntityCommandBuffer128.Playback(entityManager); - m_EntityCommandBuffer128.Dispose(); - m_EntityCommandBuffer512.Playback(entityManager); - m_EntityCommandBuffer512.Dispose(); - m_EntityCommandBuffer4096.Playback(entityManager); - m_EntityCommandBuffer4096.Dispose(); - - if (m_Results.IsCreated) { - if (m_Results[0]) { - Active = m_Results[1]; - Evaluate = m_Results[2]; - } else { - // If the first element is false then no trees executed. - Active = Evaluate = false; - } - m_Results.Dispose(); - } - m_JobScheduled = false; - } - - /// - /// The system has been destroyed. - /// - /// The current state of the system. - private void OnDestroy(ref SystemState state) - { - if (m_Dependency.IsCompleted) { - return; - } - - m_Results.Dispose(); - } - - /// - /// Job which determine if the system should stay active. If any behavior tree should stay active then the entire system must remain active. - /// - [BurstCompile] - public partial struct DetermineEvaluationJob32 : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - [Tooltip("The computed results.")] - [NativeDisableParallelForRestriction] public NativeArray Results; - - /// - /// Executes the job. - /// - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of branch components. - /// An array of task components. - /// The EvaluationComponent that belongs to the entity. - [BurstCompile] - private void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, ref DynamicBuffer branchComponents, in DynamicBuffer taskComponents, ref EvaluationComponent32 evaluationComponent) - { - var evaluatedTasks = evaluationComponent.EvaluatedTasks; - EvaluationUtility.DetermineEvaluation(entity, entityIndex, ref branchComponents, taskComponents, ref evaluatedTasks, evaluationComponent.EvaluationType, evaluationComponent.MaxEvaluationCount, EntityCommandBuffer, Results); - evaluationComponent.EvaluatedTasks = evaluatedTasks; - } - } - - /// - /// Job which determine if the system should stay active. If any behavior tree should stay active then the entire system must remain active. - /// - [BurstCompile] - public partial struct DetermineEvaluationJob64 : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - [Tooltip("The computed results.")] - [NativeDisableParallelForRestriction] public NativeArray Results; - - /// - /// Executes the job. - /// - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of branch components. - /// An array of task components. - /// The EvaluationComponent that belongs to the entity. - [BurstCompile] - private void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, ref DynamicBuffer branchComponents, in DynamicBuffer taskComponents, ref EvaluationComponent64 evaluationComponent) - { - var evaluatedTasks = evaluationComponent.EvaluatedTasks; - EvaluationUtility.DetermineEvaluation(entity, entityIndex, ref branchComponents, taskComponents, ref evaluatedTasks, evaluationComponent.EvaluationType, evaluationComponent.MaxEvaluationCount, EntityCommandBuffer, Results); - evaluationComponent.EvaluatedTasks = evaluatedTasks; - } - } - - /// - /// Job which determine if the system should stay active. If any behavior tree should stay active then the entire system must remain active. - /// - [BurstCompile] - public partial struct DetermineEvaluationJob128 : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - [Tooltip("The computed results.")] - [NativeDisableParallelForRestriction] public NativeArray Results; - - /// - /// Executes the job. - /// - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of branch components. - /// An array of task components. - /// The EvaluationComponent that belongs to the entity. - [BurstCompile] - private void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, ref DynamicBuffer branchComponents, in DynamicBuffer taskComponents, ref EvaluationComponent128 evaluationComponent) - { - var evaluatedTasks = evaluationComponent.EvaluatedTasks; - EvaluationUtility.DetermineEvaluation(entity, entityIndex, ref branchComponents, taskComponents, ref evaluatedTasks, evaluationComponent.EvaluationType, evaluationComponent.MaxEvaluationCount, EntityCommandBuffer, Results); - evaluationComponent.EvaluatedTasks = evaluatedTasks; - } - } - - - /// - /// Job which determine if the system should stay active. If any behavior tree should stay active then the entire system must remain active. - /// - [BurstCompile] - public partial struct DetermineEvaluationJob512 : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - [Tooltip("The computed results.")] - [NativeDisableParallelForRestriction] public NativeArray Results; - - /// - /// Executes the job. - /// - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of branch components. - /// An array of task components. - /// The EvaluationComponent that belongs to the entity. - [BurstCompile] - private void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, ref DynamicBuffer branchComponents, in DynamicBuffer taskComponents, ref EvaluationComponent512 evaluationComponent) - { - var evaluatedTasks = evaluationComponent.EvaluatedTasks; - EvaluationUtility.DetermineEvaluation(entity, entityIndex, ref branchComponents, taskComponents, ref evaluatedTasks, evaluationComponent.EvaluationType, evaluationComponent.MaxEvaluationCount, EntityCommandBuffer, Results); - evaluationComponent.EvaluatedTasks = evaluatedTasks; - } - } - - /// - /// Job which determine if the system should stay active. If any behavior tree should stay active then the entire system must remain active. - /// - [BurstCompile] - public partial struct DetermineEvaluationJob4096 : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - [Tooltip("The computed results.")] - [NativeDisableParallelForRestriction] public NativeArray Results; - - /// - /// Executes the job. - /// - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of branch components. - /// An array of task components. - /// The EvaluationComponent that belongs to the entity. - [BurstCompile] - private void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, ref DynamicBuffer branchComponents, in DynamicBuffer taskComponents, ref EvaluationComponent4096 evaluationComponent) - { - var evaluatedTasks = evaluationComponent.EvaluatedTasks; - EvaluationUtility.DetermineEvaluation(entity, entityIndex, ref branchComponents, taskComponents, ref evaluatedTasks, evaluationComponent.EvaluationType, evaluationComponent.MaxEvaluationCount, EntityCommandBuffer, Results); - evaluationComponent.EvaluatedTasks = evaluatedTasks; - } - } - } - - /// - /// Utility functions for the task evaluation. - /// - [BurstCompile] - public struct EvaluationUtility - { - /// - /// Is the task at the specified index a parent task. - /// - /// An array of task components. - /// The index to check if it is a parent. - /// True if the task at the specified index is a parent task. - [BurstCompile] - public static bool IsParentTask(ref DynamicBuffer taskComponents, int index) - { - // The last task cannot be a parent. - if (index == taskComponents.Length - 1) { - return false; - } - - // The next child will have a parent of the current task. - if (taskComponents[index + 1].ParentIndex == index) { - return true; - } - - // The parent index is different - the current task is not a parent. - return false; - } - - /// - /// Core evaluation logic that works with any FixedList type for EvaluatedTasks. - /// - /// The type of FixedList for EvaluatedTasks. - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of branch components. - /// An array of task components. - /// The evaluated tasks list. - /// The evaluation type. - /// The maximum evaluation count. - /// The command buffer for setting component data. - /// The computed results array. - [BurstCompile] - public static void DetermineEvaluation(Entity entity, int entityIndex, ref DynamicBuffer branchComponents, DynamicBuffer taskComponents, ref TFixedList evaluatedTasks, EvaluationType evaluationType, ushort maxEvaluationCount, EntityCommandBuffer.ParallelWriter entityCommandBuffer, NativeArray results) where TFixedList : struct, INativeList - { - results[0] = true; // The first element indicates that the job has been executed. - - // No branches may be active. - var active = false; - var evaluate = false; - var evaluatedMask = new FixedList4096Bytes(); - for (int i = 0; i < branchComponents.Length; ++i) { - var branchComponent = branchComponents[i]; - if (branchComponent.ActiveIndex == ushort.MaxValue || !branchComponent.CanExecute) { - continue; - } - active = true; - - // Interrupts are processed in a separate system that is run outside of the task execution system. As a result the branch should not continue to evaluate. - if (branchComponent.InterruptType != InterruptType.None) { - continue; - } - - var taskComponent = taskComponents[branchComponent.ActiveIndex]; - var isParentTask = EvaluationUtility.IsParentTask(ref taskComponents, branchComponent.ActiveIndex); - // The branch can evaluate if the active task is an outer node (action or conditional) and is not running OR - // the task is an inner node (composite or decorator), is running, and is not a parallel task. Parent tasks cannot run without an active child. - if ((!isParentTask && taskComponent.Status != TaskStatus.Running && taskComponent.ParentIndex != ushort.MaxValue) || - (isParentTask && (taskComponent.Status == TaskStatus.Queued || taskComponent.Status == TaskStatus.Running))) { - - // Compute active task bit positions. - var bitIndex = branchComponent.ActiveIndex + 1; - var arrayIndex = bitIndex / ComponentUtility.ulongBitSize; - var bitInUlong = bitIndex % ComponentUtility.ulongBitSize; - while (evaluatedMask.Length <= arrayIndex) evaluatedMask.Add(0UL); - evaluatedMask[arrayIndex] |= (1UL << bitInUlong); - - // Prevent evaluating the same task again within the same tick. - if (branchComponent.ActiveIndex == branchComponent.LastActiveIndex) { - branchComponent.CanExecute = false; - branchComponents.ElementAt(i) = branchComponent; - continue; - } - - // Check if the task has already been evaluated this tick. - var alreadyEvaluated = (evaluatedTasks[arrayIndex] & (1UL << bitInUlong)) != 0; - - // Decision to evaluate: - // - For parent tasks: always evaluate. The parent task should never be the last executing task. - // - For non-parent tasks: evaluate if this task hasn't been evaluated yet. - if (isParentTask || !alreadyEvaluated) { - evaluate = true; - branchComponent.LastActiveIndex = branchComponent.ActiveIndex; - } else { - branchComponent.CanExecute = false; - } - branchComponents.ElementAt(i) = branchComponent; - - evaluatedTasks[arrayIndex] |= evaluatedMask[arrayIndex]; - } else { - branchComponent.CanExecute = false; - branchComponents.ElementAt(i) = branchComponent; - } - } - - // If a branch is active then at least one task within that branch is active. - if (active) { - results[1] = true; // Active result. - - if (evaluate) { - if (evaluationType == EvaluationType.Count) { - // Use the last element of EvaluatedTasks as the counter. - evaluatedTasks[evaluatedTasks.Length - 1]++; - if (evaluatedTasks[evaluatedTasks.Length - 1] >= maxEvaluationCount) { - // Reset the counter and bitmask elements. - for (int i = 0; i < evaluatedTasks.Length; ++i) { - evaluatedTasks[i] = 0; - } - entityCommandBuffer.SetComponentEnabled(entityIndex, entity, false); - // Set the bitmask for current active tasks to prevent one extra task from being executed on subsequent frames. - SetActiveBranchBits(ref branchComponents, ref evaluatedTasks); - } else { - results[2] = true; // Evaluate result. - } - } else { - results[2] = true; // Evaluate result - continue the loop. - } - } else { - entityCommandBuffer.SetComponentEnabled(entityIndex, entity, false); - // Reset the evaluated tasks bitmask. - for (int i = 0; i < evaluatedTasks.Length; ++i) { - evaluatedTasks[i] = 0; - } - // The system is going to stop evaluating this entity. It will be resumed immediately the next update. Because the DetermineEvaluationJob is run after the tasks - // update the EvaluatedTasks value should be set to the next active task. If this value is set to 0 then one extra task will always be executed with subsequent frames. - SetActiveBranchBits(ref branchComponents, ref evaluatedTasks); - } - } - } - - /// - /// Sets the bitmask bits for all active branches. This prevents one extra task from being executed on subsequent frames. - /// - /// An array of branch components. - /// The evaluated tasks list to update. - [BurstCompile] - private static void SetActiveBranchBits(ref DynamicBuffer branchComponents, ref TFixedList evaluatedTasks) where TFixedList : struct, INativeList - { - for (int i = 0; i < branchComponents.Length; ++i) { - var branchComponent = branchComponents[i]; - if (branchComponent.ActiveIndex == ushort.MaxValue) { - continue; - } - - // Compute active task bit positions. - var bitIndex = branchComponent.ActiveIndex + 1; - var arrayIndex = bitIndex / ComponentUtility.ulongBitSize; - var bitInUlong = bitIndex % ComponentUtility.ulongBitSize; - evaluatedTasks[arrayIndex] |= (1UL << bitInUlong); - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Systems/TraversalSystems.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Systems/TraversalSystems.cs.meta deleted file mode 100644 index cc0ff285..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Systems/TraversalSystems.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4e38e2be36422f54fa65b67063d03366 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks.meta deleted file mode 100644 index 61befb4d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0b7936234bfdce042b052d68dd0136f1 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions.meta deleted file mode 100644 index ab1c7313..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 72fd968959b610e4bb7994fedbaab0c9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Action.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Action.cs deleted file mode 100644 index 5423f290..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Action.cs +++ /dev/null @@ -1,19 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - - /// - /// A TaskObject implementation of the Action task. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public abstract class Action : Task, IAction - { - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Action.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Action.cs.meta deleted file mode 100644 index 0887adb8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Action.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 24e232a868c7a0d439cb82feeb963c8e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ActionNode.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ActionNode.cs deleted file mode 100644 index 17ade824..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ActionNode.cs +++ /dev/null @@ -1,31 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - using UnityEngine; - - /// - /// A TaskObject implementation of the Action task. This class can be used when the task should not be grouped by the StackedAction task. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public abstract class ActionNode : Task, ITreeLogicNode, IAction - { - [Tooltip("The index of the node.")] - [SerializeField] ushort m_Index; - [Tooltip("The parent index of the node. ushort.MaxValue indicates no parent.")] - [SerializeField] ushort m_ParentIndex; - [Tooltip("The sibling index of the node. ushort.MaxValue indicates no sibling.")] - [SerializeField] ushort m_SiblingIndex; - - public ushort Index { get => m_Index; set => m_Index = value; } - public ushort ParentIndex { get => m_ParentIndex; set => m_ParentIndex = value; } - public ushort SiblingIndex { get => m_SiblingIndex; set => m_SiblingIndex = value; } - public ushort RuntimeIndex { get; set; } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ActionNode.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ActionNode.cs.meta deleted file mode 100644 index 5824520b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ActionNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f95ceadf4eaf7df499091158c2ba5178 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions.meta deleted file mode 100644 index bc78407d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a57b0c8b5bd7c5142963151eb3723e6e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToFloat.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToFloat.cs deleted file mode 100644 index cc957d27..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToFloat.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a boolean value to a float value (true = 1.0, false = 0.0).")] - [Shared.Utility.Category("Conversions")] - public class ConvertBoolToFloat : Action - { - [Tooltip("The boolean value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted float value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value ? 1.0f : 0.0f; - return TaskStatus.Success; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToFloat.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToFloat.cs.meta deleted file mode 100644 index 8e225f0d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToFloat.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 73c605544c0648e4bbf8dcfe72348337 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToInt.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToInt.cs deleted file mode 100644 index e08b49be..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToInt.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a boolean value to an integer value (true = 1, false = 0).")] - [Shared.Utility.Category("Conversions")] - public class ConvertBoolToInt : Action - { - [Tooltip("The boolean value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted integer value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value ? 1 : 0; - return TaskStatus.Success; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToInt.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToInt.cs.meta deleted file mode 100644 index 5b35c1dc..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToInt.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3955564edbd009346b730327375e3d48 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToString.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToString.cs deleted file mode 100644 index daa94ac3..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToString.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a boolean value to a string value.")] - [Shared.Utility.Category("Conversions")] - public class ConvertBoolToString : Action - { - [Tooltip("The boolean value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted string value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value.ToString(); - return TaskStatus.Success; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToString.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToString.cs.meta deleted file mode 100644 index 48dad45b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertBoolToString.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 888e5ecfd2f882346ad4879020c18283 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToBool.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToBool.cs deleted file mode 100644 index cb090ee1..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToBool.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a float value to a boolean value (0.0 = false, non-zero = true).")] - [Shared.Utility.Category("Conversions")] - public class ConvertFloatToBool : Action - { - [Tooltip("The float value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted boolean value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value != 0.0f; - return TaskStatus.Success; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToBool.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToBool.cs.meta deleted file mode 100644 index b3c73f89..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToBool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 49e265c8db111534fab491cfc5672622 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToInt.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToInt.cs deleted file mode 100644 index 4e8d0c9d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToInt.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a float value to an integer value.")] - [Shared.Utility.Category("Conversions")] - public class ConvertFloatToInt : Action - { - [Tooltip("The float value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted integer value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = Mathf.RoundToInt(m_Value.Value); - return TaskStatus.Success; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToInt.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToInt.cs.meta deleted file mode 100644 index 0aeb5973..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToInt.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7e596c94da53a4a45ad9113b33a1aea4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToString.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToString.cs deleted file mode 100644 index 54439522..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToString.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a float value to a string value.")] - [Shared.Utility.Category("Conversions")] - public class ConvertFloatToString : Action - { - [Tooltip("The float value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted string value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value.ToString(); - return TaskStatus.Success; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToString.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToString.cs.meta deleted file mode 100644 index 258f476a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertFloatToString.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cc1ceef260c01c645b8b47ce20199dc6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertGameObjectToTransform.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertGameObjectToTransform.cs deleted file mode 100644 index a529b1d0..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertGameObjectToTransform.cs +++ /dev/null @@ -1,37 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a GameObject value to a Transform value.")] - [Shared.Utility.Category("Conversions")] - public class ConvertGameObjectToTransform : Action - { - [Tooltip("The GameObject value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted Transform value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (m_Value.Value != null) { - m_StoreResult.Value = m_Value.Value.transform; - return TaskStatus.Success; - } - m_StoreResult.Value = null; - return TaskStatus.Failure; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertGameObjectToTransform.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertGameObjectToTransform.cs.meta deleted file mode 100644 index 6227ffc4..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertGameObjectToTransform.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a297e510d0a945c449c2d125813fe9d9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToBool.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToBool.cs deleted file mode 100644 index 9944f36b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToBool.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts an integer value to a boolean value (0 = false, non-zero = true).")] - [Shared.Utility.Category("Conversions")] - public class ConvertIntToBool : Action - { - [Tooltip("The integer value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted boolean value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value != 0; - return TaskStatus.Success; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToBool.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToBool.cs.meta deleted file mode 100644 index a0d2bc0b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToBool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 67e0599636ba3b7419611ae159070c04 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToFloat.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToFloat.cs deleted file mode 100644 index effca979..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToFloat.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts an integer value to a float value.")] - [Shared.Utility.Category("Conversions")] - public class ConvertIntToFloat : Action - { - [Tooltip("The integer value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted float value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value; - return TaskStatus.Success; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToFloat.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToFloat.cs.meta deleted file mode 100644 index e576fd1d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToFloat.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 07440ccf7d92b14498b7e4c7b9e08e5e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToString.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToString.cs deleted file mode 100644 index feac7d1a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToString.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts an integer value to a string value.")] - [Shared.Utility.Category("Conversions")] - public class ConvertIntToString : Action - { - [Tooltip("The integer value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted string value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value.ToString(); - return TaskStatus.Success; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToString.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToString.cs.meta deleted file mode 100644 index c43439e4..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertIntToString.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eeadd74b13bc65d45af983c98b9f3e01 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToBool.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToBool.cs deleted file mode 100644 index 063eb8c9..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToBool.cs +++ /dev/null @@ -1,36 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a string value to a boolean value.")] - [Shared.Utility.Category("Conversions")] - public class ConvertStringToBool : Action - { - [Tooltip("The string value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted boolean value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (bool.TryParse(m_Value.Value, out bool result)) { - m_StoreResult.Value = result; - return TaskStatus.Success; - } - return TaskStatus.Failure; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToBool.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToBool.cs.meta deleted file mode 100644 index 8b556cc1..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToBool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 336754ea3fd33e44e91733089662ebd7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToFloat.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToFloat.cs deleted file mode 100644 index f79e7218..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToFloat.cs +++ /dev/null @@ -1,36 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a string value to a float value.")] - [Shared.Utility.Category("Conversions")] - public class ConvertStringToFloat : Action - { - [Tooltip("The string value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted float value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (float.TryParse(m_Value.Value, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out float result)) { - m_StoreResult.Value = result; - return TaskStatus.Success; - } - return TaskStatus.Failure; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToFloat.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToFloat.cs.meta deleted file mode 100644 index b8b7ca78..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToFloat.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d22d87f8a2847f34185c0ff330b89209 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToInt.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToInt.cs deleted file mode 100644 index b6f329d4..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToInt.cs +++ /dev/null @@ -1,36 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a string value to an integer value.")] - [Shared.Utility.Category("Conversions")] - public class ConvertStringToInt : Action - { - [Tooltip("The string value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted integer value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (int.TryParse(m_Value.Value, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out int result)) { - m_StoreResult.Value = result; - return TaskStatus.Success; - } - return TaskStatus.Failure; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToInt.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToInt.cs.meta deleted file mode 100644 index 0d1bbadd..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertStringToInt.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e2d95d3a42e27184da971d47c792ff72 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertTransformToGameObject.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertTransformToGameObject.cs deleted file mode 100644 index 10bb1528..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertTransformToGameObject.cs +++ /dev/null @@ -1,37 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Conversions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Converts a Transform value to a GameObject value.")] - [Shared.Utility.Category("Conversions")] - public class ConvertTransformToGameObject : Action - { - [Tooltip("The Transform value to convert.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set to the converted GameObject value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (m_Value.Value != null) { - m_StoreResult.Value = m_Value.Value.gameObject; - return TaskStatus.Success; - } - m_StoreResult.Value = null; - return TaskStatus.Failure; - } - } -} -#endif - diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertTransformToGameObject.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertTransformToGameObject.cs.meta deleted file mode 100644 index 9cfc1a6e..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Conversions/ConvertTransformToGameObject.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 36617d392cb63e24184a825b05f4f78a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList.meta deleted file mode 100644 index d79aed91..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 31447ed8785ef5146bbb37d6466c1954 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToArray.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToArray.cs deleted file mode 100644 index 4120ebec..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToArray.cs +++ /dev/null @@ -1,45 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Utility; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Adds the GameObject to the array.")] - [Shared.Utility.Category("Lists")] - public class AddGameObjectToArray : TargetGameObjectAction - { - [Tooltip("The list of possible GameObjects.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - [Tooltip("Are duplicates allowed to be added?")] - [SerializeField] protected SharedVariable m_AllowDuplicates = true; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (!m_AllowDuplicates.Value && m_StoreResult.Value.Contains(m_ResolvedGameObject)) { - return TaskStatus.Failure; - } - - var array = m_StoreResult.Value; - if (array == null) { - array = new GameObject[1]; - } else { - System.Array.Resize(ref array, array.Length + 1); - } - - m_StoreResult.Value = array; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToArray.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToArray.cs.meta deleted file mode 100644 index e50a633c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToArray.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0e15921d659313647b2d4d2b3c76c6ec -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToList.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToList.cs deleted file mode 100644 index ea25b084..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToList.cs +++ /dev/null @@ -1,37 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime.Variables; - using System.Collections.Generic; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Adds the GameObject to the list.")] - [Shared.Utility.Category("Lists")] - public class AddGameObjectToList : TargetGameObjectAction - { - [Tooltip("The list of possible GameObjects.")] - [RequireShared] [SerializeField] protected SharedVariable> m_StoreResult; - [Tooltip("Are duplicates allowed to be added?")] - [SerializeField] protected SharedVariable m_AllowDuplicates = true; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (!m_AllowDuplicates.Value && m_StoreResult.Value.Contains(m_ResolvedGameObject)) { - return TaskStatus.Failure; - } - - m_StoreResult.Value.Add(m_ResolvedGameObject); - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToList.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToList.cs.meta deleted file mode 100644 index 6c99f7ca..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/AddGameObjectToList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 771474f9417f55641b0b1a23028e05d0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromArray.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromArray.cs deleted file mode 100644 index 539c9689..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromArray.cs +++ /dev/null @@ -1,49 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Sets a random GameObject value from the GameObject array.")] - [Shared.Utility.Category("Lists")] - public class RandomGameObjectFromArray : Action - { - [Tooltip("The list of possible GameObjects.")] - [SerializeField] protected SharedVariable m_GameObjects; - [Tooltip("The variable that should be set.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - [Tooltip("The seed of the random number generator. Set to 0 to disable.")] - [SerializeField] protected int m_Seed; - - /// - /// Callback when the behavior tree is initialized. - /// - public override void OnAwake() - { - if (m_Seed != 0) { - Random.InitState(m_Seed); - } - } - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (m_GameObjects.Value == null || m_GameObjects.Value.Length == 0) { - return TaskStatus.Failure; - } - - m_StoreResult.Value = m_GameObjects.Value[Random.Range(0, m_GameObjects.Value.Length)]; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromArray.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromArray.cs.meta deleted file mode 100644 index cf007529..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromArray.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a32475ebd3e6d3145bd238c01607ea15 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromList.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromList.cs deleted file mode 100644 index 768ec3a1..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromList.cs +++ /dev/null @@ -1,50 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - using System.Collections.Generic; - - [Opsive.Shared.Utility.Description("Sets a random GameObject value from the GameObject list.")] - [Shared.Utility.Category("Lists")] - public class RandomGameObjectFromList : Action - { - [Tooltip("The list of possible GameObjects.")] - [SerializeField] protected SharedVariable> m_GameObjects; - [Tooltip("The variable that should be set.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - [Tooltip("The seed of the random number generator. Set to 0 to disable.")] - [SerializeField] protected int m_Seed; - - /// - /// Callback when the behavior tree is initialized. - /// - public override void OnAwake() - { - if (m_Seed != 0) { - Random.InitState(m_Seed); - } - } - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (m_GameObjects.Value == null || m_GameObjects.Value.Count == 0) { - return TaskStatus.Failure; - } - - m_StoreResult.Value = m_GameObjects.Value[Random.Range(0, m_GameObjects.Value.Count)]; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromList.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromList.cs.meta deleted file mode 100644 index f02d940a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RandomGameObjectFromList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b7809ab5aee37184c9a3f0c4b013ab0a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromArray.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromArray.cs deleted file mode 100644 index 85bcec09..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromArray.cs +++ /dev/null @@ -1,57 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Removes the GameObject from the array.")] - [Shared.Utility.Category("Lists")] - public class RemoveGameObjectFromArray : TargetGameObjectAction - { - [Tooltip("The list of possible GameObjects.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - var array = m_StoreResult.Value; - if (array == null) { - return TaskStatus.Failure; - } - - // Find the index of the GameObject to remove. - var indexToRemove = -1; - for (int i = 0; i < array.Length; i++) { - if (array[i] == m_ResolvedGameObject) { - indexToRemove = i; - break; - } - } - if (indexToRemove == -1) { - return TaskStatus.Failure; - } - - // Create a new array with the GameObject removed. - var newArray = new GameObject[array.Length - 1]; - for (int i = 0, j = 0; i < array.Length; ++i) { - if (i != indexToRemove) { - newArray[j] = array[i]; - ++j; - } - } - - m_StoreResult.Value = newArray; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromArray.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromArray.cs.meta deleted file mode 100644 index d23881ab..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromArray.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 29d1b655a839c324c9ca4b12f3af0351 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromList.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromList.cs deleted file mode 100644 index e47c5254..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromList.cs +++ /dev/null @@ -1,31 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using System.Collections.Generic; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Removes the GameObject from the list.")] - [Shared.Utility.Category("Lists")] - public class RemoveGameObjectFromList : TargetGameObjectAction - { - [Tooltip("The list of possible GameObjects.")] - [RequireShared] [SerializeField] protected SharedVariable> m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - return m_StoreResult.Value.Remove(m_ResolvedGameObject) ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromList.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromList.cs.meta deleted file mode 100644 index a36532fb..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/RemoveGameObjectFromList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 89e178d0be1b41b4b933d144dc32aef1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromArray.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromArray.cs deleted file mode 100644 index 4324a436..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromArray.cs +++ /dev/null @@ -1,39 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Selects the GameObject from the array.")] - [Shared.Utility.Category("Lists")] - public class SelectGameObjectFromArray : Action - { - [Tooltip("The list of possible GameObjects.")] - [SerializeField] protected SharedVariable m_GameObjects; - [Tooltip("The index of the GameObject that should be selected.")] - [SerializeField] protected SharedVariable m_ElementIndex; - [Tooltip("The selected GameObject.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (m_GameObjects.Value == null || m_ElementIndex.Value < 0 || m_ElementIndex.Value > m_GameObjects.Value.Length) { - return TaskStatus.Failure; - } - - m_StoreResult.Value = m_GameObjects.Value[m_ElementIndex.Value]; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromArray.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromArray.cs.meta deleted file mode 100644 index 2126f830..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromArray.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d082de8064bdd7c4dada3c5a48e46fef -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromList.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromList.cs deleted file mode 100644 index 7fedc0c7..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromList.cs +++ /dev/null @@ -1,40 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using System.Collections.Generic; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Selects the GameObject from the list.")] - [Shared.Utility.Category("Lists")] - public class SelectGameObjectFromList : Action - { - [Tooltip("The list of possible GameObjects.")] - [SerializeField] protected SharedVariable> m_GameObjects; - [Tooltip("The index of the GameObject that should be selected.")] - [SerializeField] protected SharedVariable m_ElementIndex; - [Tooltip("The selected GameObject.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (m_GameObjects.Value == null || m_ElementIndex.Value < 0 || m_ElementIndex.Value > m_GameObjects.Value.Count) { - return TaskStatus.Failure; - } - - m_StoreResult.Value = m_GameObjects.Value[m_ElementIndex.Value]; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromList.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromList.cs.meta deleted file mode 100644 index 9646ef77..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/IList/SelectGameObjectFromList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e0dab44acdb589c4a8d2966c9ddc73a0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Idle.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Idle.cs deleted file mode 100644 index e501392c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Idle.cs +++ /dev/null @@ -1,96 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Unity.Entities; - using Unity.Burst; - using UnityEngine; - - /// - /// A node representation of the idle task. - /// - [NodeIcon("fc4d1b83384913b4abfbd8455db6df5b", "79a6985a753bb244fb5b32dc0f26addb")] - [Opsive.Shared.Utility.Description("Returns a TaskStatus of running. The task will only stop when interrupted or a conditional abort is triggered.")] - public class Idle : ECSActionTask - { - /// - /// The type of tag that should be enabled when the task is running. - /// - public override ComponentType Flag { get => typeof(IdleFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override IdleComponent GetBufferElement() - { - return new IdleComponent() { - Index = RuntimeIndex - }; - } - } - - /// - /// The DOTS data structure for the Idle class. - /// - public struct IdleComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - } - - /// - /// A DOTS tag indicating when a Idle node is active. - /// - public struct IdleFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the Idle logic. - /// - [DisableAutoCreation] - public partial struct IdleTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAll().Build(); - state.Dependency = new IdleJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct IdleJob : IJobEntity - { - /// - /// Executes the idle logic. - /// - /// An array of TaskComponents. - /// An array of IdleComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer taskComponents, ref DynamicBuffer idleComponents) - { - for (int i = 0; i < idleComponents.Length; ++i) { - var idleComponent = idleComponents[i]; - var taskComponent = taskComponents[idleComponent.Index]; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[idleComponent.Index] = taskComponent; - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Idle.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Idle.cs.meta deleted file mode 100644 index 4b8f4a03..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Idle.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3cbbfc0d48db475498ad454651507929 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Log.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Log.cs deleted file mode 100644 index 5a969871..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Log.cs +++ /dev/null @@ -1,34 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - /// - /// Logs the specified string. - /// - [NodeIcon("c97bee71424b3e247a161d1279643506", "138439e3588de5d449b7949d68d32ad8")] - [Opsive.Shared.Utility.Description("A simple task which will output the specified text and return success. It can be used for debugging.")] - public class Log : Action - { - [Tooltip("The string that should be outputted to the console.")] - [SerializeField] protected SharedVariable m_Text; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - Debug.Log(m_Text.Value); - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Log.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Log.cs.meta deleted file mode 100644 index 3e13be79..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Log.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 74a01e8c621648b44bb6cf0cff363e59 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/LogValue.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/LogValue.cs deleted file mode 100644 index 74f9d33d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/LogValue.cs +++ /dev/null @@ -1,38 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - /// - /// Logs the specified value. - /// - [NodeIcon("c97bee71424b3e247a161d1279643506", "138439e3588de5d449b7949d68d32ad8")] - public class LogValue : Action - { - [Tooltip("The value that should be outputted to the console.")] - [RequireShared] [SerializeField] protected SharedVariable m_Value; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (m_Value == null || m_Value.Scope == SharedVariable.SharingScope.Empty) { - Debug.LogWarning("Warning: The LogValue.Value variable must be set."); - return TaskStatus.Failure; - } - - Debug.Log(m_Value.GetValue()); - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/LogValue.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/LogValue.cs.meta deleted file mode 100644 index e3c49bd3..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/LogValue.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0e6b3f8ede31f634ea1aa5727a7df673 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math.meta deleted file mode 100644 index 72802627..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7177abfd9732b2d45aec5e96e4415d68 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolFlip.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolFlip.cs deleted file mode 100644 index 26acbdd1..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolFlip.cs +++ /dev/null @@ -1,31 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Flips the value of the boolean.")] - [Shared.Utility.Category("Math")] - public class BoolFlip : Action - { - [Tooltip("The bool that should be flipped.")] - [SerializeField] protected SharedVariable m_Bool; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_Bool.Value = !m_Bool.Value; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolFlip.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolFlip.cs.meta deleted file mode 100644 index e0dfedc1..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolFlip.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a6654554de66a1340bff69fd22ffcacf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolOperator.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolOperator.cs deleted file mode 100644 index 1ce972a4..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolOperator.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Performs a math operation on the two booleans.")] - [Shared.Utility.Category("Math")] - public class BoolOperator : Action - { - /// - /// Specifies the type of bool operation that should be performed. - /// - protected enum Operation - { - AND, // Returns the AND between two booleans. - OR, // Returns the OR between two booleans. - NAND, // Returns the NAND between two booleans. - XOR, // Returns the XOR between two booleans. - } - - [Tooltip("The operation to perform.")] - [SerializeField] protected SharedVariable m_Operation; - [Tooltip("The first boolean.")] - [SerializeField] protected SharedVariable m_Bool1; - [Tooltip("The second boolean.")] - [SerializeField] protected SharedVariable m_Bool2; - [Tooltip("The variable to store the result.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - switch (m_Operation.Value) { - case Operation.AND: - m_StoreResult.Value = m_Bool1.Value && m_Bool2.Value; - break; - case Operation.OR: - m_StoreResult.Value = m_Bool1.Value || m_Bool2.Value; - break; - case Operation.NAND: - m_StoreResult.Value = !(m_Bool1.Value && m_Bool2.Value); - break; - case Operation.XOR: - m_StoreResult.Value = (m_Bool1.Value ^ m_Bool2.Value); - break; - } - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolOperator.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolOperator.cs.meta deleted file mode 100644 index 3f2fd934..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/BoolOperator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bf243997f53145143915ba48268817b4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/FloatOperator.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/FloatOperator.cs deleted file mode 100644 index c57f03ba..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/FloatOperator.cs +++ /dev/null @@ -1,73 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Performs a math operation on the two floats.")] - [Shared.Utility.Category("Math")] - public class FloatOperator : Action - { - /// - /// Specifies the type of float operation that should be performed. - /// - protected enum Operation - { - Add, // Returns the addition between two floats. - Subtract, // Returns the division between two floats. - Multiply, // Returns the multiplication between two floats. - Divide, // Returns the division between two floats. - Modulo, // Returns the modulo between two floats. - Min, // Returns the minimum of two floats. - Max, // Returns the maximum of two floats. - } - - [Tooltip("The operation to perform.")] - [SerializeField] protected SharedVariable m_Operation; - [Tooltip("The first float.")] - [SerializeField] protected SharedVariable m_Float1; - [Tooltip("The second float.")] - [SerializeField] protected SharedVariable m_Float2; - [Tooltip("The variable to store the result.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - switch (m_Operation.Value) { - case Operation.Add: - m_StoreResult.Value = m_Float1.Value + m_Float2.Value; - break; - case Operation.Subtract: - m_StoreResult.Value = m_Float1.Value - m_Float2.Value; - break; - case Operation.Multiply: - m_StoreResult.Value = m_Float1.Value * m_Float2.Value; - break; - case Operation.Divide: - m_StoreResult.Value = m_Float1.Value / m_Float2.Value; - break; - case Operation.Modulo: - m_StoreResult.Value = m_Float1.Value % m_Float2.Value; - break; - case Operation.Min: - m_StoreResult.Value = Mathf.Min(m_Float1.Value, m_Float2.Value); - break; - case Operation.Max: - m_StoreResult.Value = Mathf.Max(m_Float1.Value, m_Float2.Value); - break; - } - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/FloatOperator.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/FloatOperator.cs.meta deleted file mode 100644 index 244aa0de..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/FloatOperator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fd85a074520c85b4aac9a2e02a37fe47 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/IntOperator.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/IntOperator.cs deleted file mode 100644 index 0ddfc8f8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/IntOperator.cs +++ /dev/null @@ -1,73 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Performs a math operation on the two integers.")] - [Shared.Utility.Category("Math")] - public class IntOperator : Action - { - /// - /// Specifies the type of int operation that should be performed. - /// - protected enum Operation - { - Add, // Returns the addition between two integers. - Subtract, // Returns the division between two integers. - Multiply, // Returns the multiplication between two integers. - Divide, // Returns the division between two integers. - Modulo, // Returns the modulo between two integers. - Min, // Returns the minimum of two integers. - Max, // Returns the maximum of two integers. - } - - [Tooltip("The operation to perform.")] - [SerializeField] protected SharedVariable m_Operation; - [Tooltip("The first integer.")] - [SerializeField] protected SharedVariable m_Integer1; - [Tooltip("The second integer.")] - [SerializeField] protected SharedVariable m_Integer2; - [Tooltip("The variable to store the result.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - switch (m_Operation.Value) { - case Operation.Add: - m_StoreResult.Value = m_Integer1.Value + m_Integer2.Value; - break; - case Operation.Subtract: - m_StoreResult.Value = m_Integer1.Value - m_Integer2.Value; - break; - case Operation.Multiply: - m_StoreResult.Value = m_Integer1.Value * m_Integer2.Value; - break; - case Operation.Divide: - m_StoreResult.Value = m_Integer1.Value / m_Integer2.Value; - break; - case Operation.Modulo: - m_StoreResult.Value = m_Integer1.Value % m_Integer2.Value; - break; - case Operation.Min: - m_StoreResult.Value = Mathf.Min(m_Integer1.Value, m_Integer2.Value); - break; - case Operation.Max: - m_StoreResult.Value = Mathf.Max(m_Integer1.Value, m_Integer2.Value); - break; - } - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/IntOperator.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/IntOperator.cs.meta deleted file mode 100644 index 25b23e9e..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/IntOperator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 77d11b9520f296b43a19d4a987844d73 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomBool.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomBool.cs deleted file mode 100644 index b74c7f35..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomBool.cs +++ /dev/null @@ -1,45 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Tasks.Actions.Math -{ - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Tooltip("Returns a random bool value.")] - [Shared.Utility.Category("Math")] - public class RandomBool : Action - { - [Tooltip("The stored random bool value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - [Tooltip("The seed of the random number generator. Set to 0 to disable.")] - [SerializeField] protected int m_Seed; - - /// - /// Callback when the behavior tree is initialized. - /// - public override void OnAwake() - { - if (m_Seed != 0) { - Random.InitState(m_Seed); - } - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = Random.value > 0.5; - return base.OnUpdate(); - } - - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomBool.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomBool.cs.meta deleted file mode 100644 index e923b000..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomBool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e39f6d31610d07b4ca1c977ce86198bd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomFloat.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomFloat.cs deleted file mode 100644 index 5b590959..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomFloat.cs +++ /dev/null @@ -1,49 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Tasks.Actions.Math -{ - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Tooltip("Returns a random float between the specified values (inclusive).")] - [Shared.Utility.Category("Math")] - public class RandomFloat : Action - { - [Tooltip("The minimum float value (inclusive).")] - [SerializeField] protected SharedVariable m_MinimumFloat; - [Tooltip("The maximum float value (inclusive).")] - [SerializeField] protected SharedVariable m_MaximumFloat; - [Tooltip("The stored random float value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - [Tooltip("The seed of the random number generator. Set to 0 to disable.")] - [SerializeField] protected int m_Seed; - - /// - /// Callback when the behavior tree is initialized. - /// - public override void OnAwake() - { - if (m_Seed != 0) { - Random.InitState(m_Seed); - } - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = Random.Range(m_MinimumFloat.Value, m_MaximumFloat.Value); - return base.OnUpdate(); - } - - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomFloat.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomFloat.cs.meta deleted file mode 100644 index a6d1b20f..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomFloat.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e4cd0328bf01f2a46a89268dcaf0cd26 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomInteger.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomInteger.cs deleted file mode 100644 index 1d3bc24d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomInteger.cs +++ /dev/null @@ -1,49 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Tasks.Actions.Math -{ - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Tooltip("Returns a random integer between the specified values (inclusive).")] - [Shared.Utility.Category("Math")] - public class RandomInteger : Action - { - [Tooltip("The minimum integer value (inclusive).")] - [SerializeField] protected SharedVariable m_MinimumInteger; - [Tooltip("The maximum integer value (inclusive).")] - [SerializeField] protected SharedVariable m_MaximumInteger; - [Tooltip("The stored random integer value.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - [Tooltip("The seed of the random number generator. Set to 0 to disable.")] - [SerializeField] protected int m_Seed; - - /// - /// Callback when the behavior tree is initialized. - /// - public override void OnAwake() - { - if (m_Seed != 0) { - Random.InitState(m_Seed); - } - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = Random.Range(m_MinimumInteger.Value, m_MaximumInteger.Value); - return base.OnUpdate(); - } - - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomInteger.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomInteger.cs.meta deleted file mode 100644 index 4fdfd7c1..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/RandomInteger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bf8b675bf82b06f44a19056eedc9e3f6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetBool.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetBool.cs deleted file mode 100644 index b1d351d8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetBool.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Set the boolean value.")] - [Shared.Utility.Category("Math")] - public class SetBool : Action - { - [Tooltip("The bool value to set.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetBool.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetBool.cs.meta deleted file mode 100644 index 8aa67081..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetBool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 77b177a61d9c7c94889fe58326045014 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetFloat.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetFloat.cs deleted file mode 100644 index 3d24d1d0..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetFloat.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Set the float value.")] - [Shared.Utility.Category("Math")] - public class SetFloat : Action - { - [Tooltip("The float value to set.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetFloat.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetFloat.cs.meta deleted file mode 100644 index ff8dbc3a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetFloat.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7114039f3b7a3ff439a901637ba04235 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetInt.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetInt.cs deleted file mode 100644 index 5fd97f69..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetInt.cs +++ /dev/null @@ -1,32 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Math -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Set the integer value.")] - [Shared.Utility.Category("Math")] - public class SetInt : Action - { - [Tooltip("The int value to set.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetInt.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetInt.cs.meta deleted file mode 100644 index c0b7ae94..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetInt.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eed961f4064f9024f8e51b3ddb69020a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetString.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetString.cs deleted file mode 100644 index afa3bae5..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetString.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Set the string value.")] - [Shared.Utility.Category("Math")] - public class SetString : Action - { - [Tooltip("The string value to set.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetString.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetString.cs.meta deleted file mode 100644 index c7a1fdb1..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetString.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 450ec74688a332e42a42173708a621c1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector2.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector2.cs deleted file mode 100644 index cf92be89..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector2.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Set the Vector2 value.")] - [Shared.Utility.Category("Math")] - public class SetVector2 : Action - { - [Tooltip("The Vector2 value to set.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector2.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector2.cs.meta deleted file mode 100644 index 05fe7ecb..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector2.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1507af45b59e2d642a8372f952ef5bec -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector3.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector3.cs deleted file mode 100644 index 306721c4..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector3.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Set the Vector3 value.")] - [Shared.Utility.Category("Math")] - public class SetVector3 : Action - { - [Tooltip("The Vector3 value to set.")] - [SerializeField] protected SharedVariable m_Value; - [Tooltip("The variable that should be set.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - m_StoreResult.Value = m_Value.Value; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector3.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector3.cs.meta deleted file mode 100644 index 8e67c428..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Math/SetVector3.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8fd35c62b935e674da0ed3b7d450a049 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/PerformInterruption.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/PerformInterruption.cs deleted file mode 100644 index d321927d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/PerformInterruption.cs +++ /dev/null @@ -1,160 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime; - using Unity.Entities; - using Unity.Burst; - using UnityEngine; - using Unity.Collections; - - [NodeIcon("7c0aba0d8377aac48966d8e3f817a2a8", "90105f40f82a30e45b08d150c1928950")] - [Opsive.Shared.Utility.Description("Performs the actual interruption. This will immediately stop the specified tasks from running and will return success or failure depending on the value of interrupt success.")] - public class PerformInterruption : ECSActionTask - { - [Tooltip("The task that should be interrupted.")] - [SerializeField] ILogicNode[] m_InterruptTasks; - [Tooltip("Should the interrupted task return success?")] - [SerializeField] bool m_InterruptSuccess; - - /// - /// The type of tag that should be enabled when the task is running. - /// - public override ComponentType Flag { get => typeof(PerformInterruptionFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override PerformInterruptionComponent GetBufferElement() - { - if (m_InterruptTasks == null || m_InterruptTasks.Length == 0) { - UnityEngine.Debug.LogError("Error: At least one interrupt task must be specified."); - return new PerformInterruptionComponent(); - } - - var indicies = new ushort[m_InterruptTasks.Length]; - var nullTaskCount = 0; - for (int i = 0; i < m_InterruptTasks.Length; ++i) { - if (m_InterruptTasks[i] == null) { - nullTaskCount++; - continue; - } - indicies[i - nullTaskCount] = m_InterruptTasks[i].Index; - } - if (nullTaskCount > 0) { - System.Array.Resize(ref indicies, indicies.Length - nullTaskCount); - } - - var builder = new BlobBuilder(Allocator.Temp); - ref var root = ref builder.ConstructRoot(); - var indicesArray = builder.Allocate(ref root.Indicies, indicies.Length); - for (int i = 0; i < indicies.Length; i++) { - indicesArray[i] = indicies[i]; - } - var blobAsset = builder.CreateBlobAssetReference(Allocator.Persistent); - builder.Dispose(); - - return new PerformInterruptionComponent() { - Index = RuntimeIndex, - InterruptIndicies = blobAsset, - InterruptSuccess = m_InterruptSuccess - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - var index = base.AddBufferElement(world, entity, gameObject); - ComponentUtility.AddInterruptComponents(world.EntityManager, entity); - return index; - } - } - - /// - /// The DOTS data structure for the PerformInterruption class. - /// - public struct PerformInterruptionComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - [SerializeField] public ushort Index; - [Tooltip("The indicies of the tasks that should be interrupted.")] - [SerializeField] public BlobAssetReference InterruptIndicies; - [Tooltip("Should the interrupted tasks return success?")] - [SerializeField] public bool InterruptSuccess; - } - - /// - /// A DOTS flag indicating when a PerformInterruption node is active. - /// - public struct PerformInterruptionFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the PerformInterruption logic. - /// - [DisableAutoCreation] - public partial struct PerformInterruptionTaskSystem : ISystem - { - /// - /// Updates the logic. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - foreach (var (branchComponents, taskComponents, performInterruptionComponents, entity) in - SystemAPI.Query, DynamicBuffer, DynamicBuffer>().WithAll().WithEntityAccess()) { - for (int i = 0; i < performInterruptionComponents.Length; ++i) { - var performInterruptionComponent = performInterruptionComponents[i]; - var taskComponent = taskComponents[performInterruptionComponent.Index]; - - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Success; - var taskComponentsBuffer = taskComponents; - taskComponentsBuffer[taskComponent.Index] = taskComponent; - - var branchComponentsBuffer = branchComponents; - for (int j = 0; j < performInterruptionComponent.InterruptIndicies.Value.Indicies.Length; ++j) { - var interruptTaskComponent = taskComponents[performInterruptionComponent.InterruptIndicies.Value.Indicies[j]]; - var interruptBranchComponent = branchComponents[interruptTaskComponent.BranchIndex]; - interruptBranchComponent.InterruptType = performInterruptionComponent.InterruptSuccess ? InterruptType.ImmediateSuccess : InterruptType.ImmediateFailure; - interruptBranchComponent.InterruptIndex = interruptTaskComponent.Index; - branchComponentsBuffer[interruptTaskComponent.BranchIndex] = interruptBranchComponent; - } - - state.EntityManager.SetComponentEnabled(entity, true); - } - } - } - } - - /// - /// The task has been destroyed. - /// - /// The current state of the system. - private void OnDestroy(ref SystemState state) - { - foreach (var performInterruptionComponents in SystemAPI.Query>()) { - for (int i = 0; i < performInterruptionComponents.Length; ++i) { - var performInterruptionComponent = performInterruptionComponents[i]; - if (performInterruptionComponent.InterruptIndicies.IsCreated) { - performInterruptionComponent.InterruptIndicies.Dispose(); - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/PerformInterruption.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/PerformInterruption.cs.meta deleted file mode 100644 index 1791c3fa..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/PerformInterruption.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9407f1f7d7a4efc43928e2885fbd047d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/RestartBehaviorTree.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/RestartBehaviorTree.cs deleted file mode 100644 index b8fc8dc3..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/RestartBehaviorTree.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - using System.Collections; - using UnityEngine; - - [NodeIcon("e0a8f1df788b6274a9a24003859dfa7e")] - [Opsive.Shared.Utility.Description("Restarts the specified behavior tree.")] - public class RestartBehaviorTree : TargetBehaviorTreeAction - { - private TaskStatus m_Status; - - /// - /// The task has started. - /// - public override void OnStart() - { - m_Status = TaskStatus.Queued; - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - // The coroutine has already been started if the status is not queued. - if (m_Status != TaskStatus.Queued) { - return m_Status; - } - - if (m_ResolvedBehaviorTree == null) { - return TaskStatus.Failure; - } - - m_Status = TaskStatus.Running; - StartCoroutine(RestartBehavior()); - return m_Status; - } - - /// - /// Restarts the behavior tree using a coroutine to allow structural changes. - /// - private IEnumerator RestartBehavior() - { - yield return new WaitForEndOfFrame(); - - m_Status = m_ResolvedBehaviorTree.RestartBehavior() ? TaskStatus.Success : TaskStatus.Failure; - } - - - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/RestartBehaviorTree.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/RestartBehaviorTree.cs.meta deleted file mode 100644 index 8f5b5210..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/RestartBehaviorTree.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1240560819407764d95369a091d6f5e9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ReturnStatus.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ReturnStatus.cs deleted file mode 100644 index bcb13a6d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ReturnStatus.cs +++ /dev/null @@ -1,121 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Unity.Entities; - using Unity.Burst; - using UnityEngine; - using System; - - /// - /// A node representation of the return status task. - /// - [Opsive.Shared.Utility.Description("The return status task will immediately return sucess or failure.")] - public class ReturnStatus : ECSActionTask, ICloneable - { - [Tooltip("Should a success status be returned? If false then failure will be returned.")] - [SerializeField] bool m_Success; - - public bool Success { get => m_Success; set => m_Success = value; } - - /// - /// The type of tag that should be enabled when the task is running. - /// - public override ComponentType Flag { get => typeof(ReturnStatusFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override ReturnStatusComponent GetBufferElement() - { - return new ReturnStatusComponent() { - Index = RuntimeIndex, - Success = m_Success - }; - } - - /// - /// Creates a deep clone of the component. - /// - /// A deep clone of the component. - public object Clone() - { - var clone = Activator.CreateInstance(); - clone.Index = Index; - clone.ParentIndex = ParentIndex; - clone.SiblingIndex = SiblingIndex; - clone.Success = Success; - return clone; - } - } - - /// - /// The DOTS data structure for the ReturnStatus class. - /// - public struct ReturnStatusComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - [SerializeField] ushort m_Index; - [Tooltip("Should a success status be returned? If false then failure will be returned.")] - [SerializeField] bool m_Success; - public ushort Index { get => m_Index; set => m_Index = value; } - public bool Success { get => m_Success; set => m_Success = value; } - } - - /// - /// A DOTS tag indicating when a ReturnStatus node is active. - /// - public struct ReturnStatusFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the ReturnStatus logic. - /// - [DisableAutoCreation] - public partial struct ReturnStatusTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new ReturnStatusJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct ReturnStatusJob : IJobEntity - { - /// - /// Executes the return status logic. - /// - /// An array of TaskComponents. - /// An array of ReturnStatusComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer taskComponents, ref DynamicBuffer returnStatusComponents) - { - for (int i = 0; i < returnStatusComponents.Length; ++i) { - var returnStatusComponent = returnStatusComponents[i]; - var taskComponent = taskComponents[returnStatusComponent.Index]; - if (taskComponent.Status != TaskStatus.Queued) { - continue; - } - taskComponent.Status = returnStatusComponent.Success ? TaskStatus.Success : TaskStatus.Failure; - taskComponents[returnStatusComponent.Index] = taskComponent; - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ReturnStatus.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ReturnStatus.cs.meta deleted file mode 100644 index 47d1b8de..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/ReturnStatus.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 837791748c4f57c4293429e8e94fd32c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SendEvent.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SendEvent.cs deleted file mode 100644 index c79af299..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SendEvent.cs +++ /dev/null @@ -1,81 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Events; - using UnityEngine; - - /// - /// Executes the specified event. - /// - [NodeIcon("bde76446ddfbd234488e8d591bc75e2f", "6d03b96c0f79bee4ab2e14fc82aa0031")] - [Opsive.Shared.Utility.Description("Sends an event to the behavior tree, returns success after sending the event.")] - public class SendEvent : TargetBehaviorTreeAction - { - [Tooltip("The name of the event.")] - [SerializeField] protected SharedVariable m_EventName; - [Tooltip("Is the event a global event?")] - [SerializeField] protected SharedVariable m_GlobalEvent; - [Tooltip("Optionally specify a first argument to send.")] - [RequireShared] [SerializeField] protected SharedVariable m_Argument1; - [Tooltip("Optionally specify a second argument to send.")] - [RequireShared] [SerializeField] protected SharedVariable m_Argument2; - [Tooltip("Optionally specify a third argument to send.")] - [RequireShared] [SerializeField] protected SharedVariable m_Argument3; - - /// - /// Executes the event. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (m_ResolvedBehaviorTree == null) { - return TaskStatus.Failure; - } - - if (string.IsNullOrEmpty(m_EventName.Value)) { - Debug.LogError("Error: Unable to send event. The event name is empty."); - return TaskStatus.Failure; - } - - if (m_Argument1 == null || !m_Argument1.IsShared) { - if (m_GlobalEvent.Value) { - EventHandler.ExecuteEvent(m_EventName.Value); - } else { - EventHandler.ExecuteEvent(m_ResolvedBehaviorTree, m_EventName.Value); - } - } else { - if (m_Argument2 == null || !m_Argument2.IsShared) { - if (m_GlobalEvent.Value) { - EventHandler.ExecuteEvent(m_EventName.Value, m_Argument1.GetValue()); - } else { - EventHandler.ExecuteEvent(m_ResolvedBehaviorTree, m_EventName.Value, m_Argument1.GetValue()); - } - } else { - if (m_Argument3 == null || !m_Argument3.IsShared) { - if (m_GlobalEvent.Value) { - EventHandler.ExecuteEvent(m_EventName.Value, m_Argument1.GetValue(), m_Argument2.GetValue()); - } else { - EventHandler.ExecuteEvent(m_ResolvedBehaviorTree, m_EventName.Value, m_Argument1.GetValue(), m_Argument2.GetValue()); - } - } else { - if (m_GlobalEvent.Value) { - EventHandler.ExecuteEvent(m_EventName.Value, m_Argument1.GetValue(), m_Argument2.GetValue(), m_Argument3.GetValue()); - } else { - EventHandler.ExecuteEvent(m_ResolvedBehaviorTree, m_EventName.Value, m_Argument1.GetValue(), m_Argument2.GetValue(), m_Argument3.GetValue()); - } - } - } - } - - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SendEvent.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SendEvent.cs.meta deleted file mode 100644 index d9b59482..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SendEvent.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6af31db67c14aba458ffd11cd0b671aa -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SetSubtree.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SetSubtree.cs deleted file mode 100644 index 99f3e8cd..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SetSubtree.cs +++ /dev/null @@ -1,68 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - using System.Collections; - using UnityEngine; - - [NodeIcon("e0a8f1df788b6274a9a24003859dfa7e")] - [Opsive.Shared.Utility.Description("Sets the specified subtree.")] - public class SetSubtree : TargetBehaviorTreeAction - { - [Tooltip("The subtree that should be set.")] - [SerializeField] protected Subtree m_Subtree; - [Tooltip("Should the behavior tree be started after the subtree is set?")] - [SerializeField] protected bool m_StartBehavior = true; - - private TaskStatus m_Status; - - /// - /// The task has started. - /// - public override void OnStart() - { - m_Status = TaskStatus.Queued; - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - // The coroutine has already been started if the status is not queued. - if (m_Status != TaskStatus.Queued) { - return m_Status; - } - - if (m_ResolvedBehaviorTree == null) { - return TaskStatus.Failure; - } - - m_Status = TaskStatus.Running; - StartCoroutine(DoSetSubtree()); - return m_Status; - } - - /// - /// Sets the subtree using a coroutine to allow structural changes. - /// - private IEnumerator DoSetSubtree() - { - yield return new WaitForEndOfFrame(); - - m_ResolvedBehaviorTree.Subgraph = m_Subtree; - m_Status = TaskStatus.Success; - - if (m_StartBehavior) { - m_ResolvedBehaviorTree.StartBehavior(); - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SetSubtree.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SetSubtree.cs.meta deleted file mode 100644 index 0f259231..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SetSubtree.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 881cf86206c0dfa458723d1cde9e0e13 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StackedAction.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StackedAction.cs deleted file mode 100644 index 6427a069..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StackedAction.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - - /// - /// The StackedAction task allows for multiple actions to be added to the same node. - /// - [NodeIcon("dacf20a036b1f5e41886d84ac4a47779", "2df1cb3efc025214cbab4df573bb3515")] - [Opsive.Shared.Utility.Description("Allows multiple action tasks to be added to a single node.")] - public class StackedAction : StackedTask, IAction - { - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StackedAction.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StackedAction.cs.meta deleted file mode 100644 index 558ca6d4..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StackedAction.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4342d213dec4aa5458c9e9969ef98fc7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StartBehaviorTree.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StartBehaviorTree.cs deleted file mode 100644 index 9fb97929..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StartBehaviorTree.cs +++ /dev/null @@ -1,58 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - using System.Collections; - using UnityEngine; - - [NodeIcon("e0a8f1df788b6274a9a24003859dfa7e")] - [Opsive.Shared.Utility.Description("Starts the specified behavior tree.")] - public class StartBehaviorTree : TargetBehaviorTreeAction - { - private TaskStatus m_Status; - - /// - /// The task has started. - /// - public override void OnStart() - { - m_Status = TaskStatus.Queued; - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - // The coroutine has already been started if the status is not queued. - if (m_Status != TaskStatus.Queued) { - return m_Status; - } - - if (m_ResolvedBehaviorTree == null || m_ResolvedBehaviorTree.IsActive()) { - return TaskStatus.Failure; - } - - m_Status = TaskStatus.Running; - StartCoroutine(StartBehavior()); - return m_Status; - } - - /// - /// Starts the behavior tree using a coroutine to allow structural changes. - /// - private IEnumerator StartBehavior() - { - yield return new WaitForEndOfFrame(); - - m_Status = m_ResolvedBehaviorTree.StartBehavior() ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StartBehaviorTree.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StartBehaviorTree.cs.meta deleted file mode 100644 index a09c38a7..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StartBehaviorTree.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a308f84e10d3f9b4e89c16ea755e4120 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StopBehaviorTree.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StopBehaviorTree.cs deleted file mode 100644 index 635cf490..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StopBehaviorTree.cs +++ /dev/null @@ -1,32 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [NodeIcon("e0a8f1df788b6274a9a24003859dfa7e")] - [Opsive.Shared.Utility.Description("Stops the specified behavior tree.")] - public class StopBehaviorTree : TargetBehaviorTreeAction - { - [SerializeField] protected SharedVariable m_PauseBehaviorTree; - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - if (m_ResolvedBehaviorTree == null || !m_ResolvedBehaviorTree.IsActive()) { - return TaskStatus.Failure; - } - - return m_ResolvedBehaviorTree.StopBehavior(m_PauseBehaviorTree.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StopBehaviorTree.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StopBehaviorTree.cs.meta deleted file mode 100644 index 4620ec39..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/StopBehaviorTree.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ff712b458703ec440a858c41edeca111 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReference.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReference.cs deleted file mode 100644 index d985b381..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReference.cs +++ /dev/null @@ -1,50 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - /// - /// Allows for subtrees to be loaded at runtime into the tree. - /// - [NodeIcon("e0a8f1df788b6274a9a24003859dfa7e")] - [Opsive.Shared.Utility.Description("Loads the specified subtrees in at runtime.")] - public class SubtreeReference : ActionNode, ISubtreeReference - { - [Tooltip("The subtrees that should be loaded.")] - [SubtreeListAttribute] - [SerializeField] protected Subtree[] m_Subtrees; - [Tooltip("The variables that should override the subtree variables.")] - [SharedVariableOverridesListAttribute] - [SerializeField] protected SharedVariableOverride[] m_Variables; - - public virtual Subtree[] Subtrees { get { return m_Subtrees; } } - - /// - /// A list of mapped SharedVariables. These variables can override the subtree. - /// - public virtual SharedVariableOverride[] SharedVariableOverrides { get => m_Variables; set => m_Variables = value; } - - /// - /// Performs any runtime operations to evaluate the array of subtrees that should be returned. - /// - /// The component that the node is attached to. - public virtual void EvaluateSubtrees(IGraphComponent graphComponent) { } - - /// - /// If the task exists at runtime then the subtree didn't load. Return failure. - /// - /// The failure TaskStatus. - public override TaskStatus OnUpdate() - { - return TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReference.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReference.cs.meta deleted file mode 100644 index 903ee474..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReference.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 176873898443d5643badfdcaa50ddfdb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReferenceSelector.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReferenceSelector.cs deleted file mode 100644 index 0be69e8d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReferenceSelector.cs +++ /dev/null @@ -1,42 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.BehaviorDesigner.Runtime; - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - /// - /// Allows for subtrees to be loaded at runtime into the tree. - /// - [Opsive.Shared.Utility.Description("Selects a subtree based on the index value.")] - public class SubtreeReferenceSelector : SubtreeReference - { - [Tooltip("The index of the subtree that should be selected.")] - [SerializeField] protected SharedVariable m_Index; - - private Subtree[] m_Selection; - - public override Subtree[] Subtrees => m_Selection != null ? m_Selection : m_Subtrees; - - /// - /// Performs any runtime operations to evaluate the array of subtrees that should be returned. - /// - /// The component that the node is attached to. - public override void EvaluateSubtrees(IGraphComponent graphComponent) - { - if (m_Index.Value < 0 || m_Index.Value >= m_Subtrees.Length) { - return; - } - - m_Selection = new Subtree[] { m_Subtrees[m_Index.Value] }; - } - } -} - -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReferenceSelector.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReferenceSelector.cs.meta deleted file mode 100644 index f232d213..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/SubtreeReferenceSelector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 501228e2e706ea841a290cb3863f6f38 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetBehaviorTreeAction.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetBehaviorTreeAction.cs deleted file mode 100644 index 5eb72899..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetBehaviorTreeAction.cs +++ /dev/null @@ -1,71 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - /// - /// A TaskObject Action task which implements the shared TargetGameObject/TreeUserID objects. - /// - public abstract class TargetBehaviorTreeAction : Action - { - [Tooltip("The GameObject of the target behavior tree. If the value is null the current GameObject will be used.")] - [SerializeField] protected SharedVariable m_TargetGameObject; - [Tooltip("The index of the tree if there are multiple behavior trees on the same GameObject.")] - [SerializeField] protected SharedVariable m_TreeIndex; - - protected BehaviorTree m_ResolvedBehaviorTree; - - /// - /// Initializes the task. - /// - public override void OnAwake() - { - m_TargetGameObject.OnValueChange += InitializeTarget; - m_TreeIndex.OnValueChange += InitializeTarget; - - InitializeTarget(); - } - - /// - /// Initializes the target behavior tree. - /// - protected virtual void InitializeTarget() - { - if (m_TargetGameObject.Value == null) { - m_ResolvedBehaviorTree = m_BehaviorTree; - } else { - var behaviorTrees = m_TargetGameObject.Value.GetComponents(); - if (behaviorTrees.Length == 1) { - m_ResolvedBehaviorTree = behaviorTrees[0]; - } else if (behaviorTrees.Length > 1) { - for (int i = 0; i < behaviorTrees.Length; ++i) { - if (behaviorTrees[i].Index == m_TreeIndex.Value) { - m_ResolvedBehaviorTree = behaviorTrees[i]; - break; - } - } - // If the UserID can't be found then use the first behavior tree. - if (m_ResolvedBehaviorTree == null) { - m_ResolvedBehaviorTree = behaviorTrees[0]; - } - } - } - } - - /// - /// The behavior tree has been destroyed. - /// - public override void OnDestroy() - { - m_TargetGameObject.OnValueChange -= InitializeTarget; - m_TreeIndex.OnValueChange -= InitializeTarget; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetBehaviorTreeAction.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetBehaviorTreeAction.cs.meta deleted file mode 100644 index 2df2a2d3..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetBehaviorTreeAction.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ea8fab3de7105aa4497485f5934c06d9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetGameObjectAction.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetGameObjectAction.cs deleted file mode 100644 index 2e7cebe9..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetGameObjectAction.cs +++ /dev/null @@ -1,54 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - /// - /// A TaskObject Action task which returns the current GameObject if the target is null. - /// - public abstract class TargetGameObjectAction : Action - { - [Tooltip("The GameObject of the target behavior tree. If the value is null the current GameObject will be used.")] - [SerializeField] protected SharedVariable m_TargetGameObject; - - protected override GameObject gameObject => m_ResolvedGameObject; - protected override Transform transform => m_ResolvedTransform; - - protected GameObject m_ResolvedGameObject; - protected Transform m_ResolvedTransform; - - /// - /// Initializes the task. - /// - public override void OnAwake() - { - m_TargetGameObject.OnValueChange += InitializeTarget; - - InitializeTarget(); - } - - /// - /// Initializes the target GameObject. - /// - protected virtual void InitializeTarget() - { - m_ResolvedGameObject = (m_TargetGameObject.Value == null || m_TargetGameObject.Value.Equals(null)) ? m_GameObject : m_TargetGameObject.Value; - m_ResolvedTransform = m_ResolvedGameObject.transform; - } - - /// - /// The behavior tree has been destroyed. - /// - public override void OnDestroy() - { - m_TargetGameObject.OnValueChange -= InitializeTarget; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetGameObjectAction.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetGameObjectAction.cs.meta deleted file mode 100644 index 6fe0d18c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/TargetGameObjectAction.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3025700b92fd09d4d86b26d7213de9ab -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects.meta deleted file mode 100644 index 84018305..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1e88e229aee9deb4596b688718c14806 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetEnabled.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetEnabled.cs deleted file mode 100644 index a880bfdd..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetEnabled.cs +++ /dev/null @@ -1,36 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Enables or disables the specified MonoBehaviour.")] - [Shared.Utility.Category("Unity")] - public class SetEnabled : Action - { - [Tooltip("Should the MonoBehaviour be enabled?")] - [SerializeField] protected SharedVariable m_Enable; - [Tooltip("The MonoBehaviour that should be enabled or disabled.")] - [SerializeField] protected SharedVariable m_MonoBehaviour; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (m_MonoBehaviour.Value == null) { - return TaskStatus.Failure; - } - m_MonoBehaviour.Value.enabled = m_Enable.Value; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetEnabled.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetEnabled.cs.meta deleted file mode 100644 index 8b253963..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetEnabled.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8f30ae346f704e446942d6cdb1c4adfa -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetGameObject.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetGameObject.cs deleted file mode 100644 index dd3f5133..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetGameObject.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Set the GameObject value.")] - [Shared.Utility.Category("Unity")] - public class SetGameObject : TargetGameObjectAction - { - [Tooltip("The variable that should be set.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoreResult; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - InitializeTarget(); - - m_StoreResult.Value = m_ResolvedGameObject; - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetGameObject.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetGameObject.cs.meta deleted file mode 100644 index a6224034..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/SetGameObject.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: acfe874544935e64f80eeb34681141c1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/WaitForAnimatorState.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/WaitForAnimatorState.cs deleted file mode 100644 index c41308ea..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/WaitForAnimatorState.cs +++ /dev/null @@ -1,58 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions.UnityObjects -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Returns success as soon as the current Animator state ends.")] - [Shared.Utility.Category("Unity")] - public class WaitForAnimatorState : TargetGameObjectAction - { - [Tooltip("The layer to wait for the state on.")] - public SharedVariable m_Layer; - - private Animator m_Animator; - private int m_StateHash; - - /// - /// Initializes the default values. - /// - public override void OnAwake() - { - base.OnAwake(); - - m_Animator = gameObject.GetComponent(); - } - - /// - /// Caches the Animator state. - /// - public override void OnStart() - { - m_StateHash = (m_Animator.IsInTransition(m_Layer.Value) ? m_Animator.GetNextAnimatorStateInfo(m_Layer.Value) : m_Animator.GetCurrentAnimatorStateInfo(m_Layer.Value)).fullPathHash; - } - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - if (m_Animator.IsInTransition(m_Layer.Value)) { - return TaskStatus.Running; - } - var currentState = m_Animator.GetCurrentAnimatorStateInfo(m_Layer.Value).fullPathHash; - if (currentState != m_StateHash) { - return TaskStatus.Success; - } - return TaskStatus.Running; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/WaitForAnimatorState.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/WaitForAnimatorState.cs.meta deleted file mode 100644 index 0de38944..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/UnityObjects/WaitForAnimatorState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7f6c915175357ab449604315406c51bb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Wait.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Wait.cs deleted file mode 100644 index 1cf94607..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Wait.cs +++ /dev/null @@ -1,383 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Actions -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Utility; - using Unity.Entities; - using Unity.Burst; - using UnityEngine; - using System; - - [NodeIcon("b4b59e888607422409f1efa599af34ae", "e1cb9cb566a90fb4489bf31465b99747")] - [Opsive.Shared.Utility.Description("Wait a specified amount of time. The task will return running until the task is done waiting. It will return success after the wait time has elapsed.")] - public class Wait : ECSActionTask, ICloneable, IPausableTask, ISavableTask - { - [Tooltip("The amount of time to wait (in seconds).")] - [SerializeField] float m_Duration; - [Tooltip("Should the wait duration be randomized?")] - [SerializeField] bool m_RandomDuration; - [Tooltip("The seed of the random number generator. Set to 0 to use the entity index as the seed.")] - [SerializeField] uint m_Seed; - [Tooltip("The wait duration range if random wait is enabled.")] - [SerializeField] RangeFloat m_RandomDurationRange; - - private ushort m_ComponentIndex; - - public float Duration { get => m_Duration; set => m_Duration = value; } - public bool RandomDuration { get => m_RandomDuration; set => m_RandomDuration = value; } - public uint Seed { get => m_Seed; set => m_Seed = value; } - public RangeFloat RandomDurationRange { get => m_RandomDurationRange; set => m_RandomDurationRange = value; } - - /// - /// Resets the task to its default values. - /// - public override void Reset() { m_Duration = m_RandomDurationRange.Min = m_RandomDurationRange.Max = 1; m_RandomDuration = false; m_Seed = 0; } - - /// - /// The type of tag that should be enabled when the task is running. - /// - public override ComponentType Flag { get => typeof(WaitFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override WaitComponent GetBufferElement() - { - return new WaitComponent() { - Index = RuntimeIndex, - Duration = m_Duration, - RandomDuration = m_RandomDuration, - RandomDurationRange = m_RandomDurationRange, - Seed = m_Seed, - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - m_ComponentIndex = (ushort)base.AddBufferElement(world, entity, gameObject); - return m_ComponentIndex; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.None; } - - /// - /// The task has been paused. - /// - /// The DOTS world. - /// The DOTS entity. - public void Pause(World world, Entity entity) - { - var waitComponents = world.EntityManager.GetBuffer(entity); - var waitComponent = waitComponents[m_ComponentIndex]; - waitComponent.PauseTime = Time.time; - var waitComponentBuffer = waitComponents; - waitComponentBuffer[m_ComponentIndex] = waitComponent; - } - - /// - /// The task has been resumed. - /// - /// The DOTS world. - /// The DOTS entity. - public void Resume(World world, Entity entity) - { - var waitComponents = world.EntityManager.GetBuffer(entity); - var waitComponent = waitComponents[m_ComponentIndex]; - waitComponent.StartTime += (Time.time - waitComponent.PauseTime); - waitComponent.PauseTime = 0; - var waitComponentBuffer = waitComponents; - waitComponentBuffer[m_ComponentIndex] = waitComponent; - } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public object Save(World world, Entity entity) - { - var waitComponents = world.EntityManager.GetBuffer(entity); - var waitComponent = waitComponents[m_ComponentIndex]; - - // Save the unique data. - return new object[] { waitComponent.WaitDuration, Time.time - waitComponent.StartTime }; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public void Load(object saveData, World world, Entity entity) - { - var waitComponents = world.EntityManager.GetBuffer(entity); - var waitComponent = waitComponents[m_ComponentIndex]; - - // saveData is the wait duration and the elapsed amount of time. - var data = (object[])saveData; - waitComponent.WaitDuration = (double)data[0]; - waitComponent.StartTime = Time.time - (double)data[1]; - waitComponents[m_ComponentIndex] = waitComponent; - } - - /// - /// Creates a deep clone of the component. - /// - /// A deep clone of the component. - public object Clone() - { - var clone = Activator.CreateInstance(); - clone.Index = Index; - clone.ParentIndex = ParentIndex; - clone.SiblingIndex = SiblingIndex; - clone.Duration = Duration; - clone.RandomDuration = RandomDuration; - clone.Seed = Seed; - clone.RandomDurationRange = RandomDurationRange; - return clone; - } - } - - /// - /// The DOTS data structure for the Wait struct. - /// - public struct WaitComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - [Tooltip("The amount of time the task should wait.")] - public float Duration; - [Tooltip("Should the wait duration be randomized?")] - public bool RandomDuration; - [Tooltip("The wait duration range if random wait is enabled.")] - public RangeFloat RandomDurationRange; - [Tooltip("The amount of time the task should wait.")] - public double WaitDuration; - [Tooltip("The real time the task started to wait.")] - public double StartTime; - [Tooltip("The seed of the random number generator.")] - public uint Seed; - [Tooltip("The random number generator for the task.")] - public Unity.Mathematics.Random RandomNumberGenerator; - [Tooltip("The time the task was paused.")] - public double PauseTime; - } - - /// - /// A DOTS tag indicating when a Wait node is active. - /// - public struct WaitFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the Wait logic. - /// - [DisableAutoCreation] - public partial struct WaitTaskSystem : ISystem - { - /// - /// Updates the logic. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new WaitJob() { ElapsedTime = SystemAPI.Time.ElapsedTime }.ScheduleParallel(query, state.Dependency); - } - - /// - /// Waits for the specified amount of time. - /// - [BurstCompile] - private partial struct WaitJob : IJobEntity - { - [Tooltip("The current ElapsedTime.")] - public double ElapsedTime; - - /// - /// Updates the logic. - /// - /// The entity. - /// An array of TaskComponents. - /// An array of WaitComponents. - [BurstCompile] - public void Execute(Entity entity, ref DynamicBuffer taskComponents, ref DynamicBuffer waitComponents) - { - for (int i = 0; i < waitComponents.Length; ++i) { - var waitComponent = waitComponents[i]; - var taskComponent = taskComponents[waitComponent.Index]; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - waitComponent.StartTime = ElapsedTime; - - if (waitComponent.RandomDuration) { - // Generate a new random number seed for each entity. - if (waitComponent.RandomNumberGenerator.state == 0) { - waitComponent.RandomNumberGenerator = Unity.Mathematics.Random.CreateFromIndex(waitComponent.Seed != 0 ? waitComponent.Seed : (uint)entity.Index); - } - - waitComponent.WaitDuration = waitComponent.RandomNumberGenerator.NextDouble(waitComponent.RandomDurationRange.Min, waitComponent.RandomDurationRange.Max); - } else { - waitComponent.WaitDuration = waitComponent.Duration; - } - - waitComponents[i] = waitComponent; - } - if (taskComponent.Status == TaskStatus.Running) { - if (waitComponent.StartTime + waitComponent.WaitDuration <= ElapsedTime) { - taskComponent.Status = TaskStatus.Success; - } - } - taskComponents[waitComponent.Index] = taskComponent; - } - } - } - } - - [NodeIcon("b4b59e888607422409f1efa599af34ae", "e1cb9cb566a90fb4489bf31465b99747")] - [Opsive.Shared.Utility.Description("Wait a specified amount of time. The task will return running until the task is done waiting. It will return success after the wait time has elapsed. Uses the GameObject workflow.")] - public class SharedWait : Action - { - [Tooltip("The amount of time to wait (in seconds).")] - [SerializeField] SharedVariable m_Duration = 1; - [Tooltip("The seed of the random number generator. Set to 0 to disable.")] - [SerializeField] int m_Seed; - [Tooltip("Should the wait duration be randomized?")] - [SerializeField] SharedVariable m_RandomDuration; - [Tooltip("The minimum wait duration if random wait is enabled.")] - [SerializeField] SharedVariable m_RandomDurationRange = new RangeFloat(1, 1); - [Tooltip("The maximum wait duration if random wait is enabled.")] - [SerializeField] SharedVariable m_RandomDurationMax = 1; - - public SharedVariable Duration { get => m_Duration; set => m_Duration = value; } - public int Seed { get => m_Seed; set => m_Seed = value; } - public SharedVariable RandomDuration { get => m_RandomDuration; set => m_RandomDuration = value; } - public SharedVariable RandomDurationRange { get => m_RandomDurationRange; set => m_RandomDurationRange = value; } - public SharedVariable RandomDurationMax { get => m_RandomDurationMax; set => m_RandomDurationMax = value; } - - private float m_WaitDuration; - private float m_StartTime; - private float m_PauseTime = -1; - - /// - /// Callback when the task is initialized. - /// - public override void OnAwake() - { - if (m_Seed != 0) { - UnityEngine.Random.InitState(m_Seed); - } - } - - /// - /// Callback when the task is started. - /// - public override void OnStart() - { - if (m_RandomDuration.Value) { - m_WaitDuration = UnityEngine.Random.Range(m_RandomDurationRange.Value.Min, m_RandomDurationRange.Value.Max); - } else { - m_WaitDuration = m_Duration.Value; - } - m_StartTime = Time.time; - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - return m_StartTime + m_WaitDuration <= Time.time ? TaskStatus.Success : TaskStatus.Running; - } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public override object Save(World world, Entity entity) - { - // Save the unique data. - return new object[] { m_WaitDuration, Time.time - m_StartTime }; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public override void Load(object saveData, World world, Entity entity) - { - // saveData is the wait duration and the elapsed amount of time. - var data = (object[])saveData; - m_WaitDuration = (float)data[0]; - m_StartTime = Time.time - (float)data[1]; - } - - /// - /// The behavior tree has been started. - /// - public override void OnBehaviorTreeStarted() - { - base.OnBehaviorTreeStarted(); - - if (m_PauseTime != -1) { - m_StartTime += (Time.time - m_PauseTime); - m_PauseTime = -1; - } - } - - /// - /// The behavior tree has been stopped or paused. - /// - /// True if the tree has been paused. - public override void OnBehaviorTreeStopped(bool paused) - { - base.OnBehaviorTreeStopped(paused); - - if (paused) { - m_PauseTime = Time.time; - } - } - - /// - /// Resets the variables. - /// - public override void Reset() - { - base.Reset(); - - m_Duration = 1; - m_RandomDuration = false; - m_Seed = 0; - m_RandomDurationRange = new RangeFloat(1, 1); - m_PauseTime = -1; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Wait.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Wait.cs.meta deleted file mode 100644 index bf52020e..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Actions/Wait.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c0e41c99613e54428dc9103bb7635dd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites.meta deleted file mode 100644 index 8ab82448..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 52b686992c2aafd4bb5214021e8b492b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/CompositeNode.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/CompositeNode.cs deleted file mode 100644 index 1726571f..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/CompositeNode.cs +++ /dev/null @@ -1,35 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Composites -{ - using Opsive.BehaviorDesigner.Runtime.Systems; - using Opsive.GraphDesigner.Runtime; - using UnityEngine; - - /// - /// A TaskObject implementation of the Composite task. - /// - [NodeIcon("3afb3814c40717440b175b6fde4e73c2", "7fb12c74939f50b41b1679eb8f9e79ab")] - public abstract class CompositeNode : Task, ITreeLogicNode, IParentNode, IComposite, ITaskObjectParentNode - { - [Tooltip("The index of the node.")] - [SerializeField] ushort m_Index; - [Tooltip("The parent index of the node. ushort.MaxValue indicates no parent.")] - [SerializeField] ushort m_ParentIndex; - [Tooltip("The sibling index of the node. ushort.MaxValue indicates no sibling.")] - [SerializeField] ushort m_SiblingIndex; - - public ushort Index { get => m_Index; set => m_Index = value; } - public ushort ParentIndex { get => m_ParentIndex; set => m_ParentIndex = value; } - public ushort SiblingIndex { get => m_SiblingIndex; set => m_SiblingIndex = value; } - public ushort RuntimeIndex { get; set; } - - public virtual int MaxChildCount { get => int.MaxValue; } - public virtual ushort NextChildIndex { get => (ushort)(RuntimeIndex + 1); } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/CompositeNode.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/CompositeNode.cs.meta deleted file mode 100644 index fc6cfd1c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/CompositeNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 03dee97f70b381e4bb7a230cca3e5f8f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Parallel.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Parallel.cs deleted file mode 100644 index 985b5d34..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Parallel.cs +++ /dev/null @@ -1,225 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Composites -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime; - using Unity.Burst; - using Unity.Collections; - using Unity.Entities; - using Unity.Jobs; - using UnityEngine; - - /// - /// A node representation of the parallel task. - /// - [NodeIcon("f612c025389b22640b1b6df88f4502e7", "8a4a401bcfb527a48a08351efaf92e14")] - [Opsive.Shared.Utility.Description("Similar to the sequence task, the parallel task will run each child task until a child task returns failure. " + - "The parallel task will run all of its children tasks simultaneously versus running each task one at a time. " + - "Like the sequence class, the parallel task will return success once all of its children tasks have return success. " + - "If one tasks returns failure the parallel task will end all of the child tasks and return failure.")] - public class Parallel : ECSCompositeTask, IParentNode, IParallelNode - { - public override ComponentType Flag { get => typeof(ParallelFlag); } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - var index = base.AddBufferElement(world, entity, gameObject); - ComponentUtility.AddInterruptComponents(world.EntityManager, entity); - return index; - } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override ParallelComponent GetBufferElement() - { - return new ParallelComponent() - { - Index = RuntimeIndex - }; - } - } - - /// - /// The DOTS data structure for the Parallel class. - /// - public struct ParallelComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - [SerializeField] ushort m_Index; - - public ushort Index { get => m_Index; set => m_Index = value; } - } - - /// - /// A DOTS tag indicating when a Parallel node is active. - /// - public struct ParallelFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the Parallel logic. - /// - [DisableAutoCreation] - public partial struct ParallelTaskSystem : ISystem - { - private EntityQuery m_Query; - private JobHandle m_Dependency; - - /// - /// Builds the query. - /// - /// THe current SystemState. - private void OnCreate(ref SystemState state) - { - m_Query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - } - - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - m_Dependency.Complete(); - - var ecb = SystemAPI.GetSingleton().CreateCommandBuffer(state.WorldUnmanaged); - state.Dependency = new ParallelJob() - { - EntityCommandBuffer = ecb.AsParallelWriter() - }.ScheduleParallel(m_Query, state.Dependency); - m_Dependency = state.Dependency; - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct ParallelJob : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - - /// - /// Executes the parallel logic. - /// - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of ParallelComponents. - /// An array of TaskComponents. - /// An array of BranchComponents. - [BurstCompile] - public void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, ref DynamicBuffer parallelComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer branchComponents) - { - for (int i = 0; i < parallelComponents.Length; ++i) { - var parallelComponent = parallelComponents[i]; - var taskComponent = taskComponents[parallelComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - - // Do not continue if there will be an interrupt or the branch cannot execute. - if (branchComponent.InterruptType != InterruptType.None || !branchComponent.CanExecute) { - continue; - } - - ushort childIndex; - TaskComponent childTaskComponent; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - childIndex = (ushort)(parallelComponent.Index + 1); - while (childIndex != ushort.MaxValue) { - childTaskComponent = taskComponents[childIndex]; - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[childIndex] = childTaskComponent; - - var childBranchComponent = branchComponents[childTaskComponent.BranchIndex]; - childBranchComponent.NextIndex = childTaskComponent.Index; - branchComponents[childTaskComponent.BranchIndex] = childBranchComponent; - - childIndex = taskComponents[childIndex].SiblingIndex; - } - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - var childrenFailure = false; - var childrenRunning = false; - childIndex = (ushort)(parallelComponent.Index + 1); - while (childIndex != ushort.MaxValue) { - childTaskComponent = taskComponents[childIndex]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - childrenRunning = true; - } else if (childTaskComponent.Status == TaskStatus.Failure) { - childrenFailure = true; - - var childBranchComponent = branchComponents[childTaskComponent.BranchIndex]; - childBranchComponent.NextIndex = ushort.MaxValue; - branchComponents[childTaskComponent.BranchIndex] = childBranchComponent; - break; - } else if (childTaskComponent.Status == TaskStatus.Success) { - var childBranchComponent = branchComponents[childTaskComponent.BranchIndex]; - if (childBranchComponent.ActiveIndex != ushort.MaxValue) { - childBranchComponent.NextIndex = ushort.MaxValue; - branchComponents[childTaskComponent.BranchIndex] = childBranchComponent; - } - } - childIndex = taskComponents[childIndex].SiblingIndex; - } - - // If a single child fails then all tasks should be stopped. - if (childrenFailure) { - var maxChildIndex = taskComponent.Index + TraversalUtility.GetChildCount(taskComponent.Index, ref taskComponents); - for (ushort j = (ushort)(taskComponent.Index + 1); j <= maxChildIndex; ++j) { - childTaskComponent = taskComponents[j]; - if (childTaskComponent.Status == TaskStatus.Running || childTaskComponent.Status == TaskStatus.Queued) { - childTaskComponent.Status = TaskStatus.Failure; - taskComponents[j] = childTaskComponent; - - branchComponent = branchComponents[childTaskComponent.BranchIndex]; - EntityCommandBuffer.SetComponentEnabled(entityIndex, entity, true); - if (branchComponent.ActiveIndex == childTaskComponent.Index) { - branchComponent.NextIndex = ushort.MaxValue; - branchComponents[childTaskComponent.BranchIndex] = branchComponent; - } - } - } - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - taskComponent.Status = TaskStatus.Failure; - taskComponents[taskComponent.Index] = taskComponent; - - continue; - } - - if (childrenRunning) { - continue; - } - - // No more children are running. Resume the parent task. - taskComponent.Status = TaskStatus.Success; - taskComponents[taskComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Parallel.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Parallel.cs.meta deleted file mode 100644 index 74fb69a8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Parallel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 121e856fe6b49d648a50fde8ee6923ed -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/ParallelSelector.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/ParallelSelector.cs deleted file mode 100644 index 94353543..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/ParallelSelector.cs +++ /dev/null @@ -1,219 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Composites -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime; - using Unity.Burst; - using Unity.Collections; - using Unity.Entities; - using Unity.Jobs; - using Unity.Mathematics; - using UnityEngine; - - /// - /// A node representation of the parallel selector task. - /// - [NodeIcon("d47aff1a00bcc6d4da8ca0df32ed8415", "108591b5d7a6bd94383d16a62cb3b4a7")] - [Opsive.Shared.Utility.Description("Similar to the selector task, the parallel selector task will return success as soon as a child task returns success. " + - "The parallel task will run all of its children tasks simultaneously versus running each task one at a time. " + - "If one tasks returns success the parallel selector task will end all of the child tasks and return success. " + - "If every child task returns failure then the parallel selector task will return failure.")] - public class ParallelSelector : ECSCompositeTask, IParentNode, IParallelNode - { - /// - /// The type of tag that should be enabled when the task is running. - /// - public override ComponentType Flag { get => typeof(ParallelSelectorFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override ParallelSelectorComponent GetBufferElement() - { - return new ParallelSelectorComponent() { - Index = RuntimeIndex, - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - var index = base.AddBufferElement(world, entity, gameObject); - ComponentUtility.AddInterruptComponents(world.EntityManager, entity); - return index; - } - } - - /// - /// The DOTS data structure for the ParallelSelector class. - /// - public struct ParallelSelectorComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - [SerializeField] ushort m_Index; - - public ushort Index { get => m_Index; set => m_Index = value; } - } - - /// - /// A DOTS tag indicating when a ParallelSelector node is active. - /// - public struct ParallelSelectorFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the ParallelSelector logic. - /// - [DisableAutoCreation] - public partial struct ParallelSelectorTaskSystem : ISystem - { - private EntityQuery m_Query; - private JobHandle m_Dependency; - - /// - /// Builds the query. - /// - /// THe current SystemState. - private void OnCreate(ref SystemState state) - { - m_Query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - } - - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - m_Dependency.Complete(); - - var ecb = SystemAPI.GetSingleton().CreateCommandBuffer(state.WorldUnmanaged); - state.Dependency = new ParallelSelectorJob() - { - EntityCommandBuffer = ecb.AsParallelWriter() - }.ScheduleParallel(m_Query, state.Dependency); - m_Dependency = state.Dependency; - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct ParallelSelectorJob : IJobEntity - { - [Tooltip("CommandBuffer which sets the component data.")] - public EntityCommandBuffer.ParallelWriter EntityCommandBuffer; - - /// - /// Executes the parallel selector logic. - /// - /// The entity that is being acted upon. - /// The index of the entity. - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of ParallelSelectorComponents. - [BurstCompile] - public void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer parallelSelectorComponents) - { - for (int i = 0; i < parallelSelectorComponents.Length; ++i) { - var parallelSelectorComponent = parallelSelectorComponents[i]; - var taskComponent = taskComponents[parallelSelectorComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - - // Do not continue if there will be an interrupt or the branch cannot execute. - if (branchComponent.InterruptType != InterruptType.None || !branchComponent.CanExecute) { - continue; - } - - ushort childIndex; - TaskComponent childTaskComponent; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - childIndex = (ushort)(parallelSelectorComponent.Index + 1); - while (childIndex != ushort.MaxValue) { - childTaskComponent = taskComponents[childIndex]; - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[childIndex] = childTaskComponent; - - var childBranchComponent = branchComponents[childTaskComponent.BranchIndex]; - childBranchComponent.NextIndex = childTaskComponent.Index; - branchComponents[childTaskComponent.BranchIndex] = childBranchComponent; - - childIndex = taskComponents[childIndex].SiblingIndex; - } - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - var childSuccess = false; - var childrenRunning = false; - childIndex = (ushort)(parallelSelectorComponent.Index + 1); - while (childIndex != ushort.MaxValue) { - childTaskComponent = taskComponents[childIndex]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - childrenRunning = true; - } else if (childTaskComponent.Status == TaskStatus.Failure) { - var childBranchComponent = branchComponents[childTaskComponent.BranchIndex]; - if (childBranchComponent.ActiveIndex != ushort.MaxValue) { - childBranchComponent.NextIndex = ushort.MaxValue; - branchComponents[childTaskComponent.BranchIndex] = childBranchComponent; - } - } else if (childTaskComponent.Status == TaskStatus.Success) { - childSuccess = true; - - var childBranchComponent = branchComponents[childTaskComponent.BranchIndex]; - childBranchComponent.NextIndex = ushort.MaxValue; - branchComponents[childTaskComponent.BranchIndex] = childBranchComponent; - break; - } - childIndex = taskComponents[childIndex].SiblingIndex; - } - - // If a single child succeeds then all tasks should be stopped. - if (childSuccess) { - var maxChildIndex = taskComponent.Index + TraversalUtility.GetChildCount(taskComponent.Index, ref taskComponents); - for (ushort j = (ushort)(taskComponent.Index + 1); j <= maxChildIndex; ++j) { - childTaskComponent = taskComponents[j]; - if (childTaskComponent.Status == TaskStatus.Running || childTaskComponent.Status == TaskStatus.Queued) { - childTaskComponent.Status = TaskStatus.Failure; - taskComponents[j] = childTaskComponent; - - branchComponent = branchComponents[childTaskComponent.BranchIndex]; - EntityCommandBuffer.SetComponentEnabled(entityIndex, entity, true); - if (branchComponent.ActiveIndex == childTaskComponent.Index) { - branchComponent.NextIndex = ushort.MaxValue; - branchComponents[childTaskComponent.BranchIndex] = branchComponent; - } - } - } - } else if (childrenRunning) { - continue; - } - - // No more children are running. Resume the parent task. - taskComponent.Status = TaskStatus.Success; - taskComponents[taskComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/ParallelSelector.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/ParallelSelector.cs.meta deleted file mode 100644 index dc076e8a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/ParallelSelector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f3ba12965f09f3f4e81b66fa35df8ec3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/PrioritySelector.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/PrioritySelector.cs deleted file mode 100644 index ed22b029..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/PrioritySelector.cs +++ /dev/null @@ -1,331 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Composites -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using System; - using Unity.Burst; - using Unity.Collections; - using Unity.Entities; - using UnityEngine; - - /// - /// A node representation of the priority selector task. - /// - [NodeIcon("cea0f2b6cee06a742bb35dcc40202e8e", "744afc2640950e045961296f1d5800d7")] - [Opsive.Shared.Utility.Description("Similar to the selector task, the priority selector task will return success as soon as a child task returns success. " + - "Instead of running the tasks sequentially from left to right within the tree, the priority selector will ask the task what its priority is to determine the order. " + - "The higher priority tasks have a higher chance at being run first.")] - public class PrioritySelector : ECSCompositeTask, IParentNode, ISavableTask, ICloneable - { - private ushort m_ComponentIndex; - - public override ComponentType Flag { get => typeof(PrioritySelectorFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override PrioritySelectorComponent GetBufferElement() - { - return new PrioritySelectorComponent() - { - Index = RuntimeIndex, - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - m_ComponentIndex = (ushort)base.AddBufferElement(world, entity, gameObject); - return m_ComponentIndex; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.None; } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public object Save(World world, Entity entity) - { - var prioritySelectorComponents = world.EntityManager.GetBuffer(entity); - var prioritySelectorComponent = prioritySelectorComponents[m_ComponentIndex]; - - // Save the active child and array order. - var saveData = new object[2]; - saveData[0] = prioritySelectorComponent.ActiveRelativeChildIndex; - if (prioritySelectorComponent.Priorities.IsCreated) { - saveData[1] = prioritySelectorComponent.Priorities.ToArray(); - } - return saveData; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public void Load(object saveData, World world, Entity entity) - { - var prioritySelectorComponents = world.EntityManager.GetBuffer(entity); - var prioritySelectorComponent = prioritySelectorComponents[m_ComponentIndex]; - - // saveData is the active child and array order. - var taskSaveData = (object[])saveData; - prioritySelectorComponent.ActiveRelativeChildIndex = (ushort)taskSaveData[0]; - if (taskSaveData[1] != null) { - prioritySelectorComponent.Priorities = new NativeArray((PrioritySelectorComponent.PriorityItem[])taskSaveData[1], Allocator.Persistent); - } - prioritySelectorComponents[m_ComponentIndex] = prioritySelectorComponent; - } - - /// - /// Creates a deep clone of the component. - /// - /// A deep clone of the component. - public object Clone() - { - var clone = Activator.CreateInstance(); - clone.Index = Index; - clone.ParentIndex = ParentIndex; - clone.SiblingIndex = SiblingIndex; - return clone; - } - } - - /// - /// The DOTS data structure for the PrioritySelector class. - /// - public struct PrioritySelectorComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - [Tooltip("The relative index of the child that is currently active.")] - public ushort ActiveRelativeChildIndex; - [Tooltip("The latest priority values for each child task.")] - public NativeArray Priorities; - - /// - /// Joins the task index with the priority value. - /// - public struct PriorityItem : IComparable - { - [Tooltip("The index of the task.")] - public ushort TaskIndex; - [Tooltip("The index of the PriorityValueComponent. A value of ushort.MaxValue indicates that there is not a corresponding PriorityValueComponent to this element.")] - public ushort PriorityValueIndex; - [Tooltip("The priority value.")] - public float Value; - - /// - /// Compares the current PriorityItem to the other PriorityItem. - /// - /// The other PriorityItem. - /// The comparison between the current PriorityItem and the other PriorityItem. - public int CompareTo(PriorityItem other) - { - // The higher the value the lower the item is in the array. - return other.Value.CompareTo(Value); - } - } - } - - /// - /// DOTS structure that contains the most recently priority of the task. - /// - public struct PriorityValueComponent : IBufferElementData - { - [Tooltip("The index of the task.")] - public ushort Index; - [Tooltip("The current priority value. The higher the value the more likely it will be selected.")] - public float Value; - } - - /// - /// A DOTS tag indicating when a PrioritySelector node is active. - /// - public struct PrioritySelectorFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the PrioritySelector logic. - /// - [DisableAutoCreation] - public partial struct PrioritySelectorTaskSystem : ISystem - { - /// - /// Updates the logic. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var hasPriorityValueComponent = false; - foreach (var (branchComponents, taskComponents, prioritySelectorComponents, priorityValueComponents) in - SystemAPI.Query, DynamicBuffer, DynamicBuffer, DynamicBuffer>().WithAll()) { - - hasPriorityValueComponent = true; - for (int i = 0; i < prioritySelectorComponents.Length; ++i) { - var prioritySelectorComponent = prioritySelectorComponents[i]; - var taskComponent = taskComponents[prioritySelectorComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - - // Do not continue if there will be an interrupt or the branch cannot execute. - if (branchComponent.InterruptType != InterruptType.None || !branchComponent.CanExecute) { - continue; - } - - var prioritySelectorComponentsBuffer = prioritySelectorComponents; - var taskComponentsBuffer = taskComponents; - var branchComponentBuffer = branchComponents; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponentsBuffer[taskComponent.Index] = taskComponent; - - // Initialize the priority value array. - NativeArray priorities; - if (prioritySelectorComponent.Priorities.Length == 0) { - var childCount = TraversalUtility.GetImmediateChildCount(ref taskComponent, ref taskComponentsBuffer); - priorities = new NativeArray(childCount, Allocator.Persistent); - // Match the PriorityValueComponent with the child index. - var childIndex = (ushort)(taskComponent.Index + 1); - for (ushort j = 0; j < childCount; ++j) { - priorities[j] = new PrioritySelectorComponent.PriorityItem() { TaskIndex = childIndex, PriorityValueIndex = ushort.MaxValue, Value = float.MinValue }; - for (ushort k = 0; k < priorityValueComponents.Length; ++k) { - var priorityValueComponent = priorityValueComponents[k]; - - if (priorityValueComponent.Index == childIndex) { - var priorityItem = priorities[j]; - priorityItem.PriorityValueIndex = k; - priorities[j] = priorityItem; - break; - } - } - childIndex = taskComponents[childIndex].SiblingIndex; - } - - prioritySelectorComponent.Priorities = priorities; - } - - // Determine the child order when the task starts. - priorities = prioritySelectorComponent.Priorities; - - for (ushort j = 0; j < priorities.Length; ++j) { - var valueIndex = priorities[j].PriorityValueIndex; - // The task may not have a matching PriorityValueComponent. - if (valueIndex == ushort.MaxValue) { - continue; - } - - var priorityItem = priorities[j]; - priorityItem.Value = priorityValueComponents[valueIndex].Value; - priorities[j] = priorityItem; - } - priorities.Sort(); - prioritySelectorComponent.Priorities = priorities; - prioritySelectorComponentsBuffer[i] = prioritySelectorComponent; - - prioritySelectorComponent.ActiveRelativeChildIndex = 0; - branchComponent.NextIndex = prioritySelectorComponent.Priorities[prioritySelectorComponent.ActiveRelativeChildIndex].TaskIndex; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - - // Start the child. - var nextChildTaskComponent = taskComponents[branchComponent.NextIndex]; - nextChildTaskComponent.Status = TaskStatus.Queued; - taskComponentsBuffer[branchComponent.NextIndex] = nextChildTaskComponent; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The prioritySelector task is currently active. Check the first child. - var childTaskComponent = taskComponents[prioritySelectorComponent.Priorities[prioritySelectorComponent.ActiveRelativeChildIndex].TaskIndex]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - // Switch to the next highest priority. If no more priority values exist the task should act as a normal selector. - if (prioritySelectorComponent.ActiveRelativeChildIndex == prioritySelectorComponent.Priorities.Length - 1 || - childTaskComponent.Status == TaskStatus.Success) { - // There are no more children or the child succeeded. The selector task should end. - taskComponent.Status = childTaskComponent.Status; - prioritySelectorComponent.ActiveRelativeChildIndex = 0; - taskComponentsBuffer[prioritySelectorComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - } else { - // The child task returned failure. Move onto the next task. - prioritySelectorComponent.ActiveRelativeChildIndex++; - var nextIndex = prioritySelectorComponent.Priorities[prioritySelectorComponent.ActiveRelativeChildIndex].TaskIndex; - var nextTaskComponent = taskComponents[nextIndex]; - nextTaskComponent.Status = TaskStatus.Queued; - taskComponentsBuffer[nextIndex] = nextTaskComponent; - - branchComponent.NextIndex = nextIndex; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - } - prioritySelectorComponentsBuffer[i] = prioritySelectorComponent; - } - } - - // Special case where the PrioritySelectorComponent has no PriorityValueComponent children. - if (!hasPriorityValueComponent) { - foreach (var (prioritySelectorComponents, taskComponents, branchComponents) in - SystemAPI.Query, DynamicBuffer, DynamicBuffer>().WithAll()) { - - for (int i = 0; i < prioritySelectorComponents.Length; ++i) { - var prioritySelectorComponent = prioritySelectorComponents[i]; - var taskComponent = taskComponents[prioritySelectorComponent.Index]; - - // If there are no values then the selector should return failure. - if (taskComponent.Status == TaskStatus.Queued && prioritySelectorComponent.Priorities.Length == 0) { - taskComponent.Status = TaskStatus.Failure; - var taskComponentsBuffer = taskComponents; - taskComponentsBuffer[prioritySelectorComponent.Index] = taskComponent; - - var branchComponent = branchComponents[taskComponent.BranchIndex]; - branchComponent.NextIndex = taskComponent.ParentIndex; - var branchComponentBuffer = branchComponents; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - } - } - } - } - } - - /// - /// The task has been destroyed. - /// - /// The current state of the system. - private void OnDestroy(ref SystemState state) - { - foreach (var prioritySelectorComponents in SystemAPI.Query>()) { - for (int i = 0; i < prioritySelectorComponents.Length; ++i) { - prioritySelectorComponents[i].Priorities.Dispose(); - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/PrioritySelector.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/PrioritySelector.cs.meta deleted file mode 100644 index ce4eafb6..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/PrioritySelector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0df94ec9b57703043babb28f51e4b55d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSelector.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSelector.cs deleted file mode 100644 index af57f9e0..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSelector.cs +++ /dev/null @@ -1,324 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Composites -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using Unity.Collections; - using Unity.Entities; - using Unity.Burst; - using UnityEngine; - using System; - - /// - /// A node representation of the random selector task. - /// - [NodeIcon("d7c1e0f5830316e449df8a35561df859", "7638e4bc5a1f4cd488801902387ec5ea")] - [Opsive.Shared.Utility.Description("Similar to the selector task, the random selector task will return success as soon as a child task returns success. " + - "The difference is that the random selector class will run its children in a random order. The selector task is deterministic " + - "in that it will always run the tasks from left to right within the tree. The random selector task shuffles the child tasks up and then begins " + - "execution in a random order. Other than that the random selector class is the same as the selector class. It will continue running tasks " + - "until a task completes successfully. If no child tasks return success then it will return failure.")] - public class RandomSelector : ECSCompositeTask, IParentNode, IConditionalAbortParent, IInterruptResponder, ISavableTask, ICloneable - { - [Tooltip("Specifies how the child conditional tasks should be reevaluated.")] - [SerializeField] ConditionalAbortType m_AbortType; - [Tooltip("The seed of the random number generator. Set to 0 to use the entity index as the seed.")] - [SerializeField] uint m_Seed; - - private ushort m_ComponentIndex; - - public ConditionalAbortType AbortType { get => m_AbortType; set => m_AbortType = value; } - public uint Seed { get => m_Seed; set => m_Seed = value; } - - public override ComponentType Flag { get => typeof(RandomSelectorFlag); } - public Type InterruptSystemType { get => typeof(RandomSelectorInterruptSystem); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override RandomSelectorComponent GetBufferElement() - { - return new RandomSelectorComponent() - { - Index = RuntimeIndex, - Seed = m_Seed, - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - m_ComponentIndex = (ushort)base.AddBufferElement(world, entity, gameObject); - return m_ComponentIndex; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.None; } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public object Save(World world, Entity entity) - { - var randomSelectorComponents = world.EntityManager.GetBuffer(entity); - var randomSelectorComponent = randomSelectorComponents[m_ComponentIndex]; - - // Save the active child and array order. - var saveData = new object[2]; - saveData[0] = randomSelectorComponent.ActiveRelativeChildIndex; - if (randomSelectorComponent.TaskOrder.IsCreated) { - var taskOrder = randomSelectorComponent.TaskOrder.Value.Indicies.ToArray(); - saveData[1] = taskOrder; - } - return saveData; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public void Load(object saveData, World world, Entity entity) - { - var randomSelectorComponents = world.EntityManager.GetBuffer(entity); - var randomSelectorComponent = randomSelectorComponents[m_ComponentIndex]; - - // saveData is the active child and array order. - var taskSaveData = (object[])saveData; - randomSelectorComponent.ActiveRelativeChildIndex = (ushort)taskSaveData[0]; - if (taskSaveData[1] != null) { - var taskOrder = (ushort[])taskSaveData[1]; - var builder = new BlobBuilder(Allocator.Temp); - ref var root = ref builder.ConstructRoot(); - var orderArray = builder.Allocate(ref root.Indicies, taskOrder.Length); - for (int i = 0; i < taskOrder.Length; i++) { - orderArray[i] = taskOrder[i]; - } - randomSelectorComponent.TaskOrder = builder.CreateBlobAssetReference(Allocator.Persistent); - builder.Dispose(); - } - randomSelectorComponents[m_ComponentIndex] = randomSelectorComponent; - } - - /// - /// Creates a deep clone of the component. - /// - /// A deep clone of the component. - public object Clone() - { - var clone = Activator.CreateInstance(); - clone.Index = Index; - clone.ParentIndex = ParentIndex; - clone.SiblingIndex = SiblingIndex; - clone.AbortType = AbortType; - return clone; - } - } - - /// - /// The DOTS data structure for the RandomSelector class. - /// - public struct RandomSelectorComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - [Tooltip("The relative index of the child that is currently active.")] - public ushort ActiveRelativeChildIndex; - [Tooltip("The seed of the random number generator.")] - public uint Seed; - [Tooltip("The random number generator for the task.")] - public Unity.Mathematics.Random RandomNumberGenerator; - [Tooltip("The indicies of the child task execution order.")] - public BlobAssetReference TaskOrder; - } - - /// - /// A DOTS tag indicating when a RandomSelector node is active. - /// - public struct RandomSelectorFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the RandomSelector logic. - /// - [DisableAutoCreation] - public partial struct RandomSelectorTaskSystem : ISystem - { - /// - /// Updates the logic. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - foreach (var (branchComponents, taskComponents, randomSelectorComponents, entity) in - SystemAPI.Query, DynamicBuffer, DynamicBuffer>().WithAll().WithEntityAccess()) { - for (int i = 0; i < randomSelectorComponents.Length; ++i) { - var randomSelectorComponent = randomSelectorComponents[i]; - var taskComponent = taskComponents[randomSelectorComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - - // Do not continue if there will be an interrupt or the branch cannot execute. - if (branchComponent.InterruptType != InterruptType.None || !branchComponent.CanExecute) { - continue; - } - - var randomSelectorComponentsBuffer = randomSelectorComponents; - var taskComponentsBuffer = taskComponents; - var branchComponentBuffer = branchComponents; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponentsBuffer[taskComponent.Index] = taskComponent; - - // Initialize the task order array. - if (!randomSelectorComponent.TaskOrder.IsCreated) { - var childCount = TraversalUtility.GetImmediateChildCount(ref taskComponent, ref taskComponentsBuffer); - var builder = new BlobBuilder(Allocator.Temp); - ref var root = ref builder.ConstructRoot(); - var orderArray = builder.Allocate(ref root.Indicies, childCount); - var childIndex = taskComponent.Index + 1; - for (int j = 0; j < childCount; ++j) { - orderArray[j] = (ushort)childIndex; - childIndex = taskComponents[childIndex].SiblingIndex; - } - randomSelectorComponent.TaskOrder = builder.CreateBlobAssetReference(Allocator.Persistent); - builder.Dispose(); - } - - // Generate a new random number seed for each entity. - if (randomSelectorComponent.RandomNumberGenerator.state == 0) { - randomSelectorComponent.RandomNumberGenerator = Unity.Mathematics.Random.CreateFromIndex(randomSelectorComponent.Seed != 0 ? randomSelectorComponent.Seed : (uint)entity.Index); - } - - // Use fisher-yates to shuffle the array in place. - ref var initialTaskOrder = ref randomSelectorComponent.TaskOrder.Value.Indicies; - var index = initialTaskOrder.Length; - while (index != 0) { - var randomUnitFloat = randomSelectorComponent.RandomNumberGenerator.NextFloat(); - var randomIndex = (int)Unity.Mathematics.math.floor(randomUnitFloat * index); - index--; - - var element = initialTaskOrder[randomIndex]; - initialTaskOrder[randomIndex] = initialTaskOrder[index]; - initialTaskOrder[index] = element; - } - - randomSelectorComponent.ActiveRelativeChildIndex = 0; - randomSelectorComponentsBuffer[i] = randomSelectorComponent; - - branchComponent.NextIndex = initialTaskOrder[randomSelectorComponent.ActiveRelativeChildIndex]; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - - // The child may have already ran and have a non-inactive status. - var nextChildTaskComponent = taskComponents[branchComponent.NextIndex]; - nextChildTaskComponent.Status = TaskStatus.Queued; - taskComponentsBuffer[branchComponent.NextIndex] = nextChildTaskComponent; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The randomSelector task is currently active. Check the first child. - ref var taskOrder = ref randomSelectorComponent.TaskOrder.Value.Indicies; - var childTaskComponent = taskComponents[taskOrder[randomSelectorComponent.ActiveRelativeChildIndex]]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - if (randomSelectorComponent.ActiveRelativeChildIndex == taskOrder.Length - 1 || childTaskComponent.Status == TaskStatus.Success) { - // There are no more children or the child succeeded. The random selector task should end. A task status of inactive indicates the last task was disabled. Return failure. - taskComponent.Status = childTaskComponent.Status != TaskStatus.Inactive ? childTaskComponent.Status : TaskStatus.Failure; - randomSelectorComponent.ActiveRelativeChildIndex = 0; - taskComponentsBuffer[randomSelectorComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - } else { - // The child task returned failure. Move onto the next task. - randomSelectorComponent.ActiveRelativeChildIndex++; - var nextIndex = taskOrder[randomSelectorComponent.ActiveRelativeChildIndex]; - var nextTaskComponent = taskComponents[nextIndex]; - nextTaskComponent.Status = TaskStatus.Queued; - taskComponentsBuffer[nextIndex] = nextTaskComponent; - - branchComponent.NextIndex = nextIndex; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - } - randomSelectorComponentsBuffer[i] = randomSelectorComponent; - } - } - } - - /// - /// The task has been destroyed. - /// - /// The current state of the system. - private void OnDestroy(ref SystemState state) - { - foreach (var randomSelectorComponents in SystemAPI.Query>()) { - for (int i = 0; i < randomSelectorComponents.Length; ++i) { - var randomSelectorComponent = randomSelectorComponents[i]; - if (randomSelectorComponent.TaskOrder.IsCreated) { - randomSelectorComponent.TaskOrder.Dispose(); - } - } - } - } - } - - /// - /// An interrupt has occurred. Ensure the task state is correct after the interruption. - /// - [DisableAutoCreation] - - public partial struct RandomSelectorInterruptSystem : ISystem - { - /// - /// Runs the logic after an interruption. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - foreach (var (taskComponents, randomSelectorComponents) in - SystemAPI.Query, DynamicBuffer>().WithAll()) { - for (int i = 0; i < randomSelectorComponents.Length; ++i) { - var randomSelectorComponent = randomSelectorComponents[i]; - // The active child will have a non-running status if it has been interrupted. - var taskComponent = taskComponents[randomSelectorComponent.Index]; - if (taskComponent.Status == TaskStatus.Running && taskComponents[randomSelectorComponent.TaskOrder.Value.Indicies[randomSelectorComponent.ActiveRelativeChildIndex]].Status != TaskStatus.Running) { - ushort relativeChildIndex = 0; - // Find the currently active task. - while (taskComponents[randomSelectorComponent.TaskOrder.Value.Indicies[relativeChildIndex]].Status != TaskStatus.Running) { - relativeChildIndex++; - } - randomSelectorComponent.ActiveRelativeChildIndex = relativeChildIndex; - var randomSelectorBuffer = randomSelectorComponents; - randomSelectorBuffer[i] = randomSelectorComponent; - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSelector.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSelector.cs.meta deleted file mode 100644 index 08d20624..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSelector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 88b2c4cec0256b8478ada94d9f020ae3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSequence.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSequence.cs deleted file mode 100644 index 60548ede..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSequence.cs +++ /dev/null @@ -1,324 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Composites -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using Unity.Collections; - using Unity.Entities; - using Unity.Burst; - using UnityEngine; - using System; - - /// - /// A node representation of the random sequence task. - /// - [NodeIcon("edb30349221143a408c76da55a6aa809", "cfb9039832ed52748b617bde070898dc")] - [Opsive.Shared.Utility.Description("Similar to the sequence task, the random sequence task will return success as soon as every child task returns success. " + - "The difference is that the random sequence class will run its children in a random order. The sequence task is deterministic " + - "in that it will always run the tasks from left to right within the tree. The random sequence task shuffles the child tasks up and then begins " + - "execution in a random order. Other than that the random sequence class is the same as the sequence class. It will stop running tasks " + - "as soon as a single task ends in failure. On a task failure it will stop executing all of the child tasks and return failure. " + - "If no child returns failure then it will return success.")] - public class RandomSequence : ECSCompositeTask, IParentNode, IConditionalAbortParent, IInterruptResponder, ISavableTask, ICloneable - { - [Tooltip("Specifies how the child conditional tasks should be reevaluated.")] - [SerializeField] ConditionalAbortType m_AbortType; - [Tooltip("The seed of the random number generator. Set to 0 to use the entity index as the seed.")] - [SerializeField] uint m_Seed; - - private ushort m_ComponentIndex; - - public ConditionalAbortType AbortType { get => m_AbortType; set => m_AbortType = value; } - public uint Seed { get => m_Seed; set => m_Seed = value; } - - public override ComponentType Flag { get => typeof(RandomSequenceFlag); } - public Type InterruptSystemType { get => typeof(RandomSequenceInterruptSystem); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override RandomSequenceComponent GetBufferElement() - { - return new RandomSequenceComponent() - { - Index = RuntimeIndex, - Seed = m_Seed, - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - m_ComponentIndex = (ushort)base.AddBufferElement(world, entity, gameObject); - return m_ComponentIndex; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.None; } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public object Save(World world, Entity entity) - { - var randomSequenceComponents = world.EntityManager.GetBuffer(entity); - var randomSequenceComponent = randomSequenceComponents[m_ComponentIndex]; - - // Save the active child and array order. - var saveData = new object[2]; - saveData[0] = randomSequenceComponent.ActiveRelativeChildIndex; - if (randomSequenceComponent.TaskOrder.IsCreated) { - var taskOrder = randomSequenceComponent.TaskOrder.Value.Indicies.ToArray(); - saveData[1] = taskOrder; - } - return saveData; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public void Load(object saveData, World world, Entity entity) - { - var randomSequenceComponents = world.EntityManager.GetBuffer(entity); - var randomSequenceComponent = randomSequenceComponents[m_ComponentIndex]; - - // saveData is the active child and array order. - var taskSaveData = (object[])saveData; - randomSequenceComponent.ActiveRelativeChildIndex = (ushort)taskSaveData[0]; - if (taskSaveData[1] != null) { - var taskOrder = (ushort[])taskSaveData[1]; - var builder = new BlobBuilder(Allocator.Temp); - ref var root = ref builder.ConstructRoot(); - var orderArray = builder.Allocate(ref root.Indicies, taskOrder.Length); - for (int i = 0; i < taskOrder.Length; i++) { - orderArray[i] = taskOrder[i]; - } - randomSequenceComponent.TaskOrder = builder.CreateBlobAssetReference(Allocator.Persistent); - builder.Dispose(); - } - randomSequenceComponents[m_ComponentIndex] = randomSequenceComponent; - } - - /// - /// Creates a deep clone of the component. - /// - /// A deep clone of the component. - public object Clone() - { - var clone = Activator.CreateInstance(); - clone.Index = Index; - clone.ParentIndex = ParentIndex; - clone.SiblingIndex = SiblingIndex; - clone.AbortType = AbortType; - return clone; - } - } - - /// - /// The DOTS data structure for the RandomSequence class. - /// - public struct RandomSequenceComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - [Tooltip("The relative index of the child that is currently active.")] - public ushort ActiveRelativeChildIndex; - [Tooltip("The seed of the random number generator.")] - public uint Seed; - [Tooltip("The random number generator for the task.")] - public Unity.Mathematics.Random RandomNumberGenerator; - [Tooltip("The indicies of the child task execution order.")] - public BlobAssetReference TaskOrder; - } - - /// - /// A DOTS tag indicating when a RandomSequence node is active. - /// - public struct RandomSequenceFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the RandomSequence logic. - /// - [DisableAutoCreation] - public partial struct RandomSequenceTaskSystem : ISystem - { - /// - /// Updates the logic. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - foreach (var (branchComponents, taskComponents, randomSequenceComponents, entity) in - SystemAPI.Query, DynamicBuffer, DynamicBuffer>().WithAll().WithEntityAccess()) { - for (int i = 0; i < randomSequenceComponents.Length; ++i) { - var randomSequenceComponent = randomSequenceComponents[i]; - var taskComponent = taskComponents[randomSequenceComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - - // Do not continue if there will be an interrupt or the branch cannot execute. - if (branchComponent.InterruptType != InterruptType.None || !branchComponent.CanExecute) { - continue; - } - - var randomSequenceComponentsBuffer = randomSequenceComponents; - var taskComponentsBuffer = taskComponents; - var branchComponentBuffer = branchComponents; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponentsBuffer[taskComponent.Index] = taskComponent; - - // Initialize the task order array. - if (!randomSequenceComponent.TaskOrder.IsCreated) { - var childCount = TraversalUtility.GetImmediateChildCount(ref taskComponent, ref taskComponentsBuffer); - var builder = new BlobBuilder(Allocator.Temp); - ref var root = ref builder.ConstructRoot(); - var orderArray = builder.Allocate(ref root.Indicies, childCount); - var childIndex = taskComponent.Index + 1; - for (int j = 0; j < childCount; ++j) { - orderArray[j] = (ushort)childIndex; - childIndex = taskComponents[childIndex].SiblingIndex; - } - randomSequenceComponent.TaskOrder = builder.CreateBlobAssetReference(Allocator.Persistent); - builder.Dispose(); - } - - // Generate a new random number seed for each entity. - if (randomSequenceComponent.RandomNumberGenerator.state == 0) { - randomSequenceComponent.RandomNumberGenerator = Unity.Mathematics.Random.CreateFromIndex(randomSequenceComponent.Seed != 0 ? randomSequenceComponent.Seed : (uint)entity.Index); - } - - // Use fisher-yates to shuffle the array in place. - ref var initialTaskOrder = ref randomSequenceComponent.TaskOrder.Value.Indicies; - var index = initialTaskOrder.Length; - while (index != 0) { - var randomUnitFloat = randomSequenceComponent.RandomNumberGenerator.NextFloat(); - var randomIndex = (int)Unity.Mathematics.math.floor(randomUnitFloat * index); - index--; - - var element = initialTaskOrder[randomIndex]; - initialTaskOrder[randomIndex] = initialTaskOrder[index]; - initialTaskOrder[index] = element; - } - - randomSequenceComponent.ActiveRelativeChildIndex = 0; - randomSequenceComponentsBuffer[i] = randomSequenceComponent; - - branchComponent.NextIndex = initialTaskOrder[randomSequenceComponent.ActiveRelativeChildIndex]; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - - // Start the child. - var nextChildTaskComponent = taskComponents[branchComponent.NextIndex]; - nextChildTaskComponent.Status = TaskStatus.Queued; - taskComponentsBuffer[branchComponent.NextIndex] = nextChildTaskComponent; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The randomSequence task is currently active. Check the first child. - ref var taskOrder = ref randomSequenceComponent.TaskOrder.Value.Indicies; - var childTaskComponent = taskComponents[taskOrder[randomSequenceComponent.ActiveRelativeChildIndex]]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - if (randomSequenceComponent.ActiveRelativeChildIndex == taskOrder.Length - 1 || childTaskComponent.Status == TaskStatus.Failure) { - // There are no more children or the child failed. The random sequence task should end. A task status of inactive indicates the last task was disabled. Return success. - taskComponent.Status = childTaskComponent.Status != TaskStatus.Inactive ? childTaskComponent.Status : TaskStatus.Success; - randomSequenceComponent.ActiveRelativeChildIndex = 0; - taskComponentsBuffer[randomSequenceComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - } else { - // The child task returned success. Move onto the next task. - randomSequenceComponent.ActiveRelativeChildIndex++; - var nextIndex = taskOrder[randomSequenceComponent.ActiveRelativeChildIndex]; - var nextTaskComponent = taskComponents[nextIndex]; - nextTaskComponent.Status = TaskStatus.Queued; - taskComponentsBuffer[nextIndex] = nextTaskComponent; - - branchComponent.NextIndex = nextIndex; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - } - randomSequenceComponentsBuffer[i] = randomSequenceComponent; - } - } - } - - /// - /// The task has been destroyed. - /// - /// The current state of the system. - private void OnDestroy(ref SystemState state) - { - foreach (var randomSequenceComponents in SystemAPI.Query>()) { - for (int i = 0; i < randomSequenceComponents.Length; ++i) { - var randomSequenceComponent = randomSequenceComponents[i]; - if (randomSequenceComponent.TaskOrder.IsCreated) { - randomSequenceComponent.TaskOrder.Dispose(); - } - } - } - } - } - - /// - /// An interrupt has occurred. Ensure the task state is correct after the interruption. - /// - [DisableAutoCreation] - public partial struct RandomSequenceInterruptSystem : ISystem - { - /// - /// Runs the logic after an interruption. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - foreach (var (taskComponents, randomSequenceComponents) in - SystemAPI.Query, DynamicBuffer>().WithAll()) { - for (int i = 0; i < randomSequenceComponents.Length; ++i) { - var randomSequenceComponent = randomSequenceComponents[i]; - // The active child will have a non-running status if it has been interrupted. - var taskComponent = taskComponents[randomSequenceComponent.Index]; - if (taskComponent.Status == TaskStatus.Running && taskComponents[randomSequenceComponent.TaskOrder.Value.Indicies[randomSequenceComponent.ActiveRelativeChildIndex]].Status != TaskStatus.Running) { - ushort relativeChildIndex = 0; - // Find the currently active task. - while (taskComponents[randomSequenceComponent.TaskOrder.Value.Indicies[relativeChildIndex]].Status != TaskStatus.Running) { - relativeChildIndex++; - } - randomSequenceComponent.ActiveRelativeChildIndex = relativeChildIndex; - var randomSequenceBuffer = randomSequenceComponents; - randomSequenceBuffer[i] = randomSequenceComponent; - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSequence.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSequence.cs.meta deleted file mode 100644 index bd762502..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/RandomSequence.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d02a71e18382d8548b9f8f0a4834da93 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Selector.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Selector.cs deleted file mode 100644 index c779a088..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Selector.cs +++ /dev/null @@ -1,258 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Composites -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using Unity.Entities; - using Unity.Burst; - using UnityEngine; - using System; - - /// - /// A node representation of the selector task. - /// - [NodeIcon("4c3d0559a9ebc604e88b16e9a3fdfa05", "de3acf0e386a26246b8bc999b1ef8e32")] - [Opsive.Shared.Utility.Description("The selector task is similar to an \"or\" operation. It will return success as soon as one of its child tasks return success. " + - "If a child task returns failure then it will sequentially run the next task. If no child task returns success then it will return failure.")] - public class Selector : ECSCompositeTask, IParentNode, IConditionalAbortParent, IInterruptResponder, ISavableTask, ICloneable - { - [Tooltip("Specifies how the child conditional tasks should be reevaluated.")] - [SerializeField] ConditionalAbortType m_AbortType; - - private ushort m_ComponentIndex; - - public ConditionalAbortType AbortType { get => m_AbortType; set => m_AbortType = value; } - public Type InterruptSystemType { get => typeof(SelectorInterruptSystem); } - - /// - /// The type of tag that should be enabled when the task is running. - /// - public override ComponentType Flag { get => typeof(SelectorFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override SelectorComponent GetBufferElement() - { - return new SelectorComponent() { - Index = RuntimeIndex, - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - m_ComponentIndex = (ushort)base.AddBufferElement(world, entity, gameObject); - return m_ComponentIndex; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.None; } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public object Save(World world, Entity entity) - { - var selectorComponents = world.EntityManager.GetBuffer(entity); - var selectorComponent = selectorComponents[m_ComponentIndex]; - - // Save the active child. - return selectorComponent.ActiveChildIndex; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public void Load(object saveData, World world, Entity entity) - { - var selectorComponents = world.EntityManager.GetBuffer(entity); - var selectorComponent = selectorComponents[m_ComponentIndex]; - - // saveData is the active child. - selectorComponent.ActiveChildIndex = (ushort)saveData; - selectorComponents[m_ComponentIndex] = selectorComponent; - } - - /// - /// Creates a deep clone of the component. - /// - /// A deep clone of the component. - public object Clone() - { - var clone = Activator.CreateInstance(); - clone.Index = Index; - clone.ParentIndex = ParentIndex; - clone.SiblingIndex = SiblingIndex; - clone.AbortType = AbortType; - return clone; - } - } - - /// - /// The DOTS data structure for the Selector class. - /// - public struct SelectorComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - [Tooltip("The index of the child that is currently active.")] - public ushort ActiveChildIndex; - } - - /// - /// A DOTS tag indicating when a Selector node is active. - /// - public struct SelectorFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the Selector logic. - /// - [DisableAutoCreation] - public partial struct SelectorTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new SelectorJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct SelectorJob : IJobEntity - { - /// - /// Executes the selector logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of SelectorComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer selectorComponents) - { - for (int i = 0; i < selectorComponents.Length; ++i) { - var selectorComponent = selectorComponents[i]; - var taskComponent = taskComponents[selectorComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - - // Do not continue if there will be an interrupt or the branch cannot execute. - if (branchComponent.InterruptType != InterruptType.None || !branchComponent.CanExecute) { - continue; - } - - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - selectorComponent.ActiveChildIndex = (ushort)(taskComponent.Index + 1); - selectorComponents[i] = selectorComponent; - - branchComponent.NextIndex = selectorComponent.ActiveChildIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - - // Start the child. - var nextChildTaskComponent = taskComponents[branchComponent.NextIndex]; - nextChildTaskComponent.Status = TaskStatus.Queued; - taskComponents[branchComponent.NextIndex] = nextChildTaskComponent; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The selector task is currently active. Check the first child. - var childTaskComponent = taskComponents[selectorComponent.ActiveChildIndex]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - if (childTaskComponent.SiblingIndex == ushort.MaxValue || childTaskComponent.Status == TaskStatus.Success) { - // There are no more children or the child succeeded. The selector task should end. A task status of inactive indicates the last task was disabled. Return failure. - taskComponent.Status = childTaskComponent.Status != TaskStatus.Inactive ? childTaskComponent.Status : TaskStatus.Failure; - selectorComponent.ActiveChildIndex = (ushort)(selectorComponent.Index + 1); - taskComponents[selectorComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } else { - // The previous task is no longer running. - var siblingTaskComponent = taskComponents[childTaskComponent.SiblingIndex]; - - siblingTaskComponent.Status = TaskStatus.Queued; - taskComponents[childTaskComponent.SiblingIndex] = siblingTaskComponent; - // The current index is now the sibling index. - selectorComponent.ActiveChildIndex = childTaskComponent.SiblingIndex; - - branchComponent.NextIndex = selectorComponent.ActiveChildIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } - selectorComponents[i] = selectorComponent; - } - } - } - } - - /// - /// An interrupt has occurred. Ensure the task state is correct after the interruption. - /// - [DisableAutoCreation] - public partial struct SelectorInterruptSystem : ISystem - { - /// - /// Runs the logic after an interruption. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - foreach (var (taskComponents, selectorComponents) in - SystemAPI.Query, DynamicBuffer>().WithAll()) { - for (int i = 0; i < selectorComponents.Length; ++i) { - var selectorComponent = selectorComponents[i]; - // The active child will have a non-running status if it has been interrupted. - if (taskComponents[selectorComponent.ActiveChildIndex].Status != TaskStatus.Running) { - var childIndex = (ushort)(selectorComponent.Index + 1); - // Find the currently active task. - while (childIndex != ushort.MaxValue && taskComponents[childIndex].Status != TaskStatus.Running) { - childIndex = taskComponents[childIndex].SiblingIndex; - } - if (childIndex != ushort.MaxValue) { - selectorComponent.ActiveChildIndex = childIndex; - } - var selectorBuffer = selectorComponents; - selectorBuffer[i] = selectorComponent; - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Selector.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Selector.cs.meta deleted file mode 100644 index 6315eeb5..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Selector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9b0cbe842d363e545a41d9ac600430a3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Sequence.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Sequence.cs deleted file mode 100644 index 172efd1f..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Sequence.cs +++ /dev/null @@ -1,257 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Composites -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using Unity.Burst; - using Unity.Entities; - using UnityEngine; - using System; - - /// - /// A node representation of the sequence task. - /// - [NodeIcon("8981cc246f900b24da46ae10eb49b68b", "4a7b39d8e0d056a4a9d8eb390b4bc9b8")] - [Opsive.Shared.Utility.Description("The sequence task is similar to an \"and\" operation. It will return failure as soon as one of its child tasks return failure. " + - "If a child task returns success then it will sequentially run the next task. If all child tasks return success then it will return success.")] - public class Sequence : ECSCompositeTask, IParentNode, IConditionalAbortParent, IInterruptResponder, ISavableTask, ICloneable - { - [Tooltip("Specifies how the child conditional tasks should be reevaluated.")] - [SerializeField] ConditionalAbortType m_AbortType; - - private ushort m_ComponentIndex; - - public ConditionalAbortType AbortType { get => m_AbortType; set => m_AbortType = value; } - public Type InterruptSystemType { get => typeof(SequenceInterruptSystem); } - - /// - /// The type of tag that should be enabled when the task is running. - /// - public override ComponentType Flag { get => typeof(SequenceFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override SequenceComponent GetBufferElement() - { - return new SequenceComponent() { - Index = RuntimeIndex, - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - m_ComponentIndex = (ushort)base.AddBufferElement(world, entity, gameObject); - return m_ComponentIndex; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.None; } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public object Save(World world, Entity entity) - { - var sequenceComponents = world.EntityManager.GetBuffer(entity); - var sequenceComponent = sequenceComponents[m_ComponentIndex]; - - // Save the active child. - return sequenceComponent.ActiveChildIndex; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public void Load(object saveData, World world, Entity entity) - { - var sequenceComponents = world.EntityManager.GetBuffer(entity); - var sequenceComponent = sequenceComponents[m_ComponentIndex]; - - // saveData is the active child. - sequenceComponent.ActiveChildIndex = (ushort)saveData; - sequenceComponents[m_ComponentIndex] = sequenceComponent; - } - - /// - /// Creates a deep clone of the component. - /// - /// A deep clone of the component. - public object Clone() - { - var clone = Activator.CreateInstance(); - clone.Index = Index; - clone.ParentIndex = ParentIndex; - clone.SiblingIndex = SiblingIndex; - clone.AbortType = AbortType; - return clone; - } - } - - /// - /// The DOTS data structure for the Sequence class. - /// - public struct SequenceComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - [Tooltip("The index of the child that is currently active.")] - public ushort ActiveChildIndex; - } - - /// - /// A DOTS tag indicating when a Sequence node is active. - /// - public struct SequenceFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the Sequence logic. - /// - [DisableAutoCreation] - public partial struct SequenceTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new SequenceJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct SequenceJob : IJobEntity - { - /// - /// Executes the sequence logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of SequenceComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer sequenceComponents) - { - for (int i = 0; i < sequenceComponents.Length; ++i) { - var sequenceComponent = sequenceComponents[i]; - var taskComponent = taskComponents[sequenceComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - - // Do not continue if there will be an interrupt or the branch cannot execute. - if (branchComponent.InterruptType != InterruptType.None || !branchComponent.CanExecute) { - continue; - } - - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - sequenceComponent.ActiveChildIndex = (ushort)(taskComponent.Index + 1); - sequenceComponents[i] = sequenceComponent; - - branchComponent.NextIndex = sequenceComponent.ActiveChildIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - - // Start the child. - var nextChildTaskComponent = taskComponents[branchComponent.NextIndex]; - nextChildTaskComponent.Status = TaskStatus.Queued; - taskComponents[branchComponent.NextIndex] = nextChildTaskComponent; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The sequence task is currently active. Check the first child. - var childTaskComponent = taskComponents[sequenceComponent.ActiveChildIndex]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - if (childTaskComponent.SiblingIndex == ushort.MaxValue || childTaskComponent.Status == TaskStatus.Failure) { - // There are no more children or the child failed. The sequence task should end. A task status of inactive indicates the last task was disabled. Return success. - taskComponent.Status = childTaskComponent.Status != TaskStatus.Inactive ? childTaskComponent.Status : TaskStatus.Success; - sequenceComponent.ActiveChildIndex = (ushort)(sequenceComponent.Index + 1); - taskComponents[sequenceComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } else { - // The previous task is no longer running. - var siblingTaskComponent = taskComponents[childTaskComponent.SiblingIndex]; - - siblingTaskComponent.Status = TaskStatus.Queued; - taskComponents[childTaskComponent.SiblingIndex] = siblingTaskComponent; - // The current index is now the sibling index. - sequenceComponent.ActiveChildIndex = childTaskComponent.SiblingIndex; - - branchComponent.NextIndex = sequenceComponent.ActiveChildIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } - sequenceComponents[i] = sequenceComponent; - } - } - } - } - - /// - /// An interrupt has occurred. Ensure the task state is correct after the interruption. - /// - [DisableAutoCreation] - public partial struct SequenceInterruptSystem : ISystem - { - /// - /// Runs the logic after an interruption. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - foreach (var (taskComponents, sequenceComponents) in - SystemAPI.Query, DynamicBuffer>().WithAll()) { - for (int i = 0; i < sequenceComponents.Length; ++i) { - var sequenceComponent = sequenceComponents[i]; - if (taskComponents[sequenceComponent.ActiveChildIndex].Status != TaskStatus.Running) { - var childIndex = (ushort)(sequenceComponent.Index + 1); - // Find the currently active task. - while (childIndex != ushort.MaxValue && taskComponents[childIndex].Status != TaskStatus.Running) { - childIndex = taskComponents[childIndex].SiblingIndex; - } - if (childIndex != ushort.MaxValue) { - sequenceComponent.ActiveChildIndex = childIndex; - } - var sequenceBuffer = sequenceComponents; - sequenceBuffer[i] = sequenceComponent; - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Sequence.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Sequence.cs.meta deleted file mode 100644 index 8fcffd30..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/Sequence.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 519b18064a01b25499eb333d144065c0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/UtilitySelector.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/UtilitySelector.cs deleted file mode 100644 index 0d2a2006..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/UtilitySelector.cs +++ /dev/null @@ -1,361 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Composites -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using Unity.Collections; - using Unity.Entities; - using Unity.Burst; - using UnityEngine; - using System; - - /// - /// A node representation of the utility selector task. - /// - [NodeIcon("9d36cd363c3e08246a6e9eaf5ad99d69", "db3d0b77c7f9e0b4f9157aa03178836a")] - [Opsive.Shared.Utility.Description("The utility selector task evaluates the child tasks using Utility Theory AI. The child task can return the utility value " + - "at that particular time. The task with the highest utility value will be selected and the existing running task will be aborted. The utility selector " + - "task reevaluates its children every tick.")] - public class UtilitySelector : ECSCompositeTask, IParentNode, ISavableTask, ICloneable - { - private ushort m_ComponentIndex; - - public override ComponentType Flag { get => typeof(UtilitySelectorFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override UtilitySelectorComponent GetBufferElement() - { - return new UtilitySelectorComponent() - { - Index = RuntimeIndex, - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - m_ComponentIndex = (ushort)base.AddBufferElement(world, entity, gameObject); - ComponentUtility.AddInterruptComponents(world.EntityManager, entity); - return m_ComponentIndex; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.None; } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public object Save(World world, Entity entity) - { - var utilitySelectorComponents = world.EntityManager.GetBuffer(entity); - var utilitySelectorComponent = utilitySelectorComponents[m_ComponentIndex]; - - // Save the active child. - return utilitySelectorComponent.ActiveChildIndex; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public void Load(object saveData, World world, Entity entity) - { - var utilitySelectorComponents = world.EntityManager.GetBuffer(entity); - var utilitySelectorComponent = utilitySelectorComponents[m_ComponentIndex]; - - // saveData is the active child index. - utilitySelectorComponent.ActiveChildIndex = (ushort)saveData; - utilitySelectorComponents[m_ComponentIndex] = utilitySelectorComponent; - } - - /// - /// Creates a deep clone of the component. - /// - /// A deep clone of the component. - public object Clone() - { - var clone = Activator.CreateInstance(); - clone.Index = Index; - clone.ParentIndex = ParentIndex; - clone.SiblingIndex = SiblingIndex; - return clone; - } - } - - /// - /// The DOTS data structure for the UtilitySelector class. - /// - public struct UtilitySelectorComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - [Tooltip("The index of the child that is currently active.")] - public ushort ActiveChildIndex; - [Tooltip("The index of the UtilityValueComponent that corresponds to each child.")] - public NativeArray UtilityItems; - - /// - /// A mapping between the UnityValueComponent and the task. - /// - public struct UtilityItem - { - [Tooltip("The index of the task.")] - public ushort TaskIndex; - [Tooltip("The index of the UtilityValueComponent.")] - public ushort UtilityValueIndex; - [Tooltip("Can the task continue to exectute?")] - public bool CanExecute; - } - } - - /// - /// DOTS structure that contains the most recently utility of the task. - /// - public struct UtilityValueComponent : IBufferElementData - { - [Tooltip("The index of the task.")] - public ushort Index; - [Tooltip("The current utility value. The higher the value the more likely it will be selected.")] - public float Value; - } - - /// - /// A DOTS tag indicating when a UtilitySelector node is active. - /// - public struct UtilitySelectorFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the UtilitySelector logic. - /// - [DisableAutoCreation] - public partial struct UtilitySelectorTaskSystem : ISystem - { - /// - /// Updates the logic. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var hasUtilityValueComponent = false; - foreach (var (utilitySelectorComponents, utilityValueComponents, taskComponents, branchComponents, entity) in - SystemAPI.Query, DynamicBuffer, DynamicBuffer, DynamicBuffer>().WithAll().WithEntityAccess()) { - - hasUtilityValueComponent = true; - for (int i = 0; i < utilitySelectorComponents.Length; ++i) { - var utilitySelectorComponent = utilitySelectorComponents[i]; - var taskComponent = taskComponents[utilitySelectorComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - - // Do not continue if there will be an interrupt or the branch cannot execute. - if (branchComponent.InterruptType != InterruptType.None || !branchComponent.CanExecute) { - continue; - } - - var utilitySelectorComponentsBuffer = utilitySelectorComponents; - var utilityValueComponentBuffer = utilityValueComponents; - var taskComponentsBuffer = taskComponents; - var branchComponentBuffer = branchComponents; - if (taskComponent.Status == TaskStatus.Queued) { - // Initialize the UtilityItem array. - if (utilitySelectorComponent.UtilityItems.Length == 0) { - var childCount = TraversalUtility.GetImmediateChildCount(ref taskComponent, ref taskComponentsBuffer); - var utilityItems = new NativeArray(childCount, Allocator.Persistent); - // Match the UtilitySelectorComponent with the child index. - var childIndex = (ushort)(taskComponent.Index + 1); - for (ushort j = 0; j < childCount; ++j) { - utilityItems[j] = new UtilitySelectorComponent.UtilityItem() { TaskIndex = childIndex, UtilityValueIndex = ushort.MaxValue, CanExecute = !taskComponents[childIndex].Disabled }; - - for (ushort k = 0; k < utilityValueComponents.Length; ++k) { - var utilityValueComponent = utilityValueComponents[k]; - if (utilityValueComponent.Index == childIndex) { - var utilityItem = utilityItems[j]; - utilityItem.UtilityValueIndex = k; - utilityItems[j] = utilityItem; - break; - } - } - childIndex = taskComponents[childIndex].SiblingIndex; - } - - utilitySelectorComponent.UtilityItems = utilityItems; - } else { - // Reset the execution status. - var childIndex = (ushort)(taskComponent.Index + 1); - for (int j = 0; j < utilitySelectorComponent.UtilityItems.Length; ++j) { - var utilityItem = utilitySelectorComponent.UtilityItems[j]; - utilityItem.CanExecute = !taskComponents[childIndex].Disabled; - utilitySelectorComponent.UtilityItems[j] = utilityItem; - - childIndex = taskComponents[childIndex].SiblingIndex; - } - } - - utilitySelectorComponent.ActiveChildIndex = GetHighestUtility(utilitySelectorComponent.UtilityItems, ref utilityValueComponentBuffer); - utilitySelectorComponentsBuffer[i] = utilitySelectorComponent; - - if (utilitySelectorComponent.ActiveChildIndex == ushort.MaxValue) { - taskComponent.Status = TaskStatus.Failure; - branchComponent.NextIndex = taskComponent.ParentIndex; - } else { - taskComponent.Status = TaskStatus.Running; - branchComponent.NextIndex = utilitySelectorComponent.UtilityItems[utilitySelectorComponent.ActiveChildIndex].TaskIndex; - - // Start the child. - var nextChildTaskComponent = taskComponents[branchComponent.NextIndex]; - nextChildTaskComponent.Status = TaskStatus.Queued; - taskComponentsBuffer[branchComponent.NextIndex] = nextChildTaskComponent; - } - taskComponentsBuffer[taskComponent.Index] = taskComponent; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - - continue; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - var childTaskComponent = taskComponents[utilitySelectorComponent.UtilityItems[utilitySelectorComponent.ActiveChildIndex].TaskIndex]; - if (childTaskComponent.Status == TaskStatus.Success) { - // The child has returned success. Stop the selector. - taskComponent.Status = childTaskComponent.Status; - taskComponentsBuffer[utilitySelectorComponent.Index] = taskComponent; - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - continue; - } else if (childTaskComponent.Status == TaskStatus.Failure) { - var utilityItem = utilitySelectorComponent.UtilityItems[utilitySelectorComponent.ActiveChildIndex]; - utilityItem.CanExecute = false; - utilitySelectorComponent.UtilityItems[utilitySelectorComponent.ActiveChildIndex] = utilityItem; - - utilitySelectorComponentsBuffer[i] = utilitySelectorComponent; - } - - // The active task returned failure or is currently running. Determine if the active task needs to change. - var highestIndex = GetHighestUtility(utilitySelectorComponent.UtilityItems, ref utilityValueComponentBuffer); - if (highestIndex == utilitySelectorComponent.ActiveChildIndex) { - // No changes are necessary. - continue; - } - - var activeTaskIndex = utilitySelectorComponent.UtilityItems[utilitySelectorComponent.ActiveChildIndex].TaskIndex; - utilitySelectorComponent.ActiveChildIndex = highestIndex; - utilitySelectorComponentsBuffer[i] = utilitySelectorComponent; - - // A new branch has been selected. Trigger an interrupt on the currently active branch. - if (taskComponents[activeTaskIndex].Status == TaskStatus.Running){ - branchComponent.InterruptType = InterruptType.Branch; - branchComponent.InterruptIndex = utilitySelectorComponent.UtilityItems[highestIndex].TaskIndex; - state.EntityManager.SetComponentEnabled(entity, true); - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - continue; - } - - // No more tasks may need to run. - if (highestIndex == ushort.MaxValue) { - taskComponent.Status = TaskStatus.Failure; - taskComponentsBuffer[utilitySelectorComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - } else { - // Run the task with the next highest utility value. - var nextTaskIndex = utilitySelectorComponent.UtilityItems[utilitySelectorComponent.ActiveChildIndex].TaskIndex; - var nextTaskComponent = taskComponents[nextTaskIndex]; - nextTaskComponent.Status = TaskStatus.Queued; - taskComponentsBuffer[nextTaskIndex] = nextTaskComponent; - - branchComponent.NextIndex = nextTaskIndex; - } - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - } - } - - // Special case where the UtilitySelectorComponent has no UtilityValueComponent children. - if (!hasUtilityValueComponent) { - foreach (var (utilitySelectorComponents, taskComponents, branchComponents) in - SystemAPI.Query, DynamicBuffer, DynamicBuffer>().WithAll()) { - - for (int i = 0; i < utilitySelectorComponents.Length; ++i) { - var utilitySelectorComponent = utilitySelectorComponents[i]; - var taskComponent = taskComponents[utilitySelectorComponent.Index]; - - // If there are no values then the selector should return failure. - if (taskComponent.Status == TaskStatus.Queued && utilitySelectorComponent.UtilityItems.Length == 0) { - taskComponent.Status = TaskStatus.Failure; - var taskComponentsBuffer = taskComponents; - taskComponentsBuffer[utilitySelectorComponent.Index] = taskComponent; - - var branchComponent = branchComponents[taskComponent.BranchIndex]; - branchComponent.NextIndex = taskComponent.ParentIndex; - var branchComponentBuffer = branchComponents; - branchComponentBuffer[taskComponent.BranchIndex] = branchComponent; - } - } - } - } - } - - /// - /// Retruns the task index with the highest utility value. - /// - /// The components with utility values. - /// The utility values of the tasks. - /// The task with the highest utility value. - [BurstCompile] - private ushort GetHighestUtility(NativeArray utilityItems, ref DynamicBuffer utilityValueComponents) - { - var utilityIndex = ushort.MaxValue; - var highestUtility = float.MinValue; - for (ushort i = 0; i < utilityItems.Length; ++i) { - if (utilityItems[i].UtilityValueIndex == ushort.MaxValue || !utilityItems[i].CanExecute) { - continue; - } - - var utilityValue = utilityValueComponents[utilityItems[i].UtilityValueIndex].Value; - if (utilityValue > highestUtility) { - highestUtility = utilityValue; - utilityIndex = i; - } - } - - return utilityIndex; - } - - /// - /// The task has been destroyed. - /// - /// The current state of the system. - private void OnDestroy(ref SystemState state) - { - foreach (var utilitySelectorComponents in SystemAPI.Query>()) { - for (int i = 0; i < utilitySelectorComponents.Length; ++i) { - utilitySelectorComponents[i].UtilityItems.Dispose(); - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/UtilitySelector.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/UtilitySelector.cs.meta deleted file mode 100644 index 042d5bca..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Composites/UtilitySelector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c68beac686ca75c42879aee6c864fc5e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ConditionalAbortType.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ConditionalAbortType.cs deleted file mode 100644 index 84e4f21a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ConditionalAbortType.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks -{ - /// - /// Specifies that the task can interrupt using conditional aborts. - /// - public interface IConditionalAbortParent - { - ConditionalAbortType AbortType { get; } - } - - /// - /// The type of conditional abort. - /// - public enum ConditionalAbortType : byte - { - None, // No abort specified. - LowerPriority, // Any task to the right of the current branch can be aborted. - Self, // Any task within the current branch can be aborted. - Both // A combination of LowerPriority and Self. - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ConditionalAbortType.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ConditionalAbortType.cs.meta deleted file mode 100644 index a58f4776..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ConditionalAbortType.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c8d72bd503b98814ca0c5cbc857cd014 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals.meta deleted file mode 100644 index 0f2fa6c4..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0a0792e3d1b870e4dad5e75b17c12724 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Conditional.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Conditional.cs deleted file mode 100644 index 4fec6b78..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Conditional.cs +++ /dev/null @@ -1,25 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - - /// - /// A TaskObject implementation of the Conditional task. - /// - [NodeIcon("dea5c23eac9d12c4cbd380cc879816ea", "2963cf3eb0c036449829254b2074c4c3")] - public abstract class Conditional : Task, IConditional, IConditionalReevaluation - { - /// - /// Reevaluates the task logic. Returns a TaskStatus indicating how the behavior tree flow should proceed. - /// - /// The status of the task during the reevaluation phase. - public virtual TaskStatus OnReevaluateUpdate() { return OnUpdate(); } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Conditional.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Conditional.cs.meta deleted file mode 100644 index 6248e7ce..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Conditional.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3a2db972855f8ce48b67b75699c1745a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/ConditionalNode.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/ConditionalNode.cs deleted file mode 100644 index 1fc8cce8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/ConditionalNode.cs +++ /dev/null @@ -1,37 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals -{ - using Opsive.GraphDesigner.Runtime; - using UnityEngine; - - /// - /// A TaskObject implementation of the Conditional task. This class can be used when the task should not be grouped by the StackedConditional task. - /// - [NodeIcon("dea5c23eac9d12c4cbd380cc879816ea", "2963cf3eb0c036449829254b2074c4c3")] - public abstract class ConditionalNode : Task, ITreeLogicNode, IConditional, IConditionalReevaluation - { - [Tooltip("The index of the node.")] - [SerializeField] ushort m_Index; - [Tooltip("The parent index of the node. ushort.MaxValue indicates no parent.")] - [SerializeField] ushort m_ParentIndex; - [Tooltip("The sibling index of the node. ushort.MaxValue indicates no sibling.")] - [SerializeField] ushort m_SiblingIndex; - - public ushort Index { get => m_Index; set => m_Index = value; } - public ushort ParentIndex { get => m_ParentIndex; set => m_ParentIndex = value; } - public ushort SiblingIndex { get => m_SiblingIndex; set => m_SiblingIndex = value; } - public ushort RuntimeIndex { get; set; } - - /// - /// Reevaluates the task logic. Returns a TaskStatus indicating how the behavior tree flow should proceed. - /// - /// The status of the task during the reevaluation phase. - public virtual TaskStatus OnReevaluateUpdate() { return OnUpdate(); } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/ConditionalNode.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/ConditionalNode.cs.meta deleted file mode 100644 index ea1205b5..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/ConditionalNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5a27f55166c97394ba777a25ede3e192 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasReceivedEvent.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasReceivedEvent.cs deleted file mode 100644 index 1f6e6a30..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasReceivedEvent.cs +++ /dev/null @@ -1,262 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Events; - using UnityEngine; - - /// - /// A TaskObject implementation of the Conditional task. This class can be used when the task should not be grouped by the StackedConditional task. - /// - [NodeIcon("e6fc90c130121da4f9067b5e15b02975", "69959064b54a0cb4cb077dbb6967a3e1")] - [Opsive.Shared.Utility.Description("Returns success as soon as the event specified by eventName has been received.")] - public class HasReceivedEvent : TargetBehaviorTreeConditional - { - [Tooltip("The name of the event that should be registered.")] - [SerializeField] protected SharedVariable m_EventName; - [Tooltip("Is the event a global event?")] - [SerializeField] protected SharedVariable m_GlobalEvent; - [Tooltip("Optionally store the first sent argument.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoredValue1; - [Tooltip("Optionally store the second sent argument.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoredValue2; - [Tooltip("Optionally store the third sent argument.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoredValue3; - - private string m_RegisteredEventName; - private bool m_EventRegistered; - private bool m_EventReceived; - private bool m_ResetEventReceived = true; - - /// - /// The behavior tree has started. - /// - public override void OnBehaviorTreeStarted() - { - base.OnBehaviorTreeStarted(); - - RegisterEvents(); - } - - /// - /// Initializes the target behavior tree. - /// - protected override void InitializeTarget() - { - if (m_ResolvedBehaviorTree != null) { - UnregisterEvents(); - } - - base.InitializeTarget(); - - RegisterEvents(); - } - - /// - /// Registers for the events. - /// - private void RegisterEvents() - { - if (m_EventRegistered) { - return; - } - - if (string.IsNullOrEmpty(m_EventName.Value)) { - Debug.LogError("Error: Unable to receive event. The event name is empty."); - return; - } - - if (m_StoredValue1 == null || !m_StoredValue1.IsShared) { - if (m_GlobalEvent.Value) { - EventHandler.RegisterEvent(m_EventName.Value, ReceivedEvent); - } else { - EventHandler.RegisterEvent(m_ResolvedBehaviorTree, m_EventName.Value, ReceivedEvent); - } - } else { - if (m_StoredValue2 == null || !m_StoredValue2.IsShared) { - if (m_GlobalEvent.Value) { - EventHandler.RegisterEvent(m_EventName.Value, ReceivedEvent); - } else { - EventHandler.RegisterEvent(m_ResolvedBehaviorTree, m_EventName.Value, ReceivedEvent); - } - } else { - if (m_StoredValue3 == null || !m_StoredValue3.IsShared) { - if (m_GlobalEvent.Value) { - EventHandler.RegisterEvent(m_EventName.Value, ReceivedEvent); - } else { - EventHandler.RegisterEvent(m_ResolvedBehaviorTree, m_EventName.Value, ReceivedEvent); - } - } else { - if (m_GlobalEvent.Value) { - EventHandler.RegisterEvent(m_EventName.Value, ReceivedEvent); - } else { - EventHandler.RegisterEvent(m_ResolvedBehaviorTree, m_EventName.Value, ReceivedEvent); - } - } - } - } - - m_EventName.OnValueChange += UpdateEvents; - if (m_StoredValue1 != null) { m_StoredValue1.OnValueChange += UpdateEvents; } - if (m_StoredValue2 != null) { m_StoredValue2.OnValueChange += UpdateEvents; } - if (m_StoredValue3 != null) { m_StoredValue3.OnValueChange += UpdateEvents; } - - m_EventRegistered = true; - m_RegisteredEventName = m_EventName.Value; - } - - /// - /// The event name or parameter count has changed. Update the events. - /// - private void UpdateEvents() - { - UnregisterEvents(); - RegisterEvents(); - } - - /// - /// A parameterless event has been recevied. - /// - private void ReceivedEvent() - { - m_EventReceived = true; - } - - /// - /// A single parameter event has been received. - /// - /// The first parameter. - private void ReceivedEvent(object arg1) - { - m_EventReceived = true; - - if (m_StoredValue1 != null && m_StoredValue1.IsShared) { m_StoredValue1.SetValue(arg1); } - } - - /// - /// A two parameter event has been received. - /// - /// The first parameter. - /// The second parameter. - private void ReceivedEvent(object arg1, object arg2) - { - m_EventReceived = true; - - if (m_StoredValue1 != null && m_StoredValue1.IsShared) { m_StoredValue1.SetValue(arg1); } - if (m_StoredValue2 != null && m_StoredValue2.IsShared) { m_StoredValue2.SetValue(arg2); } - } - - /// - /// A three parameter event has been received. - /// - /// The first parameter. - /// The second parameter. - /// The third parameter. - private void ReceivedEvent(object arg1, object arg2, object arg3) - { - m_EventReceived = true; - - if (m_StoredValue1 != null && m_StoredValue1.IsShared) { m_StoredValue1.SetValue(arg1); } - if (m_StoredValue2 != null && m_StoredValue2.IsShared) { m_StoredValue2.SetValue(arg2); } - if (m_StoredValue3 != null && m_StoredValue3.IsShared) { m_StoredValue3.SetValue(arg3); } - } - - /// - /// Callback when the task is started. - /// - public override void OnStart() - { - base.OnStart(); - - if (m_ResetEventReceived) { - m_EventReceived = false; - } - } - - /// - /// The task has been updated. - /// - /// True if an event has been received. - public override TaskStatus OnUpdate() - { - return m_EventReceived ? TaskStatus.Success : TaskStatus.Failure; - } - - /// - /// Reevaluates the task logic. - /// - /// The status of the task during the reevaluation phase. - public override TaskStatus OnReevaluateUpdate() - { - if (m_EventReceived) { - // OnStart/OnUpdate will be called immediately after the task is reevaluated. Do not reset the receive status. - m_ResetEventReceived = false; - return TaskStatus.Success; - } - return TaskStatus.Failure; - } - - /// - /// The task has ended. - /// - public override void OnEnd() - { - base.OnEnd(); - - m_EventReceived = false; - m_ResetEventReceived = true; - } - - /// - /// The behavior tree has been stopped. - /// - /// Is the behavior tree paused? - public override void OnBehaviorTreeStopped(bool paused) - { - base.OnBehaviorTreeStopped(paused); - - UnregisterEvents(); - m_EventReceived = false; - m_ResetEventReceived = true; - } - - /// - /// Unregisters for the events that were registered. - /// - private void UnregisterEvents() - { - // The events must be registered first in order to be unregistered. - if (string.IsNullOrEmpty(m_RegisteredEventName)) { - return; - } - - // Unregister from all parameters. This will ensure no events are subscribed if the parameters change. - if (m_GlobalEvent.Value) { - EventHandler.UnregisterEvent(m_RegisteredEventName, ReceivedEvent); - EventHandler.UnregisterEvent(m_RegisteredEventName, ReceivedEvent); - EventHandler.UnregisterEvent(m_RegisteredEventName, ReceivedEvent); - EventHandler.UnregisterEvent(m_RegisteredEventName, ReceivedEvent); - } else { - EventHandler.UnregisterEvent(m_ResolvedBehaviorTree, m_RegisteredEventName, ReceivedEvent); - EventHandler.UnregisterEvent(m_ResolvedBehaviorTree, m_RegisteredEventName, ReceivedEvent); - EventHandler.UnregisterEvent(m_ResolvedBehaviorTree, m_RegisteredEventName, ReceivedEvent); - EventHandler.UnregisterEvent(m_ResolvedBehaviorTree, m_RegisteredEventName, ReceivedEvent); - } - - m_EventName.OnValueChange -= UpdateEvents; - if (m_StoredValue1 != null) { m_StoredValue1.OnValueChange -= UpdateEvents; } - if (m_StoredValue2 != null) { m_StoredValue2.OnValueChange -= UpdateEvents; } - if (m_StoredValue3 != null) { m_StoredValue3.OnValueChange -= UpdateEvents; } - - m_EventRegistered = false; - m_RegisteredEventName = string.Empty; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasReceivedEvent.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasReceivedEvent.cs.meta deleted file mode 100644 index 67b2e30b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasReceivedEvent.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3c2c0606584fdc345a81cf527b283e30 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasValue.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasValue.cs deleted file mode 100644 index b6f49981..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasValue.cs +++ /dev/null @@ -1,38 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using System.Collections; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Returns true if the specified variable has a value.")] - public class HasValue : Conditional - { - [Tooltip("The variable to compare.")] - [SerializeField] protected SharedVariable m_Variable; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - object variableValue = null; - if (m_Variable == null || (variableValue = m_Variable.GetValue()) == null || variableValue.Equals(null)) { - return TaskStatus.Failure; - } - - if (variableValue is IList listValue) { - return listValue.Count > 0 ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasValue.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasValue.cs.meta deleted file mode 100644 index fd2ccafe..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/HasValue.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e1e162d80f7bf49419493fe43c33c0a5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/IsBehaviorTreeActive.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/IsBehaviorTreeActive.cs deleted file mode 100644 index 2a4a9f28..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/IsBehaviorTreeActive.cs +++ /dev/null @@ -1,29 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals -{ - using Opsive.GraphDesigner.Runtime; - - [NodeIcon("e0a8f1df788b6274a9a24003859dfa7e")] - [Opsive.Shared.Utility.Description("Returns true if the specified behavior tree is active.")] - public class IsBehaviorTreeActive : TargetBehaviorTreeConditional - { - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - if (m_ResolvedBehaviorTree == null) { - return TaskStatus.Failure; - } - - return m_ResolvedBehaviorTree.IsActive() ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/IsBehaviorTreeActive.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/IsBehaviorTreeActive.cs.meta deleted file mode 100644 index df7d0264..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/IsBehaviorTreeActive.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2d23ca37ee86b15428911307549ab429 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math.meta deleted file mode 100644 index 0891ce0b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a1963b538eafb4144b6fdd080af86056 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/BoolComparison.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/BoolComparison.cs deleted file mode 100644 index faf2ab20..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/BoolComparison.cs +++ /dev/null @@ -1,32 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Compares two boolean values.")] - [Shared.Utility.Category("Math")] - public class BoolComparison : Conditional - { - [Tooltip("The first boolean.")] - [SerializeField] protected SharedVariable m_Bool1; - [Tooltip("The second boolean.")] - [SerializeField] protected SharedVariable m_Bool2; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - return m_Bool1.Value == m_Bool2.Value ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/BoolComparison.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/BoolComparison.cs.meta deleted file mode 100644 index 62ddc3ab..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/BoolComparison.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 20df1d25d6eab8b429d6c8fe6af5a87a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/FloatComparison.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/FloatComparison.cs deleted file mode 100644 index 90c09d3c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/FloatComparison.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Math -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Compares two float values.")] - [Shared.Utility.Category("Math")] - public class FloatComparison : Conditional - { - /// - /// Specifies the type of comparison that should be performed. - /// - protected enum Operation - { - LessThan, - LessThanOrEqualTo, - EqualTo, - NotEqualTo, - GreaterThanOrEqualTo, - GreaterThan - } - - [Tooltip("The operation that should be performed.")] - [SerializeField] protected SharedVariable m_Operation; - [Tooltip("The first float.")] - [SerializeField] protected SharedVariable m_Float1; - [Tooltip("The second float.")] - [SerializeField] protected SharedVariable m_Float2; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - switch (m_Operation.Value) { - case Operation.LessThan: - return m_Float1.Value < m_Float2.Value ? TaskStatus.Success : TaskStatus.Failure; - case Operation.LessThanOrEqualTo: - return m_Float1.Value <= m_Float2.Value ? TaskStatus.Success : TaskStatus.Failure; - case Operation.EqualTo: - return m_Float1.Value == m_Float2.Value ? TaskStatus.Success : TaskStatus.Failure; - case Operation.NotEqualTo: - return m_Float1.Value != m_Float2.Value ? TaskStatus.Success : TaskStatus.Failure; - case Operation.GreaterThanOrEqualTo: - return m_Float1.Value >= m_Float2.Value ? TaskStatus.Success : TaskStatus.Failure; - case Operation.GreaterThan: - return m_Float1.Value > m_Float2.Value ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/FloatComparison.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/FloatComparison.cs.meta deleted file mode 100644 index 119bcdec..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/FloatComparison.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a440ba0c2e06f5c4aaeaf7921c721c69 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/GameObjectComparison.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/GameObjectComparison.cs deleted file mode 100644 index 1835a4c9..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/GameObjectComparison.cs +++ /dev/null @@ -1,32 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Compares two GameObject values.")] - [Shared.Utility.Category("Math")] - public class GameObjectComparison : Conditional - { - [Tooltip("The first GameObject.")] - [SerializeField] protected SharedVariable m_GameObject1; - [Tooltip("The second GameObject.")] - [SerializeField] protected SharedVariable m_GameObject2; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - return m_GameObject1.Value == m_GameObject2.Value ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/GameObjectComparison.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/GameObjectComparison.cs.meta deleted file mode 100644 index 37f83d3f..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/GameObjectComparison.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3462716a0f02f06448a43ed06afe8ea8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/IntComparison.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/IntComparison.cs deleted file mode 100644 index 4e57e263..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/IntComparison.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Compares two integer values.")] - [Shared.Utility.Category("Math")] - public class IntComparison : Conditional - { - /// - /// Specifies the type of comparison that should be performed. - /// - protected enum Operation - { - LessThan, - LessThanOrEqualTo, - EqualTo, - NotEqualTo, - GreaterThanOrEqualTo, - GreaterThan - } - - [Tooltip("The operation that should be performed.")] - [SerializeField] protected SharedVariable m_Operation; - [Tooltip("The first integer.")] - [SerializeField] protected SharedVariable m_Integer1; - [Tooltip("The second integer.")] - [SerializeField] protected SharedVariable m_Integer2; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - switch (m_Operation.Value) { - case Operation.LessThan: - return m_Integer1.Value < m_Integer2.Value ? TaskStatus.Success : TaskStatus.Failure; - case Operation.LessThanOrEqualTo: - return m_Integer1.Value <= m_Integer2.Value ? TaskStatus.Success : TaskStatus.Failure; - case Operation.EqualTo: - return m_Integer1.Value == m_Integer2.Value ? TaskStatus.Success : TaskStatus.Failure; - case Operation.NotEqualTo: - return m_Integer1.Value != m_Integer2.Value ? TaskStatus.Success : TaskStatus.Failure; - case Operation.GreaterThanOrEqualTo: - return m_Integer1.Value >= m_Integer2.Value ? TaskStatus.Success : TaskStatus.Failure; - case Operation.GreaterThan: - return m_Integer1.Value > m_Integer2.Value ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/IntComparison.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/IntComparison.cs.meta deleted file mode 100644 index ed8efa1c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/IntComparison.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a375a939d653fe147a5a14a0c2bef1ff -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector2Comparison.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector2Comparison.cs deleted file mode 100644 index 53d317c8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector2Comparison.cs +++ /dev/null @@ -1,32 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Compares two Vector2 values.")] - [Shared.Utility.Category("Math")] - public class Vector2Comparison : Conditional - { - [Tooltip("The first Vector2.")] - [SerializeField] protected SharedVariable m_Vector1; - [Tooltip("The second Vector2.")] - [SerializeField] protected SharedVariable m_Vector2; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - return m_Vector1.Value == m_Vector2.Value ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector2Comparison.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector2Comparison.cs.meta deleted file mode 100644 index ec6e6d86..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector2Comparison.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7c2b3d80126bb1f4d861fd3179310f4e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector3Comparison.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector3Comparison.cs deleted file mode 100644 index 96029141..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector3Comparison.cs +++ /dev/null @@ -1,32 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Math -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Compares two Vector3 values.")] - [Shared.Utility.Category("Math")] - public class Vector3Comparison : Conditional - { - [Tooltip("The first Vector3.")] - [SerializeField] protected SharedVariable m_Vector1; - [Tooltip("The second Vector3.")] - [SerializeField] protected SharedVariable m_Vector2; - - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - { - return m_Vector1.Value == m_Vector2.Value ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector3Comparison.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector3Comparison.cs.meta deleted file mode 100644 index 5fdfc3e1..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Math/Vector3Comparison.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 56a06b56642c23e41be3a6ed24331bc4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics.meta deleted file mode 100644 index 8015fc83..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 61662c8f56bf6ff448ec2a4c8761613a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision.cs deleted file mode 100644 index 07b46889..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Physics -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Returns success when a collision starts. This task will only receive the physics callback if it is being reevaluated (with a conditional abort or under a parallel task).")] - [Shared.Utility.Category("Physics")] - public class HasEnteredCollision : Conditional - { - [Tooltip("The tag of the GameObject that the collision should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The collided GameObject.")] - [SerializeField] protected SharedVariable m_StoredCollisionGameObject; - - protected override bool ReceiveCollisionEnterCallback => true; - - private bool m_EnteredCollision; - - /// - /// Returns true when the agent has caused a collision. - /// - /// True when the agent has caused a collision. - public override TaskStatus OnUpdate() - { - return m_EnteredCollision ? TaskStatus.Success : TaskStatus.Failure; - } - - /// - /// The task has ended. - /// - public override void OnEnd() - { - base.OnEnd(); - - m_EnteredCollision = false; - } - - /// - /// The agent has caused a collision. - /// - /// The collision that caused the event. - protected override void OnCollisionEnter(Collision collision) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !collision.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredCollisionGameObject != null && m_StoredCollisionGameObject.IsShared) { m_StoredCollisionGameObject.Value = collision.gameObject; } - - m_EnteredCollision = true; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision.cs.meta deleted file mode 100644 index 08dd55ad..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9ce4017c15025f648a4a737683b98b18 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision2D.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision2D.cs deleted file mode 100644 index 4571b070..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision2D.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Physics -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Returns success when a 2D collision starts. This task will only receive the physics callback if it is being reevaluated (with a conditional abort or under a parallel task).")] - [Shared.Utility.Category("Physics")] - public class HasEnteredCollision2D : Conditional - { - [Tooltip("The tag of the GameObject that the collision should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The collided GameObject.")] - [SerializeField] protected SharedVariable m_StoredCollisionGameObject; - - protected override bool ReceiveCollisionEnterCallback => true; - - private bool m_EnteredCollision; - - /// - /// Returns true when the agent has caused a collision. - /// - /// True when the agent has caused a collision. - public override TaskStatus OnUpdate() - { - return m_EnteredCollision ? TaskStatus.Success : TaskStatus.Failure; - } - - /// - /// The task has ended. - /// - public override void OnEnd() - { - base.OnEnd(); - - m_EnteredCollision = false; - } - - /// - /// The agent has caused a collision. - /// - /// The collision that caused the event. - protected override void OnCollisionEnter2D(Collision2D collision) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !collision.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredCollisionGameObject != null && m_StoredCollisionGameObject.IsShared) { m_StoredCollisionGameObject.Value = collision.gameObject; } - - m_EnteredCollision = true; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision2D.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision2D.cs.meta deleted file mode 100644 index 50d55e52..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredCollision2D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 37fa749cbcf6f7c459159eba18e9ca31 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger.cs deleted file mode 100644 index ec16868c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Physics -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Returns success when an object enters the trigger. This task will only receive the physics callback if it is being reevaluated (with a conditional abort or under a parallel task).")] - [Shared.Utility.Category("Physics")] - public class HasEnteredTrigger : Conditional - { - [Tooltip("The tag of the GameObject that the trigger should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The entered trigger.")] - [SerializeField] protected SharedVariable m_StoredOtherCollider; - - protected override bool ReceiveTriggerEnterCallback => true; - - private bool m_EnteredTrigger; - - /// - /// Returns true when the agent has entered a trigger. - /// - /// True when the agent has entered a trigger. - public override TaskStatus OnUpdate() - { - return m_EnteredTrigger ? TaskStatus.Success : TaskStatus.Failure; - } - - /// - /// The task has ended. - /// - public override void OnEnd() - { - base.OnEnd(); - - m_EnteredTrigger = false; - } - - /// - /// The agent has entered a trigger. - /// - /// The trigger that the agent entered. - protected override void OnTriggerEnter(Collider other) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !other.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredOtherCollider != null && m_StoredOtherCollider.IsShared) { m_StoredOtherCollider.Value = other; } - - m_EnteredTrigger = true; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger.cs.meta deleted file mode 100644 index 4298a2a7..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fe018fbcfb4b7404f865318125440626 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger2D.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger2D.cs deleted file mode 100644 index 1d91e691..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger2D.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Physics -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Returns success when an object enters the 2D trigger. This task will only receive the physics callback if it is being reevaluated (with a conditional abort or under a parallel task).")] - [Shared.Utility.Category("Physics")] - public class HasEnteredTrigger2D : Conditional - { - [Tooltip("The tag of the GameObject that the trigger should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The entered trigger.")] - [SerializeField] protected SharedVariable m_StoredOtherCollider; - - protected override bool ReceiveTriggerEnter2DCallback => true; - - private bool m_EnteredTrigger; - - /// - /// Returns true when the agent has entered a trigger. - /// - /// True when the agent has entered a trigger. - public override TaskStatus OnUpdate() - { - return m_EnteredTrigger ? TaskStatus.Success : TaskStatus.Failure; - } - - /// - /// The task has ended. - /// - public override void OnEnd() - { - base.OnEnd(); - - m_EnteredTrigger = false; - } - - /// - /// The agent has entered a trigger. - /// - /// The trigger that the agent entered. - protected override void OnTriggerEnter2D(Collider2D other) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !other.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredOtherCollider != null && m_StoredOtherCollider.IsShared) { m_StoredOtherCollider.Value = other; } - - m_EnteredTrigger = true; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger2D.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger2D.cs.meta deleted file mode 100644 index cd890485..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasEnteredTrigger2D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 83caefa20e976f047b96f600eecffaed -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision.cs deleted file mode 100644 index 2bba301a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Physics -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Returns success when a collision ends. This task will only receive the physics callback if it is being reevaluated (with a conditional abort or under a parallel task).")] - [Shared.Utility.Category("Physics")] - public class HasExitedCollision : Conditional - { - [Tooltip("The tag of the GameObject that the collision should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The collided GameObject.")] - [SerializeField] protected SharedVariable m_StoredCollisionGameObject; - - protected override bool ReceiveCollisionExitCallback => true; - - private bool m_ExitedCollision; - - /// - /// Returns true when the agent has left a collision. - /// - /// True when the agent has left a collision. - public override TaskStatus OnUpdate() - { - return m_ExitedCollision ? TaskStatus.Success : TaskStatus.Failure; - } - - /// - /// The task has ended. - /// - public override void OnEnd() - { - base.OnEnd(); - - m_ExitedCollision = false; - } - - /// - /// The agent has left a collision. - /// - /// The collision that caused the event. - protected override void OnCollisionExit(Collision collision) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !collision.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredCollisionGameObject != null && m_StoredCollisionGameObject.IsShared) { m_StoredCollisionGameObject.Value = collision.gameObject; } - - m_ExitedCollision = true; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision.cs.meta deleted file mode 100644 index 4c94e62b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c3ac7ec5199af7049b246d4eabfb0d51 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision2D.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision2D.cs deleted file mode 100644 index 81ed530c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision2D.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Physics -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Returns success when a 2D collision ends. This task will only receive the physics callback if it is being reevaluated (with a conditional abort or under a parallel task).")] - [Shared.Utility.Category("Physics")] - public class HasExitedCollision2D : Conditional - { - [Tooltip("The tag of the GameObject that the collision should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The collided GameObject.")] - [SerializeField] protected SharedVariable m_StoredCollisionGameObject; - - protected override bool ReceiveCollisionExit2DCallback => true; - - private bool m_ExitedCollision; - - /// - /// Returns true when the agent has left a collision. - /// - /// True when the agent has left a collision. - public override TaskStatus OnUpdate() - { - return m_ExitedCollision ? TaskStatus.Success : TaskStatus.Failure; - } - - /// - /// The task has ended. - /// - public override void OnEnd() - { - base.OnEnd(); - - m_ExitedCollision = false; - } - - /// - /// The agent has left a collision. - /// - /// The collision that caused the event. - protected override void OnCollisionExit2D(Collision2D collision) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !collision.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredCollisionGameObject != null && m_StoredCollisionGameObject.IsShared) { m_StoredCollisionGameObject.Value = collision.gameObject; } - - m_ExitedCollision = true; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision2D.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision2D.cs.meta deleted file mode 100644 index 7d886ec2..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedCollision2D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5fdb5f736525568428350e746b5b6d59 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger.cs deleted file mode 100644 index c92f1b50..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Physics -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Returns success when an object exits the trigger. This task will only receive the physics callback if it is being reevaluated (with a conditional abort or under a parallel task).")] - [Shared.Utility.Category("Physics")] - public class HasExitedTrigger : Conditional - { - [Tooltip("The tag of the GameObject that the trigger should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The exited trigger.")] - [SerializeField] protected SharedVariable m_StoredOtherCollider; - - protected override bool ReceiveTriggerExitCallback => true; - - private bool m_ExitedTrigger; - - /// - /// Returns true when the agent has exited a trigger. - /// - /// True when the agent has exited a trigger. - public override TaskStatus OnUpdate() - { - return m_ExitedTrigger ? TaskStatus.Success : TaskStatus.Failure; - } - - /// - /// The task has ended. - /// - public override void OnEnd() - { - base.OnEnd(); - - m_ExitedTrigger = false; - } - - /// - /// The agent has exited a trigger. - /// - /// The trigger that the agent exited. - protected override void OnTriggerExit(Collider other) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !other.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredOtherCollider != null && m_StoredOtherCollider.IsShared) { m_StoredOtherCollider.Value = other; } - - m_ExitedTrigger = true; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger.cs.meta deleted file mode 100644 index 3457e092..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9bde13c58ab44304da9e904934375552 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger2D.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger2D.cs deleted file mode 100644 index c9c2b4d7..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger2D.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals.Physics -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [Opsive.Shared.Utility.Description("Returns success when an object exits the 2D trigger. This task will only receive the physics callback if it is being reevaluated (with a conditional abort or under a parallel task).")] - [Shared.Utility.Category("Physics")] - public class HasExitedTrigger2D : Conditional - { - [Tooltip("The tag of the GameObject that the trigger should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The exited trigger.")] - [SerializeField] protected SharedVariable m_StoredOtherCollider; - - protected override bool ReceiveTriggerExit2DCallback => true; - - private bool m_ExitedTrigger; - - /// - /// Returns true when the agent has exited a trigger. - /// - /// True when the agent has exited a trigger. - public override TaskStatus OnUpdate() - { - return m_ExitedTrigger ? TaskStatus.Success : TaskStatus.Failure; - } - - /// - /// The task has ended. - /// - public override void OnEnd() - { - base.OnEnd(); - - m_ExitedTrigger = false; - } - - /// - /// The agent has exited a trigger. - /// - /// The trigger that the agent exited. - protected override void OnTriggerExit2D(Collider2D other) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !other.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredOtherCollider != null && m_StoredOtherCollider.IsShared) { m_StoredOtherCollider.Value = other; } - - m_ExitedTrigger = true; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger2D.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger2D.cs.meta deleted file mode 100644 index 168f1d5d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/Physics/HasExitedTrigger2D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 74c369fe788ddbb4ab2b9265bdf4e9c0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/RandomProbability.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/RandomProbability.cs deleted file mode 100644 index f27b2878..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/RandomProbability.cs +++ /dev/null @@ -1,229 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Unity.Burst; - using Unity.Entities; - using UnityEngine; - using System; - - /// - /// A node representation of the random probability task. - /// - [NodeIcon("69bf50f8923f54c4c8bb8e258883a411", "6c5770241610a4c4aae4ac3af0ac8bf8")] - [Opsive.Shared.Utility.Description("The random probability task will return success when the random probability is below the succeed probability. It will otherwise return failure.")] - public class RandomProbability : ECSConditionalTask, IReevaluateResponder, ICloneable - { - [Tooltip("The probability of the task returning success.")] - [SerializeField] [Range(0, 1)] float m_SuccessProbability; - [Tooltip("The seed of the random number generator. Set to 0 to use the entity index as the seed.")] - [SerializeField] uint m_Seed; - - public float SuccessProbability { get => m_SuccessProbability; set => m_SuccessProbability = value; } - public uint Seed { get => m_Seed; set => m_Seed = value; } - - public override ComponentType Flag { get => typeof(RandomProbabilityFlag); } - public ComponentType ReevaluateFlag { get => typeof(RandomProbabilityReevaluateFlag); } - public System.Type ReevaluateSystemType { get => typeof(RandomProbabilityReevaluateTaskSystem); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override RandomProbabilityComponent GetBufferElement() - { - return new RandomProbabilityComponent() - { - Index = RuntimeIndex, - SuccessProbability = m_SuccessProbability, - Seed = m_Seed, - }; - } - - /// - /// Resets the task to its default values. - /// - public override void Reset() - { - m_SuccessProbability = 1; - } - - /// - /// Creates a deep clone of the component. - /// - /// A deep clone of the component. - public object Clone() - { - var clone = Activator.CreateInstance(); - clone.Index = Index; - clone.ParentIndex = ParentIndex; - clone.SiblingIndex = SiblingIndex; - clone.SuccessProbability = SuccessProbability; - return clone; - } - } - - /// - /// The DOTS data structure for the RandomProbability class. - /// - public struct RandomProbabilityComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - [Tooltip("The probability of the task returning success.")] - public float SuccessProbability; - [Tooltip("The seed of the random number generator.")] - public uint Seed; - [Tooltip("The random number generator for the task.")] - public Unity.Mathematics.Random RandomNumberGenerator; - } - - /// - /// A DOTS tag indicating when a RandomProbability node is active. - /// - public struct RandomProbabilityFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the RandomProbability logic. - /// - [DisableAutoCreation] - public partial struct RandomProbabilityTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new RandomProbabilityJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct RandomProbabilityJob : IJobEntity - { - /// - /// Executes the random probability logic. - /// - /// The entity that is running the logic. - /// An array of TaskComponents. - /// An array of RandomProbabilityComponents. - [BurstCompile] - public void Execute(Entity entity, ref DynamicBuffer taskComponents, ref DynamicBuffer randomProbabilityComponents) - { - for (int i = 0; i < randomProbabilityComponents.Length; ++i) { - var randomProbabilityComponent = randomProbabilityComponents[i]; - var taskComponent = taskComponents[randomProbabilityComponent.Index]; - if (taskComponent.Status == TaskStatus.Queued) { - // Generate a new random number seed for each entity. - if (randomProbabilityComponent.RandomNumberGenerator.state == 0) { - randomProbabilityComponent.RandomNumberGenerator = Unity.Mathematics.Random.CreateFromIndex(randomProbabilityComponent.Seed != 0 ? randomProbabilityComponent.Seed : (uint)entity.Index); - } - // NextFloat updates the RandomNumberGenerator so the component must be replaced. - var probability = randomProbabilityComponent.RandomNumberGenerator.NextFloat(); - var randomProbabilityBuffer = randomProbabilityComponents; - randomProbabilityBuffer[i] = randomProbabilityComponent; - - // The task will always change status. - taskComponent.Status = probability < randomProbabilityComponent.SuccessProbability ? TaskStatus.Success : TaskStatus.Failure; - taskComponents[randomProbabilityComponent.Index] = taskComponent; - } else if (taskComponent.Status == TaskStatus.Running) { - // A status of running means the task is being resumed from a conditional abort. Return success. - taskComponent.Status = TaskStatus.Success; - taskComponents[randomProbabilityComponent.Index] = taskComponent; - } - } - } - } - } - - - /// - /// A DOTS tag indicating when an RandomProbability node needs to be reevaluated. - /// - public struct RandomProbabilityReevaluateFlag : IComponentData, IEnableableComponent - { - } - - /// - /// Runs the RandomProbability reevaluation logic. - /// - [DisableAutoCreation] - public partial struct RandomProbabilityReevaluateTaskSystem : ISystem - { - /// - /// Updates the reevaluation logic. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - foreach (var (taskComponents, randomProbabilityComponents, entity) in - SystemAPI.Query, DynamicBuffer>().WithAll().WithEntityAccess()) { - for (int i = 0; i < randomProbabilityComponents.Length; ++i) { - var randomProbabilityComponent = randomProbabilityComponents[i]; - var taskComponent = taskComponents[randomProbabilityComponent.Index]; - if (!taskComponent.Reevaluate) { - continue; - } - - // NextFloat updates the RandomNumberGenerator so the component must be replaced. - var probability = randomProbabilityComponent.RandomNumberGenerator.NextFloat(); - var randomProbabilityBuffer = randomProbabilityComponents; - randomProbabilityBuffer[i] = randomProbabilityComponent; - - var status = probability < randomProbabilityComponent.SuccessProbability ? TaskStatus.Success : TaskStatus.Failure; - if (status != taskComponent.Status) { - taskComponent.Status = status; - var buffer = taskComponents; - buffer[taskComponent.Index] = taskComponent; - } - } - } - } - } - - [NodeIcon("69bf50f8923f54c4c8bb8e258883a411", "6c5770241610a4c4aae4ac3af0ac8bf8")] - [Opsive.Shared.Utility.Description("The random probability task will return success when the random probability is below the succeed probability. It will otherwise return failure.")] - public class SharedRandomProbability : Conditional - { - [Tooltip("The probability of the task returning success.")] - [SerializeField] SharedVariable m_SuccessProbability; - [Tooltip("The seed of the random number generator. Set to 0 to disable.")] - [SerializeField] int m_Seed; - - public SharedVariable SuccessProbability { get => m_SuccessProbability; set => m_SuccessProbability = value; } - public int Seed { get => m_Seed; set => m_Seed = value; } - - /// - /// Callback when the task is initialized. - /// - public override void OnAwake() - { - if (m_Seed != 0) { - UnityEngine.Random.InitState(m_Seed); - } - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - return UnityEngine.Random.value < m_SuccessProbability.Value ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/RandomProbability.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/RandomProbability.cs.meta deleted file mode 100644 index a9ad684e..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/RandomProbability.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b6240825104968e44a250a717de2f39a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/StackedConditional.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/StackedConditional.cs deleted file mode 100644 index 3e420887..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/StackedConditional.cs +++ /dev/null @@ -1,49 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals -{ - using Opsive.GraphDesigner.Runtime; - - /// - /// The StackedConditional task allows for multiple conditionals to be added to the same node. - /// - [NodeIcon("b2368834b8b80144a8b1ab97b609e966", "86fbf527a2c761e45bc4a47cf4894902")] - [Opsive.Shared.Utility.Description("Allows multiple conditional tasks to be added to a single node.")] - public class StackedConditional : StackedTask, IConditional, IConditionalReevaluation - { - /// - /// Reevaluates the task logic. Returns a TaskStatus indicating how the behavior tree flow should proceed. - /// - /// The status of the task during the reevaluation phase. - public TaskStatus OnReevaluateUpdate() - { - if (m_Tasks == null) { - return TaskStatus.Failure; - } - - for (int i = 0; i < m_Tasks.Length; ++i) { - if (m_Tasks[i] == null) { - continue; - } - - TaskStatus executionStatus; - if (m_Tasks[i] is IConditionalReevaluation reevaluateTask) { - executionStatus = reevaluateTask.OnReevaluateUpdate(); - } else { // Use the regular update method if the task isn't designed for conditional aborts. - executionStatus = m_Tasks[i].OnUpdate(); - } - if (m_ComparisonType == ComparisonType.Sequence && executionStatus == TaskStatus.Failure) { - return TaskStatus.Failure; - } else if (m_ComparisonType == ComparisonType.Selector && executionStatus == TaskStatus.Success) { - return TaskStatus.Success; - } - } - return m_ComparisonType == ComparisonType.Sequence ? TaskStatus.Success : TaskStatus.Failure; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/StackedConditional.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/StackedConditional.cs.meta deleted file mode 100644 index 7355b1b8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/StackedConditional.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 73c25e0bc2411614e950faaf32f8cfa1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetBehaviorTreeConditional.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetBehaviorTreeConditional.cs deleted file mode 100644 index 3f45e65b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetBehaviorTreeConditional.cs +++ /dev/null @@ -1,71 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - /// - /// A TaskObject Conditional task which implements the shared TargetGameObject/TreeUserID objects. - /// - public abstract class TargetBehaviorTreeConditional : Conditional - { - [Tooltip("The GameObject of the target behavior tree. If the value is null the current GameObject will be used.")] - [SerializeField] protected SharedVariable m_TargetGameObject; - [Tooltip("The index of the tree if there are multiple behavior trees on the same GameObject.")] - [SerializeField] protected SharedVariable m_TreeIndex; - - protected BehaviorTree m_ResolvedBehaviorTree; - - /// - /// Initializes the task. - /// - public override void OnAwake() - { - m_TargetGameObject.OnValueChange += InitializeTarget; - m_TreeIndex.OnValueChange += InitializeTarget; - - InitializeTarget(); - } - - /// - /// Initializes the target behavior tree. - /// - protected virtual void InitializeTarget() - { - if (m_TargetGameObject.Value == null) { - m_ResolvedBehaviorTree = m_BehaviorTree; - } else { - var behaviorTrees = m_TargetGameObject.Value.GetComponents(); - if (behaviorTrees.Length == 1) { - m_ResolvedBehaviorTree = behaviorTrees[0]; - } else if (behaviorTrees.Length > 1) { - for (int i = 0; i < behaviorTrees.Length; ++i) { - if (behaviorTrees[i].Index == m_TreeIndex.Value) { - m_ResolvedBehaviorTree = behaviorTrees[i]; - break; - } - } - // If the UserID can't be found then use the first behavior tree. - if (m_ResolvedBehaviorTree == null) { - m_ResolvedBehaviorTree = behaviorTrees[0]; - } - } - } - } - - /// - /// The behavior tree has been destroyed. - /// - public override void OnDestroy() - { - m_TargetGameObject.OnValueChange -= InitializeTarget; - m_TreeIndex.OnValueChange -= InitializeTarget; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetBehaviorTreeConditional.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetBehaviorTreeConditional.cs.meta deleted file mode 100644 index c02b23b3..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetBehaviorTreeConditional.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8829f667141e1c04d95d5f9f2f68c7e2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetGameObjectConditional.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetGameObjectConditional.cs deleted file mode 100644 index 087bdb94..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetGameObjectConditional.cs +++ /dev/null @@ -1,53 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals -{ - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - /// - /// A TaskObject Conditional task which returns the current GameObject if the target is null. - /// - public abstract class TargetGameObjectConditional : Conditional - { - [Tooltip("The GameObject of the target behavior tree. If the value is null the current GameObject will be used.")] - [SerializeField] protected SharedVariable m_TargetGameObject; - protected override GameObject gameObject => m_ResolvedGameObject; - protected override Transform transform => m_ResolvedTransform; - - protected GameObject m_ResolvedGameObject; - protected Transform m_ResolvedTransform; - - /// - /// Initializes the task. - /// - public override void OnAwake() - { - m_TargetGameObject.OnValueChange += InitializeTarget; - - InitializeTarget(); - } - - /// - /// Initializes the target GameObject. - /// - protected virtual void InitializeTarget() - { - m_ResolvedGameObject = (m_TargetGameObject.Value == null || m_TargetGameObject.Value.Equals(null)) ? m_GameObject : m_TargetGameObject.Value; - m_ResolvedTransform = m_ResolvedGameObject.transform; - } - - /// - /// The behavior tree has been destroyed. - /// - public override void OnDestroy() - { - m_TargetGameObject.OnValueChange -= InitializeTarget; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetGameObjectConditional.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetGameObjectConditional.cs.meta deleted file mode 100644 index f05cbf18..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Conditionals/TargetGameObjectConditional.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e53a3005031301c4c9f7c723c82763ce -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators.meta deleted file mode 100644 index 4278c3b4..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1ae3ab6e20912c24eb56a8bc711e7688 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ConditionalEvaluator.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ConditionalEvaluator.cs deleted file mode 100644 index 7c63b51d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ConditionalEvaluator.cs +++ /dev/null @@ -1,176 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; - using Opsive.BehaviorDesigner.Runtime.Utility; - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Utility; - using Opsive.Shared.Utility; - using Unity.Entities; - using UnityEngine; - - /// - /// The Conditional Evaluator is a decorator that will evaluate the specified conditional task. This conditional task can be reevaluated while the current task is active. - /// - [NodeIcon("63d6a403c13816a49b58d1de830ca51e", "3d3c18273075b3f40b6c921943f33964")] - [Opsive.Shared.Utility.Description("Evaluates the specified conditional task. If the conditional task returns success then the child task is run and the child status is returned. If the conditional task does not " + - "return success then the child task is not run and a failure status is immediately returned.")] - public class ConditionalEvaluator : DecoratorNode - { - [Tooltip("The target conditional task that should be evaluated.")] - [SerializeField] [InspectNode] protected Conditional m_Task; - - /// - /// Resets the task values back to their default. - /// - public override void Reset() - { - m_Task = null; - } - - /// - /// Initializes the base task parameters. - /// - /// A reference to the owning BehaviorTree. - /// The runtime index of the node. - internal override void Initialize(BehaviorTree behaviorTree, ushort runtimeIndex) - { - if (m_Task != null) { - m_Task.Initialize(behaviorTree, runtimeIndex); - - if (behaviorTree.World != null) { - ComponentUtility.AddInterruptComponents(behaviorTree.World.EntityManager, behaviorTree.Entity); - } - } - - base.Initialize(behaviorTree, runtimeIndex); - } - - /// - /// The behavior tree has been initialized. - /// - public override void OnAwake() - { - if (m_Task == null) { - Debug.LogError("Error: The task is null within the conditional evaluator."); - return; - } - - m_Task.OnAwake(); - } - - /// - /// The tree has been started. - /// - public override void OnBehaviorTreeStarted() - { - m_Task?.OnBehaviorTreeStarted(); - } - - /// - /// Starts evaluating the specified task. - /// - public override void OnStart() - { - m_Task?.OnStart(); - } - - /// - /// Updates the task. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - if (m_Task == null) { - return TaskStatus.Failure; - } - var status = m_Task.OnUpdate(); - if (status == TaskStatus.Failure) { - return TaskStatus.Failure; - } - - // If the child task returns success or failure then that status should be returned. Otherwise return running. - var taskComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - var childStatus = taskComponents[RuntimeIndex + 1].Status; // RuntimeIndex + 1 will always be the task's only child. - if (childStatus == TaskStatus.Success || childStatus == TaskStatus.Failure) { - return childStatus; - } - return TaskStatus.Running; - } - - /// - /// The task has stopped execution. - /// - public override void OnEnd() - { - m_Task?.OnEnd(); - } - - /// - /// The tree has been stopped. - /// - /// Is the behavior tree paused? - public override void OnBehaviorTreeStopped(bool paused) - { - m_Task?.OnBehaviorTreeStopped(paused); - } - - /// - /// The tree has been destroyed. - /// - public override void OnDestroy() - { - m_Task?.OnDestroy(); - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public override MemberVisibility GetSaveReflectionType(int index) - { - if (m_Task == null) { - return MemberVisibility.None; - } - - return m_Task.GetSaveReflectionType(index); - } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public override object Save(World world, Entity entity) - { - if (m_Task == null) { - return null; - } - - return m_Task.Save(world, entity); - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public override void Load(object saveData, World world, Entity entity) - { - if (m_Task == null) { - return; - } - - m_Task.Load(saveData, world, entity); - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ConditionalEvaluator.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ConditionalEvaluator.cs.meta deleted file mode 100644 index 30ecb07d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ConditionalEvaluator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8421ea18ed1f62349ac95e1b448b2a7f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Cooldown.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Cooldown.cs deleted file mode 100644 index 763f29ef..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Cooldown.cs +++ /dev/null @@ -1,226 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using System; - using Unity.Burst; - using Unity.Entities; - using UnityEngine; - - /// - /// A node representation of the cooldown task. - /// - [NodeIcon("b5459f67bc5033e49ad7a763cdb885bb", "480c79a18119d2a488b5d984211463f1")] - [Opsive.Shared.Utility.Description("Waits the specified duration after the child has completed before returning the child's status of success or failure.")] - public class Cooldown : ECSDecoratorTask, IParentNode - { - [Tooltip("The duration of the cooldown.")] - [SerializeField] float m_Duration; - - public float Duration { get => m_Duration; set => m_Duration = value; } - - private ushort m_ComponentIndex; - - public override ComponentType Flag { get => typeof(CooldownFlag); } - - /// - /// Resets the task to its default values. - /// - public override void Reset() { m_Duration = 1; } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override CooldownComponent GetBufferElement() - { - return new CooldownComponent() - { - Index = RuntimeIndex, - Duration = m_Duration, - StartTime = -1, - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - m_ComponentIndex = (ushort)base.AddBufferElement(world, entity, gameObject); - return m_ComponentIndex; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.None; } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public object Save(World world, Entity entity) - { - var cooldownComponents = world.EntityManager.GetBuffer(entity); - var cooldownComponent = cooldownComponents[m_ComponentIndex]; - - // Save the elapsed time. - return Time.time - cooldownComponent.StartTime; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public void Load(object saveData, World world, Entity entity) - { - var cooldownComponents = world.EntityManager.GetBuffer(entity); - var cooldownComponent = cooldownComponents[m_ComponentIndex]; - - // saveData is the elapsed amount of time. - var data = (object[])saveData; - cooldownComponent.StartTime = Time.time - (double)saveData; - cooldownComponents[m_ComponentIndex] = cooldownComponent; - } - - /// - /// Creates a deep clone of the component. - /// - /// A deep clone of the component. - public object Clone() - { - var clone = Activator.CreateInstance(); - clone.Index = Index; - clone.ParentIndex = ParentIndex; - clone.SiblingIndex = SiblingIndex; - clone.Duration = Duration; - return clone; - } - } - - /// - /// The DOTS data structure for the Cooldown class. - /// - public struct CooldownComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - [Tooltip("The duration of the cooldown.")] - public float Duration; - [Tooltip("The time the cooldown started.")] - public double StartTime; - } - - /// - /// A DOTS tag indicating when an Cooldown node is active. - /// - public struct CooldownFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the Cooldown logic. - /// - [DisableAutoCreation] - public partial struct CooldownTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new CooldownJob() - { - Time = SystemAPI.Time.ElapsedTime - }.ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct CooldownJob : IJobEntity - { - [Tooltip("The elapsed time.")] - public double Time; - - /// - /// Executes the cooldown logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of CooldownComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer cooldownComponents) - { - for (int i = 0; i < cooldownComponents.Length; ++i) { - var cooldownComponent = cooldownComponents[i]; - var taskComponent = taskComponents[cooldownComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) { - continue; - } - - TaskComponent childTaskComponent; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - childTaskComponent = taskComponents[taskComponent.Index + 1]; - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[taskComponent.Index + 1] = childTaskComponent; - - branchComponent.NextIndex = (ushort)(taskComponent.Index + 1); - branchComponents[taskComponent.BranchIndex] = branchComponent; - - continue; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The cooldown task is currently active. Check the first child. - childTaskComponent = taskComponents[taskComponent.Index + 1]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - // The child has completed. Start the timer if it hasn't already started. If it has started then complete when the duration has elapsed. - if (cooldownComponent.StartTime == -1) { - cooldownComponent.StartTime = Time; - cooldownComponents[i] = cooldownComponent; - } else if (cooldownComponent.StartTime + cooldownComponent.Duration <= Time) { - taskComponent.Status = childTaskComponent.Status; - taskComponents[taskComponent.Index] = taskComponent; - - cooldownComponent.StartTime = -1; - var cooldownComponentsBuffer = cooldownComponents; - cooldownComponentsBuffer[i] = cooldownComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Cooldown.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Cooldown.cs.meta deleted file mode 100644 index 1cbbd0c8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Cooldown.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c27e1444ff9ead74a89c45ce81873aca -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/DecoratorNode.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/DecoratorNode.cs deleted file mode 100644 index 5df9f80c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/DecoratorNode.cs +++ /dev/null @@ -1,35 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Systems; - using Opsive.GraphDesigner.Runtime; - using UnityEngine; - - /// - /// A TaskObject implementation of the Decorator task. - /// - [NodeIcon("9abc6c99a8db43b49b2b0d48cca90105", "1ee7d6a0873e3d942b556d3093d8173f")] - public abstract class DecoratorNode : Task, ITreeLogicNode, IParentNode, IDecorator, ITaskObjectParentNode - { - [Tooltip("The index of the node.")] - [SerializeField] ushort m_Index; - [Tooltip("The parent index of the node. ushort.MaxValue indicates no parent.")] - [SerializeField] ushort m_ParentIndex; - [Tooltip("The sibling index of the node. ushort.MaxValue indicates no sibling.")] - [SerializeField] ushort m_SiblingIndex; - - public ushort Index { get => m_Index; set => m_Index = value; } - public ushort ParentIndex { get => m_ParentIndex; set => m_ParentIndex = value; } - public ushort SiblingIndex { get => m_SiblingIndex; set => m_SiblingIndex = value; } - public ushort RuntimeIndex { get; set; } - - public int MaxChildCount { get => 1; } - public ushort NextChildIndex { get => (ushort)(RuntimeIndex + 1); } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/DecoratorNode.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/DecoratorNode.cs.meta deleted file mode 100644 index 360f18d2..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/DecoratorNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8fe6a83d84731a045a4c789e05b85214 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Inverter.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Inverter.cs deleted file mode 100644 index f712e6a8..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Inverter.cs +++ /dev/null @@ -1,126 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Unity.Burst; - using Unity.Entities; - using UnityEngine; - - /// - /// A node representation of the inverter task. - /// - [NodeIcon("53fe4de81c20e924095bdb5f3447acdc", "8d991ea2b725c214c85580d5647c578c")] - [Opsive.Shared.Utility.Description("The inverter task will invert the return value of the child task after it has finished executing. " + - "If the child returns success, the inverter task will return failure. If the child returns failure, the inverter task will return success.")] - public class Inverter : ECSDecoratorTask, IParentNode - { - public override ComponentType Flag { get => typeof(InverterFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override InverterComponent GetBufferElement() - { - return new InverterComponent() - { - Index = RuntimeIndex, - }; - } - } - - /// - /// The DOTS data structure for the Inverter class. - /// - public struct InverterComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - } - - /// - /// A DOTS tag indicating when an Inverter node is active. - /// - public struct InverterFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the Inverter logic. - /// - [DisableAutoCreation] - public partial struct InverterTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new InverterJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct InverterJob : IJobEntity - { - /// - /// Executes the inverter logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of InverterComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer inverterComponents) - { - for (int i = 0; i < inverterComponents.Length; ++i) { - var inverterComponent = inverterComponents[i]; - var taskComponent = taskComponents[inverterComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) { - continue; - } - - TaskComponent childTaskComponent; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - childTaskComponent = taskComponents[taskComponent.Index + 1]; - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[taskComponent.Index + 1] = childTaskComponent; - - branchComponent.NextIndex = (ushort)(taskComponent.Index + 1); - branchComponents[taskComponent.BranchIndex] = branchComponent; - continue; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The inverter task is currently active. Check the first child. - childTaskComponent = taskComponents[taskComponent.Index + 1]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - // The child has completed. Invert the status. - taskComponent.Status = childTaskComponent.Status == TaskStatus.Success ? TaskStatus.Failure : TaskStatus.Success; - taskComponents[taskComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Inverter.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Inverter.cs.meta deleted file mode 100644 index 60c9b95c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Inverter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5ee17779b73c2264485dda14bde477cd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Iterator.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Iterator.cs deleted file mode 100644 index a9960567..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Iterator.cs +++ /dev/null @@ -1,109 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using System.Collections; - using Unity.Entities; - using UnityEngine; - - [NodeIcon("3c1366e1dc8fe0b46b4a6c8724194cdd", "5b924a7ff18f0544aaa585af94ac536c")] - [Opsive.Shared.Utility.Description("Iterates through each element of the list. For each execution the Iterator task will set the next Element within the specified List.")] - public class Iterator : DecoratorNode - { - [Tooltip("The list that should be iterated upon.")] - [SerializeField] protected SharedVariable m_List; - [Tooltip("The current element within the list.")] - [SerializeField] [RequireShared] protected SharedVariable m_Element; - [Tooltip("Should the interator end on a failure?")] - [SerializeField] protected SharedVariable m_EndOnFailure; - - private int m_Index; - - /// - /// Resets the task values back to their default. - /// - public override void Reset() - { - m_List = null; - m_Element = null; - m_EndOnFailure = false; - } - - /// - /// Callback when the task is started. - /// - public override void OnStart() - { - base.OnStart(); - m_Index = 0; - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - if (m_List == null) { - return TaskStatus.Failure; - } - var list = m_List.GetValue() as IList; - if (list == null || list.Count == 0) { - return TaskStatus.Failure; - } - - var taskComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - if (taskComponents[Index + 1].Status == TaskStatus.Queued || taskComponents[Index + 1].Status == TaskStatus.Running) { - return TaskStatus.Running; - } - - if (taskComponents[Index + 1].Status == TaskStatus.Failure && m_EndOnFailure.Value) { - return TaskStatus.Failure; - } - - // End when there are no more list elements. - if (m_Index >= list.Count) { - return taskComponents[Index + 1].Status; // Index + 1 will always be the task's only child. - } - - m_Element.SetValue(list[m_Index]); - m_Index++; - - return TaskStatus.Running; - } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public override object Save(World world, Entity entity) - { - return m_Index; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public override void Load(object saveData, World world, Entity entity) - { - m_Index = (int)saveData; - var list = m_List.GetValue() as IList; - if (list != null && m_Index < list.Count) { - m_Element.SetValue(list[m_Index]); - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Iterator.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Iterator.cs.meta deleted file mode 100644 index 68ad6bd9..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Iterator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5af8e0ebe3541fb4ba56854fa8a6bd62 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityEvaluator.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityEvaluator.cs deleted file mode 100644 index 53e11e62..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityEvaluator.cs +++ /dev/null @@ -1,113 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Groups; - using Opsive.BehaviorDesigner.Runtime.Tasks.Composites; - using Opsive.GraphDesigner.Runtime; - using Unity.Entities; - - /// - /// Provides a PriorityValueComponent implementation that returns a priority value. - /// - public abstract class PriorityEvaluator : DecoratorNode - { - /// - /// Returns the priority of the decorator. The higher the priority the more likely the task will run next. - /// - /// The priority of the decorator. - public abstract float GetPriorityValue(); - - /// - /// Adds the task to the behavior tree buffer. - /// - /// The world that the task runs in. - /// The entity that the task is connected to. - /// The ID of the behavior tree running the task. - /// The index of the task. - public override void AddBufferElement(World world, Entity entity, int behaviorTreeID, ushort index) - { - base.AddBufferElement(world, entity, behaviorTreeID, index); - - DynamicBuffer buffer; - if (world.EntityManager.HasBuffer(entity)) { - buffer = world.EntityManager.GetBuffer(entity); - } else { - buffer = world.EntityManager.AddBuffer(entity); - } - buffer.Add(new PriorityValueComponent() - { - Index = index, - }); - var traversalTaskSystems = world.GetOrCreateSystemManaged(); - traversalTaskSystems.AddSystemToUpdateList(world.GetOrCreateSystem(typeof(PriorityEvaluatorSystem))); - } - - /// - /// Clears all component buffers from the behavior tree buffer. - /// - /// The world that the task runs in. - /// The entity that the task is connected to. - public override void ClearBufferElement(World world, Entity entity) - { - base.ClearBufferElement(world, entity); - - DynamicBuffer buffer; - if (world.EntityManager.HasBuffer(entity)) { - buffer = world.EntityManager.GetBuffer(entity); - buffer.Clear(); - } - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - var taskComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - var childStatus = taskComponents[RuntimeIndex + 1].Status; // Index + 1 will always be the task's only child. - if (childStatus == TaskStatus.Success || childStatus == TaskStatus.Failure) { - return childStatus; - } - return TaskStatus.Running; - } - } - - /// - /// Sets the PriorityValueComponent value. - /// - [DisableAutoCreation] - [UpdateBefore(typeof(PrioritySelectorTaskSystem))] - public partial struct PriorityEvaluatorSystem : ISystem - { - /// - /// Updates the logic. - /// - /// The current state of the system. - private void OnUpdate(ref SystemState state) - { - foreach (var (priorityValueComponents, taskComponents, entity) in - SystemAPI.Query, DynamicBuffer>().WithAll().WithEntityAccess()) { - - for (int i = 0; i < priorityValueComponents.Length; ++i) { - var priorityValueComponent = priorityValueComponents[i]; - var priorityEvaluator = BehaviorTree.GetBehaviorTree(entity).GetTask(priorityValueComponent.Index) as PriorityEvaluator; - if (priorityEvaluator == null) { - continue; - } - - priorityValueComponent.Value = priorityEvaluator.GetPriorityValue(); - var priorityValueComponentBuffer = priorityValueComponents; - priorityValueComponentBuffer[i] = priorityValueComponent; - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityEvaluator.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityEvaluator.cs.meta deleted file mode 100644 index a82df67b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityEvaluator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fa0f2261dad25fe4695811e9513527c8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityVariableEvaluator.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityVariableEvaluator.cs deleted file mode 100644 index 6292da77..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityVariableEvaluator.cs +++ /dev/null @@ -1,29 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - /// - /// Implements the PriorityEvaluator returning a SharedVariable value. - /// - [Opsive.Shared.Utility.Description("Sets the priority value to the specified SharedVariable float value.")] - public class PriorityVariableEvaluator : PriorityEvaluator - { - [Tooltip("The priority of the decorator.")] - [SerializeField] SharedVariable m_Priority; - - /// - /// Returns the priority of the decorator. The higher the priority the more likely the task will run next. - /// - /// The priority of the decorator. - public override float GetPriorityValue() { return m_Priority.Value; } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityVariableEvaluator.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityVariableEvaluator.cs.meta deleted file mode 100644 index 9d0ed5f6..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/PriorityVariableEvaluator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5620437f8c0efed48a49fd477ba18a91 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Repeater.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Repeater.cs deleted file mode 100644 index 1e005b5d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Repeater.cs +++ /dev/null @@ -1,304 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Utility; - using Unity.Burst; - using Unity.Entities; - using UnityEngine; - - /// - /// A node representation of the repeater task. - /// - [NodeIcon("ceb6f3e7f67cde640b28b2a15ec13ffe", "bb415ca6de87c3d49ab9a94fe8a6fca8")] - [Opsive.Shared.Utility.Description(@"The repeater task will repeat execution of its child task until the child task has been run a specified number of times. " + - "It has the option of continuing to execute the child task even if the child task returns a failure.")] - public class Repeater : ECSDecoratorTask, IParentNode, ISavableTask - { - [Tooltip("Should the task be repeated forever?")] - [SerializeField] bool m_RepeatForever; - [Tooltip("The number of times the task should repeat.")] - [SerializeField] ushort m_RepeatCount; - [Tooltip("Should the repeater end if the child task fails?")] - [SerializeField] bool m_EndOnFailure; - - private ushort m_ComponentIndex; - - public bool RepeatForever { get => m_RepeatForever; set => m_RepeatForever = value; } - public ushort RepeatCount { get => m_RepeatCount; set => m_RepeatCount = value; } - public bool EndOnFailure { get => m_EndOnFailure; set => m_EndOnFailure = value; } - - public override ComponentType Flag { get => typeof(RepeaterFlag); } - - /// - /// Resets the task to its default values. - /// - public override void Reset() { m_RepeatForever = true; } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override RepeaterComponent GetBufferElement() - { - return new RepeaterComponent() { - Index = RuntimeIndex, - RepeatCount = m_RepeatForever ? -1 : m_RepeatCount, - EndOnFailure = m_EndOnFailure, - }; - } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public override int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - m_ComponentIndex = (ushort)base.AddBufferElement(world, entity, gameObject); - return m_ComponentIndex; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.None; } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public object Save(World world, Entity entity) - { - var repeaterComponents = world.EntityManager.GetBuffer(entity); - var repeaterComponent = repeaterComponents[m_ComponentIndex]; - - // Save the current count. - return repeaterComponent.CurrentCount; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public void Load(object saveData, World world, Entity entity) - { - var repeaterComponents = world.EntityManager.GetBuffer(entity); - var repeaterComponent = repeaterComponents[m_ComponentIndex]; - - // saveData is the current count. - repeaterComponent.CurrentCount = (uint)saveData; - repeaterComponents[m_ComponentIndex] = repeaterComponent; - } - } - - /// - /// The DOTS data structure for the Repeater class. - /// - public struct RepeaterComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - [Tooltip("The number of times the child task can repeat.")] - public int RepeatCount; - [Tooltip("The number of times the child task has been repeated.")] - public uint CurrentCount; - [Tooltip("Should the task end when the child returns failure?")] - public bool EndOnFailure; - } - - /// - /// A DOTS tag indicating when a Repeater node is active. - /// - public struct RepeaterFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the Repeater logic. - /// - [DisableAutoCreation] - public partial struct RepeaterTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new RepeaterJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct RepeaterJob : IJobEntity - { - /// - /// Executes the repeater logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of RepeaterComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer repeaterComponents) - { - for (int i = 0; i < repeaterComponents.Length; ++i) { - var repeaterComponent = repeaterComponents[i]; - var taskComponent = taskComponents[repeaterComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) { - continue; - } - - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - repeaterComponent.CurrentCount = 1; - var repeaterBuffer = repeaterComponents; - repeaterBuffer[i] = repeaterComponent; - - branchComponent.NextIndex = (ushort)(taskComponent.Index + 1); - branchComponents[taskComponent.BranchIndex] = branchComponent; - - // Start the child. - var nextChildTaskComponent = taskComponents[branchComponent.NextIndex]; - nextChildTaskComponent.Status = TaskStatus.Queued; - taskComponents[branchComponent.NextIndex] = nextChildTaskComponent; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The repeater task is currently active. Check the first child. - var childTaskComponent = taskComponents[taskComponent.Index + 1]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - branchComponent = branchComponents[childTaskComponent.BranchIndex]; - if ((repeaterComponent.RepeatCount == -1 || repeaterComponent.CurrentCount <= repeaterComponent.RepeatCount) && - (childTaskComponent.Status == TaskStatus.Success || (!repeaterComponent.EndOnFailure && childTaskComponent.Status == TaskStatus.Failure))) { - // Restart the child if the branch should repeat again. - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[childTaskComponent.Index] = childTaskComponent; - - repeaterComponent.CurrentCount++; - var repeaterBuffer = repeaterComponents; - repeaterBuffer[i] = repeaterComponent; - - branchComponent.NextIndex = childTaskComponent.Index; - branchComponents[childTaskComponent.BranchIndex] = branchComponent; - } else { - // End with the child status if there should not be any more repeats. An inactive status will be returned if the child is disabled. - taskComponent.Status = childTaskComponent.Status == TaskStatus.Inactive ? TaskStatus.Success : childTaskComponent.Status; - taskComponents[taskComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[childTaskComponent.BranchIndex] = branchComponent; - } - } - } - } - } - /// - /// A node representation of the repeater task. - /// - [NodeIcon("ceb6f3e7f67cde640b28b2a15ec13ffe", "bb415ca6de87c3d49ab9a94fe8a6fca8")] - [Opsive.Shared.Utility.Description(@"The repeater task will repeat execution of its child task until the child task has been run a specified number of times. " + - "It has the option of continuing to execute the child task even if the child task returns a failure. Uses the GameObject workflow.")] - public class SharedRepeater : DecoratorNode - { - [Tooltip("Should the task be repeated forever?")] - [SerializeField] SharedVariable m_RepeatForever = true; - [Tooltip("The number of times the task should repeat.")] - [SerializeField] SharedVariable m_RepeatCount; - [Tooltip("Should the repeater end if the child task fails?")] - [SerializeField] SharedVariable m_EndOnFailure; - - public SharedVariable RepeatForever { get => m_RepeatForever; set => m_RepeatForever = value; } - public SharedVariable RepeatCount { get => m_RepeatCount; set => m_RepeatCount = value; } - public SharedVariable EndOnFailure { get => m_EndOnFailure; set => m_EndOnFailure = value; } - - private uint m_CurrentCount; - - /// - /// Callback when the task is started. - /// - public override void OnStart() - { - base.OnStart(); - m_CurrentCount = 0; - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - var taskComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - if (taskComponents[Index + 1].Status == TaskStatus.Running || taskComponents[Index + 1].Status == TaskStatus.Queued) { - return TaskStatus.Running; - } - - if (taskComponents[Index + 1].Status == TaskStatus.Failure && m_EndOnFailure.Value) { - return TaskStatus.Failure; - } - - // The child isn't running. Repeat - if (m_RepeatForever.Value || m_CurrentCount <= m_RepeatCount.Value) { - m_CurrentCount++; - return TaskStatus.Running; - } - - return taskComponents[Index + 1].Status; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public override MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.None; } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public override object Save(World world, Entity entity) - { - // Save the current count. - return m_CurrentCount; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public override void Load(object saveData, World world, Entity entity) - { - m_CurrentCount = (uint)saveData; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Repeater.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Repeater.cs.meta deleted file mode 100644 index 8dffca99..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/Repeater.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 19b46aa4b55e8994bae2c60e08040863 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnFailure.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnFailure.cs deleted file mode 100644 index cc8ceed3..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnFailure.cs +++ /dev/null @@ -1,125 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Unity.Burst; - using Unity.Entities; - using UnityEngine; - - /// - /// A node representation of the return failure task. - /// - [NodeIcon("667a475ceee05824188a36b24ec8d392", "7d32c9b05505df24a94069606f3b823d")] - [Opsive.Shared.Utility.Description("The return failure task will always return failure except when the child task is running.")] - public class ReturnFailure : ECSDecoratorTask, IParentNode - { - public override ComponentType Flag { get => typeof(ReturnFailureFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override ReturnFailureComponent GetBufferElement() - { - return new ReturnFailureComponent() - { - Index = RuntimeIndex, - }; - } - } - - /// - /// The DOTS data structure for the ReturnFailure class. - /// - public struct ReturnFailureComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - } - - /// - /// A DOTS tag indicating when an ReturnFailure node is active. - /// - public struct ReturnFailureFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the ReturnFailure logic. - /// - [DisableAutoCreation] - public partial struct ReturnFailureTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new ReturnFailureJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct ReturnFailureJob : IJobEntity - { - /// - /// Executes the return failure logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of ReturnFailureComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer returnFailureComponents) - { - for (int i = 0; i < returnFailureComponents.Length; ++i) { - var returnFailureComponent = returnFailureComponents[i]; - var taskComponent = taskComponents[returnFailureComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) { - continue; - } - - TaskComponent childTaskComponent; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - childTaskComponent = taskComponents[taskComponent.Index + 1]; - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[taskComponent.Index + 1] = childTaskComponent; - - branchComponent.NextIndex = (ushort)(taskComponent.Index + 1); - branchComponents[taskComponent.BranchIndex] = branchComponent; - continue; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The return failure task is currently active. Check the first child. - childTaskComponent = taskComponents[taskComponent.Index + 1]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - // The child has completed. Return failure. - taskComponent.Status = TaskStatus.Failure; - taskComponents[taskComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnFailure.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnFailure.cs.meta deleted file mode 100644 index a49e1089..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnFailure.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 52ce11b290bb0b240a985296c757fcd5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnSuccess.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnSuccess.cs deleted file mode 100644 index 2019e3bf..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnSuccess.cs +++ /dev/null @@ -1,125 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Unity.Burst; - using Unity.Entities; - using UnityEngine; - - /// - /// A node representation of the return success task. - /// - [NodeIcon("66f47acff1d46f848bc8c22b221ee1d0", "3eb990b93a7fd6e479d6b032c7e6973f")] - [Opsive.Shared.Utility.Description("The return success task will always return success except when the child task is running.")] - public class ReturnSuccess : ECSDecoratorTask, IParentNode - { - public override ComponentType Flag { get => typeof(ReturnSuccessFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override ReturnSuccessComponent GetBufferElement() - { - return new ReturnSuccessComponent() - { - Index = RuntimeIndex, - }; - } - } - - /// - /// The DOTS data structure for the ReturnSuccess class. - /// - public struct ReturnSuccessComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - } - - /// - /// A DOTS tag indicating when an ReturnSuccess node is active. - /// - public struct ReturnSuccessFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the ReturnSuccess logic. - /// - [DisableAutoCreation] - public partial struct ReturnSuccessTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new ReturnSuccessJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct ReturnSuccessJob : IJobEntity - { - /// - /// Executes the return success logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of ReturnSuccessComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer returnSuccessComponents) - { - for (int i = 0; i < returnSuccessComponents.Length; ++i) { - var returnSuccessComponent = returnSuccessComponents[i]; - var taskComponent = taskComponents[returnSuccessComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) { - continue; - } - - TaskComponent childTaskComponent; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - childTaskComponent = taskComponents[taskComponent.Index + 1]; - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[taskComponent.Index + 1] = childTaskComponent; - - branchComponent.NextIndex = (ushort)(taskComponent.Index + 1); - branchComponents[taskComponent.BranchIndex] = branchComponent; - continue; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The return success task is currently active. Check the first child. - childTaskComponent = taskComponents[taskComponent.Index + 1]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - // The child has completed. Return success. - taskComponent.Status = TaskStatus.Success; - taskComponents[taskComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnSuccess.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnSuccess.cs.meta deleted file mode 100644 index 3c5f5483..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/ReturnSuccess.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ffe15b86a15ee5e4c9c4693ab315d6c6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilFailure.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilFailure.cs deleted file mode 100644 index 51fe1dd3..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilFailure.cs +++ /dev/null @@ -1,135 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Unity.Burst; - using Unity.Entities; - using UnityEngine; - - /// - /// A node representation of the until failure task. - /// - [NodeIcon("60da350fd1f5b48428e466b79cb85cb2", "3d29cc3223984f44291c0e423a0aa6c6")] - [Opsive.Shared.Utility.Description("The until failure task will keep executing its child task until the child task returns failure.")] - public class UntilFailure : ECSDecoratorTask, IParentNode - { - public override ComponentType Flag { get => typeof(UntilFailureFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override UntilFailureComponent GetBufferElement() - { - return new UntilFailureComponent() - { - Index = RuntimeIndex, - }; - } - } - - /// - /// The DOTS data structure for the UntilFailure class. - /// - public struct UntilFailureComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - } - - /// - /// A DOTS tag indicating when an UntilFailure node is active. - /// - public struct UntilFailureFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the UntilFailure logic. - /// - [DisableAutoCreation] - public partial struct UntilFailureTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new UntilFailureJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct UntilFailureJob : IJobEntity - { - /// - /// Executes the until failure logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of UntilFailureComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer untilFailureComponents) - { - for (int i = 0; i < untilFailureComponents.Length; ++i) { - var untilFailureComponent = untilFailureComponents[i]; - var taskComponent = taskComponents[untilFailureComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) { - continue; - } - - TaskComponent childTaskComponent; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - childTaskComponent = taskComponents[taskComponent.Index + 1]; - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[taskComponent.Index + 1] = childTaskComponent; - - branchComponent.NextIndex = (ushort)(taskComponent.Index + 1); - branchComponents[taskComponent.BranchIndex] = branchComponent; - continue; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The until failure task is currently active. Check the first child. - childTaskComponent = taskComponents[taskComponent.Index + 1]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running) { - // The child should keep running. - continue; - } - - // If the child returns success then it should be queued again. - if (childTaskComponent.Status == TaskStatus.Success) { - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[taskComponent.Index + 1] = childTaskComponent; - - branchComponent.NextIndex = (ushort)(taskComponent.Index + 1); - branchComponents[taskComponent.BranchIndex] = branchComponent; - continue; - } - - // The child has returned failure. - taskComponent.Status = TaskStatus.Failure; - taskComponents[taskComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilFailure.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilFailure.cs.meta deleted file mode 100644 index 9876f2bf..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilFailure.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8b8878b781010e04b87748609a6ac6d3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilSuccess.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilSuccess.cs deleted file mode 100644 index 36c88411..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilSuccess.cs +++ /dev/null @@ -1,135 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.GraphDesigner.Runtime; - using Unity.Burst; - using Unity.Entities; - using UnityEngine; - - /// - /// A node representation of the until success task. - /// - [NodeIcon("f2e750025a5812640919385b75319d6f", "4e9ac4f2dd8bfe741a5f889efb1ade67")] - [Opsive.Shared.Utility.Description("The until success task will keep executing its child task until the child task returns success.")] - public class UntilSuccess : ECSDecoratorTask, IParentNode - { - public override ComponentType Flag { get => typeof(UntilSuccessFlag); } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public override UntilSuccessComponent GetBufferElement() - { - return new UntilSuccessComponent() - { - Index = RuntimeIndex, - }; - } - } - - /// - /// The DOTS data structure for the UntilSuccess class. - /// - public struct UntilSuccessComponent : IBufferElementData - { - [Tooltip("The index of the node.")] - public ushort Index; - } - - /// - /// A DOTS tag indicating when an UntilSuccess node is active. - /// - public struct UntilSuccessFlag : IComponentData, IEnableableComponent { } - - /// - /// Runs the UntilSuccess logic. - /// - [DisableAutoCreation] - public partial struct UntilSuccessTaskSystem : ISystem - { - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build(); - state.Dependency = new UntilSuccessJob().ScheduleParallel(query, state.Dependency); - } - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct UntilSuccessJob : IJobEntity - { - /// - /// Executes the until success logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of UntilSuccessComponents. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer untilSuccessComponents) - { - for (int i = 0; i < untilSuccessComponents.Length; ++i) { - var untilSuccessComponent = untilSuccessComponents[i]; - var taskComponent = taskComponents[untilSuccessComponent.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) { - continue; - } - - TaskComponent childTaskComponent; - if (taskComponent.Status == TaskStatus.Queued) { - taskComponent.Status = TaskStatus.Running; - taskComponents[taskComponent.Index] = taskComponent; - - childTaskComponent = taskComponents[taskComponent.Index + 1]; - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[taskComponent.Index + 1] = childTaskComponent; - - branchComponent.NextIndex = (ushort)(taskComponent.Index + 1); - branchComponents[taskComponent.BranchIndex] = branchComponent; - continue; - } else if (taskComponent.Status != TaskStatus.Running) { - continue; - } - - // The until success task is currently active. Check the first child. - childTaskComponent = taskComponents[taskComponent.Index + 1]; - if (childTaskComponent.Status == TaskStatus.Queued || childTaskComponent.Status == TaskStatus.Running ) { - // The child should keep running. - continue; - } - - // If the child returns failure then it should be queued again. - if (childTaskComponent.Status == TaskStatus.Failure) { - childTaskComponent.Status = TaskStatus.Queued; - taskComponents[taskComponent.Index + 1] = childTaskComponent; - - branchComponent.NextIndex = (ushort)(taskComponent.Index + 1); - branchComponents[taskComponent.BranchIndex] = branchComponent; - continue; - } - - // The child has returned success. The task can end. - taskComponent.Status = TaskStatus.Success; - taskComponents[taskComponent.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilSuccess.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilSuccess.cs.meta deleted file mode 100644 index b906293b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UntilSuccess.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b11a4f9197ec0964cb1f620368654a53 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityCurveEvaluator.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityCurveEvaluator.cs deleted file mode 100644 index f2f72a00..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityCurveEvaluator.cs +++ /dev/null @@ -1,65 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - using UnityEngine.Serialization; - - /// - /// Implements the UtilityEvaluator returning a SharedVariable value. - /// - [Opsive.Shared.Utility.Description("Sets the utility value to the evaluated curve value.")] - public class UtilityCurveEvaluator : UtilityEvaluator - { - [Tooltip("The curve that should be evaluated for the utility value.")] - [FormerlySerializedAs("m_Utility")] - [SerializeField] SharedVariable m_UtilityValue; - [Tooltip("The time to evaluate the curve at. Set it to -1 to use Time.time.")] - [SerializeField] SharedVariable m_Time; - [Tooltip("Should the time be reset after the task stops running?")] - [SerializeField] SharedVariable m_ResetTimeOnEnd; - - private float m_ResetTime = -1; - - /// - /// Resets the task values back to their default. - /// - public override void Reset() - { - base.Reset(); - - m_UtilityValue = AnimationCurve.Linear(0, 0, 1, 1); - m_Time = -1; - m_ResetTimeOnEnd = false; - } - - /// - /// Returns the utility of the decorator. The higher the utility the more likely the task will run next. - /// - /// The utility of the decorator. - public override float GetUtilityValue() - { - var evaluateTime = m_Time.Value == -1 ? Time.time : m_Time.Value; - if (m_ResetTimeOnEnd.Value && m_ResetTime != -1) { - evaluateTime = Time.time - m_ResetTime; - } - - return m_UtilityValue.Value.Evaluate(evaluateTime); - } - - /// - /// The task has ended. - /// - public override void OnEnd() - { - m_ResetTime = Time.time; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityCurveEvaluator.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityCurveEvaluator.cs.meta deleted file mode 100644 index b2c6f4af..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityCurveEvaluator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6052dd7dfb15b574eaba0db3729bbee4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityEvaluator.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityEvaluator.cs deleted file mode 100644 index db5bb86d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityEvaluator.cs +++ /dev/null @@ -1,130 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Groups; - using Opsive.BehaviorDesigner.Runtime.Tasks.Composites; - using Unity.Entities; - using UnityEngine; - - /// - /// Provides a UtilityValueComponent implementation that returns a utility value. - /// - public abstract class UtilityEvaluator : DecoratorNode - { - [Tooltip("Should an infinite utility value be returned while the child is running?")] - [SerializeField] protected bool m_BlockDuringExecution = true; - - public bool BlockDuringExecution { get => m_BlockDuringExecution; set => m_BlockDuringExecution = value; } - - /// - /// Returns the utility of the decorator. The higher the utility the more likely the task will run next. - /// - /// The utility of the decorator. - public abstract float GetUtilityValue(); - - /// - /// Adds the task to the behavior tree buffer. - /// - /// The world that the task runs in. - /// The entity that the task is connected to. - /// The ID of the behavior tree running the task. - /// The index of the task. - public override void AddBufferElement(World world, Entity entity, int behaviorTreeID, ushort index) - { - base.AddBufferElement(world, entity, behaviorTreeID, index); - - DynamicBuffer buffer; - if (world.EntityManager.HasBuffer(entity)) { - buffer = world.EntityManager.GetBuffer(entity); - } else { - buffer = world.EntityManager.AddBuffer(entity); - } - - buffer.Add(new UtilityValueComponent() - { - Index = index, - }); - var traversalTaskSystems = world.GetOrCreateSystemManaged(); - traversalTaskSystems.AddSystemToUpdateList(world.GetOrCreateSystem(typeof(UtilityEvaluatorSystem))); - } - - /// - /// Clears all component buffers from the behavior tree buffer. - /// - /// The world that the task runs in. - /// The entity that the task is connected to. - public override void ClearBufferElement(World world, Entity entity) - { - base.ClearBufferElement(world, entity); - - DynamicBuffer buffer; - if (world.EntityManager.HasBuffer(entity)) { - buffer = world.EntityManager.GetBuffer(entity); - buffer.Clear(); - } - } - - /// - /// Executes the task logic. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - var taskComponents = m_BehaviorTree.World.EntityManager.GetBuffer(m_BehaviorTree.Entity); - var childStatus = taskComponents[RuntimeIndex + 1].Status; // Index + 1 will always be the task's only child. - if (childStatus == TaskStatus.Success || childStatus == TaskStatus.Failure) { - return childStatus; - } - return TaskStatus.Running; - } - } - - /// - /// Sets the UtilityValueComponent value. - /// - [DisableAutoCreation] - [UpdateBefore(typeof(UtilitySelectorTaskSystem))] - public partial struct UtilityEvaluatorSystem : ISystem - { - /// - /// Updates the logic. - /// - /// The current state of the system. - private void OnUpdate(ref SystemState state) - { - foreach (var (utilityValueComponents, taskComponents, entity) in - SystemAPI.Query, DynamicBuffer>().WithAll().WithEntityAccess()) { - - for (int i = 0; i < utilityValueComponents.Length; ++i) { - var utilityValueComponent = utilityValueComponents[i]; - var utilityEvaluator = BehaviorTree.GetBehaviorTree(entity).GetTask(utilityValueComponent.Index) as UtilityEvaluator; - if (utilityEvaluator == null) { - continue; - } - - // If the branch is currently active then it should return an infinite utility value until the branch has completed. This will allow the entire - // branch to execute. - if (utilityEvaluator.BlockDuringExecution) { - var taskComponent = taskComponents[utilityValueComponent.Index + 1]; - if (taskComponent.Status == TaskStatus.Running) { - utilityValueComponent.Value = float.PositiveInfinity; - } else { - utilityValueComponent.Value = utilityEvaluator.GetUtilityValue(); - } - } else { - utilityValueComponent.Value = utilityEvaluator.GetUtilityValue(); - } - var utilityValueComponentBuffer = utilityValueComponents; - utilityValueComponentBuffer[i] = utilityValueComponent; - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityEvaluator.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityEvaluator.cs.meta deleted file mode 100644 index b6de0e19..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityEvaluator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 74c275bf295659342be09f83dcacd5cd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityVariableEvaluator.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityVariableEvaluator.cs deleted file mode 100644 index 52c6ca5b..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityVariableEvaluator.cs +++ /dev/null @@ -1,29 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Decorators -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - /// - /// Implements the UtilityEvaluator returning a SharedVariable value. - /// - [Opsive.Shared.Utility.Description("Sets the utility value to the specified SharedVariable float value.")] - public class UtilityVariableEvaluator : UtilityEvaluator - { - [Tooltip("The utility of the decorator.")] - [SerializeField] SharedVariable m_Utility; - - /// - /// Returns the utility of the decorator. The higher the utility the more likely the task will run next. - /// - /// The utility of the decorator. - public override float GetUtilityValue() { return m_Utility.Value; } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityVariableEvaluator.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityVariableEvaluator.cs.meta deleted file mode 100644 index 7c5d9531..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Decorators/UtilityVariableEvaluator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fa1905f557f151b45b17a10ffb0a44f3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ECSTask.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ECSTask.cs deleted file mode 100644 index e8fd977a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ECSTask.cs +++ /dev/null @@ -1,132 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks -{ - using Opsive.GraphDesigner.Runtime; - using Unity.Entities; - using UnityEngine; - - /// - /// Base class for a boilerplate ECS task. - /// - public abstract class ECSTask : ITreeLogicNode, IAuthoringTask where TBufferElement : unmanaged, IBufferElementData - { - [Tooltip("The index of the node.")] - [SerializeField] ushort m_Index; - [Tooltip("The parent index of the node. ushort.MaxValue indicates no parent.")] - [SerializeField] ushort m_ParentIndex; - [Tooltip("The sibling index of the node. ushort.MaxValue indicates no sibling.")] - [SerializeField] ushort m_SiblingIndex; - - /// - /// The type of flag that should be enabled when the task is running. - /// - public abstract ComponentType Flag { get; } - /// - /// The system type that the component uses. - /// - public System.Type SystemType => typeof(TSystem); - - public ushort Index - { - get => m_Index; - set => m_Index = value; - } - - public ushort ParentIndex - { - get => m_ParentIndex; - set => m_ParentIndex = value; - } - - public ushort SiblingIndex - { - get => m_SiblingIndex; - set => m_SiblingIndex = value; - } - - public ushort RuntimeIndex { get; set; } - - /// - /// Resets the node values back to their default. - /// - public virtual void Reset() { } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public virtual int AddBufferElement(World world, Entity entity, GameObject gameObject) - { - DynamicBuffer buffer; - if (world.EntityManager.HasBuffer(entity)) { - buffer = world.EntityManager.GetBuffer(entity); - } else { - buffer = world.EntityManager.AddBuffer(entity); - } - - buffer.Add(GetBufferElement()); - return buffer.Length - 1; - } - - /// - /// Returns a new TBufferElement for use by the system. - /// - /// A new TBufferElement for use by the system. - public abstract TBufferElement GetBufferElement(); - - /// - /// Clears the IBufferElementData from the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be cleared from. - public void ClearBufferElement(World world, Entity entity) - { - DynamicBuffer buffer; - if (world.EntityManager.HasBuffer(entity)) { - buffer = world.EntityManager.GetBuffer(entity); - buffer.Clear(); - } - } - } - - /// - /// Base class for an ECS action task. - /// - public abstract class ECSActionTask : ECSTask, IAction where TComponent : unmanaged, IBufferElementData { } - - /// - /// Base class for an ECS composite task. - /// - public abstract class ECSCompositeTask : ECSTask, IComposite, IParentNode where TComponent : unmanaged, IBufferElementData - { - /// - /// The maximum number of children the node can have. - /// - public virtual int MaxChildCount { get => ushort.MaxValue; } - } - - /// - /// Base class for an ECS conditional task. - /// - public abstract class ECSConditionalTask : ECSTask, IConditional where TComponent : unmanaged, IBufferElementData { } - - /// - /// Base class for an ECS decorator task. - /// - public abstract class ECSDecoratorTask : ECSTask, IDecorator, IParentNode where TComponent : unmanaged, IBufferElementData - { - /// - /// The maximum number of children the node can have. - /// - public int MaxChildCount { get => 1; } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ECSTask.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ECSTask.cs.meta deleted file mode 100644 index 37c6a409..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ECSTask.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5ab224e1523f7bf41a1bf128e4e1c02a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events.meta deleted file mode 100644 index f01189c9..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 77a6adc251fa2434892e5e0d483f1fb0 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/EventNode.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/EventNode.cs deleted file mode 100644 index aac502ef..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/EventNode.cs +++ /dev/null @@ -1,35 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using UnityEngine; - - /// - /// A base IEventNode implementation. - /// - [NodeIcon("9041375773f69454792084ab67820b7e", "b1382ad24c668174c9a6e0bd00f229e3")] - public abstract class EventNode : IEventNode, IEventNodeGameObjectReceiver - { - [Tooltip("The index of the ITreeLogicNode that the IEventNode is connected to. ushort.MaxValue indicates no connection.")] - [SerializeField] protected ushort m_ConnectedIndex; - - public ushort ConnectedIndex { get => m_ConnectedIndex; set => m_ConnectedIndex = value; } - - protected BehaviorTree m_BehaviorTree; - - /// - /// Initializes the node to the specified graph. - /// - /// The graph that is initializing the task. - public virtual void Initialize(IGraph graph) - { - m_BehaviorTree = graph as BehaviorTree; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/EventNode.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/EventNode.cs.meta deleted file mode 100644 index 40566953..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/EventNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ae332159f8bb5f14c8a6d12075be9bab -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter.cs deleted file mode 100644 index a03fe265..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [AllowMultipleTypes] - [NodeIcon("06864c37115f11445b04701c616d0e14", "8b8a2793322238240b4f25171d772003")] - [Opsive.Shared.Utility.Description("Invoked when the agent causes a collision.")] - public class OnCollisionEnter : EventNode - { - [Tooltip("The tag of the GameObject that the collision should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The collided GameObject.")] - [SerializeField] protected SharedVariable m_StoredCollisionGameObject; - - /// - /// Initializes the node to the specified graph. - /// - /// The graph that is initializing the task. - public override void Initialize(IGraph graph) - { - base.Initialize(graph); - - m_BehaviorTree.OnBehaviorTreeDestroyed += Destroy; - m_BehaviorTree.OnBehaviorTreeCollisionEnter += EnteredCollision; - } - - /// - /// The agent has caused a collision. - /// - /// The collision that caused the event. - private void EnteredCollision(Collision collision) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !collision.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredCollisionGameObject != null && m_StoredCollisionGameObject.IsShared) { m_StoredCollisionGameObject.Value = collision.gameObject; } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// The behavior tree has been destroyed. - /// - private void Destroy() - { - m_BehaviorTree.OnBehaviorTreeDestroyed -= Destroy; - m_BehaviorTree.OnBehaviorTreeCollisionEnter -= EnteredCollision; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter.cs.meta deleted file mode 100644 index 66c74942..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8e38ab2e4d966814f8b760b1f9d64416 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter2D.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter2D.cs deleted file mode 100644 index bce7dc4a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter2D.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [AllowMultipleTypes] - [NodeIcon("06864c37115f11445b04701c616d0e14", "8b8a2793322238240b4f25171d772003")] - [Opsive.Shared.Utility.Description("Invoked when the agent causes a 2D collision.")] - public class OnCollisionEnter2D : EventNode - { - [Tooltip("The tag of the GameObject that the collision should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The collided GameObject.")] - [SerializeField] protected SharedVariable m_StoredCollisionGameObject; - - /// - /// Initializes the node to the specified graph. - /// - /// The graph that is initializing the task. - public override void Initialize(IGraph graph) - { - base.Initialize(graph); - - m_BehaviorTree.OnBehaviorTreeDestroyed += Destroy; - m_BehaviorTree.OnBehaviorTreeCollisionEnter2D += EnteredCollision2D; - } - - /// - /// The agent has caused a 2D collision. - /// - /// The collision that caused the event. - private void EnteredCollision2D(Collision2D collision) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !collision.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredCollisionGameObject != null && m_StoredCollisionGameObject.IsShared) { m_StoredCollisionGameObject.Value = collision.gameObject; } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// The behavior tree has been destroyed. - /// - private void Destroy() - { - m_BehaviorTree.OnBehaviorTreeDestroyed -= Destroy; - m_BehaviorTree.OnBehaviorTreeCollisionEnter2D -= EnteredCollision2D; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter2D.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter2D.cs.meta deleted file mode 100644 index e4775e0a..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionEnter2D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2280b16f94f390e43a89c0550eac22cc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit.cs deleted file mode 100644 index f964c294..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [AllowMultipleTypes] - [NodeIcon("06864c37115f11445b04701c616d0e14", "8b8a2793322238240b4f25171d772003")] - [Opsive.Shared.Utility.Description("Invoked when the agent leaves a collision.")] - public class OnCollisionExit : EventNode - { - [Tooltip("The tag of the GameObject that the collision should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The collided GameObject.")] - [SerializeField] protected SharedVariable m_StoredCollisionGameObject; - - /// - /// Initializes the node to the specified graph. - /// - /// The graph that is initializing the task. - public override void Initialize(IGraph graph) - { - base.Initialize(graph); - - m_BehaviorTree.OnBehaviorTreeDestroyed += Destroy; - m_BehaviorTree.OnBehaviorTreeCollisionExit += ExitedCollision; - } - - /// - /// The agent has left a collision. - /// - /// The collision that caused the event. - private void ExitedCollision(Collision collision) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !collision.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredCollisionGameObject != null && m_StoredCollisionGameObject.IsShared) { m_StoredCollisionGameObject.Value = collision.gameObject; } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// The behavior tree has been destroyed. - /// - private void Destroy() - { - m_BehaviorTree.OnBehaviorTreeDestroyed -= Destroy; - m_BehaviorTree.OnBehaviorTreeCollisionExit -= ExitedCollision; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit.cs.meta deleted file mode 100644 index 01c01002..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fee2099d2a111594eadaee56c4998a20 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit2D.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit2D.cs deleted file mode 100644 index 84dc7e53..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit2D.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [AllowMultipleTypes] - [NodeIcon("06864c37115f11445b04701c616d0e14", "8b8a2793322238240b4f25171d772003")] - [Opsive.Shared.Utility.Description("Invoked when the agent leaves a 2D collision.")] - public class OnCollisionExit2D : EventNode - { - [Tooltip("The tag of the GameObject that the collision should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The collided GameObject.")] - [SerializeField] protected SharedVariable m_StoredCollisionGameObject; - - /// - /// Initializes the node to the specified graph. - /// - /// The graph that is initializing the task. - public override void Initialize(IGraph graph) - { - base.Initialize(graph); - - m_BehaviorTree.OnBehaviorTreeDestroyed += Destroy; - m_BehaviorTree.OnBehaviorTreeCollisionExit2D += ExitedCollision2D; - } - - /// - /// The agent has left a 2D collision. - /// - /// The collision that caused the event. - private void ExitedCollision2D(Collision2D collision) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !collision.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredCollisionGameObject != null && m_StoredCollisionGameObject.IsShared) { m_StoredCollisionGameObject.Value = collision.gameObject; } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// The behavior tree has been destroyed. - /// - private void Destroy() - { - m_BehaviorTree.OnBehaviorTreeDestroyed -= Destroy; - m_BehaviorTree.OnBehaviorTreeCollisionExit2D -= ExitedCollision2D; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit2D.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit2D.cs.meta deleted file mode 100644 index ce342dda..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnCollisionExit2D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2bcef3a2041a6144fb9692d1244330af -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnInterrupt.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnInterrupt.cs deleted file mode 100644 index eeb6f7e7..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnInterrupt.cs +++ /dev/null @@ -1,130 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Groups; - using Opsive.GraphDesigner.Runtime; - using Unity.Burst; - using Unity.Entities; - using UnityEngine; - - [AllowMultipleTypes] - [NodeIcon("10ed9753a0870c84889dc42a7de397a8", "98f584ca47ddad64d9878314395ce160")] - [Opsive.Shared.Utility.Description("EventNode that is invoked when an interrupt occurs.")] - public class OnInterrupt : IEventNode, IEventNodeEntityReceiver - { - [Tooltip("The index of the ITreeLogicNode that the IEventNode is connected to. ushort.MaxValue indicates no connection.")] - [SerializeField] protected ushort m_ConnectedIndex; - [Tooltip("The node that caused the interruption.")] - [SerializeField] ILogicNode m_InterruptionSource; - public ushort ConnectedIndex { get => m_ConnectedIndex; set => m_ConnectedIndex = value; } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The offset between the connected index and the runtime index. - public void AddBufferElement(World world, Entity entity, GameObject gameObject, ushort taskOffset) - { - if (m_InterruptionSource == null || m_InterruptionSource.Index < 0) { - Debug.LogError("Error: An Interruption Source task must be specified within the OnInterrupt node."); - return; - } - - DynamicBuffer buffer; - if (world.EntityManager.HasBuffer(entity)) { - buffer = world.EntityManager.GetBuffer(entity); - } else { - buffer = world.EntityManager.AddBuffer(entity); - } - buffer.Add(new OnInterruptEventComponent() { - ConnectedIndex = (ushort)(m_ConnectedIndex - taskOffset), - InterruptionSourceIndex = m_InterruptionSource.RuntimeIndex, - }); - - var interruptSystemGroup = world.GetOrCreateSystemManaged(); - interruptSystemGroup.AddSystemToUpdateList(world.GetOrCreateSystem()); - } - - /// - /// Clears the IBufferElementData from the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be cleared from. - public void ClearBufferElement(World world, Entity entity) - { - DynamicBuffer buffer; - if (world.EntityManager.HasBuffer(entity)) { - buffer = world.EntityManager.GetBuffer(entity); - buffer.Clear(); - } - } - } - - /// - /// The DOTS data structure for the OnInterrupt class. - /// - public struct OnInterruptEventComponent : IBufferElementData - { - [Tooltip("The index of the ILogicNode that the IEventNode is connected to.")] - public ushort ConnectedIndex; - [Tooltip("The index of the node that can invoke the interrupt.")] - public ushort InterruptionSourceIndex; - } - - /// - /// Processes any interrupts. - /// - [DisableAutoCreation] - public partial struct OnInterruptSystem : ISystem - { - /// - /// Updates the logic. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - { - foreach (var (branchComponents, taskComponents, onInterruptEvents, entity) in - SystemAPI.Query, DynamicBuffer, DynamicBuffer>().WithAll().WithEntityAccess()) { - for (int i = 0; i < branchComponents.Length; ++i) { - var branchComponent = branchComponents[i]; - if (branchComponent.InterruptType != InterruptType.None) { - // The branch is going to cause an interrupt. - for (int j = 0; j < onInterruptEvents.Length; ++j) { - var onInterruptEvent = onInterruptEvents[j]; - if (branchComponent.ActiveIndex >= onInterruptEvent.InterruptionSourceIndex && - branchComponent.ActiveIndex < taskComponents[onInterruptEvent.InterruptionSourceIndex].SiblingIndex) { - // Trigger the callback. - var startTask = taskComponents[onInterruptEvent.ConnectedIndex]; - if (startTask.Status != TaskStatus.Queued && startTask.Status != TaskStatus.Running) { - startTask.Status = TaskStatus.Queued; - var taskComponentsBuffer = taskComponents; - taskComponentsBuffer[onInterruptEvent.ConnectedIndex] = startTask; - - var activeTag = taskComponents[onInterruptEvent.ConnectedIndex].FlagComponentType; - state.EntityManager.SetComponentEnabled(entity, activeTag, true); - - var connectedBranchIndex = taskComponents[onInterruptEvent.ConnectedIndex].BranchIndex; - branchComponent = branchComponents[connectedBranchIndex]; - branchComponent.ActiveIndex = branchComponent.NextIndex = onInterruptEvent.ConnectedIndex; - branchComponent.ActiveFlagComponentType = activeTag; - var branchComponentsBuffer = branchComponents; - branchComponentsBuffer[connectedBranchIndex] = branchComponent; - } - } - } - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnInterrupt.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnInterrupt.cs.meta deleted file mode 100644 index 290bfea5..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnInterrupt.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 29da32620f380b34aa56ef14a1088104 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnReceivedEvent.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnReceivedEvent.cs deleted file mode 100644 index f92ba4d0..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnReceivedEvent.cs +++ /dev/null @@ -1,167 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Events; - using UnityEngine; - - [AllowMultipleTypes] - [Opsive.Shared.Utility.Description("Invoked when the specified event is received.")] - public class OnReceivedEvent : EventNode - { - [Tooltip("The name of the event that starts the branch.")] - [SerializeField] protected SharedVariable m_EventName; - [Tooltip("Optionally store the first sent argument.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoredValue1; - [Tooltip("Optionally store the second sent argument.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoredValue2; - [Tooltip("Optionally store the third sent argument.")] - [RequireShared] [SerializeField] protected SharedVariable m_StoredValue3; - - private string m_RegisteredEventName; - private bool m_Initialized; - - /// - /// Initializes the node to the specified graph. - /// - /// The graph that is initializing the task. - public override void Initialize(IGraph graph) - { - if (m_Initialized) { - return; - } - m_Initialized = true; - - base.Initialize(graph); - - m_BehaviorTree.OnBehaviorTreeDestroyed += Destroy; - - m_EventName.OnValueChange += UpdateEvents; - if (m_StoredValue1 != null) { m_StoredValue1.OnValueChange += UpdateEvents; } - if (m_StoredValue2 != null) { m_StoredValue2.OnValueChange += UpdateEvents; } - if (m_StoredValue3 != null) { m_StoredValue3.OnValueChange += UpdateEvents; } - - RegisterEvents(); - } - - /// - /// Registers for the events. - /// - private void RegisterEvents() - { - if (m_StoredValue1 == null || !m_StoredValue1.IsShared) { - EventHandler.RegisterEvent(m_BehaviorTree, m_EventName.Value, ReceivedEvent); - } else { - if (m_StoredValue2 == null || !m_StoredValue2.IsShared) { - EventHandler.RegisterEvent(m_BehaviorTree, m_EventName.Value, ReceivedEvent); - } else { - if (m_StoredValue3 == null || !m_StoredValue3.IsShared) { - EventHandler.RegisterEvent(m_BehaviorTree, m_EventName.Value, ReceivedEvent); - } else { - EventHandler.RegisterEvent(m_BehaviorTree, m_EventName.Value, ReceivedEvent); - } - } - } - - m_RegisteredEventName = m_EventName.Value; - } - - /// - /// Unregisters for the events that were registered. - /// - private void UnregisterEvents() - { - // The events must be registered first in order to be unregistered. - if (string.IsNullOrEmpty(m_RegisteredEventName)) { - return; - } - - // Unregister from all parameters. This will ensure no events are subscribed if the parameters change. - EventHandler.UnregisterEvent(m_BehaviorTree, m_RegisteredEventName, ReceivedEvent); - EventHandler.UnregisterEvent(m_BehaviorTree, m_RegisteredEventName, ReceivedEvent); - EventHandler.UnregisterEvent(m_BehaviorTree, m_RegisteredEventName, ReceivedEvent); - EventHandler.UnregisterEvent(m_BehaviorTree, m_RegisteredEventName, ReceivedEvent); - - m_RegisteredEventName = string.Empty; - } - - /// - /// The event name or parameter count has changed. Update the events. - /// - private void UpdateEvents() - { - UnregisterEvents(); - RegisterEvents(); - } - - /// - /// The event has been received. - /// - private void ReceivedEvent() - { - m_BehaviorTree.StartBranch(this); - } - - /// - /// A single parameter event has been received. - /// - /// The first parameter. - private void ReceivedEvent(object arg1) - { - if (m_StoredValue1 != null && m_StoredValue1.IsShared) { m_StoredValue1.SetValue(arg1); } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// A two parameter event has been received. - /// - /// The first parameter. - /// The second parameter. - private void ReceivedEvent(object arg1, object arg2) - { - if (m_StoredValue1 != null && m_StoredValue1.IsShared) { m_StoredValue1.SetValue(arg1); } - if (m_StoredValue2 != null && m_StoredValue2.IsShared) { m_StoredValue2.SetValue(arg2); } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// A three parameter event has been received. - /// - /// The first parameter. - /// The second parameter. - /// The third parameter. - private void ReceivedEvent(object arg1, object arg2, object arg3) - { - if (m_StoredValue1 != null && m_StoredValue1.IsShared) { m_StoredValue1.SetValue(arg1); } - if (m_StoredValue2 != null && m_StoredValue2.IsShared) { m_StoredValue2.SetValue(arg2); } - if (m_StoredValue3 != null && m_StoredValue3.IsShared) { m_StoredValue3.SetValue(arg3); } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// The behavior tree has been destroyed. - /// - private void Destroy() - { - m_BehaviorTree.OnBehaviorTreeDestroyed -= Destroy; - - m_EventName.OnValueChange -= UpdateEvents; - if (m_StoredValue1 != null) { m_StoredValue1.OnValueChange -= UpdateEvents; } - if (m_StoredValue2 != null) { m_StoredValue2.OnValueChange -= UpdateEvents; } - if (m_StoredValue3 != null) { m_StoredValue3.OnValueChange -= UpdateEvents; } - - UnregisterEvents(); - m_Initialized = false; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnReceivedEvent.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnReceivedEvent.cs.meta deleted file mode 100644 index 97cf5db6..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnReceivedEvent.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 08f3abf304431564faa9a446da5525be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter.cs deleted file mode 100644 index 5b47237c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [AllowMultipleTypes] - [NodeIcon("06864c37115f11445b04701c616d0e14", "8b8a2793322238240b4f25171d772003")] - [Opsive.Shared.Utility.Description("Invoked when the agent enters a trigger.")] - public class OnTriggerEnter : EventNode - { - [Tooltip("The tag of the GameObject that the trigger should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The entered trigger GameObject.")] - [SerializeField] protected SharedVariable m_StoredOtherColliderGameObject; - - /// - /// Initializes the node to the specified graph. - /// - /// The graph that is initializing the task. - public override void Initialize(IGraph graph) - { - base.Initialize(graph); - - m_BehaviorTree.OnBehaviorTreeDestroyed += Destroy; - m_BehaviorTree.OnBehaviorTreeTriggerEnter += EnteredTrigger; - } - - /// - /// The agent has entered a trigger. - /// - /// The trigger that the agent entered. - private void EnteredTrigger(Collider other) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !other.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredOtherColliderGameObject != null && m_StoredOtherColliderGameObject.IsShared) { m_StoredOtherColliderGameObject.Value = other.gameObject; } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// The behavior tree has been destroyed. - /// - private void Destroy() - { - m_BehaviorTree.OnBehaviorTreeDestroyed -= Destroy; - m_BehaviorTree.OnBehaviorTreeTriggerEnter -= EnteredTrigger; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter.cs.meta deleted file mode 100644 index d8045b13..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fedf6996bd7cfba4395c582ba40e2b47 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter2D.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter2D.cs deleted file mode 100644 index f0b0a701..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter2D.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [AllowMultipleTypes] - [NodeIcon("06864c37115f11445b04701c616d0e14", "8b8a2793322238240b4f25171d772003")] - [Opsive.Shared.Utility.Description("Invoked when the agent enters a 2D trigger.")] - public class OnTriggerEnter2D : EventNode - { - [Tooltip("The tag of the GameObject that the trigger should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The entered trigger GameObject.")] - [SerializeField] protected SharedVariable m_StoredOtherColliderGameObject; - - /// - /// Initializes the node to the specified graph. - /// - /// The graph that is initializing the task. - public override void Initialize(IGraph graph) - { - base.Initialize(graph); - - m_BehaviorTree.OnBehaviorTreeDestroyed += Destroy; - m_BehaviorTree.OnBehaviorTreeTriggerEnter2D += EnteredTrigger2D; - } - - /// - /// The agent has entered a 2D trigger. - /// - /// The trigger that the agent entered. - private void EnteredTrigger2D(Collider2D other) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !other.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredOtherColliderGameObject != null && m_StoredOtherColliderGameObject.IsShared) { m_StoredOtherColliderGameObject.Value = other.gameObject; } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// The behavior tree has been destroyed. - /// - private void Destroy() - { - m_BehaviorTree.OnBehaviorTreeDestroyed -= Destroy; - m_BehaviorTree.OnBehaviorTreeTriggerEnter2D -= EnteredTrigger2D; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter2D.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter2D.cs.meta deleted file mode 100644 index 5ca6b732..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerEnter2D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1d33b9315f8977947bcb04bd9eced13e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit.cs deleted file mode 100644 index db4fbae0..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [AllowMultipleTypes] - [NodeIcon("06864c37115f11445b04701c616d0e14", "8b8a2793322238240b4f25171d772003")] - [Opsive.Shared.Utility.Description("Invoked when the agent exits a trigger.")] - public class OnTriggerExit : EventNode - { - [Tooltip("The tag of the GameObject that the trigger should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The exited trigger GameObject.")] - [SerializeField] protected SharedVariable m_StoredOtherColliderGameObject; - - /// - /// Initializes the node to the specified graph. - /// - /// The graph that is initializing the task. - public override void Initialize(IGraph graph) - { - base.Initialize(graph); - - m_BehaviorTree.OnBehaviorTreeDestroyed += Destroy; - m_BehaviorTree.OnBehaviorTreeTriggerExit += ExitedTrigger; - } - - /// - /// The agent has exited a trigger. - /// - /// The trigger that the agent exited. - private void ExitedTrigger(Collider other) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !other.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredOtherColliderGameObject != null && m_StoredOtherColliderGameObject.IsShared) { m_StoredOtherColliderGameObject.Value = other.gameObject; } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// The behavior tree has been destroyed. - /// - private void Destroy() - { - m_BehaviorTree.OnBehaviorTreeDestroyed -= Destroy; - m_BehaviorTree.OnBehaviorTreeTriggerExit -= ExitedTrigger; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit.cs.meta deleted file mode 100644 index 58d4ef4e..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ee0ed271175ff684c8999ca1427a3f43 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit2D.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit2D.cs deleted file mode 100644 index 366604ad..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit2D.cs +++ /dev/null @@ -1,60 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using UnityEngine; - - [AllowMultipleTypes] - [NodeIcon("06864c37115f11445b04701c616d0e14", "8b8a2793322238240b4f25171d772003")] - [Opsive.Shared.Utility.Description("Invoked when the agent exits a 2D trigger.")] - public class OnTriggerExit2D : EventNode - { - [Tooltip("The tag of the GameObject that the trigger should be checked against.")] - [SerializeField] protected SharedVariable m_Tag; - [Tooltip("The exited trigger GameObject.")] - [SerializeField] protected SharedVariable m_StoredOtherColliderGameObject; - - /// - /// Initializes the node to the specified graph. - /// - /// The graph that is initializing the task. - public override void Initialize(IGraph graph) - { - base.Initialize(graph); - - m_BehaviorTree.OnBehaviorTreeDestroyed += Destroy; - m_BehaviorTree.OnBehaviorTreeTriggerExit2D += ExitedTrigger2D; - } - - /// - /// The agent has exited a 2D trigger. - /// - /// The trigger that the agent exited. - private void ExitedTrigger2D(Collider2D other) - { - if (!string.IsNullOrEmpty(m_Tag.Value) && !other.gameObject.CompareTag(m_Tag.Value)) { - return; - } - - if (m_StoredOtherColliderGameObject != null && m_StoredOtherColliderGameObject.IsShared) { m_StoredOtherColliderGameObject.Value = other.gameObject; } - - m_BehaviorTree.StartBranch(this); - } - - /// - /// The behavior tree has been destroyed. - /// - private void Destroy() - { - m_BehaviorTree.OnBehaviorTreeDestroyed -= Destroy; - m_BehaviorTree.OnBehaviorTreeTriggerExit2D -= ExitedTrigger2D; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit2D.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit2D.cs.meta deleted file mode 100644 index 5f511390..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/OnTriggerExit2D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: da04e1db385cc9d4ba72bccc9450531c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/Start.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/Start.cs deleted file mode 100644 index 693169a0..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/Start.cs +++ /dev/null @@ -1,24 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks.Events -{ - using Opsive.GraphDesigner.Runtime; - using UnityEngine; - - /// - /// The EventNode that is invoked when the behavior tree starts. - /// - [NodeIcon("8c35407905159694e8b83df15d3b039b", "df820d6e71423194188c7dcb1c1ae2e2")] - public class Start : IEventNode - { - [Tooltip("The index of the ITreeLogicNode that the IEventNode is connected to. ushort.MaxValue indicates no connection.")] - [SerializeField] protected ushort m_ConnectedIndex; - - public ushort ConnectedIndex { get => m_ConnectedIndex; set => m_ConnectedIndex = value; } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/Start.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/Start.cs.meta deleted file mode 100644 index 86749e5d..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Events/Start.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a59ed1fcf4540d54fbc57ff4e2a3fe04 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ISubtreeReference.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ISubtreeReference.cs deleted file mode 100644 index 1cf90f3c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ISubtreeReference.cs +++ /dev/null @@ -1,34 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - - /// - /// Interface for tasks that can load subtrees. - /// - public interface ISubtreeReference - { - /// - /// A list of mapped SharedVariables. These variables can override the subtree. - /// - SharedVariableOverride[] SharedVariableOverrides { get; set; } - - /// - /// Performs any runtime operations to evaluate the array of subtrees that should be returned. - /// - /// The component that the node is attached to. - void EvaluateSubtrees(IGraphComponent graphComponent); - - /// - /// The Subtrees that should be used at runtime. - /// - Subtree[] Subtrees { get; } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ISubtreeReference.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ISubtreeReference.cs.meta deleted file mode 100644 index 63289de5..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/ISubtreeReference.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 831e8b55811df1749b0416880fc74492 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/PlaceholderTasks.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/PlaceholderTasks.cs deleted file mode 100644 index cbdea11e..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/PlaceholderTasks.cs +++ /dev/null @@ -1,71 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks -{ - using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; - using Opsive.BehaviorDesigner.Runtime.Tasks.Composites; - using Opsive.BehaviorDesigner.Runtime.Tasks.Decorators; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using UnityEngine; - - [HideInFilterWindow] - [Opsive.Shared.Utility.Description("A temporary placeholder node that represents an action node being created from a template. This node will be replaced with the actual action node after Unity has finished compiling the generated script.")] - public class PlaceholderActionNode : ActionNode, IPlaceholderNode - { - [Tooltip("The type name of the target task that will replace this placeholder.")] - [SerializeField] [HideInInspector] private string m_TargetType; - public string TargetType { get => m_TargetType; set => m_TargetType = value; } - } - - [HideInFilterWindow] - [Opsive.Shared.Utility.Description("A temporary placeholder node that represents a conditional node being created from a template. This node will be replaced with the actual conditional node after Unity has finished compiling the generated script.")] - public class PlaceholderConditionalNode : ConditionalNode, IPlaceholderNode - { - [Tooltip("The type name of the target task that will replace this placeholder.")] - [SerializeField] [HideInInspector] private string m_TargetType; - public string TargetType { get => m_TargetType; set => m_TargetType = value; } - } - - [HideInFilterWindow] - [Opsive.Shared.Utility.Description("A temporary placeholder task that represents an action task being created from a template. This task will be replaced with the actual action task after Unity has finished compiling the generated script.")] - public class PlaceholderAction : Action, IPlaceholderNode - { - [Tooltip("The type name of the target task that will replace this placeholder.")] - [SerializeField] [HideInInspector] private string m_TargetType; - public string TargetType { get => m_TargetType; set => m_TargetType = value; } - } - - [HideInFilterWindow] - [Opsive.Shared.Utility.Description("A temporary placeholder node that represents a composite node being created from a template. This node will be replaced with the actual composite node after Unity has finished compiling the generated script.")] - public class PlaceholderCompositeNode : CompositeNode, IPlaceholderNode - { - [Tooltip("The type name of the target task that will replace this placeholder.")] - [SerializeField] [HideInInspector] private string m_TargetType; - public string TargetType { get => m_TargetType; set => m_TargetType = value; } - } - - [HideInFilterWindow] - [Opsive.Shared.Utility.Description("A temporary placeholder task that represents a conditional task being created from a template. This task will be replaced with the actual conditional task after Unity has finished compiling the generated script.")] - public class PlaceholderConditional : Conditional, IPlaceholderNode - { - [Tooltip("The type name of the target task that will replace this placeholder.")] - [SerializeField] [HideInInspector] private string m_TargetType; - public string TargetType { get => m_TargetType; set => m_TargetType = value; } - } - - [HideInFilterWindow] - [Opsive.Shared.Utility.Description("A temporary placeholder node that represents a decorator node being created from a template. This node will be replaced with the actual decorator node after Unity has finished compiling the generated script.")] - public class PlaceholderDecoratorNode : DecoratorNode, IPlaceholderNode - { - [Tooltip("The type name of the target task that will replace this placeholder.")] - [SerializeField] [HideInInspector] private string m_TargetType; - public string TargetType { get => m_TargetType; set => m_TargetType = value; } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/PlaceholderTasks.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/PlaceholderTasks.cs.meta deleted file mode 100644 index 04e3a73c..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/PlaceholderTasks.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 55f5ed5135933ae499f48deb2efdbb9e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/StackedTask.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/StackedTask.cs deleted file mode 100644 index 10e60938..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/StackedTask.cs +++ /dev/null @@ -1,407 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks -{ - using Opsive.BehaviorDesigner.Runtime; - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Utility; - using System; - using System.Collections.Generic; - using Unity.Entities; - using UnityEngine; - using static Opsive.BehaviorDesigner.Runtime.BehaviorTreeData; - - /// - /// The StackedTask task allows for multiple tasks to be added to a single node. - /// - [HideInFilterWindow] - [NodeIcon("e0a8f1df788b6274a9a24003859dfa7e")] - public abstract class StackedTask : Task, ITreeLogicNode, IContainerNode - { - [Tooltip("The index of the node.")] - [SerializeField] ushort m_Index; - [Tooltip("The parent index of the node. ushort.MaxValue indicates no parent.")] - [SerializeField] ushort m_ParentIndex; - [Tooltip("The sibling index of the node. ushort.MaxValue indicates no sibling.")] - [SerializeField] ushort m_SiblingIndex; - - public ushort Index { get => m_Index; set => m_Index = value; } - public ushort ParentIndex { get => m_ParentIndex; set => m_ParentIndex = value; } - public ushort SiblingIndex { get => m_SiblingIndex; set => m_SiblingIndex = value; } - public ushort RuntimeIndex { get; set; } - - /// - /// Specifies how the tasks should be compared. - /// - public enum ComparisonType - { - Sequence, // AND. - Selector // OR. - } - - [Tooltip("The tasks that should run.")] - [SerializeField] protected Task[] m_Tasks; - [Tooltip("Specifies if the tasks should be traversed with an AND (Sequence) or an OR (Selector).")] - [SerializeField] protected ComparisonType m_ComparisonType; - - private ushort m_ActiveIndex; - private bool[] m_TaskStarted; - private bool[] m_TaskEnded; - - public ushort ActiveIndex { get => m_ActiveIndex; } - public object[] Nodes { get => m_Tasks; } - public Task[] Tasks { get => m_Tasks; set => m_Tasks = value; } - - /// - /// Adds the object to the action array. - /// - /// The object that should be added. - public void Add(object obj) - { - Task task; - if (obj is System.Reflection.MethodInfo) { - // A delegate action needs to be created. - var methodInfo = obj as System.Reflection.MethodInfo; - var parameters = methodInfo.GetParameters(); - var types = new Type[(parameters != null ? parameters.Length : 0) + ((methodInfo.ReturnType != typeof(void)) ? 1 : 0)]; - if (parameters != null) { - for (int i = 0; i < parameters.Length; ++i) { - types[i] = parameters[i].ParameterType; - } - } - - Type baseType; - if (methodInfo.ReturnType == typeof(void)) { - if (parameters != null && parameters.Length > 0) { - if (parameters.Length == 1) { baseType = typeof(TaskDelegate<>); } - else if (parameters.Length == 2) { baseType = typeof(TaskDelegate<,>); } - else if (parameters.Length == 3) { baseType = typeof(TaskDelegate<,,>); } - else if (parameters.Length == 4) { baseType = typeof(TaskDelegate<,,,>); } - else if (parameters.Length == 5) { baseType = typeof(TaskDelegate<,,,,>); } - else if (parameters.Length == 6) { baseType = typeof(TaskDelegate<,,,,,>); } - else if (parameters.Length == 7) { baseType = typeof(TaskDelegate<,,,,,,>); } - else if (parameters.Length == 8) { baseType = typeof(TaskDelegate<,,,,,,,>); } - else if (parameters.Length == 9) { baseType = typeof(TaskDelegate<,,,,,,,,>); } - else if (parameters.Length == 10) { baseType = typeof(TaskDelegate<,,,,,,,,,>); } - else { Debug.LogError($"Error: Unable to create TaskDelegate with {parameters.Length}. Please send this error to support@opsive.com."); return; } - } else { - baseType = typeof(TaskDelegate); - } - } else { - // The method has a returned parameter. - types[types.Length - 1] = methodInfo.ReturnType; - if (parameters != null && parameters.Length > 0) { - if (parameters.Length == 1) { baseType = typeof(TaskValueDelegate<,>); } - else if (parameters.Length == 2) { baseType = typeof(TaskValueDelegate<,,>); } - else if (parameters.Length == 3) { baseType = typeof(TaskValueDelegate<,,,>); } - else if (parameters.Length == 4) { baseType = typeof(TaskValueDelegate<,,,,>); } - else if (parameters.Length == 5) { baseType = typeof(TaskValueDelegate<,,,,,>); } - else if (parameters.Length == 6) { baseType = typeof(TaskValueDelegate<,,,,,,>); } - else if (parameters.Length == 7) { baseType = typeof(TaskValueDelegate<,,,,,,,>); } - else if (parameters.Length == 8) { baseType = typeof(TaskValueDelegate<,,,,,,,,>); } - else if (parameters.Length == 9) { baseType = typeof(TaskValueDelegate<,,,,,,,,,>); } - else if (parameters.Length == 10) { baseType = typeof(TaskValueDelegate<,,,,,,,,,>); } - else { Debug.LogError($"Error: Unable to create TaskValueDelegate with {parameters.Length}. Please send this error to support@opsive.com."); return; } - } else { - baseType = typeof(TaskValueDelegate<>); - } - } - - Type actionDelegateType; - if (types.Length > 0) { - actionDelegateType = baseType.MakeGenericType(types); - } else { - actionDelegateType = baseType; - } - - // The Action Delegate needs to be initialized to the method. - var actionDelegate = Activator.CreateInstance(actionDelegateType) as TaskDelegateBase; - actionDelegate.Bind(methodInfo); - - task = actionDelegate; - } else if (obj is Type) { - task = Activator.CreateInstance((Type)obj) as Task; - } else { // Task. - task = obj as Task; - } - - task.Reset(); - - if (m_Tasks == null) { - m_Tasks = new Task[] { task }; - } else { - Array.Resize(ref m_Tasks, m_Tasks.Length + 1); - m_Tasks[m_Tasks.Length - 1] = task; - } - } - - /// - /// Removes the action at the specified index. - /// - /// The index of the action that should be removed. - public void Remove(int index) - { - if (index < 0 || index >= m_Tasks.Length) { - return; - } - - m_Tasks[index].OnDestroy(); - for (int i = index; i < m_Tasks.Length - 1; ++i) { - m_Tasks[i] = m_Tasks[i + 1]; - } - Array.Resize(ref m_Tasks, m_Tasks.Length - 1); - } - - /// - /// Resets the task values back to their default. - /// - public override void Reset() - { - if (m_Tasks == null) { - return; - } - - for (int i = 0; i < m_Tasks.Length; ++i) { - m_Tasks[i].Reset(); - } - } - - /// - /// Initializes the base task parameters. - /// - /// A reference to the owning BehaviorTree. - /// The runtime index of the node. - internal override void Initialize(BehaviorTree behaviorTree, ushort runtimeIndex) - { - if (m_Tasks != null) { - m_TaskStarted = new bool[m_Tasks.Length]; - m_TaskEnded = new bool[m_Tasks.Length]; - for (int i = 0; i < m_Tasks.Length; ++i) { - if (m_Tasks[i] == null) { - m_Tasks[i] = new UnknownTask(); - } - if (m_Tasks[i] is TaskDelegateBase taskDelegate) { - taskDelegate.Initialize(behaviorTree, runtimeIndex, this is IConditional); - } else { - m_Tasks[i].Initialize(behaviorTree, runtimeIndex); - } - } - } - - base.Initialize(behaviorTree, runtimeIndex); - } - - /// - /// Called when the task is started. - /// - public override void OnStart() - { - if (m_Tasks == null) { - return; - } - - for (int i = 0; i < m_Tasks.Length; ++i) { - if (m_Tasks[i] == null) { - continue; - } - - m_TaskStarted[i] = false; - m_TaskEnded[i] = false; - } - } - - /// - /// Updates all of the child tasks. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - if (m_Tasks == null || m_Tasks.Length == 0) { - return TaskStatus.Failure; - } - - while (m_ActiveIndex < m_Tasks.Length) { - // Call start when the local task is started, not when the StackedTask starts. - if (!m_TaskStarted[m_ActiveIndex]) { - m_Tasks[m_ActiveIndex].OnStart(); - m_TaskStarted[m_ActiveIndex] = true; - } - - var executionStatus = m_Tasks[m_ActiveIndex].OnUpdate(); - if (executionStatus == TaskStatus.Running) { - return TaskStatus.Running; - } - - if (m_ComparisonType == ComparisonType.Sequence && executionStatus == TaskStatus.Failure) { - return TaskStatus.Failure; - } else if (m_ComparisonType == ComparisonType.Selector && executionStatus == TaskStatus.Success) { - return TaskStatus.Success; - } - - if (!m_TaskEnded[m_ActiveIndex]) { - m_Tasks[m_ActiveIndex].OnEnd(); - m_TaskEnded[m_ActiveIndex] = true; - } - m_ActiveIndex++; - } - - return m_ComparisonType == ComparisonType.Sequence ? TaskStatus.Success : TaskStatus.Failure; - } - - /// - /// Called when the task stops. - /// - public override void OnEnd() - { - if (m_TaskEnded == null) { - return; - } - - for (int i = 0; i < m_Tasks.Length; ++i) { - if (m_Tasks[i] == null) { - continue; - } - if (!m_TaskEnded[i]) { - m_Tasks[i].OnEnd(); - } - - m_TaskStarted[i] = false; - m_TaskEnded[i] = false; - } - m_ActiveIndex = 0; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public override MemberVisibility GetSaveReflectionType(int index) { return index < 0 || index >= m_Tasks.Length ? MemberVisibility.None : m_Tasks[index].GetSaveReflectionType(index); } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public override object Save(World world, Entity entity) - { - if (m_Tasks == null) { - return null; - } - - var saveData = new object[m_Tasks.Length + 1]; - for (int i = 0; i < m_Tasks.Length; ++i) { - if (m_Tasks[i] == null) { - continue; - } - var reflectionType = m_Tasks[i].GetSaveReflectionType(i); - if (reflectionType != MemberVisibility.None) { - saveData[i] = Serialization.Serialize(m_Tasks[i], reflectionType, BehaviorTreeData.ValidateSerializedObject); - } else { - saveData[i] = m_Tasks[i].Save(world, entity); - } - } - saveData[m_Tasks.Length] = m_ActiveIndex; - - return saveData; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - /// A reference to the map between the VariableAssignment and SharedVariable. - /// A reference to the list of task references that need to be resolved later. - public override void Load(object saveData, World world, Entity entity, Dictionary variableByNameMap, - ref ResizableArray taskReferences) - { - if (m_Tasks == null || saveData == null) { - return; - } - - var taskData = (object[])saveData; - if (taskData.Length != m_Tasks.Length + 1) { - Debug.LogError("Error: The save data does not match the task data length."); - return; - } - - for (int i = 0; i < m_Tasks.Length; ++i) { - if (taskData[i] == null) { - continue; - } - - Load(m_Tasks[i], i, taskData[i], world, entity, variableByNameMap, ref taskReferences); - } - m_ActiveIndex = (ushort)taskData[m_Tasks.Length]; - } - - /// - /// Loads the previous task state. - /// - /// The task that the saveData belongs to. - /// The index of the task within the Tasks array. - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - /// A reference to the map between the VariableAssignment and SharedVariable. - /// A reference to the list of task references that need to be resolved later. - protected virtual void Load(Task task, int index, object saveData, World world, Entity entity, - Dictionary variableByNameMap, ref ResizableArray taskReferences) - { - var reflectionType = task.GetSaveReflectionType(index); - if (reflectionType != MemberVisibility.None) { - var localTaskReferences = taskReferences; - (saveData as Serialization).DeserializeFields(task, reflectionType, BehaviorTreeData.ValidateDeserializedTypeObject, - (object fieldInfoObj, object task, object value) => - { - return BehaviorTreeData.ValidateDeserializedObject(fieldInfoObj, task, value, ref variableByNameMap, ref localTaskReferences); - }); - taskReferences = localTaskReferences; - } else { - task.Load(saveData, world, entity, variableByNameMap, ref taskReferences); - } - } - - /// - /// Callback when OnDrawGizmos is triggered. - /// - protected override void OnDrawGizmos() - { - if (m_Tasks == null) { - return; - } - - for (int i = 0; i < m_Tasks.Length; ++i) { - if (m_Tasks[i] == null) { - continue; - } - m_Tasks[i].OnDrawGizmos(m_BehaviorTree); - } - } - - /// - /// Callback when OnDrawGizmosSelected is triggered. - /// - protected override void OnDrawGizmosSelected() - { - if (m_Tasks == null) { - return; - } - - for (int i = 0; i < m_Tasks.Length; ++i) { - if (m_Tasks[i] == null) { - continue; - } - m_Tasks[i].OnDrawGizmosSelected(m_BehaviorTree); - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/StackedTask.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/StackedTask.cs.meta deleted file mode 100644 index daf5e5ee..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/StackedTask.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f7e3a1fa96850394ab09c7ebf309b0ed -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Task.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Task.cs deleted file mode 100644 index 7e49501f..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Task.cs +++ /dev/null @@ -1,371 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks -{ - using Opsive.BehaviorDesigner.Runtime.Systems; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Utility; - using System.Collections.Generic; - using Unity.Entities; - using UnityEngine; - using static Opsive.BehaviorDesigner.Runtime.BehaviorTreeData; - - /// - /// The base class for a GameObject task. - /// - public abstract class Task : ISavableTask - { - protected GameObject m_GameObject; - protected Transform m_Transform; - protected BehaviorTree m_BehaviorTree; - protected ushort m_RuntimeIndex; - - protected virtual GameObject gameObject { get => m_GameObject; } - protected virtual Transform transform { get => m_Transform; } - - private TaskStatus m_Status; - internal TaskStatus Status { get => m_Status; set => m_Status = value; } - - /// - /// Adds the task to the behavior tree buffer. - /// - /// The world that the task runs in. - /// The entity that the task is connected to. - /// The ID of the behavior tree running the task. - /// The index of the task. - public virtual void AddBufferElement(World world, Entity entity, int behaviorTreeID, ushort index) - { - DynamicBuffer buffer; - if (world.EntityManager.HasBuffer(entity)) { - buffer = world.EntityManager.GetBuffer(entity); - } else { - buffer = world.EntityManager.AddBuffer(entity); - } - buffer.Add(new TaskObjectComponent() - { - Index = index, - }); - } - - /// - /// Clears all component buffers from the behavior tree buffer. - /// - /// The world that the task runs in. - /// The entity that the task is connected to. - public virtual void ClearBufferElement(World world, Entity entity) - { - DynamicBuffer buffer; - if (world.EntityManager.HasBuffer(entity)) { - buffer = world.EntityManager.GetBuffer(entity); - buffer.Clear(); - } - } - - /// - /// Resets the task values back to their default. - /// - public virtual void Reset() { } - - /// - /// Initializes the base task parameters. - /// - /// A reference to the owning BehaviorTree. - /// The runtime index of the node. - internal virtual void Initialize(BehaviorTree behaviorTree, ushort runtimeIndex) - { - if (!Application.isPlaying) { - return; - } - - m_BehaviorTree = behaviorTree; - m_GameObject = m_BehaviorTree.gameObject; - m_Transform = m_BehaviorTree.transform; - m_RuntimeIndex = runtimeIndex; - - m_BehaviorTree.OnBehaviorTreeStarted += OnBehaviorTreeStarted; - m_BehaviorTree.OnBehaviorTreeStopped += OnBehaviorTreeStopped; - m_BehaviorTree.OnBehaviorTreeDestroyed += OnDestroy; - if (ReceiveCollisionEnterCallback) { m_BehaviorTree.OnBehaviorTreeCollisionEnter += OnCollisionEnter; } - if (ReceiveCollisionExitCallback) { m_BehaviorTree.OnBehaviorTreeCollisionExit += OnCollisionExit; } - if (ReceiveCollisionEnter2DCallback) { m_BehaviorTree.OnBehaviorTreeCollisionEnter2D += OnCollisionEnter2D; } - if (ReceiveCollisionExit2DCallback) { m_BehaviorTree.OnBehaviorTreeCollisionExit2D += OnCollisionExit2D; } - if (ReceiveTriggerEnterCallback) { m_BehaviorTree.OnBehaviorTreeTriggerEnter += OnTriggerEnter; } - if (ReceiveTriggerExitCallback) { m_BehaviorTree.OnBehaviorTreeTriggerExit += OnTriggerExit; } - if (ReceiveTriggerEnter2DCallback) { m_BehaviorTree.OnBehaviorTreeTriggerEnter2D += OnTriggerEnter2D; } - if (ReceiveTriggerExit2DCallback) { m_BehaviorTree.OnBehaviorTreeTriggerExit2D += OnTriggerExit2D; } - if (ReceiveControllerColliderHitCallback) { m_BehaviorTree.OnBehaviorTreeControllerColliderHit += OnControllerColliderHit; } - - OnAwake(); - } - - /// - /// Callback when the behavior tree is initialized. - /// - public virtual void OnAwake() { } - - /// - /// Callback when the behavior tree is started. - /// - public virtual void OnBehaviorTreeStarted() { } - - /// - /// Callback when the behavior tree is started. - /// - [System.Obsolete("Task.OnStarted has been deprecated. Use Task.OnBehaviorTreeStarted instead.")] - public virtual void OnStarted() { } - - /// - /// Callback when the task is started. - /// - public virtual void OnStart() { } - - /// - /// Executes the task logic. Returns a TaskStatus indicating how the behavior tree flow should proceed. - /// - /// The status of the task. - public virtual TaskStatus OnUpdate() { return TaskStatus.Success; } - - /// - /// Callback when the task stops. - /// - public virtual void OnEnd() { } - - /// - /// Calls Unity's GetComponent method. - /// - /// The retrieved component (can be null). - protected T GetComponent() - { - return gameObject.GetComponent(); - } - - /// - /// Calls Unity's GetComponent method. - /// - /// The component type that should be retrieved. - /// The retrieved component (can be null). - protected Component GetComponent(System.Type type) - { - return gameObject.GetComponent(type); - } - - /// - /// Calls Unity's TryGetComponent method. - /// - /// The type of component that should be retireved. - /// The retrieved component. - protected void TryGetComponent(out T component) where T : Component - { - gameObject.TryGetComponent(out component); - } - - /// - /// Calls Unity's TryGetComponent method. - /// - /// The type of component to get. - /// The retrieved component. - protected void TryGetComponent(System.Type type, out Component component) - { - gameObject.TryGetComponent(type, out component); - } - protected void StartCoroutine(string methodName) { m_BehaviorTree.StartTaskCoroutine(this, methodName); } - protected Coroutine StartCoroutine(System.Collections.IEnumerator routine) { return m_BehaviorTree.StartCoroutine(routine); } - protected Coroutine StartCoroutine(string methodName, object value) { return m_BehaviorTree.StartTaskCoroutine(this, methodName, value); } - protected void StopCoroutine(string methodName) { m_BehaviorTree.StopTaskCoroutine(methodName); } - protected void StopCoroutine(System.Collections.IEnumerator routine) { m_BehaviorTree.StopCoroutine(routine); } - protected void StopAllCoroutines() { m_BehaviorTree.StopAllTaskCoroutines(); } - - protected virtual bool ReceiveCollisionEnterCallback => false; - /// - /// Callback when OnCollisionEnter is triggered. This callback will only be received when ReceiveCollisionEnterCallback is true. - /// - /// The resulting collision. - protected virtual void OnCollisionEnter(Collision collision) { } - - protected virtual bool ReceiveCollisionExitCallback => false; - /// - /// Callback when OnCollisionExit is triggered. This callback will only be received when ReceiveCollisionExitCallback is true. - /// - /// The resulting collision. - protected virtual void OnCollisionExit(Collision collision) { } - - protected virtual bool ReceiveCollisionEnter2DCallback => false; - /// - /// Callback when OnCollisionEnter2D is triggered. This callback will only be received when ReceiveCollisionEnter2DCallback is true. - /// - /// The resulting collision. - protected virtual void OnCollisionEnter2D(Collision2D collision) { } - - protected virtual bool ReceiveCollisionExit2DCallback => false; - /// - /// Callback when OnCollisionExit2D is triggered. This callback will only be received when ReceiveCollisionExit2DCallback is true. - /// - /// The resulting collision. - protected virtual void OnCollisionExit2D(Collision2D collision) { } - - protected virtual bool ReceiveTriggerEnterCallback => false; - /// - /// Callback when OnTriggerEnter is triggered. This callback will only be received when ReceiveTriggerEnterCallback is true. - /// - /// The overlapping collider. - protected virtual void OnTriggerEnter(Collider other) { } - - protected virtual bool ReceiveTriggerExitCallback => false; - /// - /// Callback when OnTriggerExit is triggered. This callback will only be received when ReceiveTriggerExitCallback is true. - /// - /// The overlapping collider. - protected virtual void OnTriggerExit(Collider other) { } - - protected virtual bool ReceiveTriggerEnter2DCallback => false; - /// - /// Callback when OnTriggerEnter2D is triggered. This callback will only be received when ReceiveTriggerEnter2DCallback is true. - /// - /// The overlapping collider. - protected virtual void OnTriggerEnter2D(Collider2D other) { } - - protected virtual bool ReceiveTriggerExit2DCallback => false; - /// - /// Callback when OnTriggerExit2D is triggered. This callback will only be received when ReceiveTriggerExit2DCallback is true. - /// - /// The overlapping collider. - protected virtual void OnTriggerExit2D(Collider2D other) { } - - protected virtual bool ReceiveControllerColliderHitCallback => false; - /// - /// Callback when OnControllerColliderHit is triggered. This callback will only be received when ReceiveControllerColliderHitCallback is true. - /// - /// The hit result. - protected virtual void OnControllerColliderHit(ControllerColliderHit hit) { } - - /// - /// Editor method which will draw the gizmos. - /// - /// A reference to the behavior tree component. - internal void OnDrawGizmos(BehaviorTree behaviorTree) - { - if (m_BehaviorTree == null) { - m_BehaviorTree = behaviorTree; - m_Transform = behaviorTree.transform; - m_GameObject = behaviorTree.gameObject; - } - - OnDrawGizmos(); - } - - /// - /// Callback when OnDrawGizmos is triggered. - /// - - protected virtual void OnDrawGizmos() { } - - /// - /// Editor method which will draw the selected gizmos. - /// - /// A reference to the behavior tree component. - internal void OnDrawGizmosSelected(BehaviorTree behaviorTree) - { - if (m_BehaviorTree == null) { - m_BehaviorTree = behaviorTree; - m_Transform = behaviorTree.transform; - m_GameObject = behaviorTree.gameObject; - } - - OnDrawGizmosSelected(); - } - - /// - /// Callback when OnDrawGizmosSelected is triggered. - /// - protected virtual void OnDrawGizmosSelected() { } - - /// - /// Callback when the behavior tree is stopped. - /// - /// Is the behavior tree paused? - public virtual void OnBehaviorTreeStopped(bool paused) { } - - /// - /// Callback when the behavior tree is stopped. - /// - /// Is the behavior tree paused? - [System.Obsolete("Task.OnStopped has been deprecated. Use Task.OnBehaviorTreeStopped instead.")] - public virtual void OnStopped(bool paused) { } - - /// - /// Callback when the behavior tree is destroyed. - /// - public virtual void OnDestroy() - { - if (m_BehaviorTree == null) { - return; - } - - m_BehaviorTree.OnBehaviorTreeStarted -= OnBehaviorTreeStarted; - m_BehaviorTree.OnBehaviorTreeStopped -= OnBehaviorTreeStopped; - m_BehaviorTree.OnBehaviorTreeDestroyed -= OnDestroy; - if (ReceiveCollisionEnterCallback) { m_BehaviorTree.OnBehaviorTreeCollisionEnter -= OnCollisionEnter; } - if (ReceiveCollisionExitCallback) { m_BehaviorTree.OnBehaviorTreeCollisionExit -= OnCollisionExit; } - if (ReceiveCollisionEnter2DCallback) { m_BehaviorTree.OnBehaviorTreeCollisionEnter2D -= OnCollisionEnter2D; } - if (ReceiveCollisionExit2DCallback) { m_BehaviorTree.OnBehaviorTreeCollisionExit2D -= OnCollisionExit2D; } - if (ReceiveTriggerEnterCallback) { m_BehaviorTree.OnBehaviorTreeTriggerEnter -= OnTriggerEnter; } - if (ReceiveTriggerExitCallback) { m_BehaviorTree.OnBehaviorTreeTriggerExit -= OnTriggerExit; } - if (ReceiveTriggerEnter2DCallback) { m_BehaviorTree.OnBehaviorTreeTriggerEnter2D -= OnTriggerEnter2D; } - if (ReceiveTriggerExit2DCallback) { m_BehaviorTree.OnBehaviorTreeTriggerExit2D -= OnTriggerExit2D; } - if (ReceiveControllerColliderHitCallback) { m_BehaviorTree.OnBehaviorTreeControllerColliderHit -= OnControllerColliderHit; } - } - - /// - /// Overrides ToString providing a nicer string value of the task. - /// - /// The overloaded ToString value. - public override string ToString() - { - return GetType().Name; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public virtual MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.Public; } - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public virtual object Save(World world, Entity entity) - { - return null; - } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public virtual void Load(object saveData, World world, Entity entity) { } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - /// A reference to the map between the VariableAssignment and SharedVariable. - /// A reference to the list of task references that need to be resolved later. - public virtual void Load(object saveData, World world, Entity entity, Dictionary variableByNameMap, - ref ResizableArray taskReferences) - { - Load(saveData, world, entity); - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Task.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Task.cs.meta deleted file mode 100644 index dc9c35ff..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Task.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8ddfd58bb4de183448b245f6fb314fbe -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskCoroutine.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskCoroutine.cs deleted file mode 100644 index f0b131e1..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskCoroutine.cs +++ /dev/null @@ -1,63 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime -{ - using UnityEngine; - using System.Collections; - - /// - /// A wrapper for the coroutine object in order to add support for coroutines within Tasks. - /// - public class TaskCoroutine - { - private BehaviorTree m_BehaviorTree; - - private IEnumerator m_CoroutineEnumerator; - private Coroutine m_Coroutine; - private string m_Name; - private bool m_Stop; - - public Coroutine Coroutine { get => m_Coroutine; } - - /// - /// Initializes and starts a coroutine. - /// - /// The BehaviorTree that the coroutine has been added to. - /// A reference to the coroutine. - /// The name of the coroutine. - public TaskCoroutine(BehaviorTree behaviorTree, IEnumerator coroutine, string name) - { - m_BehaviorTree = behaviorTree; - m_CoroutineEnumerator = coroutine; - m_Name = name; - - m_Coroutine = m_BehaviorTree.StartCoroutine(RunCoroutine()); - } - - /// - /// Runs the coroutine until it is complete or has been stopped. - /// - /// The active coroutine. - public IEnumerator RunCoroutine() - { - while (!m_Stop) { - if (m_CoroutineEnumerator != null && m_CoroutineEnumerator.MoveNext()) { - yield return m_CoroutineEnumerator.Current; - } else { - break; - } - } - m_BehaviorTree.TaskCoroutineEnded(this, m_Name); - } - - /// - /// Stops the coroutine. - /// - public void Stop() { m_Stop = true; } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskCoroutine.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskCoroutine.cs.meta deleted file mode 100644 index 9a39aabb..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskCoroutine.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5fcbd45134954664fb7f14527343dfae -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskDelegateBase.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskDelegateBase.cs deleted file mode 100644 index 25983ec0..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskDelegateBase.cs +++ /dev/null @@ -1,1259 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks -{ - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Utility; - using System; - using System.Reflection; - using UnityEngine; - - /// - /// The TaskDelegateBase task is an abstract class used for any action classes that use reflection to execute the action. - /// - [HideInFilterWindow] - public abstract class TaskDelegateBase : Task, IAction - { - [Tooltip("The object that the delegate belongs to. Can be null for static variables.")] - [SerializeField] [HideInInspector] protected SharedVariable m_Target; - [Tooltip("The type of delegate that should be created.")] - [SerializeField] [HideInInspector] protected string m_ReflectedType; - [Tooltip("The type of parameters that the delegate uses.")] - [SerializeField] [HideInInspector] protected string[] m_ParameterTypes; - [Tooltip("The name of the method that should be called by the delegate.")] - [SerializeField] [HideInInspector] protected string m_MethodName; - - public SharedVariable Target => m_Target; - public string ReflectedType => m_ReflectedType; - public string[] ParameterTypes => m_ParameterTypes; - public string MethodName => m_MethodName; - - protected bool m_ConditionalTask; - - /// - /// Binds the task to the specified method. - /// - /// The MethodInfo to bind the task to. - internal void Bind(MethodInfo methodInfo) - { - m_ReflectedType = methodInfo.ReflectedType.FullName; - var parameters = methodInfo.GetParameters(); - if (parameters != null && parameters.Length > 0) { - m_ParameterTypes = new string[parameters.Length]; - for (int i = 0; i < parameters.Length; ++i) { - m_ParameterTypes[i] = parameters[i].ParameterType.FullName; - } - } - m_MethodName = methodInfo.Name; - } - - /// - /// Initializes the task. - /// - /// A reference to the owning BehaviorTree. - /// Does the delegate belong to an IConditional task? - /// The runtime index of the node. - internal void Initialize(BehaviorTree behaviorTree, ushort runtimeIndex, bool conditionalTask) - { - m_ConditionalTask = conditionalTask; - - base.Initialize(behaviorTree, runtimeIndex); - } - - /// - /// Callback when the behavior tree is initialized. - /// - public override void OnAwake() - { - base.OnAwake(); - - CreateDelegate(); - if (m_Target != null) { - m_Target.OnValueChange += CreateDelegate; - } - } - - /// - /// Creates the task delegate. - /// - protected virtual void CreateDelegate() { } - - /// - /// Returns the target value. - /// - /// The target value. - protected object GetTargetValue() - { - // The target will be null if no SharedVariable value has been assigned. - var target = m_Target.GetValue(); - if (target == null) { - var targetType = m_ReflectedType.Replace("UnityEngine.", string.Empty); - if (string.Equals(targetType, "GameObject")) { - return m_GameObject; - } - var value = m_GameObject.GetComponent(targetType); - if (value == null) { - var splitType = m_ReflectedType.Split("."); - value = m_GameObject.GetComponent(splitType[splitType.Length - 1]); - if (value == null) { - Debug.LogError($"Error: Unable to find the component {m_ReflectedType} on the {m_GameObject.name} GameObject."); - } - } - return value; - } - return target; - } - - /// - /// Returns the method from the given type and name. - /// - /// The object type that the method belongs to. - /// The name of the method. - /// The types of parameters that the method uses. - /// The method from the given type and name. - protected static MethodInfo GetMethod(string reflectedType, string methodName, string[] parameterTypeNames) - { - var type = TypeUtility.GetType(reflectedType); - if (type == null) { - Debug.LogError($"Error: Unable to find the type {reflectedType}."); - return null; - } - - Type[] parameterTypes; - if (parameterTypeNames != null) { - parameterTypes = new Type[parameterTypeNames.Length]; - for (int i = 0; i < parameterTypeNames.Length; ++i) { - parameterTypes[i] = TypeUtility.GetType(parameterTypeNames[i]); - if (parameterTypes[i] == null) { - Debug.LogError($"Error: Unable to find the parameter type {parameterTypeNames[i]}."); - return null; - } - } - } else { - parameterTypes = new Type[0]; - } - - // Get the method based on the type and parameter types. - var method = type.GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static, null, parameterTypes, null); - if (method == null) { - Debug.LogError($"Error: Unable to find the method {methodName} on type {type}. If you are using code stripping you can prevent Unity from stripping the " + - $"method with a link.xml file: https://docs.unity3d.com/6000.1/Documentation/Manual/managed-code-stripping-xml-formatting.html"); - return null; - } - - return method; - } - - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public override MemberVisibility GetSaveReflectionType(int index) - { - return MemberVisibility.Public; - } - - /// - /// Returns a friendly name for the task. - /// - /// A friendly name for the task. - public override string ToString() - { - return m_MethodName; - } - } - - /// - /// Task which executes a delegate with no parameters. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(System.Action)) as System.Action; - } else { - m_Delegate = method.CreateDelegate(typeof(System.Action), GetTargetValue()) as System.Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with no parameters but a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with one parameter. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Action)) as Action; - } else { - m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(m_Parameter1.Value); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with one parameter and a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(m_Parameter1.Value); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with two parameters. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Action)) as Action; - } else { - m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(m_Parameter1.Value, m_Parameter2.Value); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with two parameters and a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with three parameters. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Action)) as Action; - } else { - m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with three parameters and a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with four parameters. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Action)) as Action; - } else { - m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with four parameters and a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with five parameters. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Action)) as Action; - } else { - m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with five parameters and a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with six parameters. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The sixth parameter.")] - [SerializeField] protected SharedVariable m_Parameter6; - - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Action)) as Action; - } else { - m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with six parameters and a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The sixth parameter.")] - [SerializeField] protected SharedVariable m_Parameter6; - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with seven parameters. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The sixth parameter.")] - [SerializeField] protected SharedVariable m_Parameter6; - [Tooltip("The seventh parameter.")] - [SerializeField] protected SharedVariable m_Parameter7; - - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Action)) as Action; - } else { - m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with seven parameters and a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The sixth parameter.")] - [SerializeField] protected SharedVariable m_Parameter6; - [Tooltip("The seventh parameter.")] - [SerializeField] protected SharedVariable m_Parameter7; - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with eight parameters. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The sixth parameter.")] - [SerializeField] protected SharedVariable m_Parameter6; - [Tooltip("The seventh parameter.")] - [SerializeField] protected SharedVariable m_Parameter7; - [Tooltip("The eigth parameter.")] - [SerializeField] protected SharedVariable m_Parameter8; - - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Action)) as Action; - } else { - m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with eight parameters and a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The sixth parameter.")] - [SerializeField] protected SharedVariable m_Parameter6; - [Tooltip("The seventh parameter.")] - [SerializeField] protected SharedVariable m_Parameter7; - [Tooltip("The eigth parameter.")] - [SerializeField] protected SharedVariable m_Parameter8; - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with nine parameters. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The sixth parameter.")] - [SerializeField] protected SharedVariable m_Parameter6; - [Tooltip("The seventh parameter.")] - [SerializeField] protected SharedVariable m_Parameter7; - [Tooltip("The eigth parameter.")] - [SerializeField] protected SharedVariable m_Parameter8; - [Tooltip("The ninth parameter.")] - [SerializeField] protected SharedVariable m_Parameter9; - - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Action)) as Action; - } else { - m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value, m_Parameter9.Value); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with nine parameters and a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The sixth parameter.")] - [SerializeField] protected SharedVariable m_Parameter6; - [Tooltip("The seventh parameter.")] - [SerializeField] protected SharedVariable m_Parameter7; - [Tooltip("The eigth parameter.")] - [SerializeField] protected SharedVariable m_Parameter8; - [Tooltip("The ninth parameter.")] - [SerializeField] protected SharedVariable m_Parameter9; - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value, m_Parameter9.Value); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with ten parameters. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The sixth parameter.")] - [SerializeField] protected SharedVariable m_Parameter6; - [Tooltip("The seventh parameter.")] - [SerializeField] protected SharedVariable m_Parameter7; - [Tooltip("The eigth parameter.")] - [SerializeField] protected SharedVariable m_Parameter8; - [Tooltip("The ninth parameter.")] - [SerializeField] protected SharedVariable m_Parameter9; - [Tooltip("The tenth parameter.")] - [SerializeField] protected SharedVariable m_Parameter10; - - private Action m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Action)) as Action; - } else { - m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value, m_Parameter9.Value, m_Parameter10.Value); - return TaskStatus.Success; - } - } - - /// - /// Task which executes a delegate with ten parameters and a returned value. - /// - [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] - public class TaskValueDelegate : TaskDelegateBase - { - [Tooltip("The first parameter.")] - [SerializeField] protected SharedVariable m_Parameter1; - [Tooltip("The second parameter.")] - [SerializeField] protected SharedVariable m_Parameter2; - [Tooltip("The third parameter.")] - [SerializeField] protected SharedVariable m_Parameter3; - [Tooltip("The fourth parameter.")] - [SerializeField] protected SharedVariable m_Parameter4; - [Tooltip("The fifth parameter.")] - [SerializeField] protected SharedVariable m_Parameter5; - [Tooltip("The sixth parameter.")] - [SerializeField] protected SharedVariable m_Parameter6; - [Tooltip("The seventh parameter.")] - [SerializeField] protected SharedVariable m_Parameter7; - [Tooltip("The eigth parameter.")] - [SerializeField] protected SharedVariable m_Parameter8; - [Tooltip("The ninth parameter.")] - [SerializeField] protected SharedVariable m_Parameter9; - [Tooltip("The tenth parameter.")] - [SerializeField] protected SharedVariable m_Parameter10; - [Tooltip("The returned result.")] - [SerializeField] [RequireShared] protected SharedVariable m_Result; - - private Func m_Delegate; - - /// - /// Creates the task delegate. - /// - protected override void CreateDelegate() - { - var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); - if (method == null) { - return; - } - - if (method.IsStatic) { - m_Delegate = method.CreateDelegate(typeof(Func)) as Func; - } else { - m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; - } - } - - /// - /// Invokes the delegate. - /// - /// The status of the task. - public override TaskStatus OnUpdate() - { - m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value, m_Parameter9.Value, m_Parameter10.Value); - if (m_ConditionalTask) { - return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; - } - return TaskStatus.Success; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskDelegateBase.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskDelegateBase.cs.meta deleted file mode 100644 index e7868a84..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskDelegateBase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f432dc82c1de72e4dbb4662cbee75a4b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskInterfaces.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskInterfaces.cs deleted file mode 100644 index e8875f43..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskInterfaces.cs +++ /dev/null @@ -1,204 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks -{ - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Utility; - using System.Collections.Generic; - using Unity.Entities; - using static Opsive.BehaviorDesigner.Runtime.BehaviorTreeData; - - /// - /// Interface for action tasks. - /// - [ReflectedType] - [DisplayName("Actions")] - public interface IAction { } - - /// - /// Interface for composite tasks. - /// - [DisplayName("Composites")] - public interface IComposite { } - - /// - /// Interface for conditional tasks. - /// - [ReflectedType(typeof(bool))] - [DisplayName("Conditionals")] - public interface IConditional { } - - /// - /// Interface for reference-based conditional tasks that can be reevaluated. - /// - public interface IConditionalReevaluation - { - /// - /// Reevaluates the task logic. Returns a TaskStatus indicating how the behavior tree flow should proceed. - /// - /// The status of the task during the reevaluation phase. - public TaskStatus OnReevaluateUpdate(); - } - - /// - /// Interface for decorator tasks. - /// - [DisplayName("Decorators")] - public interface IDecorator { } - - /// - /// Interface which specifies that the object is a task. - /// - public interface IAuthoringTask - { - /// - /// The type of flag that should be enabled when the task is running. - /// - public ComponentType Flag { get; } - - /// - /// The system type that the component uses. - /// - public System.Type SystemType { get; } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public int AddBufferElement(World world, Entity entity, UnityEngine.GameObject gameObject); - - /// - /// Clears the IBufferElementData from the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be cleared from. - public void ClearBufferElement(World world, Entity entity); - } - - /// - /// Interface which specifies the IComponentData is a task. - /// - public interface ITaskComponentData - { - /// - /// The type of tag that should be enabled when the task is running. - /// - [System.Obsolete("ITaskComponentData.Tag is deprecated. It has been replaced with IAuthoringTask.Flag.")] - public ComponentType Tag { get; } - - /// - /// The system type that the component uses. - /// - public System.Type SystemType { get; } - - /// - /// Adds the IBufferElementData to the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be assigned to. - /// The GameObject that the entity is attached to. - /// The index of the element within the buffer. - public int AddBufferElement(World world, Entity entity, UnityEngine.GameObject gameObject); - - /// - /// Clears the IBufferElementData from the entity. - /// - /// The world that the entity exists in. - /// The entity that the IBufferElementData should be cleared from. - public void ClearBufferElement(World world, Entity entity); - } - - /// - /// Interface describing tasks that can be reevaluated. - /// - public interface IReevaluateResponder - { - /// - /// The type of flag that should be enabled when the task is being reevaluated. - /// - public ComponentType ReevaluateFlag { get; } - - /// - /// The system type that the reevaluation component uses. - /// - public System.Type ReevaluateSystemType { get; } - } - - /// - /// Interface describing tasks that can respond to interruptions. - /// - public interface IInterruptResponder - { - /// - /// The system type that the interrupt component uses. - /// - public System.Type InterruptSystemType { get; } - } - - /// - /// Represents a task that can be saved and restored later. - /// - public interface ISavableTask - { - /// - /// Specifies the type of reflection that should be used to save the task. - /// - /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. - public MemberVisibility GetSaveReflectionType(int index); - - /// - /// Returns the current task state. - /// - /// The DOTS world. - /// The DOTS entity. - /// The current task state. - public object Save(World world, Entity entity) { return null; } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - public void Load(object saveData, World world, Entity entity) { } - - /// - /// Loads the previous task state. - /// - /// The previous task state. - /// The DOTS world. - /// The DOTS entity. - /// A reference to the map between the VariableAssignment and SharedVariable. - /// A reference to the list of task references that need to be resolved later. - public void Load(object saveData, World world, Entity entity, Dictionary variableByNameMap, - ref ResizableArray taskReferences) { Load(saveData, world, entity); } - } - - /// - /// Represents a task that can be paused and resumed later. - /// - public interface IPausableTask - { - /// - /// The task has been paused. - /// - /// The DOTS world. - /// The DOTS entity. - public void Pause(World world, Entity entity); - - /// - /// The task has been resumed. - /// - /// The DOTS world. - /// The DOTS entity. - public void Resume(World world, Entity entity); - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskInterfaces.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskInterfaces.cs.meta deleted file mode 100644 index 3a3dae89..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskInterfaces.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8ec88a004de82ad4d9307c474fd1e828 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskStatus.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskStatus.cs deleted file mode 100644 index 23254521..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskStatus.cs +++ /dev/null @@ -1,19 +0,0 @@ -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks -{ - /// - /// The execution status of the task. - /// - public enum TaskStatus : byte - { - Inactive, // The task is inactive and is not running. - Queued, // The task will run on the next update. - Running, // The task is currently running. - Success, // The task succeeded execution. - Failure, // The task failed execution. - } -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskStatus.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskStatus.cs.meta deleted file mode 100644 index 08aa71b9..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/TaskStatus.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3b2fb3205262cd24c95aac6d0665a689 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates.meta deleted file mode 100644 index a7508f3e..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6f3fa88d23176d7409b82d946f3929b4 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/ECSNodes.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/ECSNodes.cs deleted file mode 100644 index 86ebe1ea..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/ECSNodes.cs +++ /dev/null @@ -1,541 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime -{ - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using System; - - /// - /// Helper class for ECS node templates. - /// - public static class ECSNodeUtility - { - /// - /// Converts a name to camelCase format. - /// - /// The name to convert. - /// The name in camelCase format. - public static string ToCamelCase(string name) - { - if (string.IsNullOrEmpty(name)) - return name; - - return char.ToLowerInvariant(name[0]) + name.Substring(1); - } - } - - /// - /// Template for creating a custom action node. - /// - [Category("ECS")] - [DisplayName("Action")] - [Description("Create a new ECS action node.")] - public class ECSActionNode : INodeTemplate - { - public Type BaseType => typeof(IAction); - public bool IsLogicNode => true; - - /// - /// Returns the script that should be used for the template file. - /// - /// The name of the node. - /// The node script. - public string GetScript(string name) - { - var variableName = ECSNodeUtility.ToCamelCase(name); - return $@"using Opsive.BehaviorDesigner.Runtime.Components; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.GraphDesigner.Runtime; -using Unity.Entities; -using Unity.Burst; -using UnityEngine; - -/// -/// A custom ECS action node. -/// -public class {name} : ECSActionTask<{name}TaskSystem, {name}Component> -{{ - /// - /// The type of flag that should be enabled when the task is running. - /// - public override ComponentType Flag {{ get => typeof({name}Flag); }} - - /// - /// Returns a new {name}Component for use by the system. - /// - /// A new {name}Component for use by the system. - public override {name}Component GetBufferElement() - {{ - return new {name}Component() {{ - Index = RuntimeIndex, - }}; - }} -}} - -/// -/// The DOTS data structure for the {name} class. -/// -public struct {name}Component : IBufferElementData -{{ - [Tooltip(""The index of the node."")] - public ushort Index; -}} - -/// -/// A DOTS flag indicating when a {name} node is active. -/// -public struct {name}Flag : IComponentData, IEnableableComponent {{ }} - -/// -/// Runs the {name} logic. -/// -[DisableAutoCreation] -public partial struct {name}TaskSystem : ISystem -{{ - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - {{ - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW<{name}Component>().WithAll<{name}Flag, EvaluateFlag>().Build(); - state.Dependency = new {name}Job().ScheduleParallel(query, state.Dependency); - }} - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct {name}Job : IJobEntity - {{ - /// - /// Executes the {name} logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of {name}Components. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer<{name}Component> {variableName}Components) - {{ - for (int i = 0; i < {variableName}Components.Length; ++i) {{ - var {variableName}Component = {variableName}Components[i]; - var taskComponent = taskComponents[{variableName}Component.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) {{ - continue; - }} - - if (taskComponent.Status == TaskStatus.Queued) {{ - taskComponent.Status = TaskStatus.Success; - taskComponents[{variableName}Component.Index] = taskComponent; - }} - }} - }} - }} -}}"; - } - } - - /// - /// Template for creating a custom composite node. - /// - [Category("ECS")] - [DisplayName("Composite")] - [Description("Create a new ECS composite node.")] - public class ECSCompositeNode : IParentNodeTemplate - { - public Type BaseType => typeof(IComposite); - public bool IsLogicNode => true; - - /// - /// Returns the script that should be used for the template file. - /// - /// The name of the node. - /// The node script. - public string GetScript(string name) - { - var variableName = ECSNodeUtility.ToCamelCase(name); - return $@"using Opsive.BehaviorDesigner.Runtime.Components; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.GraphDesigner.Runtime; -using Unity.Entities; -using Unity.Burst; -using UnityEngine; - -/// -/// A custom ECS composite node. -/// -public class {name} : ECSCompositeTask<{name}TaskSystem, {name}Component> -{{ - /// - /// The type of tag that should be enabled when the task is running. - /// - public override ComponentType Flag {{ get => typeof({name}Flag); }} - - /// - /// Returns a new {name}Component for use by the system. - /// - /// A new {name}Component for use by the system. - public override {name}Component GetBufferElement() - {{ - return new {name}Component() {{ - Index = RuntimeIndex, - }}; - }} -}} - -/// -/// The DOTS data structure for the {name} class. -/// -public struct {name}Component : IBufferElementData -{{ - [Tooltip(""The index of the node."")] - public ushort Index; - [Tooltip(""The index of the child that is currently active."")] - public ushort ActiveChildIndex; -}} - -/// -/// A DOTS flag indicating when a {name} node is active. -/// -public struct {name}Flag : IComponentData, IEnableableComponent {{ }} - -/// -/// Runs the {name} logic. -/// -[DisableAutoCreation] -public partial struct {name}TaskSystem : ISystem -{{ - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - {{ - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW<{name}Component>().WithAll<{name}Flag, EvaluateFlag>().Build(); - state.Dependency = new {name}Job().ScheduleParallel(query, state.Dependency); - }} - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct {name}Job : IJobEntity - {{ - /// - /// Executes the {name} logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of {name}Components. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer<{name}Component> {variableName}Components) - {{ - for (int i = 0; i < {variableName}Components.Length; ++i) {{ - var {variableName}Component = {variableName}Components[i]; - var taskComponent = taskComponents[{variableName}Component.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) {{ - continue; - }} - - if (taskComponent.Status == TaskStatus.Queued) {{ - taskComponent.Status = TaskStatus.Success; - taskComponents[{variableName}Component.Index] = taskComponent; - - branchComponent.NextIndex = taskComponent.ParentIndex; - branchComponents[taskComponent.BranchIndex] = branchComponent; - }} - }} - }} - }} -}}"; - } - } - - /// - /// Template for creating a custom conditional node. - /// - [Category("ECS")] - [DisplayName("Conditional")] - [Description("Create a new ECS conditional node.")] - public class ECSConditionalNode : INodeTemplate - { - public Type BaseType => typeof(IConditional); - public bool IsLogicNode => true; - - /// - /// Returns the script that should be used for the template file. - /// - /// The name of the node. - /// The node script. - public string GetScript(string name) - { - var variableName = ECSNodeUtility.ToCamelCase(name); - return $@"using Opsive.BehaviorDesigner.Runtime.Components; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.GraphDesigner.Runtime; -using Unity.Burst; -using Unity.Entities; -using UnityEngine; - -/// -/// A custom ECS conditional node. -/// -public class {name} : ECSConditionalTask<{name}TaskSystem, {name}Component>, IReevaluateResponder -{{ - /// - /// The type of flag that should be enabled when the task is running. - /// - public override ComponentType Flag {{ get => typeof({name}Flag); }} - /// - /// The type of flag that should be enabled when the task is being reevaluated. - /// - public ComponentType ReevaluateFlag {{ get => typeof({name}ReevaluateFlag); }} - /// - /// The system type that the reevaluation component uses. - /// - public System.Type ReevaluateSystemType {{ get => typeof({name}ReevaluateTaskSystem); }} - - /// - /// Returns a new {name}Component for use by the system. - /// - /// A new {name}Component for use by the system. - public override {name}Component GetBufferElement() - {{ - return new {name}Component() {{ - Index = RuntimeIndex, - }}; - }} -}} - -/// -/// The DOTS data structure for the {name} class. -/// -public struct {name}Component : IBufferElementData -{{ - [Tooltip(""The index of the node."")] - public ushort Index; -}} - -/// -/// A DOTS flag indicating when a {name} node is active. -/// -public struct {name}Flag : IComponentData, IEnableableComponent {{ }} - -/// -/// Runs the {name} logic. -/// -[DisableAutoCreation] -public partial struct {name}TaskSystem : ISystem -{{ - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - {{ - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW<{name}Component>().WithAll<{name}Flag, EvaluateFlag>().Build(); - state.Dependency = new {name}Job().ScheduleParallel(query, state.Dependency); - }} - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct {name}Job : IJobEntity - {{ - /// - /// Executes the {name} logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of {name}Components. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer<{name}Component> {variableName}Components) - {{ - for (int i = 0; i < {variableName}Components.Length; ++i) {{ - var {variableName}Component = {variableName}Components[i]; - var taskComponent = taskComponents[{variableName}Component.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) {{ - continue; - }} - - if (taskComponent.Status == TaskStatus.Queued || taskComponent.Status == TaskStatus.Running) {{ // Conditional aborts can set the status to Running. - taskComponent.Status = TaskStatus.Success; - taskComponents[{variableName}Component.Index] = taskComponent; - }} - }} - }} - }} -}} - -/// -/// A DOTS flag indicating when an {name} node needs to be reevaluated. -/// -public struct {name}ReevaluateFlag : IComponentData, IEnableableComponent {{ }} - -/// -/// Runs the {name} reevaluation logic. -/// -[DisableAutoCreation] -public partial struct {name}ReevaluateTaskSystem : ISystem -{{ - /// - /// Updates the reevaluation logic. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - {{ - foreach (var (branchComponents, taskComponents, {variableName}Components) in - SystemAPI.Query, DynamicBuffer, DynamicBuffer<{name}Component>>().WithAll<{name}ReevaluateFlag, EvaluateFlag>()) {{ - for (int i = 0; i < {variableName}Components.Length; ++i) {{ - var {variableName}Component = {variableName}Components[i]; - var taskComponent = taskComponents[{variableName}Component.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) {{ - continue; - }} - - if (!taskComponent.Reevaluate) {{ - continue; - }} - - var status = TaskStatus.Success; - if (status != taskComponent.Status) {{ - taskComponent.Status = status; - var buffer = taskComponents; - buffer[taskComponent.Index] = taskComponent; - }} - }} - }} - }} -}}"; - } - } - - /// - /// Template for creating a custom decorator node. - /// - [Category("ECS")] - [DisplayName("Decorator")] - [Description("Create a new ECS decorator node.")] - public class ECSDecoratorNode : IParentNodeTemplate - { - public Type BaseType => typeof(IDecorator); - public bool IsLogicNode => true; - - /// - /// Returns the script that should be used for the template file. - /// - /// The name of the node. - /// The node script. - public string GetScript(string name) - { - var variableName = ECSNodeUtility.ToCamelCase(name); - return $@"using Opsive.BehaviorDesigner.Runtime.Components; -using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.GraphDesigner.Runtime; -using Unity.Entities; -using Unity.Burst; -using UnityEngine; - -/// -/// A custom ECS decorator node. -/// -public class {name} : ECSDecoratorTask<{name}TaskSystem, {name}Component> -{{ - /// - /// The type of flag that should be enabled when the task is running. - /// - public override ComponentType Flag {{ get => typeof({name}Flag); }} - - /// - /// Returns a new {name}Component for use by the system. - /// - /// A new {name}Component for use by the system. - public override {name}Component GetBufferElement() - {{ - return new {name}Component() {{ - Index = RuntimeIndex, - }}; - }} -}} - -/// -/// The DOTS data structure for the {name} class. -/// -public struct {name}Component : IBufferElementData -{{ - [Tooltip(""The index of the node."")] - public ushort Index; -}} - -/// -/// A DOTS flag indicating when a {name} node is active. -/// -public struct {name}Flag : IComponentData, IEnableableComponent {{ }} - -/// -/// Runs the {name} logic. -/// -[DisableAutoCreation] -public partial struct {name}TaskSystem : ISystem -{{ - /// - /// Creates the job. - /// - /// The current state of the system. - [BurstCompile] - private void OnUpdate(ref SystemState state) - {{ - var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW<{name}Component>().WithAll<{name}Flag, EvaluateFlag>().Build(); - state.Dependency = new {name}Job().ScheduleParallel(query, state.Dependency); - }} - - /// - /// Job which executes the task logic. - /// - [BurstCompile] - private partial struct {name}Job : IJobEntity - {{ - /// - /// Executes the {name} logic. - /// - /// An array of BranchComponents. - /// An array of TaskComponents. - /// An array of {name}Components. - [BurstCompile] - public void Execute(ref DynamicBuffer branchComponents, ref DynamicBuffer taskComponents, ref DynamicBuffer<{name}Component> {variableName}Components) - {{ - for (int i = 0; i < {variableName}Components.Length; ++i) {{ - var {variableName}Component = {variableName}Components[i]; - var taskComponent = taskComponents[{variableName}Component.Index]; - var branchComponent = branchComponents[taskComponent.BranchIndex]; - if (!branchComponent.CanExecute) {{ - continue; - }} - - if (taskComponent.Status == TaskStatus.Queued) {{ - taskComponent.Status = TaskStatus.Success; - taskComponents[{variableName}Component.Index] = taskComponent; - }} - }} - }} - }} -}}"; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/ECSNodes.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/ECSNodes.cs.meta deleted file mode 100644 index b390d520..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/ECSNodes.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7fc528e1a6212314cb23a55b5a274d49 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/GameObjectNodes.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/GameObjectNodes.cs deleted file mode 100644 index 44b32b52..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/GameObjectNodes.cs +++ /dev/null @@ -1,242 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime -{ - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using System; - - /// - /// Template for creating a custom action node. - /// - [Category("GameObjects")] - [DisplayName("Action")] - [Description("Create a new action node.")] - public class GameObjectActionNode : INodeTemplate - { - public Type BaseType => typeof(IAction); - public bool IsLogicNode => true; - - /// - /// Returns the script that should be used for the template file. - /// - /// The name of the node. - /// The node script. - public string GetScript(string name) - { - return $@"using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - -/// -/// A custom action node. -/// -public class {name} : ActionNode -{{ - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - {{ - return TaskStatus.Success; - }} -}}"; - } - } - - /// - /// Template for creating a custom action task. - /// - [Category("GameObjects")] - [DisplayName("Stacked Action")] - [Description("Create a new stacked action node.")] - public class GameObjectAction : INodeTemplate - { - public Type BaseType => typeof(IAction); - public bool IsLogicNode => false; - - /// - /// Returns the script that should be used for the template file. - /// - /// The name of the node. - /// The node script. - public string GetScript(string name) - { - return $@"using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - -/// -/// A custom action task. -/// -public class {name} : Action -{{ - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - {{ - return TaskStatus.Success; - }} -}}"; - } - } - - /// - /// Template for creating a custom composite node. - /// - [Category("GameObjects")] - [DisplayName("Composite")] - [Description("Create a new composite node.")] - public class GameObjectCompositeNode : IParentNodeTemplate - { - public Type BaseType => typeof(IComposite); - public bool IsLogicNode => true; - - /// - /// Returns the script that should be used for the template file. - /// - /// The name of the node. - /// The node script. - public string GetScript(string name) - { - return $@"using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Composites; - -/// -/// A custom composite task. -/// -public class {name} : CompositeNode -{{ - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - {{ - return TaskStatus.Success; - }} -}}"; - } - } - - /// - /// Template for creating a custom conditional node. - /// - [Category("GameObjects")] - [DisplayName("Conditional")] - [Description("Create a new conditional node.")] - public class GameObjectConditionalNode : INodeTemplate - { - public Type BaseType => typeof(IConditional); - public bool IsLogicNode => true; - - /// - /// Returns the script that should be used for the template file. - /// - /// The name of the node. - /// The node script. - public string GetScript(string name) - { - return $@"using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; - -/// -/// A custom conditional node. -/// -public class {name} : ConditionalNode -{{ - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - {{ - return TaskStatus.Success; - }} -}}"; - } - } - - /// - /// Template for creating a custom conditional task. - /// - [Category("GameObjects")] - [DisplayName("Stacked Conditional")] - [Description("Create a new stacked conditional node.")] - public class GameObjectConditional : INodeTemplate - { - public Type BaseType => typeof(IConditional); - public bool IsLogicNode => false; - - /// - /// Returns the script that should be used for the template file. - /// - /// The name of the node. - /// The node script. - public string GetScript(string name) - { - return $@"using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; - -/// -/// A custom conditional task. -/// -public class {name} : Conditional -{{ - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - {{ - return TaskStatus.Success; - }} -}}"; - } - } - - /// - /// Template for creating a custom decorator node. - /// - [Category("GameObjects")] - [DisplayName("Decorator")] - [Description("Create a new decorator node.")] - public class GameObjectDecoratorNode : IParentNodeTemplate - { - public Type BaseType => typeof(IDecorator); - public bool IsLogicNode => true; - - /// - /// Returns the script that should be used for the template file. - /// - /// The name of the node. - /// The node script. - public string GetScript(string name) - { - return $@"using Opsive.BehaviorDesigner.Runtime.Tasks; -using Opsive.BehaviorDesigner.Runtime.Tasks.Decorators; - -/// -/// A custom decorator task. -/// -public class {name} : DecoratorNode -{{ - /// - /// Executes the task. - /// - /// The execution status of the task. - public override TaskStatus OnUpdate() - {{ - return TaskStatus.Success; - }} -}}"; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/GameObjectNodes.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/GameObjectNodes.cs.meta deleted file mode 100644 index 7a1d03f2..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/Templates/GameObjectNodes.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 930aae40e5a83b84ba865fcf660bcdd7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/UnknownTasks.cs b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/UnknownTasks.cs deleted file mode 100644 index c404b535..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/UnknownTasks.cs +++ /dev/null @@ -1,107 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Tasks -{ - using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; - using Opsive.BehaviorDesigner.Runtime.Tasks.Composites; - using Opsive.GraphDesigner.Runtime; - using Opsive.Shared.Utility; - using UnityEngine; - - /// - /// Represents a task node that can no longer be found. - /// - [HideInFilterWindow] - public class UnknownTaskNode : ActionNode - { - private string m_UnknownType; - - /// - /// Default constructor. - /// - public UnknownTaskNode() { } - - /// - /// UnknownTaskNode constructor. - /// - /// The type that cannot be found. - public UnknownTaskNode(string unknownType) - { - m_UnknownType = unknownType; - } - - /// - /// Called once when the behavior tree is initialized. - /// - public override void OnAwake() - { - base.OnAwake(); - - Debug.LogWarning($"Warning: Unable to find the task of type {m_UnknownType}. An unknown task has been replaced with it."); - } - } - - /// - /// Represents a task that can no longer be found. - /// - [HideInFilterWindow] - public class UnknownTask : Action - { - /// - /// Called once when the behavior tree is initialized. - /// - public override void OnAwake() - { - base.OnAwake(); - - Debug.LogWarning($"Warning: Unable to find the original task. An unknown task has been replaced with it."); - } - } - - /// - /// Represents a parent task node that can no longer be found. - /// - [HideInFilterWindow] - public class UnknownParentTaskNode : CompositeNode - { - private string m_UnknownType; - - /// - /// Default constructor. - /// - public UnknownParentTaskNode() { } - - /// - /// UnknownParentTaskNode constructor. - /// - /// The type that cannot be found. - public UnknownParentTaskNode(string unknownType) - { - m_UnknownType = unknownType; - } - - /// - /// Called once when the behavior tree is initialized. - /// - public override void OnAwake() - { - base.OnAwake(); - - Debug.LogWarning($"Warning: Unable to find the task of type {m_UnknownType}. An unknown task has been replaced with it."); - } - } - - /// - /// Represents an event node that can no longer be found. - /// - [HideInFilterWindow] - public class UnknownEventTask : IEventNode - { - public ushort ConnectedIndex { get => ushort.MaxValue; set { } } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/UnknownTasks.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Tasks/UnknownTasks.cs.meta deleted file mode 100644 index bcc9d813..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Tasks/UnknownTasks.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 291d6f08a99331f48b9f7967ec344afd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Utility.meta b/Packages/com.opsive.behaviordesigner/Runtime/Utility.meta deleted file mode 100644 index 244736ec..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Utility.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 863e492baa6c6c84e9b200e8e99f575b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Utility/ComponentUtility.cs b/Packages/com.opsive.behaviordesigner/Runtime/Utility/ComponentUtility.cs deleted file mode 100644 index e21a6c05..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Utility/ComponentUtility.cs +++ /dev/null @@ -1,162 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Utility -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Unity.Collections; - using Unity.Entities; - - /// - /// Utility functions that are used throughout the behavior tree execution. - /// - public static class ComponentUtility - { - /// - /// The size of a ulong in bits. - /// - public static int ulongBitSize => sizeof(ulong) * 8; - - /// - /// Adds an evaluation component to the specified entity based on the task count and evaluation type. - /// - /// The ECS world to add the component to. - /// The entity to add the evaluation component to. - /// The total number of tasks in the behavior tree. - /// The type of evaluation to perform. - /// The maximum number of evaluations allowed. - public static void AddEvaluationComponent(World world, Entity entity, int taskCount, EvaluationType evaluationType, int maxEvaluationCount) - { - // Both EvaluationType.EntireTree and EvaluationType.Count use a bitmask to track evaluated tasks. - // For Count mode, an additional element is reserved at the end to store the execution count. - var bitmaskElementCount = taskCount / ulongBitSize + 1; - var countModeExtraElement = evaluationType == EvaluationType.Count ? 1 : 0; - - if (taskCount < 192) { - world.EntityManager.AddComponent(entity); - var evaluatedTasks = new FixedList32Bytes(); - for (int i = 0; i < bitmaskElementCount + countModeExtraElement; ++i) { - evaluatedTasks.Add(0); - } - world.EntityManager.AddComponentData(entity, new EvaluationComponent32() { EvaluationType = evaluationType, MaxEvaluationCount = (ushort)UnityEngine.Mathf.Max(1, maxEvaluationCount), EvaluatedTasks = evaluatedTasks }); - } else if (taskCount < 448) { - world.EntityManager.AddComponent(entity); - var evaluatedTasks = new FixedList64Bytes(); - for (int i = 0; i < bitmaskElementCount + countModeExtraElement; ++i) { - evaluatedTasks.Add(0); - } - world.EntityManager.AddComponentData(entity, new EvaluationComponent64() { EvaluationType = evaluationType, MaxEvaluationCount = (ushort)UnityEngine.Mathf.Max(1, maxEvaluationCount), EvaluatedTasks = evaluatedTasks }); - } else if (taskCount < 960) { - world.EntityManager.AddComponent(entity); - var evaluatedTasks = new FixedList128Bytes(); - for (int i = 0; i < bitmaskElementCount + countModeExtraElement; ++i) { - evaluatedTasks.Add(0); - } - world.EntityManager.AddComponentData(entity, new EvaluationComponent128() { EvaluationType = evaluationType, MaxEvaluationCount = (ushort)UnityEngine.Mathf.Max(1, maxEvaluationCount), EvaluatedTasks = evaluatedTasks }); - } else if (taskCount < 4032) { - world.EntityManager.AddComponent(entity); - var evaluatedTasks = new FixedList512Bytes(); - for (int i = 0; i < bitmaskElementCount + countModeExtraElement; ++i) { - evaluatedTasks.Add(0); - } - world.EntityManager.AddComponentData(entity, new EvaluationComponent512() { EvaluationType = evaluationType, MaxEvaluationCount = (ushort)UnityEngine.Mathf.Max(1, maxEvaluationCount), EvaluatedTasks = evaluatedTasks }); - } else if (taskCount < 32704) { - world.EntityManager.AddComponent(entity); - var evaluatedTasks = new FixedList4096Bytes(); - for (int i = 0; i < bitmaskElementCount + countModeExtraElement; ++i) { - evaluatedTasks.Add(0); - } - world.EntityManager.AddComponentData(entity, new EvaluationComponent4096() { EvaluationType = evaluationType, MaxEvaluationCount = (ushort)UnityEngine.Mathf.Max(1, maxEvaluationCount), EvaluatedTasks = evaluatedTasks }); - } else { - UnityEngine.Debug.LogError("Error: Trees with more than 32,703 tasks are not supported. Please email support@opsive.com."); - } - } - - /// - /// Resets the evaluation component data for the specified entity by clearing all evaluated task flags. - /// - /// The ECS world containing the entity. - /// The entity whose evaluation component should be reset. - public static void ResetEvaluationComponent(World world, Entity entity) - { - if (world.EntityManager.HasComponent(entity)) { - var evaluateComponent = world.EntityManager.GetComponentData(entity); - var evaluatedTasks = evaluateComponent.EvaluatedTasks; - for (int i = 0; i < evaluatedTasks.Length; ++i) { - evaluatedTasks[i] = 0; - } - evaluateComponent.EvaluatedTasks = evaluatedTasks; - world.EntityManager.SetComponentData(entity, evaluateComponent); - } else if (world.EntityManager.HasComponent(entity)) { - var evaluateComponent = world.EntityManager.GetComponentData(entity); - var evaluatedTasks = evaluateComponent.EvaluatedTasks; - for (int i = 0; i < evaluatedTasks.Length; ++i) { - evaluatedTasks[i] = 0; - } - evaluateComponent.EvaluatedTasks = evaluatedTasks; - world.EntityManager.SetComponentData(entity, evaluateComponent); - } else if (world.EntityManager.HasComponent(entity)) { - var evaluateComponent = world.EntityManager.GetComponentData(entity); - var evaluatedTasks = evaluateComponent.EvaluatedTasks; - for (int i = 0; i < evaluatedTasks.Length; ++i) { - evaluatedTasks[i] = 0; - } - evaluateComponent.EvaluatedTasks = evaluatedTasks; - world.EntityManager.SetComponentData(entity, evaluateComponent); - } else if (world.EntityManager.HasComponent(entity)) { - var evaluateComponent = world.EntityManager.GetComponentData(entity); - var evaluatedTasks = evaluateComponent.EvaluatedTasks; - for (int i = 0; i < evaluatedTasks.Length; ++i) { - evaluatedTasks[i] = 0; - } - evaluateComponent.EvaluatedTasks = evaluatedTasks; - world.EntityManager.SetComponentData(entity, evaluateComponent); - } else if (world.EntityManager.HasComponent(entity)) { - var evaluateComponent = world.EntityManager.GetComponentData(entity); - var evaluatedTasks = evaluateComponent.EvaluatedTasks; - for (int i = 0; i < evaluatedTasks.Length; ++i) { - evaluatedTasks[i] = 0; - } - evaluateComponent.EvaluatedTasks = evaluatedTasks; - world.EntityManager.SetComponentData(entity, evaluateComponent); - } - } - - /// - /// Removes the evaluation component from the specified entity. - /// - /// The ECS world containing the entity. - /// The entity whose evaluation component should be removed. - public static void RemoveEvaluationComponent(World world, Entity entity) - { - if (world.EntityManager.HasComponent(entity)) { - world.EntityManager.RemoveComponent(entity); - } else if (world.EntityManager.HasComponent(entity)) { - world.EntityManager.RemoveComponent(entity); - } else if (world.EntityManager.HasComponent(entity)) { - world.EntityManager.RemoveComponent(entity); - } else if (world.EntityManager.HasComponent(entity)) { - world.EntityManager.RemoveComponent(entity); - } else if (world.EntityManager.HasComponent(entity)) { - world.EntityManager.RemoveComponent(entity); - } - } - - /// - /// Adds the components necessary in order to trigger an interrupt. - /// - /// The EntityManager that the entity belongs to. - /// The entity that should have the components added. - public static void AddInterruptComponents(EntityManager entityManager, Entity entity) - { - entityManager.AddComponent(entity); - entityManager.SetComponentEnabled(entity, false); - entityManager.AddComponent(entity); - entityManager.SetComponentEnabled(entity, false); - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Utility/ComponentUtility.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Utility/ComponentUtility.cs.meta deleted file mode 100644 index 1a1e2789..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Utility/ComponentUtility.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1bfee368f88aa6e4a81281d10c71072d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Utility/SaveManager.cs b/Packages/com.opsive.behaviordesigner/Runtime/Utility/SaveManager.cs deleted file mode 100644 index 08a810b5..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Utility/SaveManager.cs +++ /dev/null @@ -1,651 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Utility -{ - using Opsive.BehaviorDesigner.Runtime; - using Opsive.BehaviorDesigner.Runtime.Components; - using Opsive.BehaviorDesigner.Runtime.Tasks; - using Opsive.GraphDesigner.Runtime; - using Opsive.GraphDesigner.Runtime.Variables; - using Opsive.Shared.Utility; - using System; - using System.Collections; - using System.Collections.Generic; - using System.IO; - using Unity.Entities; - using UnityEngine; - using static Opsive.BehaviorDesigner.Runtime.BehaviorTreeData; - - /// - /// Helper class which will save and load behavior tree tasks. - /// - public static class SaveManager - { - /// - /// Specifies which objects should be saved. - /// - public enum VariableSaveScope : byte - { - GameObjectVariables = 1, // Saves the GameObjectVariables. - SceneVariables = 2, // Saves the SceneVariables. - ProjectVariables = 4 // Saves the ProjectVariables. - } - - /// - /// The save data associated with the behavior tree and shared variables. - /// - [System.Serializable] - public struct SaveData - { - [Tooltip("The behavior tree save data.")] - public BehaviorTreeSaveData[] BehaviorTreeSaveData; - [Tooltip("The external shared variable save data.")] - public VariableSaveData[] VariableSaveData; - } - - /// - /// The save data associated with the behavior tree. - /// - [System.Serializable] - public struct BehaviorTreeSaveData - { - [Tooltip("The unique ID of the save data. This will change each time the data is serialized")] - public int UniqueID; - [Tooltip("The loaded task components.")] - public Serialization[] TaskComponents; - [Tooltip("The loaded branch components.")] - public Serialization[] BranchComponents; - [Tooltip("The loaded reevaluate task components.")] - public Serialization[] ReevaluateTaskComponents; - [Tooltip("The user task data.")] - public TaskSaveData[] TaskData; - [Tooltip("The values of the graph SharedVariables.")] - public VariableSaveData GraphSharedVariables; - } - - /// - /// The save data associated with the shared variables. - /// - [System.Serializable] - public struct VariableSaveData - { - [Tooltip("The unique ID of the variable data. This will change each time the data is serialized")] - public int UniqueID; - [Tooltip("The values of the SharedVariables.")] - public Serialization[] Values; - [Tooltip("The scope of the variables.")] - public SharedVariable.SharingScope Scope; - } - - /// - /// Container for the task save data. Allows for nested tasks. - /// - [System.Serializable] - public struct TaskSaveData - { - [Tooltip("The save data associated with each task.")] - public Serialization[] Value; - } - - /// - /// Gets the save data from the specified behavior trees. - /// - /// The behavior trees that should be saved. - /// Specifies which variables should be saved. Graph variables will automatically be saved. - /// The resulting save data. Can be null. - public static SaveData? Save(BehaviorTree[] behaviorTrees, VariableSaveScope variableSaveScope = 0) - { - if (!Application.isPlaying) { - Debug.LogWarning($"Warning: Behavior trees can only be saved at runtime."); - return null; - } - - if (behaviorTrees.Length == 0) { - return null; - } - - // Assume all behavior trees can be saved. - var saveData = new SaveData(); - saveData.BehaviorTreeSaveData = new BehaviorTreeSaveData[behaviorTrees.Length]; - var variableSaveDataList = new List(); - HashSet savedGameObjectVariables = null; - var behaviorTreeSaveCount = 0; - for (int i = 0; i < behaviorTrees.Length; ++i) { - if (behaviorTrees[i] == null) { - continue; - } - - // Add the save data to the array if the save is valid. - var behaviorTreeSaveData = Save(behaviorTrees[i]); - if (behaviorTreeSaveData.HasValue) { - saveData.BehaviorTreeSaveData[behaviorTreeSaveCount] = behaviorTreeSaveData.Value; - behaviorTreeSaveCount++; - - // The associated GameObject variables may also need to be saved. - if ((variableSaveScope & VariableSaveScope.GameObjectVariables) != 0) { - // Only save the GameObject variables once. - if (savedGameObjectVariables == null) { - savedGameObjectVariables = new HashSet(); - } - - if (savedGameObjectVariables.Contains(behaviorTrees[i].gameObject)) { - continue; - } - savedGameObjectVariables.Add(behaviorTrees[i].gameObject); - - // The GameObject variables can be saved. - var gameObjectSharedVariables = behaviorTrees[i].gameObject.GetComponent(); - if (gameObjectSharedVariables != null) { - var variableSaveData = Save(gameObjectSharedVariables); - if (variableSaveData.HasValue) { - variableSaveDataList.Add(variableSaveData.Value); - } - } - } - } - } - - // Not all behavior trees can be saved. - if (behaviorTrees.Length != behaviorTreeSaveCount) { - var behaviorTreesSaveData = saveData.BehaviorTreeSaveData; - System.Array.Resize(ref behaviorTreesSaveData, behaviorTreeSaveCount); - saveData.BehaviorTreeSaveData = behaviorTreesSaveData; - } - - // The scene variables can be saved. - if ((variableSaveScope & VariableSaveScope.SceneVariables) != 0) { - if (SceneSharedVariables.Instance != null) { - var variableSaveData = Save(SceneSharedVariables.Instance); - if (variableSaveData.HasValue) { - variableSaveDataList.Add(variableSaveData.Value); - } - } - } - - // The project variables can be saved. - if ((variableSaveScope & VariableSaveScope.ProjectVariables) != 0) { - if (ProjectSharedVariables.Instance != null) { - var variableSaveData = Save(ProjectSharedVariables.Instance); - if (variableSaveData.HasValue) { - variableSaveDataList.Add(variableSaveData.Value); - } - } - } - - // There has to be something to be saved. - if (behaviorTreeSaveCount == 0 && variableSaveDataList.Count == 0) { - return null; - } - - // Persist the variable save data. - if (variableSaveDataList != null && variableSaveDataList.Count > 0) { - saveData.VariableSaveData = variableSaveDataList.ToArray(); - } - - return saveData; - } - - /// - /// Saves the save data from the specified behavior trees to the specified file. - /// - /// The behavior trees that should be saved. - /// The save data path. - /// Specifies which variables should be saved. Graph variables will automatically be saved. - /// True if at least one behavior tree's save data was saved. - public static bool Save(BehaviorTree[] behaviorTrees, string filePath, VariableSaveScope variableSaveScope = 0) - { - var saveData = Save(behaviorTrees, variableSaveScope); - if (!saveData.HasValue) { - return false; - } - - // Save the save data. - if (File.Exists(filePath)) { - File.Delete(filePath); - } - try { - if (!Directory.Exists(Path.GetDirectoryName(filePath))) { - Directory.CreateDirectory(Path.GetDirectoryName(filePath)); - } - var fileStream = File.Create(filePath); - using (var streamWriter = new StreamWriter(fileStream)) { - streamWriter.Write(JsonUtility.ToJson(saveData)); - } - fileStream.Close(); - } catch (System.Exception e) { - Debug.LogException(e); - return false; - } - - return true; - } - - /// - /// Returns the save data associated with the behavior tree. - /// - /// The behavior tree that should be saved. - /// The save data associated with the behavior tree. - private static BehaviorTreeSaveData? Save(BehaviorTree behaviorTree) - { - if (behaviorTree.Entity.Index == 0) { - Debug.LogWarning($"Warning: The behavior tree {behaviorTree.name} must be active in order to be saved.", behaviorTree); - return null; - } - - if (behaviorTree.LogicNodes == null || behaviorTree.LogicNodes.Length == 0) { - Debug.LogWarning($"Warning: The behavior tree {behaviorTree.name} must have tasks in order to be saved.", behaviorTree); - return null; - } - - // The current task status must be serialized. - var taskComponents = behaviorTree.World.EntityManager.GetBuffer(behaviorTree.Entity); - var serializedTaskComponents = new Serialization[taskComponents.Length]; - for (int i = 0; i < taskComponents.Length; ++i) { - serializedTaskComponents[i] = Serialization.Serialize(taskComponents[i]); - } - - // The branch info must be serialized. - var branchComponents = behaviorTree.World.EntityManager.GetBuffer(behaviorTree.Entity); - var serializedBranchComponents = new Serialization[branchComponents.Length]; - for (int i = 0; i < branchComponents.Length; ++i) { - serializedBranchComponents[i] = Serialization.Serialize(branchComponents[i]); - } - - // The reevaluation status must be serialized. - Serialization[] serializedReevaluateTaskComponents = null; - if (behaviorTree.World.EntityManager.HasBuffer(behaviorTree.Entity)) { - var reevaluateTaskComponents = behaviorTree.World.EntityManager.GetBuffer(behaviorTree.Entity); - serializedReevaluateTaskComponents = new Serialization[reevaluateTaskComponents.Length]; - for (int i = 0; i < reevaluateTaskComponents.Length; ++i) { - serializedReevaluateTaskComponents[i] = Serialization.Serialize(reevaluateTaskComponents[i]); - } - } - - // Each task can serialize their own data. - var tasks = behaviorTree.LogicNodes; - var serializedTaskData = new List(); - for (int i = 0; i < tasks.Length; ++i) { - if (!(tasks[i] is ISavableTask)) { - continue; - } - - var saveableTask = tasks[i] as ISavableTask; - var reflectionType = saveableTask.GetSaveReflectionType(-1); - if (reflectionType != MemberVisibility.None) { - var serializedData = Serialization.Serialize(saveableTask, reflectionType, BehaviorTreeData.ValidateSerializedObject); - serializedTaskData.Add(new TaskSaveData() { Value = new Serialization[] { serializedData } }); - } else { - var taskData = saveableTask.Save(behaviorTree.World, behaviorTree.Entity); - if (taskData == null) { - continue; - } - - // Tasks can contain more tasks. Serialize each task element separately. - if (typeof(IList).IsAssignableFrom(taskData.GetType())) { - var taskDataList = taskData as IList; - var taskSaveData = new Serialization[taskDataList.Count]; - for (int j = 0; j < taskDataList.Count; ++j) { - if (taskDataList[j] is Serialization) { - taskSaveData[j] = taskDataList[j] as Serialization; - } else { - taskSaveData[j] = Serialization.Serialize(taskDataList[j]); - } - } - - serializedTaskData.Add(new TaskSaveData() { Value = taskSaveData }); - } else { - var serializedValue = new Serialization[] { (taskData is Serialization) ? (taskData as Serialization) : Serialization.Serialize(taskData) }; - serializedTaskData.Add(new TaskSaveData() { Value = serializedValue }); - } - } - } - - var behaviorTreeSaveData = new BehaviorTreeSaveData() { - UniqueID = behaviorTree.UniqueID, - TaskComponents = serializedTaskComponents, - BranchComponents = serializedBranchComponents, - ReevaluateTaskComponents = serializedReevaluateTaskComponents, - TaskData = serializedTaskData.ToArray(), - }; - var variableSaveData = Save(behaviorTree as ISharedVariableContainer); - if (variableSaveData.HasValue) { - behaviorTreeSaveData.GraphSharedVariables = variableSaveData.Value; - } - return behaviorTreeSaveData; - } - - /// - /// Returns the save data associated with the variable container. - /// - /// The variable container that should be saved. - /// The save data associated with the variable container. - private static VariableSaveData? Save(ISharedVariableContainer variableContainer) - { - if (variableContainer == null) { - return null; - } - - var sharedVariables = variableContainer.SharedVariables; - if (sharedVariables == null || sharedVariables.Length == 0) { - return null; - } - - Serialization[] serializedSharedVariablesData = null; - if (sharedVariables != null) { - serializedSharedVariablesData = new Serialization[sharedVariables.Length]; - for (int i = 0; i < sharedVariables.Length; ++i) { - serializedSharedVariablesData[i] = Serialization.Serialize(sharedVariables[i].GetValue(), BehaviorTreeData.ValidateSerializedObject); - } - } - - return new VariableSaveData() { - UniqueID = variableContainer.UniqueID, - Values = serializedSharedVariablesData, - Scope = variableContainer.VariableScope - }; - } - - /// - /// Loads the save data contained within the specified file. - /// - /// The behavior trees that should be loaded. - /// The save data path. - /// Optional callback after the graph variables have been restored. - /// True if at least one behavior tree's save data was loaded. - public static bool Load(BehaviorTree[] behaviorTrees, string filePath, Action afterVariablesRestored = null) - { - if (!Application.isPlaying) { - Debug.LogWarning($"Warning: Behavior trees can only be loaded at runtime."); - return false; - } - - if (!File.Exists(filePath)) { - Debug.LogWarning($"Warning: The file at path {filePath} does not exist."); - return false; - } - - var fileStream = File.Open(filePath, FileMode.Open); - var saveData = new SaveData(); - using (var streamReader = new StreamReader(fileStream)) { - var fileData = streamReader.ReadToEnd(); - saveData = JsonUtility.FromJson(fileData); - } - fileStream.Close(); - - return Load(behaviorTrees, saveData, afterVariablesRestored); - } - - /// - /// Loads the save data. - /// - /// The behavior trees that should be loaded. - /// The loaded save data. - /// Optional callback after the graph variables have been restored. - /// True if at least one behavior tree's save data was loaded. - public static bool Load(BehaviorTree[] behaviorTrees, SaveData saveData, Action afterVariablesRestored = null) - { - // Load the shared variables before the behavior trees so the trees can reference the variables. - var loadedSceneVariables = false; - var loadedProjectVariables = false; - var loadCount = 0; - Dictionary variableSaveDataByID = null; - if (saveData.VariableSaveData != null && saveData.VariableSaveData.Length > 0) { - // The save data is unique to the variable container specified by the unique ID. - for (int i = 0; i < saveData.VariableSaveData.Length; ++i) { - // Remember the scope to determine if the variable scope needs to be checked again when loading. - if (saveData.VariableSaveData[i].Scope == SharedVariable.SharingScope.GameObject) { - // The GameObject SharedVariables will be loaded with the behavior tree. - if (variableSaveDataByID == null) { - variableSaveDataByID = new Dictionary(); - } - variableSaveDataByID.Add(saveData.VariableSaveData[i].UniqueID, saveData.VariableSaveData[i]); - } else if (saveData.VariableSaveData[i].Scope == SharedVariable.SharingScope.Scene) { - // Restore the SceneSharedVariables if it hasn't already been loaded. - if (!loadedSceneVariables) { - if (SceneSharedVariables.Instance != null) { - if (Load(SceneSharedVariables.Instance, saveData.VariableSaveData[i])) { - loadCount++; - } - } - loadedSceneVariables = true; - } - } else if (saveData.VariableSaveData[i].Scope == SharedVariable.SharingScope.Project) { - // Restore the ProjectSharedVariables if it hasn't already been loaded. - if (!loadedProjectVariables) { - if (ProjectSharedVariables.Instance != null) { - if (Load(ProjectSharedVariables.Instance, saveData.VariableSaveData[i])) { - loadCount++; - } - } - } - } - } - } - - if (saveData.BehaviorTreeSaveData != null && saveData.BehaviorTreeSaveData.Length > 0) { - // The save data is unique to the behavior tree specified by the unique ID. - var behaviorTreeSaveDataByID = new Dictionary(); - for (int i = 0; i < saveData.BehaviorTreeSaveData.Length; ++i) { - behaviorTreeSaveDataByID.Add(saveData.BehaviorTreeSaveData[i].UniqueID, saveData.BehaviorTreeSaveData[i]); - } - - // Load the save data for each behavior tree. - for (int i = 0; i < behaviorTrees.Length; ++i) { - var behaviorTree = behaviorTrees[i]; - if (behaviorTreeSaveDataByID.TryGetValue(behaviorTree.UniqueID, out var behaviorTreeSaveData)) { - // Restore the GameObjectSharedVariables if they haven't already been restored. - if (variableSaveDataByID != null) { - var gameObjectSharedVariables = behaviorTree.GetComponent(); - if (gameObjectSharedVariables != null) { - if (variableSaveDataByID.TryGetValue(gameObjectSharedVariables.UniqueID, out var variableSaveData)) { - if (Load(gameObjectSharedVariables, variableSaveData)) { - loadCount++; - } - // Remove the ID after it has been loaded so the variables aren't loaded again. This can happen if multiple - // trees on the same GameObject reference the same GameObject variable. - variableSaveDataByID.Remove(gameObjectSharedVariables.UniqueID); - } - } - } - - // Restore the Graph SharedVariables. - if (Load(behaviorTree, behaviorTreeSaveData.GraphSharedVariables)) { - loadCount++; - } - - // Callback after the variables have been restored. - afterVariablesRestored?.Invoke(behaviorTree); - - // Populate the variables in an internal mapping for quick lookup. - var variableByNameMap = BehaviorTreeData.PopulateSharedVariablesMapping(behaviorTree, true); - - // Restore the tree after the variables have been restored. - if (Load(behaviorTree, behaviorTreeSaveData, afterVariablesRestored, variableByNameMap)) { - loadCount++; - } - } - } - } - - return loadCount > 0; - } - - /// - /// Loads the behavior tree from the specified save data. - /// - /// The behavior tree that should be restored. - /// The save data associated with the behavior tree. - /// Optional callback after the graph variables have been restored. - /// A mapping between the variable name and the variable reference. - /// True if the behavior tree was successfully loaded. - private static bool Load(BehaviorTree behaviorTree, BehaviorTreeSaveData saveData, Action afterVariablesRestored, Dictionary variableByNameMap) - { - // The ID must match. - if (behaviorTree.UniqueID != saveData.UniqueID) { - Debug.LogError($"Error: The behavior tree {behaviorTree.name} cannot be loaded due to being saved in a different version of the behavior tree."); - return false; - } - - // The behavior tree must be initialized in order to be loaded. - if (!behaviorTree.InitializeTree()) { - return false; - } - - // Stop the behavior tree so all tasks issue their end callback. - var enableEntity = behaviorTree.World.EntityManager.HasComponent(behaviorTree.Entity) && behaviorTree.World.EntityManager.IsComponentEnabled(behaviorTree.Entity); - var evaluateEntity = behaviorTree.World.EntityManager.HasComponent(behaviorTree.Entity) && behaviorTree.World.EntityManager.IsComponentEnabled(behaviorTree.Entity); - var active = behaviorTree.IsActive(); - if (active) { - behaviorTree.StopBehavior(); - } - - // Restore the task component status. - var taskComponents = behaviorTree.World.EntityManager.GetBuffer(behaviorTree.Entity); - for (int i = 0; i < saveData.TaskComponents.Length; ++i) { - taskComponents[i] = (TaskComponent)saveData.TaskComponents[i].DeserializeFields(MemberVisibility.Public); - } - - var branchComponents = behaviorTree.World.EntityManager.GetBuffer(behaviorTree.Entity); - // Restore the branch info components. - for (int i = 0; i < saveData.BranchComponents.Length; ++i) { - branchComponents[i] = (BranchComponent)saveData.BranchComponents[i].DeserializeFields(MemberVisibility.Public); - if (branchComponents[i].ActiveFlagComponentType.TypeIndex == TypeIndex.Null) { - continue; - } - behaviorTree.World.EntityManager.SetComponentEnabled(behaviorTree.Entity, branchComponents[i].ActiveFlagComponentType, true); - } - - if (behaviorTree.World.EntityManager.HasBuffer(behaviorTree.Entity)) { - var reevaluatedTaskComponents = behaviorTree.World.EntityManager.GetBuffer(behaviorTree.Entity); - // Restore the reevaluated components. - for (int i = 0; i < saveData.ReevaluateTaskComponents.Length; ++i) { - reevaluatedTaskComponents[i] = (ReevaluateTaskComponent)saveData.ReevaluateTaskComponents[i].DeserializeFields(MemberVisibility.Public); - if (reevaluatedTaskComponents[i].ReevaluateFlagComponentType.TypeIndex == TypeIndex.Null) { - continue; - } - behaviorTree.World.EntityManager.SetComponentEnabled(behaviorTree.Entity, reevaluatedTaskComponents[i].ReevaluateFlagComponentType, true); - } - } - - // Each task can serialize their own data. - var tasks = behaviorTree.LogicNodes; - var saveDataIndex = 0; - ResizableArray taskReferences = null; - for (int i = 0; i < tasks.Length; ++i) { - if (!(tasks[i] is ISavableTask)) { - if (tasks[i] is Task) { - (tasks[i] as Task).Initialize(behaviorTree, (ushort)i); - } - continue; - } - - var taskSaveData = saveData.TaskData[saveDataIndex]; - saveDataIndex++; - if (taskSaveData.Value == null || taskSaveData.Value.Length == 0) { - if (tasks[i] is Task) { - (tasks[i] as Task).Initialize(behaviorTree, (ushort)i); - } - continue; - } - - var saveableTask = tasks[i] as ISavableTask; - var reflectionType = saveableTask.GetSaveReflectionType(-1); - if (reflectionType != MemberVisibility.None) { - taskSaveData.Value[0].DeserializeFields(saveableTask, saveableTask.GetSaveReflectionType(0), BehaviorTreeData.ValidateDeserializedTypeObject, - (object fieldInfoObj, object task, object value) => - { - return BehaviorTreeData.ValidateDeserializedObject(fieldInfoObj, task, value, ref variableByNameMap, ref taskReferences); - }); - } else { - if (taskSaveData.Value.Length == 1) { - if (saveableTask.GetSaveReflectionType(0) != MemberVisibility.None) { - saveableTask.Load(taskSaveData.Value[0], behaviorTree.World, behaviorTree.Entity, variableByNameMap, ref taskReferences); - } else { - saveableTask.Load(taskSaveData.Value[0].DeserializeFields(MemberVisibility.Public, BehaviorTreeData.ValidateDeserializedTypeObject, - (object fieldInfoObj, object task, object value) => - { - return BehaviorTreeData.ValidateDeserializedObject(fieldInfoObj, task, value, ref variableByNameMap, ref taskReferences); - }), behaviorTree.World, behaviorTree.Entity, variableByNameMap, ref taskReferences); - } - } else { - var taskData = new object[taskSaveData.Value.Length]; - for (int j = 0; j < taskSaveData.Value.Length; ++j) { - if (taskSaveData.Value[j] == null) { - continue; - } - - if (saveableTask.GetSaveReflectionType(j) != MemberVisibility.None) { - // The task is responsible for deserializing the fields. - taskData[j] = taskSaveData.Value[j]; - } else { - taskData[j] = taskSaveData.Value[j].DeserializeFields(MemberVisibility.Public, BehaviorTreeData.ValidateDeserializedTypeObject, - (object fieldInfoObj, object task, object value) => - { - return BehaviorTreeData.ValidateDeserializedObject(fieldInfoObj, task, value, ref variableByNameMap, ref taskReferences); - }); - } - } - saveableTask.Load(taskData, behaviorTree.World, behaviorTree.Entity, variableByNameMap, ref taskReferences); - } - } - if (tasks[i] is Task) { - (tasks[i] as Task).Initialize(behaviorTree, (ushort)i); - } - } - - // After the tree has been loaded the task references need to be assigned. - BehaviorTreeData.AssignTaskReferences(behaviorTree.LogicNodes, taskReferences); - - if (active) { - behaviorTree.StartBehavior(); - } - if (enableEntity) { - behaviorTree.World.EntityManager.SetComponentEnabled(behaviorTree.Entity, true); - } - if (evaluateEntity) { - behaviorTree.World.EntityManager.SetComponentEnabled(behaviorTree.Entity, true); - } - - return true; - } - - /// - /// Loads the variable from the specified file path. - /// - /// The variable container that should be restored. - /// The save data associated with the variable container. - /// True if the variable container was successfully loaded. - private static bool Load(ISharedVariableContainer variableContainer, VariableSaveData saveData) - { - // There may not be any variables saved. - if (saveData.UniqueID == 0) { - return false; - } - - // The ID must match. - if (variableContainer.UniqueID != saveData.UniqueID) { - Debug.LogError($"Error: The variables {variableContainer} cannot be loaded due to being saved in a different version of the variable container."); - return false; - } - - var sharedVariables = variableContainer.SharedVariables; - if (sharedVariables != null) { - for (int i = 0; i < saveData.Values.Length; ++i) { - if (saveData.Values[i] == null) { - continue; - } - - var sharedVariableValue = saveData.Values[i].DeserializeFields(MemberVisibility.Public); - sharedVariables[i].SetValue(sharedVariableValue); - } - } - - return true; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Utility/SaveManager.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Utility/SaveManager.cs.meta deleted file mode 100644 index 7e9425df..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Utility/SaveManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6c5777d50e5756a4b85d335f81c9d301 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Utility/TraversalUtility.cs b/Packages/com.opsive.behaviordesigner/Runtime/Utility/TraversalUtility.cs deleted file mode 100644 index 0cfbb97e..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Utility/TraversalUtility.cs +++ /dev/null @@ -1,108 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Utility -{ - using Opsive.BehaviorDesigner.Runtime.Components; - using Unity.Burst; - using Unity.Entities; - - /// - /// Utility functions that are used throughout the behavior tree execution. - /// - [BurstCompile] - public static class TraversalUtility - { - /// - /// Returns true if the specified index is a child of the parent index. - /// - /// The index to determine if it is a child. - /// The index of the parent. - /// The array of nodes. - /// True if the specified index is a child of the parent index. - [BurstCompile] - public static bool IsParent(ushort index, ushort parentIndex, ref DynamicBuffer taskComponents) - { - if (parentIndex == ushort.MaxValue || index == ushort.MaxValue) { - return false; - } - - // The child can be considered a parent of itself. - if (parentIndex == index) { - return true; - } - - // Return true as soon as there is a parent. - while (index != ushort.MaxValue) { - if (index == parentIndex) { - return true; - } - - index = taskComponents[index].ParentIndex; - } - - return false; - } - - /// - /// Returns the total number of children belonging to the specified node. - /// - /// The index of the task to retrieve the child count of. - /// The array of nodes. - /// The total number of children belonging to the specified node. - public static int GetChildCount(int index, ref DynamicBuffer taskComponents) - { - if (index == ushort.MaxValue) { - return 0; - } - - var taskComponent = taskComponents[index]; - if (taskComponent.SiblingIndex != ushort.MaxValue) { - return taskComponent.SiblingIndex - taskComponent.Index - 1; - } - - if (taskComponent.Index + 1 == taskComponents.Length) { - return 0; - } - - var childTaskComponent = taskComponents[taskComponent.Index + 1]; - if (childTaskComponent.ParentIndex != taskComponent.Index) { - return 0; - } - - // Determine the child count based off of the sibling index. - var lastChildTaskComponent = childTaskComponent; - while (childTaskComponent.ParentIndex == taskComponent.Index) { - lastChildTaskComponent = childTaskComponent; - if (childTaskComponent.SiblingIndex == ushort.MaxValue) { - break; - } - childTaskComponent = taskComponents[childTaskComponent.SiblingIndex]; - } - - return lastChildTaskComponent.Index - taskComponent.Index + GetChildCount(lastChildTaskComponent.Index, ref taskComponents); - } - - /// - /// Returns the immediate number of children belonging to the specified task. - /// - /// The task to retrieve the children of. - /// The list of tasks. - /// The number of immediate children belonging to the specified task. - [BurstCompile] - public static int GetImmediateChildCount(ref TaskComponent task, ref DynamicBuffer taskComponents) - { - var count = 0; - var siblingIndex = task.Index + 1; - while (siblingIndex < taskComponents.Length && taskComponents[siblingIndex].ParentIndex == task.Index) { - count++; - siblingIndex = taskComponents[siblingIndex].SiblingIndex; - } - return count; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Utility/TraversalUtility.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Utility/TraversalUtility.cs.meta deleted file mode 100644 index 9b59ceb4..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Utility/TraversalUtility.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: be274f359e2db764998eb36f2adeaed9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Utility/Types.cs b/Packages/com.opsive.behaviordesigner/Runtime/Utility/Types.cs deleted file mode 100644 index d3906be6..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Utility/Types.cs +++ /dev/null @@ -1,42 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Behavior Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.BehaviorDesigner.Runtime.Utility -{ - using UnityEngine; - using System; - - /// - /// Specifies a range between two floats. - /// - public struct RangeFloat - { - [Tooltip("The minimal float value (inclusive).")] - [SerializeField] public float Min; - [Tooltip("The maximum float value (inclusive).")] - [SerializeField] public float Max; - - public float RandomValue { get => UnityEngine.Random.Range(Min, Max); } - - /// - /// RangeFloat constructor. - /// - /// The minimal float value. - /// The maximal float value. - public RangeFloat(float min, float max) - { - Min = min; - Max = max; - } - } - - /// - /// Specifies that the task name should be hidden in the node view. - /// - [AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)] - public class HideNameInTaskControlAttribute : Attribute { } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/Runtime/Utility/Types.cs.meta b/Packages/com.opsive.behaviordesigner/Runtime/Utility/Types.cs.meta deleted file mode 100644 index 6ef0ed18..00000000 --- a/Packages/com.opsive.behaviordesigner/Runtime/Utility/Types.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9d76db679b119fe4c9359f9b9b0c2869 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.behaviordesigner/package.json b/Packages/com.opsive.behaviordesigner/package.json deleted file mode 100644 index 9310dd6d..00000000 --- a/Packages/com.opsive.behaviordesigner/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "com.opsive.behaviordesigner", - "version": "2.1.12", - "displayName": "Opsive Behavior Designer", - "description": "A behavior tree implementation based on DOTS.", - "documentationUrl": "https://opsive.com/support/documentation/behavior-designer-pro/", - "author": { - "name": "Opsive", - "email": "support@opsive.com", - "url": "https://opsive.com" - }, - "dependencies": { - "com.opsive.shared": "2.0.0", - "com.opsive.graphdesigner": "2.0.0", - "com.unity.burst": "1.8.17", - "com.unity.entities": "1.3.8" - }, - "samples": [ - { - "displayName": "Sample", - "description": "Sample scenes that show a variety of use cases.", - "path": "Samples~" - } - ] -} \ No newline at end of file diff --git a/Packages/com.opsive.behaviordesigner/package.json.meta b/Packages/com.opsive.behaviordesigner/package.json.meta deleted file mode 100644 index 264d86bb..00000000 --- a/Packages/com.opsive.behaviordesigner/package.json.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: af982e6bd82bf7b4893755d01662c156 -PackageManifestImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor.meta b/Packages/com.opsive.graphdesigner/Editor.meta deleted file mode 100644 index 3454001c..00000000 --- a/Packages/com.opsive.graphdesigner/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5f862ea8037f541498912dd8365bd3bf -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons.meta b/Packages/com.opsive.graphdesigner/Editor/Icons.meta deleted file mode 100644 index 3ef012fa..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 930549fb15ba63d4bbf4c133a2f69935 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/DropdownDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/DropdownDark.png deleted file mode 100644 index 0016651d05e4d6c2589235602a8e445ed224093e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8WKS2zkcwML2@3EO6O+%X;gVZX9Qe6%m z2B|R5LI>u<#kKe;U_-SOQ)Ujw#{7Z22|kn>?K-1+AE*4G8!_WRG@uv6%0fSS|2Km92u@>LEO zN^%uHtkH7$P}5_ugl)n8#{KK=Hf;WHQ|Yy{@r0qbD6=Q4&Jm3&Q95K`YQd44$rjF6*2UngF)>Y>EH? diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/Error.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/Error.png.meta deleted file mode 100644 index 136e9966..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/Error.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: ab49f94fad9f0de4993b7c6bf2ea6566 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/GearDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/GearDark.png deleted file mode 100644 index fec018122038debd3efbf22df514b324c23a3a08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8{hlt4Ar-fh5+qosFu6H#@yS{(VOa9ad1q%?SsDKcBY}(n z<_T5|NB%j)Fo@1$I3nG6gE6Ck`68PW?`ri2KiqQKj2;HmFnHB7JaSmz<|e>aDXG=A zhHZc21%uD+Mcj>SxeX^7Z*nhaYih6$(RCC**WN05g+Zht#gQ>6MevK!O@`TxofmGf zRN6CmPf$@fTA}2~yzpg?@|oWrYzKH=w-=cwc~91{hU|)4Jiy<4x1J*Xl~-D znwisZ)?vbQHHW?O4XPeO3(jzQ+&iADU@|wirBePR!;Hkg0q@*$GAFUNpO#&)h2hGD zpB7hS6tohXg>(%*Hcj$WHklcrP`O#CLq5s7+2mx^;)Wsyfdq#8Ykb8d9&tSf`jo-b L)z4*}Q$iB}j?ZrF diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/GearLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/GearLight.png.meta deleted file mode 100644 index 78bbbd67..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/GearLight.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: d8f201654be27a241b5d6e2d557f9ef9 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyDark.png deleted file mode 100644 index f4af1d24bff38a4a8d8f51905ef5d59b4cb8defd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8LQfaRkcwML2@V@o4daVl+$|zTf)8USgr8?Fv@2IZ^Z^Eie+*yV zv1LiV;4f0W@S5>TiK50d`2f|0PM05ONStC&IKU8QD^a@g^77R{%Naaf{an^LB{Ts5 D2hl~H diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyDark.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyDark.png.meta deleted file mode 100644 index f933b49a..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyDark.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: e3dd7165ff2ab494e9b11d88c64e2255 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyLight.png b/Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyLight.png deleted file mode 100644 index 2414e9102d57f42ee53645d2cbbfe66dbbf2612e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8LQfaRkcwML2@>GA^&iBk*;2N?Ff5!Vd(e>D|oIfJLGpUXO@geCww C)kHx6 diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyLight.png.meta deleted file mode 100644 index 8426ccf5..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/IdentifyLight.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 9bd54e2c55410bc4b9a189d8cfee42d8 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/LeftRightTrianglesDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/LeftRightTrianglesDark.png deleted file mode 100644 index a0dd6192945c2de441fa056afb7cdd63448b5cc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8Do+>3kcwML2@3kcwML2@sc+6!_Vz#j}Zjj1yn8K~eD8a^b z_!-j#BbGk$Slm_+$|vWpwEKmE`#YC=GaMRH6%D06b>+a*{pK^vxdWEpeqNp)}1qCz7olan4I-NcjMZu8d{^We$ch0%z z8YGc`gS zk!9=kdbA#oVt1J3Q>j$I5sO8rMZ_DoiRMRaud~S@BTsithnU!g0i#yIVsaH^^X$P~{jYPYH;WmV;sL_*-QyQC&IZ+k?ub=1@~1KkEz{wY?JT%-}~mN6b} zRzR_a3HEB(fzp5gw-1`Of$QFm;CLF*%E&eUMuzHQ3ohhWG?&x=W!w#{@jE$VsWWU) z96uCGbBk7BFkLErx>#x+WYdmuX=|*UdiR93)%CobE&H!3U*_j~S9SdpI`4h`JhtiC z#*;0RFE-5dwmv+TnGQXCIy-yft#-dsYiYwPD+l4lmPhbY_3~zWBbZ#*HYg=ugSmB= z{ZQNf$(ai$I{tkgQZh$dPR7qB;+dE2#alU}^-cI3m=oZ)0s3@R>i~9KRA;&4I4} V_;>5SX6^*Pg}l-)U(Fqv`VOF8aC`s& diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/LockIconDark.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/LockIconDark.png.meta deleted file mode 100644 index 9f493851..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/LockIconDark.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 5f4076abd276a85469bdf0777b3dca59 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/LockIconLight.png b/Packages/com.opsive.graphdesigner/Editor/Icons/LockIconLight.png deleted file mode 100644 index 77924397b41323ed80bec3d2bf9cf20f31b7bacb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1146 zcmbVMPiPcZ7@s62G&U9msi+4Z6NR*NXXZ_ICOgxt+1dG1w`Ak8S#Uw2nVor?Op=*5 zoq5SlLZMqlQ1sx*i-PS*+e0o=K|E9tL2rUB*g`={5ow`46rqTazDagd55a@O%)CGI z{eHji``-7>`O4HMyLKMf$uP{W(lMh-$KC1k&H#NM`e)sy!+v7c$uw?~mK`BRb8!QK zl5fwVDze>`&mW?3hUsg1wK}PnCshagoSoWmi62rl!;DWPq3tXn0vc%63-avWcYa`j z=jPcHQdua6I-2v2twv~ib*kp9E;x$IP86L}%=Z~#(9yMdQT zo~52{hTw0zZ=_H$F-FZ@l_P#rO2V@(H!oA zY3|-Elp0cR)Z>vy55-(-d2q((EZr?yf$4Os^yy-&c~C$*CZetJg};20 zw$*nfL#rjfG+wQ*PxKvW_g|SY&9nTa4|g=CZ#?qAUw=M-{^a!9<-rTj-Ur_goChEHcxRQy}z9-TSdUASw>50Zi^
7q<{FeR~Dfk?n5Y+(UB=GYY*% zlQgXxii3U5PBC2Khm_4QbHyaIomE6Y3$1v83ctL31%cIGPu0x1upKySGsu1Qp_MGcHkgWS0Pp4JkM1sv*qk;Ni${*y)23qqpW4KMp-V% z`I3;UuD9$E2*=b{hQ>v7$oxoDN4 zT%IPwr;Yuq(fuvzo^(2}EnN(Zj{@rUh}!z=uTwwil~^?OQX@HN{X9Af`UGwEaPt-VdXxN0;uuIh;I5K7C}j?>wu$7wVbmeW8_^ k-V-L4F0wz2r#sBZ7<20dterT$VW-#5tW@$p#bUW%ATfO`luBX1LRkQa;|AE0H1neT^gmvmeA zbRS2YS75k2N+_FQmRIt`^S2NIJ+v9db@u4}2Nr}uo!yXILMt)RAY9!|(faP1>+f#) zTEMQ{2Ftll1tLT|kVo5brss8bqN~$+vCXq!0wG&<_Qa`fs|`$?A|P|siZ4J26orG5 ztSImn5Ctgm0)3SVlyq6q#TuACEVY&feZ6BjQ(JUZX9t8NI?oS>LvC2*aJtDuP16bu zQLIozB^$-W%PVoVR4P~~^V2XPA&xf@Q@Su zC@StXL1(0c{<<*}ow=g~@g0=moz$oK=r5II8oRR%6+r5Zem@OqQoL;o`#TYeNzaoM!eWZrQML)opPl!xw@GmkKokBc)P5C_5c%{4R8X?bp_nm2;%?`vztYF zPHtrC&dw%#8(ez*ss=1Xf;gP&;-MlAZ*BL%@ifcQJ_{cZJC{Nga3&cPo3e5 z;`pan$}L)f#q_lF>Eg6`P)s`}rLA%J$bCxNif>vCH~-T6eSEw!|8DQfgP*^?fBrf* u9*tF^DOZ;8{X zFd!ANu~qy6Bv@EL3@j}D0}M>8Ol3w$S;rmH_fo`|0d6Bui@YvsATJm^K153lGusK9Ez+vr z(|sIqUV-8AD4}eISz68$&)-4>v{5&V4fg2MXBLEk!EVTPp`O^N7q0B4Xnl9J>F;j& zTEH&f21~h41tLT|kVo5brsoDb)Ya*{*ydRi2Md6?% zD+;^?L;;GtKwqT$vc=lOoW&-Ke3PP;tRG_BAO z#S%r7vO!F|ycB1P69orlei|ku#4#uoy*Az<21`91T_H;9^{H^2jRQqP#^+wbLr&nM zsJPb&A)btT{*!-#{7ONqw4+&fO-vq;bA zwhl_eCn%_fs6Y%c>0>)0Qpjy(>Xz$`#cXC8?@FO|@N_9dm>Ki5X9w;fvz< zr&uOiv;vFiwDjp>+B_(x9h1`5IQM!prESI69J85!YyUnzUY`B9cX{*u!NJ1A?_b|O tc=_SWoxT01Gs2rev;5=mReW$}<^ps5+LifVi_gWPC2Q`g^Uiwo><_o@Jq!Q< diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/PauseLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/PauseLight.png.meta deleted file mode 100644 index bca16925..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/PauseLight.png.meta +++ /dev/null @@ -1,127 +0,0 @@ -fileFormatVersion: 2 -guid: 11a7234d91f4d8f42b93dd00c022cca4 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/PencilIcon.png b/Packages/com.opsive.graphdesigner/Editor/Icons/PencilIcon.png deleted file mode 100644 index b0ea578a6926b0f7616d47fbd3cee92c9722d0d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfxlq$-qD7NjaT1_T%~FmTL#?B##fTlbVtn1;qF|I=qYp9V27CkyKddkcFn zc41~_=4R$FFflMNW0~aUu+1_=<01p=45=BBvm|Fr&SEy~IM2%9u}$Qp)fHzWpjGEQ zT^vI!dY4Yt<~!sd(6(Plh($%TWi^9(16ye4jFtrtWbQC|8ZmM9wLcY#VPbI%5j{BV zi|cmo{kLcS{WtUGn~Fl2&;7GX^;cyv=rpYCaPi#pFd&Ds<$zykwC9D*y$e>=Ca|7q z;5A_5bI?!>2qMn(RTMZxQ~-JSgktYZz)Tt>T1dJJ4qgp00i_>zopr0G^A3TmS$7 diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/PencilIcon.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/PencilIcon.png.meta deleted file mode 100644 index 9d0860fc..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/PencilIcon.png.meta +++ /dev/null @@ -1,127 +0,0 @@ -fileFormatVersion: 2 -guid: 84227f8e79a886441853838a41082ba0 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 1 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/PlayDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/PlayDark.png deleted file mode 100644 index 0dc1c19f8b193456121044ec24583c7ba8a351b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1376 zcmbVMYiJx*6rOC_YElv_)IvhRak3>5-I=+Q-PxUScf-6kS=LS0%}O@3qLZDwyF+#! z&P=+S2qF^12OKBCyz9}aWp z-h1vj-#Pc3@61cN$??A4!Cnl*`qC3}9?kcl(SP?2^u6+O>N1+T-2AwRt$nxm0@`e= z2w4HcK6-8EAL@3r@3ALlTnyW@&mUdseDDeq4tPq@o3hGYU3DNPXx1#m(}r4sd8ld& zPk#gB7}kAJFBH9E_EElM8Kmm#kPX8|))*EaYuIXO4tn@3tmtNfxcu=60@t+!F&)X$ zSzCftePYppQ;U;@(&Ai+(}=NTUvIp@BLo9_D&8<^rpq@HL=%`tYhO$ecvHojOAxK7 zirE}4Sq{V_FB<}3KEm=$6mLHSa@P}gv@)NUQ*Cc( zmmsR1XY&+Quh+@?C}}wr3UD0fqcBVeX@uMb(^DHE(;aGJv_NF&mK@#obj!qjP<7Ut z_YwpOw{;K0&Sp2UO}CvclsKxP+7uvZ$}s%PHMLzY5C4v2OKrEXU_&YoU2EPcp{kUJ zI>so0cXs3}qG~_B`32Fhq`>4(K^LLvq3{5RDTpu1wj{JCR1U2^$ zX;~=5_P?|IsSyx%FI7nUr@(vI1*3bV`W%msi}>*Iz*2_J?YIx`J^sw_`u2m}a({eV zRpn0p_Pg>y^v0pLQyI*zcNNovOS_)6hi05h%Nws8Ufp*r_2RkpyMm8n$&H$DHJITZ z8V?#1{ikYE-{%h8ygzt0c=XJz^)m;qee&4Xe+B}-q;HVx&Ko~p&upxHd++jx%jMwN za~I14pRb%Ro(}g9?mYQf`1ON<)zz6d%dcLQjLiGNYp0I5=`RPaPoJ)=z+ZQL@z(h# jLt_s-ar4rNTe}~r?5%#a=Y@Ay{6AP)nUvSWr=I@{Opn0c diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/PlayDark.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/PlayDark.png.meta deleted file mode 100644 index fd262276..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/PlayDark.png.meta +++ /dev/null @@ -1,127 +0,0 @@ -fileFormatVersion: 2 -guid: 3d7e5db506665a04e80009e543ae5bab -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/PlayLight.png b/Packages/com.opsive.graphdesigner/Editor/Icons/PlayLight.png deleted file mode 100644 index aa676752cbe961089d9f5033943766eaeb9c5ee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1388 zcmbVMU2NM_6!u1`=-_xD zmhF4*x#xW6+;hHjUrvtij?j4eRX8pn#RX?D-BY zS|<4vk6|Cb(y=1nkJfF4p>Z3-9^T=7>ynwrsz})FBy!HEnRi^-f*7xw6A(}8@+8ba zSuO2dhEWW=?*}cLb8@L+PBC@A?CJQ6dI4EuSTtTN$jUTy@Ci7n88M=A<{W`*YK$18 zQ&g%T!YOTN&Vr+JBUxo`T8XGcyuYhGTI3Ld4jmaU>NAGT6=OsVm_u_*i&|=)%SZza zZ)g=GrW~ihk)-RoemCehtw|C@A`uTI5bz-lpItH>x#%)zpN+P0H{e@C*Www)~%Aen)-Icq7X zD*4`~F-qXQ9eIi<8g93xq0-1RlBvw<&~TDcj6genRZ}^Emv~AFGXcO0i68(11H=d= z1!y)BiUh(;6Jsq~Net60D^ipo2mmBPJevR_KqV1HfelLGrft%&9obM|)31j7)@_A> zd)jiM1!c#yvZguHq(OShbWD57Ea2iOgYO*E4Ape)C+Zbyi`GvpK}*{Q)d9=Y@mh{K zZH*X$tOz7tq=g72Btii2beI(bq0j&WBCMF8iH5EEfAU6pv}=o!9!LJcnY#2}!Uh{0 zE&m^6@OEn4A^M}<+$$+6r0lVgUU^xho{$ff9NBA zUAmmw{z3B667|AYea8;J_uJXuH&*s47!}NqpBlb=XQ}-CL;206%JH4^*Rr#fFZN$J z`Y6${>B{@J4=t8gW;*!;`?lTb87jYRAEKT*U3&54;j;@@ly`0&mBTwuoHM>T_2Zd0 z_4#*mo#%VHfBEUg`cFU6j(tlV_r12#@=@x@&HW3ht*ux~b<4${_l&ONSzWak`XpAT5b9dywX5QS|AlP1juTn? znRYNX%skl}HA7u&S8HSjhjgXY743r7Z8;?eM2@bV*H)1Kb9;f+`uE2(*pF=z(tEy0 RHXLXbgQu&X%Q~loCIAYWTZjMv diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphDark.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphDark.png.meta deleted file mode 100644 index 6e20eba4..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphDark.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 533ce97136699fa409a2906bc0204800 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphLight.png b/Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphLight.png deleted file mode 100644 index 0d6665e75d345d9583232be531aaccf64afca1e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1003 zcmaJ=PiWIn9FA0`%oPSh#ChWUZ%u5&;%u75RZJOaVMPxvP2SenB`+p#HXGu> z!%*<-VK)VF3VIV69uyS8qrxuUL=Pf}H}No-FYVfSu!bb>58wCwzW4k6-krJf`SjrE zAVpE>(yV5Z@o4fL9w7h6#~$7z!*M)Q!xglMTUH3Ef`jT1lssz*n$U7quf2y;6qTag zY7N(ni?WS8#!4_u>;;5PQB%`#VA)NGK^-o+zC!)aHUu{nx?`$l%z+{bArP6#jLq>p zkR*oBiju^i1_H+mEJt1`!)Iktl7%y1@1aSw&{>pCP2Y<}Rtnv~IFMPk)oL-VNd|>W zET7Nk6AeMg5JV#JuY}s1==R;|)VD`4P5!8+EyIzTBi0ynsa3VCY_ljvgWpw2v&i{k@R5{k(LzPJb_x zeYq?#!zP9OtI*vo(mlzv*S2KQYkcUFZVyRY-~714lPhthq!p_1r~1zB?sV$;fss`D z_2&K5^5(|IrPT25A?wEX+HG-Yc6+3mKO&~zG$*#!KMz$dq~Bis_Vn_LbL*0+{3;Bj v__3|^FNXPbv|N?Pw}W>d9-xCK28S1@-zUeP{CIS?o?O4uOj&!TF5LP9Im$fY diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphLight.png.meta deleted file mode 100644 index 60744d4a..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/PreviousGraphLight.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 87701d7b435f9a24ea6f393719ec45ee -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/RemoveDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/RemoveDark.png deleted file mode 100644 index ab3006097dcdb6b7bcfa41e3bf599c79290b0bae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8g`O^sAr-fh5+qm;%NsnJWKr^A0ponN7vF!T8d{VFFn8t|>ZVMR27i{F^ zYWn%4O7h8~PKRbOg-%tbkFG0DyC3XeWng4uNHNlxx>e|J4A8L*p00i_>zopr07E=k A82|tP diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/RemoveDark.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/RemoveDark.png.meta deleted file mode 100644 index f5399446..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/RemoveDark.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 936417eacfb2dee4f878b37c90ea8f94 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/RemoveLight.png b/Packages/com.opsive.graphdesigner/Editor/Icons/RemoveLight.png deleted file mode 100644 index aae52aefbe477242f829b61db8f6c4e2bd2a6053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8g`O^sAr-fh5+qm;%NsnJ#KFsJz!1c@Iy`?ygNho%60U{{ z#(+PJX0<*QI?S0J>{6E+RJO@=JS~)LyWScguF0_Svx5vrk*>gPX5Qi>%h~61OD@pk zY}s{2{#2U6Z3hj8*4yj~VGWy3c8e_Oi0pszv_hebW!E3(lX@-3G)`=ATfiv3U?VSA z)6XYWl1~Pmgh4;^oR0v*fX>FVdQ&MBb@07@2D ADF6Tf diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/RemoveLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/RemoveLight.png.meta deleted file mode 100644 index aa8de582..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/RemoveLight.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: b725c10f732ca284abb8cb593a459ae8 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleDark.png deleted file mode 100644 index d72bad8f54c9b768f6eef6d937715e4acfe2a53b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8C{Gv1kcwML2@$B}V@l$YT>>c`iWfGpFP@np e;=th0z{s#aT|E973)exQEexKnelF{r5}E)Hh�a diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleDark.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleDark.png.meta deleted file mode 100644 index cc9575b9..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleDark.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 16248b07552846349b8e4ab44072e961 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleLight.png b/Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleLight.png deleted file mode 100644 index 7486f630c0ea94d6f5d4921937189b7c30540686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8C{Gv1kcwML2@0J3`O9v`8^4*zucOX^3KL zYG4p}uYN2*O{hknp)`|eD~}4-h6xM4F$-9)i`)B<$u!1eO5%}S0x2De7dEgjo|z%y dz~Iop$gqh~m22WQ%mvv4FO#pPbHIM)R diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleLight.png.meta deleted file mode 100644 index d3dfb0a3..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/RightTriangleLight.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 639d1ae8726368a43971303f8e6254ea -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/StepDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/StepDark.png deleted file mode 100644 index d61d6bfb18c2fe5d81caa51a6bb6a5fd5e792b9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmbVMOKj9e7&Zg~0s;{nDv*#y4k}dYu04M3+S-NnV^daQ(`d62IYer`_H5Qk>~ZW# z*2#qpf;PaRz^Ob=NT8MjrBY8V0uB_Z5~w{@6}?t17aA^=P}M3OC)t!k!~x6pJp6y( z_s{?Ex#6J?`gR=H!7xl;<+xR&;~x6#-rh^!FV7Dy(P2L+kCGAGByBrFjPBwF0u|pL zM>S--bJIVd0>kt)z4|B_t)9>v>}T!NCY$&nMKes{SQ6UKBqE@J#=W4(E`9fa1)f`E zPs&xk8k(r(9iNZT$ox>!Vk<#R?7%@?T`$#L#TswKYG#CNf}=Xd zQ{4&}ZefDs77l?qqJSeOy}-ro_`NhetEaV4?Fv31qiLd5upfBc3Xz8YGsJu~@ zAk^i2&J-kRP=RXBEX(W~)_t3panuGPjnT`m>gS^R9%*IU25YCqgO@o?;mg+pGmqaFP1>@~n$y1ln!teY~$Uw*BV0-7o$qUElTS=Q9%f>pwde5BE$D v^q*>iy&Y)@2)=mZ@JElAmzTwhJDJV9m@Pf;7ON3Re<@6*JY?N5K0f^)Z{T!F diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/StepDark.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/StepDark.png.meta deleted file mode 100644 index 77e5ad7d..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/StepDark.png.meta +++ /dev/null @@ -1,127 +0,0 @@ -fileFormatVersion: 2 -guid: e8f2e204fc31abf45a6672bb76870862 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/StepLight.png b/Packages/com.opsive.graphdesigner/Editor/Icons/StepLight.png deleted file mode 100644 index 63119ec3c0786eb2b2d7e5a682a0038aaeefcb81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1156 zcmbVMO>EOv9CudHQ8p-`NrP%qpNyzLBC(&HII)$C`XgB)ku*w!=me8+?U%-C?dRIB zi`&bhO%pIQ!FJhJGz~7G?En%gLTHEfz+pRdCnV4W5<9c2NKYhRaqV$3e2T5^)jN=yRm;qu`8&4uo zam^{zK&CxE`zy*bOkc}sPLPS}3B|&0%8YGNk?T`5!{m=gzG+P(0w&Rv;}zH!KQFVu zu?y^}OqH+tI%+%Rg#e8&)SA}9v?bf@@%KSKQYe9ohzTNh#tW6Gz^?NubRKVWELb-o z(*<_JsflVG=r}+ilM<5_4;|Q)_t!@!};bx#{$hgS#Ihf)(*NxA$ZXJ>a`qzzZt;6QLkGKX3@myfhe6$Yr zz%+KR7m5w3H_BMx(4?3%2Dav0Ov1&@j_yH7V7CbvF-*o`&z7`2goEi zXkt9mtAKhN6CAd&5A<;f969B9HtvK+cLPNz!}l(TvW`q@t;Fx0RL4Z{ELqaA)`QUGLh<@4Aor&fj8Y2h00EO6*^|b^ZEZ z!yk6{wZ+>jA-I_s;s-~V2h78_?|i@So7RC`;{NCLp&PA{_i9VbGix;e?)k&Be}6VG zw$_~~zwzwK=$R8gwGKSpv18=k;xaQk@Z+MINDsgBboBAXYT~UuUp~^VTwT2y)%r{4 z4)6T|{4xCP>T)*{>iR(6K=-S!msZzaz51j-NQ`z9jQ3~$`7i!>GX5`AiZ$b=cJ|YM E0EEYLWdHyG diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/StepLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/StepLight.png.meta deleted file mode 100644 index dc694f8f..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/StepLight.png.meta +++ /dev/null @@ -1,127 +0,0 @@ -fileFormatVersion: 2 -guid: ee7114315133e1b4eb826990014700ee -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/StopDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/StopDark.png deleted file mode 100644 index 7264e4885e5552cd7819bc1d058c96e0a61851fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmbVM&2G~`5OzgDB&cvhfH)Wz)PjiZbz&#BoJ9Uh6RBydG*W}qLtT55SgpOr-Zp8E zhzneJgev^sO{S zQB$?5*&y>ZGOk{}M83z*D@SCSh#PY{b@1u-H?o=RXmyREUcR{U)4oXdsj&Jerl{-p zk}*+h+&w13o7igMWz@z!JA#zvqIF2ue7gf1&~|qoe}pPUUHI-bTewx9R~+QCcA~@f z{g7Bwlv?hGwzB~-y$(BGP-Kn{-!Zi37MT^X&euZ&cD?Fu1ebRgn$GTqBfCtwG?iBS z3PJE8w&}jV8N^Dz$P9oLvQEStLl0E&Mv)mt)v7Pi28tjpve}Ho13*g>3v!|)frqrf z1A*hoD`h}V5hX>))1!wW?ow*xwv~oi8F?eSBGbh#@Boi=qw(WLZv71R+B- zGVxA;?S3YRrw15A5EI5uu3uX84~XB9)4J_pI`^^C|x9RT;C2k!1A2$ zCzl&&$G8E1M{=fi+}sHv*MKqFiX2jv_Vn18B=CGki6V(cS&TeV8hg`3&Xx}YTr-Od zIbmJTRdmhNc(Wi0K+~-(0J;PWnKuP7FXv>TAdNB3vNa3&f-G19uj@JhR!*}dv643o z-qI|gV98_KS`cG9aNyXlNBoX#!MV1I5kVWHsEN?#mtVF{?*DcNbiLkVetr2Dv& z_DgmrEer#-o6fY4C3jr_2pz+WY6-?Z=)7`e)x(n&YE^NXASvG<6~5frL0L7TBls!|{8DU$@A?1&1IX!QBmC#7*VY~*eRFvMlM zz>yQ)^F7@(Y(unjiUbU^m;u04fTfAHB&%9hlX6PW#&No~m6KJ~5=GNA0Vrk-wFoRg zN@7{2nz3^|-Ex>;C`)J!xZyo6OTaEh#CaLs2*h^1>0`QNJAyX#v`O z!eRSS>ac}j=oQAB<5QD&KREPlxly)_T5jH5*IlZSMT23=Vt~- uKh1KZBhP-4G4ynPV5d>{JkR>_@f^cEzB({EA*F88N1|Muv-ixEd%pmN;B`R& diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/StopLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/StopLight.png.meta deleted file mode 100644 index b47a5a90..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/StopLight.png.meta +++ /dev/null @@ -1,127 +0,0 @@ -fileFormatVersion: 2 -guid: 902d4bb0b29289e45b3a2b172d5c2758 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/ToggleSharedDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/ToggleSharedDark.png deleted file mode 100644 index 4eec26f66680b80bac2e21f00e5cbf5978b7bbe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!focTX3`kcwML2@VpsJgFi2V5B?&8!o1nm>BCSkB)LC1-}jw!?m0P< z>D#udZhaj^QL9qDa+Zuf_gS%=yj#A^Dr8uP6L~y!ZDQ;J z?4l@dNzdhRKD}L3kr7Z_n?S{|2%4h0dMcKpjzA2Ga7Z_!^oJX_XrOCRdXP`EX)6wg z_1;Mv4ovpt)X5PwqR~CwpsOMh0s~?NRE$y65i3!8j#ngecblQXoCzL@((_K`(-{y) zHUxa2!>_U&2LvI&g?K^W+Ch-zf(%P;!Ow+6UJ!$wVBw;Pnyr<@tejlXBC9ApjIkv$ zOu1YRlsf{*9%8siB;s-egMMP+cP31%RQ#s1vC1GrN40ee>&OHyqf$iUI7$;w=R+{8 zbb684bQTgtQpQvii{Sz+V;F8+bJh;d!ryKzY3<}DEXZV`gT`%@oJVP66-;vXcOlo1 zcq8`PIyn?&R7UE!0Zp8eqcr&v&~!}<#gd75T;hTWDV|7jTto^>5*G<}u%UP?5{^|l zmcsI(WK0h6odg--xI|KtV{*7t7FZ#~vurq6#imRLE2avox;oKazzToGig6n%7}+_5 zMynN&8Acd6!^i^h0Re0o)J+YQomTgF=A)INt?z|e(nbcD%de;}q5to==ds%Vsigv2Xfo8)>WSDOt)@o)>@4&h~igci!5+;r`d! zH!&a_{M_#yYw;n^ScvCePo8dKrIkKZQ``a0t-J@mm1dgj3ewvj)EJ)|XzoeFzX9o~~?J*V2_XSWYGFMmh1ZZ8ySe49OYrdIE6dgTQ#nm!%$ z)NO4rW{x#oIK*Zi)qZ5DGu>-?FE{Fs+t0s$`sC*EL#F7NzI5VkZ9Th(+SC3p*1zfd c#m4*83YL1LaR8^ULHF;FO7zKBVub_00E^&p-v9sr diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconDark.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconDark.png.meta deleted file mode 100644 index 1cfbc3f1..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconDark.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 834058ea0154edc47b716fc26a2d1b2f -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconLight.png b/Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconLight.png deleted file mode 100644 index 1c1652cbf41f15fc364349c6560a0257e9b3bc2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1161 zcmbVMU5FD`6uxoUuB_df(kivEbUNFXDkgJhlFTN<#?8%4#toQt$p#Em#L3LfX4sv% z)0w+XcB}Z)RTM2)-}I$er34=YAH|1S5J3xSANtTDD%e5`f}*d&_D(k0_F?hCVP@{n zobUV2Irp47IW@U+Xz;^90KiajLMyW|8b0gaV(*V$E*osvLJL(oP3p91_!uCI)G$|c zj2T?UhPCkJZ9E1*U)`=$X|=RVF^Lm5LYsKY@faF_vGJB?n6sF2H9TXxS^nAepLou; zvizP@36?w+H|&W;A5Sk%R?Nj&Gh^}NJGily!U!Bp4X)+Pxq;Hk@*Q4<&BJYh=Q<{I zHp{O#RV__%D)BLwiYHjj5iZ;;?D?TCX)#{Bq_!$V!?t-jaJMJMtTey4ou(ns7+ihWHf4I zo@ROG=}HKWS1PR%yFoWmEM-E=@B}dq1;+{F>R1P~jQ?|EP3xet;9;SR12XTM>^$lt zJuu7N>xDu?=8dx3x7nc>a~d({9qiJgmgU)(xMf>PGOrg@6^T*-sRdmWGboLan2{1N zspd23e2-%-tf)!}l$0UTWF(3O9qD>HFUneSG>IUDS`S-v18TS??&;c0cLkf$UyD^# z9~+eT6+-5E6)@Exlmrdpaq6_peZI$bEz%6OhR3rKt%iO3D{SdLakx%?6?+YRm|{gU zDnYFqH-fUNk0O+YnY=DR#CNgQo8(Mj&In;~{I6JgTdV@Z>1ye-#cK0lmvxNKT4Upq z@fmBYYefxJT7T4DEiaGvDeZRqd4Ks>Zf!5vO;8OJR)`7;8jqUWnne*#z-p)N8c>mGqU-}EV0~<~x_Mb=K&fUXz zHvRB7xOTX@ci+ApkrU$|pE8yr5%5A7d6@eId~o6T83!ES@c1ft`=4{UZQo9OQ;+n? z!=FZv9C`Wu(v4TUT~3PbIyrJ5Z2q$y(f>MByZG)cupWZn-}~;zvoC(`{2YpfN$pC0 H|IvQ|c$9ID diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconLight.png.meta deleted file mode 100644 index a1381d7a..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/UnlockIconLight.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 312e008da96f6e14da1e81af6a0792a1 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/UpDownTrianglesDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/UpDownTrianglesDark.png deleted file mode 100644 index 24815355ffa1ded173f5e655b2218b600c86e287..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0*}aI1_r*vAk26?e?|C#eb9f&B)d@g3TI#5 z0^t?2U$T@o2ka=f?&3E2c+mb1YqY4Vz_04v{Q`P1d^7&K^la=iyk=M5QuCnGBU0q3 zAVXVXgo$tQCsWODj$STaX<`hb4P7%`UA*F_&&oM*#>wS-VCRaoXJ+e9_4eH%_(oAoc(NS%G}c0*}aI1_r*vAk26?e?4QULxRT_J*r*2;5`I=8~k823G&pg{V(<`38{`+$d_pVFVdQ&MBb@09|f5GXMYp diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleDark.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleDark.png.meta deleted file mode 100644 index 2a0053e6..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleDark.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 26c0f31e3dac32b4e9b9ccb105528dee -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleLight.png b/Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleLight.png deleted file mode 100644 index f42bd3f761d2a1c22880d540cfe277cb72a11552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8OivfbkcwML2@*9+ILkBf?rrdu t=ayq{GO>6x;kUu85O+pVMu!GQhRWHJ45_P~3xJj~c)I$ztaD0e0sy68JMRDh diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleLight.png.meta deleted file mode 100644 index 39717856..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/UpTriangleLight.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 17d324276eb5c9241980ff623d7a1a8c -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/WatchVariableDark.png b/Packages/com.opsive.graphdesigner/Editor/Icons/WatchVariableDark.png deleted file mode 100644 index 1d7276f4975a4e60d97f28cbd7ebd6aca6a48936..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8U7jwEAr-fh5+qog`3xRSvM6~mfpNkt{v&Jw3%MO)GSbt_ z8Rj?oRPb2yKUHHYR1m0Vc=Xr7lD&p)(*uF^?2p(T-f)y$WM6TEZ9$@f_pinq6I8^R z92o@kU5t3x)Rb5mJ=q>HF|~+1Fe+dcIL^FRqd{byLYZAi-xC9!7PnKi3mkO?Pqs%)Of4c0j0%_qjx+DoXb@SaP-Yj>_ryS_#qCt>0!QJ6Ngo~7 zFmQ3zuo)!_?b>hfr*FVz-qJA^BwK}1O3L}>FVdQ&MBb@0D7BZRR910 diff --git a/Packages/com.opsive.graphdesigner/Editor/Icons/WatchVariableLight.png.meta b/Packages/com.opsive.graphdesigner/Editor/Icons/WatchVariableLight.png.meta deleted file mode 100644 index e434547d..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Icons/WatchVariableLight.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: b980d653775576f4c91ea7ec6c20c532 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Opsive.GraphDesigner.Editor.dll b/Packages/com.opsive.graphdesigner/Editor/Opsive.GraphDesigner.Editor.dll deleted file mode 100644 index c66e210c4f9c5577d2a5017adb55e33d3de19e98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242688 zcmcGX2b>&7mH&HZW_xC5gVZ~#83ij?(#q|fSvknqyK<1^gl&uiHb#;G2W-IDxXq3Q zhV>W`Oteh~qdSrbM@~oZ5e{SGfdP|`aE4339d{hZMUK1W|NXtH?&+Cb3G@Hoe?L-B zb%j^&y?XWP)vM4C-}};_7z9Cy|G)ih5ZukL{&w2)(2xBjkFEdMSn#2tuN;2&z`0*J z{Ng8G)825yT=ImuE1taJaaUY_eRAW5E3e)#x9|E5*Id8h^z$#;@Z{vGtGAAhRyTXl z7n~6U=MEHtr=IroYtq_&9BkY$JaBXnydTU8F7|=15#B)f$HF#PZeh}dxBk*!3;8m| zVCSvMs(;;I|EehdUJTsxU2y3q^^K6S{Hw)aX6YPD$8HFMN-m|s`&qg7tv6nM(~Z3U z&HFrEIaxX^H+ ze4*G;tV^4SX@_cS+`a9qQAahLSSU6J>ci#Mil7iCqhx50@#vH#2hFjdaI-=SD~5t# zO`uxzs$bfsG_{cmEIgEkH)3%aybM5#wou1&9Dwm%{>= z1S<;*;mRNg+kmLXu&NnML38csQm~viT12!@7wgTim;kjJQ!oq)ais7Hg^Lpl1CSjC zGk+;=6%*>JcEn5Nt&UWb^m!%C1Fl5w(V^C8P-ssmpQ3_B)upwLEX>n=V6&nVz*mo| zyBC*`)QKuC48ZAHDJr!}LA@G;wZUkx^#tJem2K=`?9DEnGr?Dq# z06Imon81{3P{?I$?CA)6Fm=6X%&{Uz@RVd`FQk$azNPe5!`5I>A8wveY&DiZVW9*$ zuxT)83^xxiPA~U)_S6?jb)yxASz-wwL74_pJ(p4sT+Y=)D+~q`Bh51%0Ge$@bD*)i z8rF}kg*j3@*oJ{6f4vYIZ7xe_Ode?l71swYrXFNp^+*tDKj=~Wt%5}zMfsFv0}FN9 zbRbzxLb8Sj2o;0oDp#;K`7rSpeiehq0H3}f_!4j@O@hBx@D&w|2R((C6>=5D4-^83 zQ@$`+M-ezlrK4%odaH;!#IqbN>O_6CC<-j}(^FqBEsK*=S_;9@OYzFue$7%$*Z^+U zqT<6DOYwoSBh8~9H2sH*erq{LZw{X>y(vD63CZD82rdF2R8qIyi?lm>%%mXMD7I!z zR-~nsq*h2a`6O3kk@irM-h3&^RVjEQ@X>IBk1{DuuPn@?HA^kTU%$y_z|rD zUcUhhC3D9>7i|^=^|{lCjZwSJYS>7QRo0NgN1e{&tkc@th)9mJSg(StyhaQf7QVy} zQI6wzRL6rk`t%JkO0XGYsX%6L>Kpn}+p}cqpxS9pJ*jf!)MUGrvEB)TEl(T%7lJMG2raFryxET(-bKOJ;Gb?ceHhbjo%uq!^DP(rU% zGi6Du<1-cgP>c59EYZN#!4y#n+h>s;52_Ig@r6Xhij}@A1aoW|E?_@9*=O<3UTZ?ukVZuxJJ1`-4kKuOF^4o z`|D}MCEARE=RviZ2+I9UL zl@Va!ML}^Nl3S=UV2Y|zatR=kza+Prqzv57Ij)#!Op|Zj2}e>X5A`&>e#|O<8dk8oyO`-M(_sx$_Taq5r?M{79awcE{6q( z*px7+Iyg)qsmg83S)X(I9yJlZ16hjvC3DR`xf#Y#`HIA^11)czpN`{DRVms z1MTuf&{CXC;}z%5?UpId-C{5FOo6`3LGb(tWBO_s%-#PW;r=iW_rLNlTZ%a>3CEW~ z7uLfv>U?fDjkkB(8(kf-wSK&vHlYuoQ`?tQ$TPa=n0$rU0 z3BY0c0vxH+YH|Hl(w)GYh#$`{BY52>C5ToxJqS~KxfFZ>7&TzD|5}|eEOa^p7y@B9 zuis*fk_dOUG+n;s27a62(EL;Qt<>9d{Ad!DN>dQTsIzKvBacAw zCVtLV6HODM>2Ezv&-66u*VA;1(WK{6G`Un|cQoB=H0`4<(ezZ+DVlyFnx4j6JmhFn zxr`>g{IAjU4f-a^GHU#rIdL+dntS|kX*dWo~Q68 zqtJM~GG^GTCeJWhQ?Bpdk>h&Uo+q($tJUM4!X~*{MZ$R(BgB$UH^y_%B`*!uN~TF~ z^jhW?1JPC!boN_~dS=k{k`_7ZRM(T9*{zkf`dNQl8I*s86N0|`(c7) z_E}a^2|1wQ* zW3mM(K)o))0z^C{jj#X_$EOh%AOe-^idcY%nKZ%za|Ia-Ve)c401{3!pW8+jOhxIY zV(@i(-%8`besQQ!kZKM)!nH6jOef+CXdHC+8jSH_ny8~#m$v@o=GHYqGhqQU=b&_>6`2 z_XdCJ>uf)uI89HYSxbjIJcFW>hZ1AA3s$D z-SRww%puSkVf*=tKAXplUqGJsE9sUOxO7H_{<*_`pTr;%wqK~CFX9mZ>;}cWSTVO* zOg)|>1{Ob=AB=NGZZVuTQ`L+_Vf%K%^<;!5fZ=Hh{U~g|#8O6;QZK|~`h_1hwlgRN ztJJ=8&wwnORcbu;ZE6mZN9HD&qvOSJ(X5lmL(EB)`i9;)X~V|zk9lggWXR^oSSBQW z#V->FKv?oP3%;T7EjG4Q3bGqQWRj zecMEHIR)!BDPd~%XfLmT3P;8ZG2Nrun(2#t1(DDezfy@fpbSh}LW!mLRXj5cd<&XQ zRWuz!X6cs2^{;h=fjR0Vql)Q~$$-ssKV6WgoAU9isbsor-e5RE8T5{WSpxm|H6&*p z&`~Mj!H;g4;yX!C1|8cj@{u{5;@4*BIjBxR@NjPMCF%(VqGrn?CJ)m`CBns(GS{+d znkFmrK(o#;{3hay9SC*9&JNe&o!Gpu9;6Zoi%mqp69R^)Qo zB7$2&sFkB~Yi}MaOO%Rk)++VdP;+Y#RidE-=4j6WTo|ZTqiSo&rB<6Of@r9*yEYUJ zMU^|Q!4*Cn4deV`rDC8q5{=A$96?=FjVKw7Mq4*7N^uB`MPsc>GDhE+iTP}93;3l$3kuA_l5!d{of zB}q_Asfv13KSaw-!KK>Kl>l=-IL!42wSOxrO%FQ}aSIYarjujDf0B%@d$h)~42FPY zzo)+xQ;G7DHd2{gLuqhRgyBv>xn8PU(znr}*?&itU^-%^Y{~0MZf*51D6(qn@Lb9r z*W^;*y5mJ%LOuI7;P}cC6|9Bh3?&)RJFZcsctOKHAbTXFcy(%(sM30brAOsGh~^1| zqoMdsz>4qUu~8L_R~J?sOQS`IzlP<60VAAfznS#Ax-v=~UPeFeQHsLkE#wIrH91lZ ztGDu=kqY)*Qk9ZnsgxY4l6FR_j8rApM#otr$bdpB5(KHEeL(iq5P6X*QHMOzqp>{* z^I?ReW3k?eykOfPyK4(&ebU!LEF-3i^rWQl>Cl1vv+8$3Z zLOm~ubs-1YS*5A)n`&nKD>ve&VFjgQ?m9XIIyJ)XHZ*qyMQ6R*(&S2+xyOL;%B{}D zXhu}plm?N zuv)#fxTZO<%2(fowq|Q_HA*E#tGS~~lnpi+0GBbvzYD+tuBQM{WSSTK2wtsodd#fV z<1jdB60;v&xY!Z1imkA?+Uyh5+Ii$qZpT&GEy*^OQ;25QSnZOr>`D!n=HqMwYU&ntoNCF>c*RaD@}vKFF(RaBq>y<0&qhq{$2>+h&Qq**&HBF#*G zCxr2P)bm{*W`v`W%!X6{%RKv=QcKNE+31QiqE_iNZ%f`Q0P0$1&%(DVAl8Qb(V=}{H-IUV zd{77$hSHHdn8DBhd52z6Z9DrSVu-Tg#-L-lJ6Bk3aP9+x!41)1{KrJiecHmwhZG(S znP7Zap@`7jD!qP$S8L4ezJ?pOfkpgLq8F2Jw=$OtQCaIVnWZ5_jyKj7ZNLJfC3`s_qO&*uG&P7UMrry*@_lfUCn{f`_o`G(6pD0$wU2U&7>}6l{R| zhj;5}l})d@2>`0SL~;oTSNa;vvKXDHm4*Or{bV+1V>ZH&daW$|IUWv0`pM;FBb>3B{UD6NF|^oZh@>%Fj+4vBU_9|CAyc z%CKu~+SH*vO3icgSw1DGhhUP~$+bM2Vk;ugh@jb;?`GNq^M(138|Gvmm6CgS9;g;C z2pjEB6HM+^RZ}p`mGu6UR5H^()Bx6~gY|e=rAF%x@zyrQ0CUOrGn+H^<#B$IZbzK~ zO)o#*+67-``Y!++K#hw65|ANw==ZYpON|&j|pW)Fv)Bmhu zrcNnLI2VdvfpU7{!Y=;10g?0A99~R5N5S>&ZH;2`c|t3<4!giQ8vI$-FQD_>5ibBbkpEtB_~p-T8O_yhUvB7Vp5VmUUKih zogD79m7(Su5^cRGeSGD4-CkfjsI}r-KXRp zs@vhQYUBLG)>CqiEU9x60H&Zoev1qE-ISwq7j(MOeK07FG>`Y>!}qYdY@j&*Wf%}% zdd;=r-j0Hby006hAf?zuq;)t6Hu5PRs-dKw;GqkDg`C6V1IEettGop1%h&9M-E{X8 zNWRXaHZnd^kH4W1=6n220)45CL#D3mO^v^`7{DsaG8!hrt5#Zh`xwnXS&zTX>su_` z=!WC(5F4zGzpJ0Zyx1B4xx(WEF>+Jo=llG$f50RDp-=dW-;waZq7oidUqbvN0n9Z^ zZE!s7t=KVDRF0RsDL>}Dn=%ytCGYWH>G9Wk{0)ym()C89NZ)O-%`1Y8m<(7B-CSHFZQt!#`xdA#em+v{T9wyw?$xyn zQ(;4zYJWzxOa_@rPQNf3EX>o1N_%U=G*=n#%y33j8rm~iTV|9*?x&dq84~LBPRJe% z5{qf{wJ$|#mehxOG`t(^nbdCI_uJq8_Q466NZ#$6p(|_|I{zQ#=U|d+G9rOc)0%Xe z6j{g^ZfVP$%%mO3OP6m$dvlVb%#-J3pp2c1;<85j{Ut}Ryuf-l!XnA3N^+EM?_;u1 zKOz55lG8^|CLZ+ZgC$9Fa;Q7W!P8-q!&p!VZfBgC)L2lm-mz>T{yRumC}9GOEi3p} zV|1258grqbDT-y#tIwdSDDw9P0n628(5p3L$#5ZqROdp0$)wAmSC^qy!sk=c$Y1R2 zpl20Iot^x!O>RBbe>ygP9Gth<_=T^JYAQivbmr|u7MLV6Bf^5V8D%A?kIuZ5_)@D@ zNPbQ&MSI5oKu|`j=9(;7j5e=#I}Av_ilpJN9RDM~Hql_K?`ZS9a`FozTE~}@f8zIk zMv#H{mxPjkR`mMNB{#z4SG?B`l>M)PQB9h38l)1n1w(FL_IifmBSeQe<6*~;+=w$T zAiCgvOa(ugaPwl9{zTI2RhN?d3-!?y<#Or+Mmf)3To5xXO*Lz}fPFrTfkkcQJFaQ$ zsa2cTP}y+3HqzV{l%tUY@XcJ!%yACWdsL392O2T{s8E^`S8Ag++?)ua5vCQm@Bl+k zzzsKjPc)2WB89}Hm2O>)Cp2|vRH>}0sv@?W$rWVow-XN^0c>t8#X=rBUWN#iW zQ7pQ7uOsMdhZH z%FWScR=T3Yqm34Omz@5afV(N$r0R7;SWwZHcx_zc)JE8ina|@?SzN zXddZhsx{(dD;2pTq9a-(EXcTg!rcq!ZzxCqELYN;aTL#<<%CmdwIib=C7jKuIeV)K z=aD9yt>(4RGhMH3Z9XKZL|YF`#Q&}AM@2_z4!%ZF(UDQ>fQvplI@-i@TH?7CLbgU* z-5Sd=(J|A18cj=@j*X6$cow2oT+hU_g?P52mKV=$(YER52SRC}c3gBE;t7=7vAhRr zM>_EYJpnfHd`R>VHbadcNkq(y(u?O*y>|Qz7NW%SgcY@!dTqA(IABJzDG}SF?UK+L zN$82uiIULS+DyjRAMv>#k0|D z1ae5`DbXp@FNsbN$vdJQt#g9*|A=)vqn(1EEbx;2mPg1$2;Ecigs;pNFt|dr$(o?p4es9Y4zIa&C_AP8Hh|JI$czq;i)<^ zI#U99T6DTann0cb*fXLtJOK}l9ybhZ;n%O`;hYv)Agv|0$}Cq;X~IWIn?@XCU7b*vwnDC~Q@6#GiGCPmy} zw5||`R5$fO2Bo;HiVO3nGNza(wHQ~3(TSX%?Xc4C#Q@!Gf0P?CgbVR$)adN5(+MTd zG-TRUQagg_AkQ`B>RJUB$#7qNjhO8Q)nv3U8j$-x<#q*)Es?atCE@MsLEg<(%bdnK zcSm#3c2T-?Q3Lj5QLD#o#UA_Ym0$GX`3 zAlPWzU>_<2z=@^yqrxiGIESESIc1EzD1aG?dxI<@mK1?LsP z`xj458jfnqu@HU)DD9O*C94zYU8bse9>(U)zL{*ZtzgK)PkrJ8MRH+%8qv`xDk(~rj6 zX6<3M8otSzF5&qI*Kkw7Si{-}X1M?JT)msBm%!sc)B73TsldfrmC+3ot!_MRdhF!flTnt*k;*q&PrfL*m|U4m>AfQ! zdro&1Z<8cztXQFTOOI(D$yOf7g$gwiU$MP;HQ)}X>@k>n&b=n9*)%CbF2;^_(^%>U zl)6Lsuw2`DweN%fl=VTyxUAv4!hS0joma(uoti-4Ej3a*d#!3c=f0a&U6@ydSLJiR zCZ59;N0igLU9yc;`PDaSv0_faIm#|I@OsW&r1Hj7m#;9dXs@Yk_g!q1u{8WS5X5=Q zw5WfxTKsv#-Fm`g@>rLTNmJN93QjxivPs$nLD8D0nmju=!+_ZjFS*+CQQ4OTgqbTV zex|$%#4*^0Z8l*Nw?+z0asR5gV=V5lG>!>d*gn?c)~0dT>S24E#jQ)@{#|h|u{s#T zn$AW2fFjQ!GBy|W`sGy87e^;kAG?>n=ElDE8IUrGJmCvJNh)SCE+~A8!trs`3a*Vd zfiQh*U)+6}Xg`E3KILYnr=|FKA{aq0^gK(Dm#|Q9X(uT2pA!+!5K7RKur~gLau|ax zb5iC#nI!`Up#^eb#jLi6iDx<9G6>klKluqh13gXCsry=JTsMZxgDmY)Otu4SOVGTj zxR0)-RFtezrBI5=i7s_-ao^!Cm42dB>6oIJqOvCy_f5N0X2MF9+9@U{yVP~XeUmQL zruNH7mo6%bjg&6#+u~C-r$3BTsi$JHL#YLq8h=I1@V3cu&;uci5y{VCHtugJu`t<5 z0Xj11!<$eZaEcJPpFq)d0LHMLUddb$Xq& zi@K^hjGopL>UeNzfe~u@?_C~9FoVjW$J?ot5kR%cc#4BdEheWKKpm?meK1%{>%&rb z8UI9hcnN@SVX^}~lt$2m+E4<`tUCT2+3*<^pPUX%+LIRBB~Qr)gv1F_mO6C676HO7 z0UO*#hx(IkR>C6i^yhluzMftLT=`&TKf!>+bV19QGi)TmNQ>0*n8L7ZIZF%oqNJj% zbM8A!Gcz0;0;9cl7qNXQp|@4zGkIu(-9-FQLao^2giNH}z_9m#Rz$_O_q3~;`Zk!UnI%kf8Lag)rxlroUAtl4Hmk|jpVJf=8EgeiNFTIaJdDTgV( z5RWNG?xhB8(JaqMk7=}weS9gZ+GZs01gHklGNwy7V|<;)b9@KepT-0Y<}C%PtOXmq zMVA90T`TU-XK>i_xBW>AO!PwAo43U`W22GG10dh1xmguFXt4imam|eb`AXiPrfeLj z*R}YA1f_14d>+wmh~V3qeowu&YUa8nC1TZq8crQe-to>zloFg&9m{MFnMjpn2T+a1{XnnL!>rqfL z0|eEM-8oP@JUU#p<6xP62hmGav#DO&+`I`_P4X~mjW!>s;h9O!&7q0&MBb0{4uX%% zoX2NN0WZ%M!>5LiMi}65VP+g10q9q1`~k(yNDgiyU$HTIDw^6pXOa`GA{9ScKlPRk zx6Sr_2u5B6lDEP*)r4DR_SvEpM^5vyMOmV0?08sPHA*HZny__*&z!~N3!_x4sVlG=*6=OOKAQ15 z7(d1hl5X4)#(0!w-z^G#acP(24j#2__1baGdEzxhMaL!Q(Td66!f$g8M%$csSq`N0 zft#=0s5|aJay})Niobw(M%ZBIrFsT-5-h z=48q#v$x>nQnpqvJC_STL`A+lHV8VlsyMB;e@9X!qy{*YeYPlVh(b9?iQWxd8x>kj z9tG+^{GLD;{Pdw)Z=T%^Wx-UyRwxE<=XWdGAVpFg$=L)lwImLWOHvC3?^ zlB8m?n_9zUkJTN<_bH>cE?t-hXQsp`qqWdE7TKoM*d1>$D|1LM zdy04EupLVF3OJpsdk+MPGB~OaXWKYkI#8{%4~z4@&UBe&a!XN*5aiLBAMuXqN5iry z@!L=$t5TS03-v~ywKg<9G!!2$l-Nd{JX#1ehG!6MpJC|D50`cyj7r65aQ-o*C*KsT zkhjP3<~(LBP6Jsh3o=sHr@)8Dhcn>ADe&eQ?9mcd9>V(LH0xm(8;d6K;}w#DlEGlx zMFwLugE4?1wr6z6d$qAjwny~+vhA7H&c|-&Rxd4ucX8zlTd1)~oS*F*5O}os>Ms*2 zPmI`TR+zt>#x5n7iO|b=V5qNUKJq5vRT?kl?tw|JAejx%w#0VEqB^y*CT?q4tQypB zKSpc}*#c0C5oIQCT^!SG=RU4j8Y{KyCVF1Z+;CV-?g5K1d7SFaBMLhe<&OlLtTWxy zT^l+R6jx>Z;{?<1Fb4*-ScWaf)_*2Kv~xLm9x0Mqx0CVxiY?k4$Y^6ToUzlC{|hJ} zLlElNdtI2n0(M1%Nd&rv-gr5=8f3g-%W_})@x0bJk5Mie$m9tQ{r-Zi!8}nZLGxHQ z56YXpDE%QDT|A7ey5t%w6AZC%H#or~h=yH%AGG`2j!oN`o?4z5ok4BVV%i-I3rpH& zk#%>wry?Ok)elQW4(GWA-x<@adLGz)KhMs%B8rB!6CF}CFKwkH#p?vgiayf zFmjUo0EjHaH*qFAH%OQ~H3!Bf^DZHQV-Ur({#)FZWce=^)(L#es`a-cDIs~f<>z*! zZ?PeuxmFdJDOoa8GDEZkqIB0@TaUJ#{wg}i6_XPM75a=^MG=@ugq(*ZnYX%348H1U zJQEsEaB?hnE=`HI3ELc_Qt!#llxXZ3Zn6R1#gvl{QQEJDfR#z&G?EtlM=I0u(aXMA z1x%Vi{p%L;b{N&zA=)sOckf0i1s^Oh@m9W~wk9Kn?Cz+K%)E|h=f%;+6jy68c_xq; zR~d#Z(@kXJx};yAkdPdq8YcV6Lic(ZT{tL-S+n@DQzOPX!_@WEBP3cHkgleWSktpO zTxmWGP?rNL8jRe2dd)=tM&WGr$^JzOq4!30)Zt_0}w`Cb_W2z<^ z6K;4Sre7*nquS-hvrQQ1=aF?u$wy$aZeq*k{|H)-St_m?7kz;rs8xcQKZE(1lTh0m z+`_+$((%IN)nsgq5O@^cB%i!rfsj@G%ZF|xQYk#J?X~*#alU#CgYVk?x2Ib`A zFi_p1Ht53p&Nfp_=9z68;*vCEQBJPbm=9ntmV7p`T>p=1a_?ny{P0i!Avsb zO6 ^$9xBa{y*GkD14grSRPfT&=U{ysyqb-8wy3*kz9@V$H*cY()Msk zL$0NPmJjq&VKXNHZGgaRTvD|*Tri^JsNH@J^N^lm1usO{kAFoa+H05YkW+u+_J?8+ zoG6|R7Lyl>A?Sv{4zmu=>>RpuckjLy0dFuk;Unn{7MQ?>VTm8|XR!sg$D)KgPiErl-$yboN zk4yl~ZD46uGYZU4Z`9HwNOlda2bUx)ntUEfC$Ko#VFrEDz?ZDf_zo&@OG{|`+pHB* zwaOUN>HuBu>Y`4czC>(VKE6DDDFMglS~R{qisF|Mq24RCi@*HkdWB~7%Bhs*C=t1G zsux|aF-p}qW}QO~BVB1Q{!4Np5r@JTUcEw9EGy)DCmmpH@G|xG*}sLFV4^nR`NLo( z;nCQ%4s@L<^?|vGkGnCqYLb4Tq~DvwKQ0F9U7Il z7DEt^cr>B0R#rD#6{o)mJa-9~`ro;be3JTKF)P$C>c8!m^*YaD!Z)%2&Q)?g2^U>KZia9f-{x|3uBLEn`tem$x6>clX$ zzLuoX<}F;DaexqGOys7y-eMEKB&cYfy^I=~`#Oie^jeLvDd*^SNLp{74r~)D-5cH8 z{sSNnYd?eWGWtRnb76OS(43r&4kgRel?`L ztd}E#{h6EzlV~c7QuV0^H9Bc{Z*acba6;3WIV(;71aQ=QEnTXVb%nl`;n}qxiI4%> zjY!rD{ex88H7JLC#m(ch^=upCjz|?BR{&(>v+&rpDK`jyzfGyWBHt`Rz}(3=({md# zx8?fT2t9}UrbnC444qdCftINhCT|wYO3kx5SeigCm z=T4)#**$~S>{J1g8&&J0>d5rbKcYrRsu*6i@_0G#ZG1b4Tg*J6foJbSYQ2Qa-L7@{ zXTaH@k`81xiY-S^SwvlDsl@k+n-3K#b)64D#3~IJs3hZPmDYs&-G_$<(Xmx$F-B&o zRtbhm9#AE@8?Gz6eqDBRh}a0KUastnbgtftQvp|D7Q{!$cGa>q8pL}rkdSvkoX>TS za+Ls^(q{|BKJhh%wG%GQ9B{g(ZvykzHz-cAqR4_rz#eHNRYLAd-o@H}LT} z6wtZ4x*{UUa(hQ(b9#xa1%GEuG(KtI8+*Q<`X#gbXMB&y(6Plk#?|c?Y0V03Nnw%U zoiKtI3^`ujrI%plH%Q8&;dS;8MXkw$&Hy}Ru`m>(hHq|GoLw_BAa@(g7LtoL+N!ly zr>*5Nl`WYL;CFV}Uau$fdZRwMYl_Lcm%#XJ!+0Z^{2)EMQS$0_(%RDW3Px%_30|9@ z1T#3#epiG!B<9|liFP4c>!|T1O=)HOWjH#(L}gKunIF04W8`T*x+hnQs#>SyNp^@i z@Jcn=rA)6jaT3jFV9s!@uG_fg^YOzp23_KSrLRyW*HE`02ZIq8@GbYg*}6r}vAJ zUioga?+N?EL`CcWT8zufe=+%h3bAk@LZy$i!jF5WQFdm6COY{2vvb9)+65?VjU}0< zv9ZTHF%=VTn6lWXnHFR2NV2Ay)^c)YemmzxCDA)Jr4ktBpDI*5vN$$Ljy%4yCRA1) zP;+vUSjjm>E9Ml<%6bQ#uNVEUvSM}eA)}TPQ|5ea zbzfs{gjShfDRvGmY)jex&&8p0s*TyYKiu$BtK|xl; zHA}h`E5287qEYDnGy1tpN2Xmi>WnpqX#>L#|kmqCk z8Nm_@xo+Bnn%hUJmjwDjn7mjIm9v(0b{6L6XDKRejm|KCVhb&%CTP`MQ?N3qG7lvi zk|cJ?UcWiXD<@x2j4e11ZiHdM_)3478Ml_0fErr2ftI_`Y@|@G zFu;F{h|$p5S11>8UxoqOlJIxQzAD@LY+R%-aJ}T4z^-E68LK1@T1&jsWksLLk(nU4 z?Nql1=Q@DconwC4bmlZ<-$50lu_tDaQE!;2arI*tQ`;_dnC9rG1kquBm1k|=h9TFX z82(%1a6^^_gXVcuSX-le&-^Str(v1NGw4shM|7nfj+E7wY*@Pv8NNdE z8T>u`JI(Zwo0Xv&Ldl0lpyZ42V|eDBWGN?qMtB5+|Jh_PkKbrTE?_qB>bdn9E~RMc zTd#Amjctz`a$Yc(sCl01Q7g4-#aUge;>CmZv@ zCHXQBFX@OM9*#hxd2YgD=T4Ssxw%?D5)7xoaRJX< zNKO~uXUYxx*lccWR;8P$NyC>U(`DD7&w+aNEX}bWf$AG-9+OW(XMF`~9YAWAw`54$ zS7+EW1D4qeux49s=K59gBg-04KTLB<*7~O?@B9L04m!Z!(uh+h2ns-4v-#EM95$coV!D zYd$*d+GE|`Z%$G<2y=5Xt?S`}^)MJIqzJs{YMF7zd9Lm!T5R=;*}d9<(P{c69%-9G zx*q5_QR1lBKhp;7uLB}^rTQ;p(rm1zeh{q5Xw&TRY0x&&yfme4B1fCn`ub>-E0t?Y zS7g-r{NE5F<|(@;(=m|d4@mct#z?{nX4XLU+REm`J=!_sO}?U)CXvXZ1_L~Z>kg8` z>!N5S!!zF7{#=QdQS%(fcIfs(q6<@>4RcNw|dcz>Q~ z@=|K8r59nfhPrbm?_&8T=^Cl!qk~oK2zEU#YnF=Jd*wX7Ig{Nl{luEe7j%o2DGBv{ ze8u*j-n=G15#x7ortzxe_Ga0QYF@QaKYH%Oyn4_y1oPG@jEc2q>d~ zrDj~Q`;Rc}f`_UOuj9?4P7MgXB=1Jd+{b^Yl15{}DDC5JCzLWI--0D`ukD&dR`lCM znjxC{`4nq+<>8>VJAMNHqa`%8*;#mMgB{GU^Jx4W{0A8dBLS!6Yg zzenQqa2Q|0ubVa_R#&qu>wv_=$ckNQq8OERF$(#kJNFYT`V&;$qnxF5_wDE4HtL-g zmyGMp%Xl!gkV>7r&Ti+gEuZ+*_Pi+CZR}A1R#t zm}gJ<(n3oWUXjP%JAuHGeGachK-zrS#&$V`9hPyl zgcOzL73z}QVWp=x)<}AcM6t9G;%0Ot=;gollA{55IcQeyYG3Yu^5qu#%k|JH_a2FgH6$ zY=(m!I{T+&#olpu4z&kG0G@%c^Jd_sz23Cx?SPC%59qsZcJ@V15609>xO;uHbC;+Z zn^z%6t5NkjsLEGrAjamE`G6ZH(1g`!Y#|I&x>Lc3MloA3H2aI2djWHD`-K{sXI3*R zLaB&%yCiImexyfH7UK#J!N$3_Qk{tpJ`SuybFbEGwPxyUcjKgTMYRL+b!f(c%_l-1 z%8Ij~=P}Yu*v`eY){rX0(BqOB7|y>b8&P)=MNJm4Yfy%n*^ie|h9S8922qx4y}6I~ zu~D^l*+;kf_q1C2#1d)2ALsbAzS~BMd`#`Y%`C64LU*tVSD2SLJe>dnHG8h^pYSm!={?YA=BF6a|?@srOD~WmRsIJU?HqZ0RNf>oZPPzeaEorZb)%c zQ+$hs;Ah~&q*MC}nATP2q%h5quKk@v{)9-DcRs6ZE{F7<Bl9$Mz+&?EM0D8!u^icmIjDttO}X;RZpMr&(5#IA-II~= zK82Vu2hx@Ce|j>$zMC=Qkud>}Q~aBJR;~+oD0Z18UMSx}PrmbfzAn$ilEwM9_XY_-cMwF$$u$$56a{`*Cs0G zj-l|`AFNDyB4H$E|BK0#!&xJ=wEN;#Q>ER_^6s39dcCINn}KM{avSA_yPTZ#b9Wj; zn|0jMD$WqMHm6PI^lx^V`HHPGjli+)iIYok8@4G*iJ|7nzt_PNHddq+at2QJqbigG z@$Q}qN2$OW3*{xTnQN!R$R6~T(U1m#wbv+r34k*u8)kIPMDKocCJ9z zke=N4sm)wC70=99Wj9{?rZhcnx}+F95BWOZbctHe_3fK-Vx_YfXKMReCTK@_>2?P* zXjhsX0Y=rV_WOKYimlkD{*v6m4O}MgI~bDc^Me8HEFH)AZH_4u3Hr}i5V|b|zlLY< za56cc0E%YAE_-wjEX!lwv$#`qi#zmU?rYbAjlZwDWcOyEH@Ktp_X77{RsrB_xxybZ z(Yj`(5CmwT9{-O!nzq!*XIt!4x1ht|5tS29SNBQ$ugBUC?SzPR5VMP4PZLGq0SUQr z#-=mN*|whZ+R0o*G&yF+R@!^ireKqu%ISq=wk$J|>DLBUFS0C5SUc-FIh`*q{JMF5 z^L{7W#~dCQnPB)!UCt8tYtznP(-9fLwNW{t>1=L&Dd&VX>n|EL{cF3D#5VzpT&7X2 zK`rTJW^OV4-oOt0YB}`biz^*xRmyE4T5?qiky*69=2~+!a7P~V9%S2*e=G@iGa~pk ziRTgA;<7Gs^ACBqE@Nsb*o!er`ytQzrZlrM)-KscelKiJ(aukMa4cZkYPMIJ=`59p zE#AhsqT?IVGK-^rF)Z>i;9L$ny@Ie>-XqO1`_S)vD*;%-_#`Rdr*g?z4XZCR(1)7Ov{% zhwg4DHI8W4f?LAU)Yr=e{bKeNR($!OaTk#{o9wLIy0W{~ewu8B|4CyK4uJDW> zP#Gb) zOb#olk#Z)l8e}NBlV{Kz4|02-7^g{S68?0vhNB^HpJgY_Poj@z8ocspf$f$9H6Pf-8;&b&??BL6& zPX3t7@5Z2FyEIzq+J~rcQ3*RJ!`6CVSiE)dXq=(szp2M&C=FW;DhI2U4{$xk(wYB< z%r*w%Ga#FT_`*hkV=LC~>Hb&^W9&b( zk!Z;6hM>##mPyy5#GYgUL|BW$YTN!Lw8GTAn5%ZVhPmI1?k>pgVVIozJ^lss+q|+A ztPsQXx71x}efQ99WgxM9|4Mm(58Y8|+&?SsSaC8wI*t1`#ci{=W70U*chY<4j#Zp} zD&+x1o&&Sunf|r8f^ZFJfcDb|%uSbJEL5UAdo;iI@!*)%_}(E01Pa9?YFcDYp@-Fw)%Q;Wus{G#G{31mvz{fZ}ge z(7U&6{`Kur5HPig{QZ__&<-vM26;X6_s$mPCPt{_NN`3+oJI>F_B(gE8+&izmDn%w zGhLoLmW*8Pc(L;D=t;TJrMx~%v0LeSKbmYuQGwlaF>dG&s1~3hDe_<_5Dxi!hFuIL zStmT5w4~I{my2Cy6om1v9?U-PFsqD$^D5-G(GHmbb=t-YJ?G9L$=#D#m{&xC%RO8i zE3AA5&m;&DI+G(R!Np)d2V@o z>e2lp^XQJsqbqeYxnC(6Lk*t8*xgWyCj=4KGk=e=MVMHvip#V`!UT+lav7bx#9L4x zIRW7!=B`|n`-v(WF!wwtDdk(<(M!cxmkOmgDjX8!#8WW@W}T-Q6?)D+3C^b%p;|;2 ztHQh@43k_hc(jwjo}_zRx2YP{R_c~__M*0|i<(mMsQGFfeolL6n4U~t>a;Oqs@KM6 zQ?-3tO!FFPZK;~D2B$J_Px*AE7e-J!9u#&S5p~wcbW%HhQ@AxPc!$c3!k|#FHy5n&0h@fZG+@--aPV@@Mi8AsST=!2&;w^NL7SMLGbl>Pss0j}7rz9%_=e%PLySe{aLNgDE$J>MwPbM8)(Qpyz3 zPZ?(#g=m(P3wBkdDC0=6QO2p1o&w!miPxG|`$D*}pE8SgEhNesy_6}{Q`Wvy>#{ z!k!D^rVQ9CNz;I&gr5A*vHbR22siiTpLeOoR@eWF8BdjzLb5@HT>^-bo^!tv`<%h& zB9=!)TxeavBI^G7aeMLd*IR*0SqQgeD4CH1396x|V)Qx{>)BJWMXbwJtca{)S7-^! z3=krA#G;B-B(3-+Xz4JPP_dqKXzq++MWpIJXVIo6U_SX&iZOINQKg;1Yv4@W@|v~K zUXK8EUThV*r=f0ImUp+rpKNeamdnt`R7+V1W6^dvnd5DAagO{tN|c(~2}U4(QwY?v z$J$ZEViY|POWdWV4jt0(Le+%xdd}S@It@t|(ci5Y@+f9`X#oVN7fXTm1+9X%)S+Z z%3hbal;~K2g>Z$8oyF``s%LM!8F-HEE+$L`<}N1@f5T7bJ>p!Nuw~qd3O^lOgC%-` zp&+H;7r(d$C5zH$(m7Tf&I?F04ChrQXMc8XHxl)ndnYi{?rIVDD#9yvMP$83FKof6 zr`DWTzlC`v_`VU>X#i%%aYMhWXpzIzB9l-YABVUFtBG2xs4a?mh@#dIwN6n-DC&4c zttD!`qPR@H8lRvjN8V(D394!ON~NAd%ekBOrh9tvKY?w?gKX|??^7$U?^07bY zU^n+Wcvrf7qHD?ThotphkUA?eb3<{9bI9iPP{>_`C&t;3)R*46y)` zRgtt*ifb|w79kEal39{iddt3nh1=r-EgLjX0(BLr$kG39YE8CMQocEP7WMtz-qfQ6 zm)iX0I_|?r@-BXq6Bu^OhB-&HxO%HA+pZyq37ZixsD$q?C_d`=cPN9v#_e2R=^0aP z%qzAk?m!>P`QbG>!)t8(bZNNt+$dOVjTQY)>I)#x?Yhvlm^RA3k0`gz5zof80BLfN zR$TZNeuNaD`c2PdBG=8Wx2BT`eT!XSU4=OqXQw@cPraGaE6g*aN-v_) z1`)QE$E%P-83tLdjxtf18_u)njA$oKxdPo356mloTo$Ja+&-;OcJb7Bj+Lmm)#+TK4H&(%fP)N12Ok4nB});OkApp8xkWva{%m+o=(}7YJ8-tZIjJ9* zuelP^5uilWZ*wrbBfCSQkGJ8Po{g&}%V&#d$v-0)!{u4VF3yv_0%4icA<}%dZzDCf zaeVGw63A`vXYM_O;yaU4mliTEM>SlGqb-J`7Py`CC^_VFa@n2w=g zXrW~63M@`aoIv6}x}rJJ`*BESNM$`MA3v+8xi5o5rCV)dce0)M_#NOkQi)F_yd^4C z;*$vAR%g}vWEHE#r|5@!$6iB5bjhYlyn`4cPUnK1bA2?J`%BUI89CwDH-~u!r(QJi zAUX9mGCEFuNFi}bu6f6+6C&MT{UDZxeMr$-T^V|A8%lc~Y%J^HNQAJjZ|yuHpq#qHFbZ>ou##cwW+)K>!|^u9W@Cr{H*^a>x2kCLtL|d4xlD6Sceb z*=8-5d(w4>WKgM@%u3$->uLCU7_xwzqL4xMWy4@-APBB>ILbuPwnqIXXV59!x*)|_ ze*7Ei$T?ZstI%LoE^|fYNolA|B{`EqHeTl=;)fFJZ%?0VuaIePBaG=Nz6O65$wTqk zJV#k}JxrRhFfT{WQ2QJrdqCYuYAgffmiJ@h+dk#@5m*RU$xMG3*(diaC0{5xmuS{1 z8@op;F5ZY^`H(!Y^&!v*#1j4^Di96ldKmM`mfsa>%zT zwX?`=#Cx?E(sf6L?FiiBQzYNUHNMkZ;uK}s2oGg2A`uw&)Xv47j7d2bM1#fy<;tnu zg#mpsex%UqbZxxQ4f%jb(hqx9mF__aS@p=f1W z86tY+Z9j7ITGTfZ7nRGj(t|38+%8d{Vh>$kw_LuygO$4hJRdLmQu6W4zKJ>tx+10{ zK8z16thfg893QC17tzi^xvI}k40G@M>iA+sAV7~a0k}kOCA!@PAJr|p(w9vvkDD_w z40yRN#^;Lnh55UvkctsYhUL?l90(Vk>qN*N1$5iL+y=cBs_E!=X_TA|bT9Qk(e z;bb-#N_PWw?)eNb=~mq=Hr<`eb{xmJd5LFFtI-MnkhrOh$fE^_cwHJ{0V0@CxEvNB z;tgqp1%xNoPJr|>;C9koiVcqONjlr?=>i3iTM7)aJzARzDNt%;1zb5>Zt51m)#bm#N+sG3v_6=7Gi8=U z=a*n!7%Pnp#*ae3Ef0!DiyhtY_eltcFOh5TI+FJ9DDA#3ek=%9yYFFq84-Ji$4b|g z_w-~6_l%4UE{+^6ERN&$;P`UDT)TXLkH1`J*YFQ*5@Unl$2<18J?E`*FgC~r;ggxy zWof%1Q+t<4W4Ps$_oes>0M*nihHq2~cN>c3-PdN<2+)QV+qZn}5^{pIHv3Pok%KTl zps(1b?#b!WmWd{}6%jE~={ah|EcYJeX1}N&^pY?^rGyDyL^~zhx&cU6f|Q+o&IN7v zHhBJWSNu5P%#FEM@w?LRCtDtj50V-Lo%?8=fG-=S?_butzKWv&KT7xC%AILBTry2o zP$hIsw+V>RV9rU_FJZsMr?a3~@Fg}gPWNp+AjB|eTr&Kgvq4@qC zoj-?!gVlJu$m1SM&eQ&cBHcsh79}X%Q|BQ-DqaPqr@(@#Zxn91lg?whr*O+_6_nN~ z+;Tuc>6^kW_`OOUX_`X(csLkLz0EM&uYwAlvR~y~oQmly;HT_Ysi{*7@e@=;3!!gP zgmhJj)McC97rq;R~JB1I!c`-#A)C#QB(((%lVq54**pbJue{v0Uj z@AfqY3Ue#1BnOHqM;=sv{=C9Z9s+Zd%>YxS{W)_ZLvO}@>>dO^j_IP>N8jn)lpGNZ zO?e`6HCq0q`EkaQpbpLt%m1MG;UITM%7gO5u!A23eQz|K2i!%gPETMsJPA&>h6}nL zO_vZmM=+*Lxez~`C~wo3f@er6nQWPjgn0)|Sp@lnS0qTNm1!7;`#r6PWhX$kzEI1^Z`JHc=W6{EUh%H#VaR-K;3S ziE`XuqaXVWh}@G>$C_O&Dl{IfbJH(hnxn1<&$_ZVYoWaXCrIb5Mzo%OO??C!l2IPW zcNPt6)2%R5AaanT(!rC)4i0dclBRwE;^)u@`PmH^4DH8CyWmA&bQ|reU=kjqgr}3K zo}8%!EBmm6l|A-gWglu~p-cT0{S#d8bfZQ~XS(f0ZqSlU(O8bs6iq`hv`bJB9$E&; z;qJ|62p8*k5*aK10~0y-;`z7>QqtL#v%qeH^3FTd0L5e;7@fB(Y+O&DikTcu*3eX( zyjrUt(}m}OP-6I|bJ=+V)TdbewAF(YF!!aC&}^{o)rzhHl$YfB3Sh%=IVeSG>+qBe zQI^x0cI{ri6K#b>8dJS^6qB1F${`JftVC7gy-Ln{4_;h&j}i{>K}5lLVPVB~xf#&U zCVH!(*Q+smKP-KZZvj|7lhYgBOnSFWj>cz_9q{=QQmg*G3wHm50jo?7?6U;6!k5T> ztJ|pcbpT5(Kbyq(Qs|``>4fCT67*C+K8}DS&mjw*$BWo}_FM%A)6|cV$~WZVTNO*l zriT-pW@JodWag7TVe&lEbWlbUK@Co-16SpKt3~_S?jtn)mIp>r-7JEqcOQCGKM5d4 zcxkBQ`9Kn4hUE)Xmf_Qh|$`c_OYcsE%i?XLl~h0Y`-BqBup z(4ri8US9;DEddZ;Okn!0+-pCyP`_F}{MQTHAKEt^w03kcK3I-d=xFj-a|U?Augpov z4w1=i!pC3c!euF{D@$`oa8S~|wdJoF)(Odvnf>Fw^%ys)+rePjWxAOj#gZJ^!?6=fd;fQ%Ld6}xP4(A)ji~GxoCq|uxPqOfm z>6Jn-2@biw4-U>u&p0R7S?P-u)L1UjM0MtkiK~`% zQbKM%m#SRx`;NgNxUq|ShNHeAQJ5D`C#OfY@D-L7PoRqqHRD+7s5fpRz8~?oZ)jOZ z(DqNeX5zK{+6BJ*cQniFb34F0RH;oGm+4#0Sdz1E9uPYm>8AQ;omIw zSa45xslI7qd{XAZ&0>coMd2Q|mFSto15hokj~t5IIQ{3aBmK-MJUWm_DoOe#z3pq_@xoQ##e=J zmTH(hFB;m-MYvfqXI$}qR8ggAY!6Pl23se{Gb(byol+HN*Ld}I20jH z!qzW0BKR7HeLpSjX?*44P-Roi>}>CsLws&rX>kv%5R2ae=a-zgK7qm5MitA~J0zTL zQ=c>;Hzb_VP3W1=7UnfJc4xnOOK*=AeuZEY_>I`uQHxgrrVE%Cz=5>Pkp$7}|!%M+@vcddF7v}YX z`Oyap^X{c!CI<6Qx-f4L%#UR-Poj;OD=cm!ylyxHHn|oVE?bjir?5xdyX#8E!;^u7 zy?-z`o5Ou-1>mR|GB~5|y_kI55Hk5L>Kk;y(+>`7GTbNb1551BV2!zVE=l-=2PQwr z4q!dw;IOuY`^0r%iR~GzW$wMmtskFsz_c%wE*{Ju99A6e6SsjSc4x4dQOVl1d8UM{R7^w?d=U0qa@t%IoBJUe*N7r^3rcGa?<}`VdSOVVC1Cz!NSN(x53Cs z_k)Fzmu7>Jljg1MPr=;%QZ-Y*a>qQ@=wRn5xyR!l|9F2`bJa$L`yO`ibLvSO?_PK7 zDd^^%JEWjprZj2Wwrx8$b{`qQZk04@0E9DCm{693v!)jD-8cVI!1GDn!r;3jcN#Tc z_$&9_CsNXfaBxVSS(yI@L{Cnaw-n~TCGv^+W^WAp2)?cqZ9T965h^srud>>B^&617 z8Tn?I`z6yYG;yQzpCmFPRbFPK%BmSD>j=!>eywM6p9Xk$6G8qK0Pery8XdoQGlie9 z*q#RHqj{ss>s+f0WtVh4@|y0^|<_vU)!C;hk z(dGNx!Sj8-n-55D5u~13vf4)rTxuZ4buOcNg`_M6&iqG6yjDd&mmzy5$R>1|6bW*? zRXK7q?Hv1UH_MSaV^p=^Iy-n}!CFsA-Amy(+=b@i^kt&;qhwYiJ8sMo0@0ac4#rmN z=?{XfmTwA^EIBk=yZLf#olF*S$nq`0p&a|YMQS~vhjrc}Rf0+GgJ+#9*~?Cg>tmbU z+JZ^ik&M!R3&Cc%2q)#|UMvrIbOv?IsMN5FP&A&w_@JZw5*eG^>noe1Gx&Ie!O7{u zmO{0p`=F}BT#n)H+x!x5Bk3EFpO+-z%X3>TM%_k>igR<+N^WOG#n#^T)CR{xmlA3J z0N<3}?NW4VvN~SwOLJviTE(Tg?9m{lcT(D=4W)IWhuA8TPg{Nay$FLg`qYbjAK(k% z`o^f*C~`Q$hgTNa&*8(XifsS);rgBAo;7<{~AwAoZt zLs4?)4mOBdsi>8T!qw0kTuId6DjwYYg^Y^-L&YGtMf@)&e?|=)B%l8dZE4=7ojdJw zQTul$Um__8S0-P!-$rtuewS)t^9n_pE!;tmO1`3eL30@q^WT>kx`;5r*8qU{vQY}O&&KBgDYV{8{0U*xW2#mbeTTq&;T zIxApvsH>gHq!uX^VoXf#cad%dDe8-Kslm*1=~_Ah;KW1=E90Z%V=?Oz=y<(GW9>(%!@fb4 zEz5}<4$i@i?|SDuchr`vQFlel_wre~Fj`hIiA0vvyYAT;MZ0Y~m+jT8jpxuEktjl`BfbF{L{W9q|BiU^}<@I+cnF4n%Uw857EjxU%-Y(v6PlUR$Q>c9yn9?erSom z1@Gy`J+a3Qu`^G(n%XjF*@q;*J1*T_V+f3f&E{p%F?g1Zfi`IQZ7T+_TC!4Z*T)`< z8V<|xx2a3*zGE-Xvre`55vNW^T`My1$s?^hJU>B3#^@ohBo2rP&?K>wsGU(#GXK}| zA1{+_?Py*%=+JOASN52EJ!_V+tUqaYF6lyFs}X4#A4#;kmOE_ zQW*qOnHv!1=+@QRn8Rgslu5u@&7+;W3I6tv<5Ww z0Ku|KvL@UBd*l_{!~f=7pQY@yoNJ*<^P0X?Hxi|(56fH9wBhBuoOtr3J2bZ^oM zSE?5jAKUf3`XyM=fQ;9rK{i6HKvS*3mX?9R@?vJvX7+;Lyq~(@ObMjYowy@NY8C=W^oEgQm zzz32)2VhVvCg0;X`M$l>lOO1p@godQ!-l`r_f;_Qc6B@@Xykp}e=2{*?bi+y^0;Yy0LK8JW zs7W9s0SqC5P-1!r&8GL>6XgH*cg}O~+?id;e)H!2{P!cxz4xi-InQ~{bIy6r^E|87 zvg#y%)Cqlc5nL+Le6*T$5ViM5c)U6=LB7-J;7g3vTr`;BRB%s#ENO!HERnORL^6Dk zFgdJRa;b!}aIrdsT9fS}5&Am44+zr;7yAp0nuDm4 z3m3{Y747^OeTvYIFaOL2R!&WZ57jKp4g{Ws*{Rvd&2zIYU0(TsD4BnF(t7x%TvFNK zYRo1VR&PvkP^fdM@OZMx;5QHec_RN7w7@yZw`MetpX3(n@NMy2J{@kfOj?Iy3Gpn+ zE*{mXR=G~Te#vB`e#sQuc&e97kMlEI9gEYike4)j_B1XbsAAvwEhT&Q)Gryoq&f&o zV6Mtw35vUNHP^nC`VhioGm)t3tFq}=N$ZZ1&r=V0Xs~(?>l-p~;x~zFmy?a_A<`t3 z4sFHs5-%WQ1lRkYB^<^lW`Uco45I_DZSz3X7Gg2Y!)rh>8xL_q8|y0|&m~1ExA#m7 z_Dc3O0LB@`eVb+|@=Gv3+t`z$yx7{=RCEEn=V{(nvk&RMDy{@Jn=vB`%O|5Y&E1E)mfKLpCqxQ(w>{vyDwqz;!99m~X zRCP*#8XVS1~ zwhTt)=3=4@mzKi1!5}R9ti7he&{V3>qf23kT8|Q&!N=;sWHMe1K|6Y0xy<&Ile%P> zT69(|ik@Mxo1&2mFE?R}$c=(!VMJl8iz$k^{(m5*OfKV^*tWI$mjva8p89 z#u~NAY3N`QTq!nqE@X;3tdL4_lOQMSmrQ~r#Uyy-f}rR^LN1KHQUaLV5a?#Prl;t( zlFbsWW)~;F(`&BogiVq=@R)ALiMi_8OzuWSw_f0=w>Ft_0j9we?2-pJOWH&{v(|3~ z)AfufJFVH-otv33C?7FIn=tjjsNydeRXk#L9fht-2IWof8_wc&BbaHnFDj8Z<(1%z zFw%(A@M~rc?bQ1pQJX^oN47&Q9hGa z$tud(Iz^upTFb1h-|kH|UV(&mOz^L9@p- zXSc)ZlkE>rjzcQjLFLV)l^m1oaH;I{N^-ibJItPu9Gjfsq8C@>Z0D}Z?aB7!I2W~U zncQ;uy{pt)suXXtWIowc3fVk!LNafNyPT&w&=yUS&B+PLCPBYaVLI^$k)|a#`YvRncvA|fh%5hbp!&^?3u}#p&O7cqht%ESb1BM6Z6+w zsAvmJldZ|t^y}bq_7q-k;jfFlrvBPaZjpyB@ft#xY0uT?B&Q@xmn4hH;wAepo!yo! zC2f5zU$Q^hcFF9i#4hW*?cb**r&<@DwJABxUy|h13 zgS=6EuC|CEP{?`m1)e}#vx&N*d%Jntx+6VAGlb55bVOgh5}jCp@Z2G5yto-b%38^tOd!j_Aq8Si1Q2~dp_^%3uy_KYFh+*i5c@59LR$-;0O~NEjp;62oTp*_`ut}6i`M!M9!sFh55Q+;PZq~kfYxiB&({B-N z<&e}=NWg*rRHI+TQS?ku-u)waRdOWxhdH9EUhV%2kEp_l3zU!fiM6??vQ)45R!l0; zHJE(#1qGsr9;lop2xluBQ4F-ARtE1&q?6#OXZCG?l8H;_kTQ5Z@R4c=`k+z-seMGq zS`J`vCmt8QUeUc3kjv6q?|(!jvT*+$A>dzi{8pSkoOj(LerqzCnvi{$ zkYd~R@ej+gkm78mkk?E0J$?+PonQvIOgGw9QYn{~M%hLwazsyE%3LsCdQeF~U%FSh zfQt~uOOb;DP|(Wh_N|i6u3sA5p48M#DyB;BwE7|tbC+uRYux)iAu`IqLwBKhN8NLT zP}p6)&jK1(qN81`MxXtU3Y|uAa&179MjM>yS*T{GKy~^irl+!cA}evMh?7gCG+y4_ zqsq`2lZpN(EG5(-g71HfFGNi1xR3Lmcii;h`rcJLE+OXJl^rHC9@ljmTxFuj�?J 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

4CRlV@e_z)puUjc(=*Z~rcCH+ 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 OIp)~^|M`Cp1OFQuN8=U% diff --git a/Packages/com.opsive.graphdesigner/Editor/Opsive.GraphDesigner.Editor.dll.meta b/Packages/com.opsive.graphdesigner/Editor/Opsive.GraphDesigner.Editor.dll.meta deleted file mode 100644 index c1181f43..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Opsive.GraphDesigner.Editor.dll.meta +++ /dev/null @@ -1,70 +0,0 @@ -fileFormatVersion: 2 -guid: 4648d54cfacda1346a5a800d1816ece6 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: - - GRAPH_DESIGNER - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles.meta b/Packages/com.opsive.graphdesigner/Editor/Styles.meta deleted file mode 100644 index 9975b96e..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0b3d77a10c6c33945b5042087cb0446c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles/ElementResizerStyles.uss b/Packages/com.opsive.graphdesigner/Editor/Styles/ElementResizerStyles.uss deleted file mode 100644 index 4faa745b..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles/ElementResizerStyles.uss +++ /dev/null @@ -1,84 +0,0 @@ -ResizableElement -{ - position:absolute; - top: 0; - bottom: 0; - right: 0; - left: 0; - flex-direction: row; - align-items: stretch; -} - -ResizableElement #right -{ - width: 4px; - flex-direction: column; - align-items: stretch; -} - -ResizableElement #left -{ - width: 8px; - flex-direction: column; - align-items: stretch; -} - -ResizableElement #middle -{ - flex:1 0 auto; - flex-direction: column; - align-items: stretch; -} - -ResizableElement #left #top-left-resize -{ - height: 12px; - cursor: resize-up-left; -} - -ResizableElement #left #left-resize -{ - flex:1 0 auto; - cursor: resize-horizontal; -} - -ResizableElement #left #bottom-left-resize -{ - height: 12px; - cursor: resize-up-right; -} - -ResizableElement #middle #top-resize -{ - height: 12px; - cursor: resize-vertical; -} - -ResizableElement #middle #middle-center -{ - flex:1 0 auto; -} - -ResizableElement #middle #bottom-resize -{ - height: 12px; - cursor: resize-vertical; -} - -ResizableElement #right #top-right-resize -{ - height: 12px; - cursor: resize-up-right; -} - -ResizableElement #right #right-resize -{ - flex:1 0 auto; - cursor: resize-horizontal; -} - -ResizableElement #right #bottom-right-resize -{ - height: 12px; - cursor: resize-up-left; -} diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles/ElementResizerStyles.uss.meta b/Packages/com.opsive.graphdesigner/Editor/Styles/ElementResizerStyles.uss.meta deleted file mode 100644 index dbd44f5f..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles/ElementResizerStyles.uss.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b89241537d9d3fb429f02a07292aace3 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles/GraphWindowStyles.uss b/Packages/com.opsive.graphdesigner/Editor/Styles/GraphWindowStyles.uss deleted file mode 100644 index 0ec58ae3..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles/GraphWindowStyles.uss +++ /dev/null @@ -1,196 +0,0 @@ -#panel -{ - width: 250px; - min-width: 225px; - max-width: 400px; -} - -.background-light -{ - background-color: rgb(194, 194, 194); -} - -.background-dark -{ - background-color: rgb(56, 56, 56); -} - -.panel-inspector -{ - flex-grow: 1; - overflow: hidden; -} - -.horizontal-resize -{ - width: 5px; - flex-direction: column; - cursor: resize-horizontal; -} - -.vertical-resize -{ - cursor: resize-vertical; -} - -#status-label -{ - font-size: 22px; - margin-top: 5px; - margin-left: 6px; - -unity-font-style: bold; -} - -.status-label-light -{ - color: rgba(210, 210, 210, 0.90); -} - -#status-toolbar -{ - border-top-width: 1px; - border-top-color: rgba(1, 1, 1, 0.2); - height: 18px; -} - -.status-toolbar-light -{ - border-top-color: rgba(153, 153, 153, 255); -} - -.status-toolbar-dark -{ - border-top-color: rgba(35, 35, 35, 255); -} - -#find-overlay -{ - position: Absolute; - width: 300px; - margin-top: 2px; - border-width: 0px 1px 1px 1px; - border-radius: 0px 0px 4px 4px; -} - -.find-overlay-light -{ - border-color: rgba(153, 153, 153, 255); -} - -.find-overlay-dark -{ - border-color: rgba(35, 35, 35, 255); -} - -#toolbar-button -{ - border-width: 0px 1px 0px 1px; - background-color: rgba(0, 0, 0, 0); - border-radius: 0px; - margin-top: 0px; - margin-bottom: 0px; -} - -#toolbar-dropdown -{ - border-width: 0px 1px 0px 1px; - margin-left: 3px; - margin-right: 3px; - padding-left: 6px; - padding-right: 6px; -} - -.toolbar-dropdown-dark -{ - border-color: rgba(48, 48, 48, 1); -} - -.toolbar-dropdown-light -{ - border-color: rgba(173, 173, 173, 1); -} - -#split-primary-button -{ - padding-right: 18px; -} - -#split-dropdown-button -{ - margin-left: -22px; -} - -#node-description -{ - position: Absolute; - overflow: hidden; - left: 10px; - bottom: 10px; - width: 450px; - min-height: 25px; - max-height: 200px; - padding: 2px 2px 2px 2px; - border-width: 1px 1px 1px 1px; - border-radius: 6px 6px 6px 6px; - border-color: rgba(0, 0, 0, 0.5); -} - -.node-description-dark -{ - background-color: rgba(15, 15, 15, 0.75); -} - -.node-description-light -{ - background-color: rgba(230, 230, 230, 0.75); -} - -#node-description-label -{ - font-size: 14px; - white-space: normal; - -unity-text-align: upper-center; -} - -#lock-button -{ - position: Absolute; - right: 0; - background-color: rgba(0, 0, 0, 0); - border-color: rgba(0, 0, 0, 0); - margin-top: 3px; - margin-bottom: 0px; - width: 14px; - height: 14px; -} - -/* SharedVariables Elements Styling */ -.grouped-highlight-dark -{ - background-color: rgba(0, 0, 0, 0.4); -} - -.grouped-highlight-light -{ - background-color: rgba(0, 0, 0, 0.2); -} - -.shared-variable-group -{ - background-color: rgba(0, 0, 0, 0.1); -} - -.shared-variable-list-element-dark .shared-variable-group -{ - background-color: rgba(0, 0, 0, 0.2); -} - -.shared-variable-group-member -{ - background-color: rgba(0, 0, 0, 0.05); -} - -.shared-variable-list-element-dark .shared-variable-group-member -{ - background-color: rgba(0, 0, 0, 0.1); -} diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles/GraphWindowStyles.uss.meta b/Packages/com.opsive.graphdesigner/Editor/Styles/GraphWindowStyles.uss.meta deleted file mode 100644 index 2e2d9adb..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles/GraphWindowStyles.uss.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 9c1d6fe000d116b47afa1cbd72114731 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles/GroupStyles.uss b/Packages/com.opsive.graphdesigner/Editor/Styles/GroupStyles.uss deleted file mode 100644 index 656f30e2..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles/GroupStyles.uss +++ /dev/null @@ -1,82 +0,0 @@ - -NodeGroup -{ - position: absolute; -} - -#selection-container -{ - align-self: stretch; - flex-grow: 1; - border-width: 1px 1px 1px 1px; - border-radius: 3px 3px 3px 3px; -} - -#group-container -{ - align-self: stretch; - flex-grow: 1; - width: 100%; - border-width: 2px; - border-radius: 4px; - border-color: rgba(25, 25, 25, 1); - background-color: rgba(76, 76, 76, 0.8); -} - -#header-container -{ - background-color: rgba(60, 60, 60, 0.9); - border-bottom-width: 1px; - border-bottom-color: rgba(40, 40, 40, 1); - padding: 1px 4px; - margin-bottom: 2px; - border-top-left-radius: 2px; - border-top-right-radius: 2px; -} - -#title -{ - -unity-font-style: bold; - font-size: 15px; - min-height: 20px; - margin: 0; - padding: 0; -} - -.title-label-light -{ - color: rgba(218, 218, 218, 1) -} - -#description -{ - white-space: normal; - flex-grow: 1; - padding: 2px; -} - -.description-light -{ - color: rgba(218, 218, 218, 1) -} - -.hover -{ - border-color: rgba(68, 192, 255, 0.5); -} - -.selected -{ - border-color: rgba(68, 192, 255, 0.9); -} - -#selection-border -{ - border-radius: 8px; - margin: -2px; - position:absolute; - top: 0; - bottom: 0; - right: 0; - left: 0; -} diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles/GroupStyles.uss.meta b/Packages/com.opsive.graphdesigner/Editor/Styles/GroupStyles.uss.meta deleted file mode 100644 index 99643fdc..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles/GroupStyles.uss.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 47473adfa44c37444b59bc44b0e4ed3a -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles/NodeStyles.uss b/Packages/com.opsive.graphdesigner/Editor/Styles/NodeStyles.uss deleted file mode 100644 index e5eda13a..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles/NodeStyles.uss +++ /dev/null @@ -1,119 +0,0 @@ -LogicNode -{ - max-width: 250px; -} - -EventNode -{ - max-width: 250px; -} - -#selection-container -{ - align-self: stretch; - flex-grow: 1; - border-width: 1px 1px 1px 1px; - border-radius: 4px 4px 4px 4px; -} - -.hover -{ - border-color: rgba(68, 192, 255, 0.5); -} - -.selected -{ - border-color: rgba(68, 192, 255, 0.9); -} - -#node-container -{ - align-self: stretch; - flex-grow: 1; - border-width: 1px 1px 1px 1px; - border-radius: 3px 3px 3px 3px; -} - -.tree-node-container -{ - padding-top: 8px; - padding-bottom: 8px; -} - -#title-container -{ - flex-grow: 1; - justify-content: center; - align-items: center; -} - -.graph-logic-title-container -{ - border-bottom-color: rgba(26, 26, 26, 1); - border-bottom-width: 1px; - margin-top: 2px; - padding-bottom: 2px; - background-color: rgba(0, 0, 0, 0.2); -} - -.graph-event-title-container -{ - margin-top: 4px; -} - -#title-label -{ - font-size: 14px; - padding-left: 2px; - padding-right: 2px; - overflow: hidden; -} - -#node-contents -{ - padding: 3px 3px 2px 3px; -} - -#icon -{ - width: 42px; - height: 42px; - margin-bottom: 4px; -} - -#small-icon -{ - width: 30px; - height: 30px; -} - -CommentElement -{ - padding: 4px 4px 4px 4px; - border-width: 1px 1px 1px 1px; - border-radius: 4px 4px 4px 4px; - border-color: rgba(0, 0, 0, 1); - max-width: 200px; - align-items: center; - overflow: hidden; - -unity-text-align: upper-center; -} - -.comment-element-dark -{ - background-color: rgba(30, 30, 30, 0.7); -} - -.comment-element-light -{ - background-color: rgba(196, 196, 196, 0.7); -} - -#node-error-indicator -{ - position: absolute; - top: -8px; - right: -8px; - background-color: rgba(0, 0, 0, 0); - border-color: rgba(0, 0, 0, 0); -} \ No newline at end of file diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles/NodeStyles.uss.meta b/Packages/com.opsive.graphdesigner/Editor/Styles/NodeStyles.uss.meta deleted file mode 100644 index 73171c93..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles/NodeStyles.uss.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 79123a21d23d3484f99b8240f6b3f8c5 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles/SlotStyles.uss b/Packages/com.opsive.graphdesigner/Editor/Styles/SlotStyles.uss deleted file mode 100644 index 9a621a27..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles/SlotStyles.uss +++ /dev/null @@ -1,116 +0,0 @@ -DoubleVerticalSlot -{ - position: absolute; - left: 0; - top: 22px; - right: 0; - bottom: 0; - flex-direction: row; -} - -.horizontal-slot -{ - position: absolute; - align-items: center; - align-self: center; - width: 42px; - height: 14px; -} - -.vertical-slot -{ - position: absolute; - align-items: center; - align-self: center; - width: 14px; - height: 34px; -} - -#horizontal-output-slot -{ - bottom: 2px; - margin-bottom:-3px; - padding-top:4px -} - -#horizontal-input-slot -{ - padding-top: 2px; - margin-top: -1px; -} - -#horizontal-slot-container -{ - width: 34px; - height: 8px; - align-items: center; -} - -#vertical-output-slot -{ - right: 0px; - margin-right:-2px; - padding-right:3px; -} - -#vertical-input-slot -{ - left: 0px; - padding-left: 3px; - margin-left: -2px; -} - -#vertical-slot-container -{ - width: 8px; - height: 18px; - align-items: center; - margin-top: 8px; -} - -.horizontal-input-slot-container -{ - border-width: 0px 1px 1px 1px; - border-radius: 0px 0px 4px 4px; -} - -.horizontal-output-slot-container -{ - border-width: 1px 1px 0px 1px; - border-radius: 4px 4px 0px 0px; -} - -.vertical-input-slot-container -{ - border-width: 1px 1px 1px 0px; - border-radius: 0px 4px 4px 0px; -} - -.vertical-output-slot-container -{ - border-width: 1px 0px 1px 1px; - border-radius: 4px 0px 0px 4px; -} - -.valid-slot -{ - border-color: rgba(25, 25, 25, 1); - background-color: rgba(108, 108, 108, 0.8); -} - -.invalid-slot -{ - border-color: rgba(25, 25, 25, 1); - background-color: rgba(108, 108, 108, 0.3); -} - -.slot-container-highlight -{ - background-color: rgba(138, 138, 138, 0.95); -} - -#collapsed-icon -{ - position: absolute; - top: 6px; -} \ No newline at end of file diff --git a/Packages/com.opsive.graphdesigner/Editor/Styles/SlotStyles.uss.meta b/Packages/com.opsive.graphdesigner/Editor/Styles/SlotStyles.uss.meta deleted file mode 100644 index f995d305..00000000 --- a/Packages/com.opsive.graphdesigner/Editor/Styles/SlotStyles.uss.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: cb51b84bf5a700b43a87507880638d70 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.opsive.graphdesigner/Runtime.meta b/Packages/com.opsive.graphdesigner/Runtime.meta deleted file mode 100644 index adf673d8..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4e5df7769b02e514e913a26d8b6fa296 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Runtime/Opsive.GraphDesigner.Runtime.dll b/Packages/com.opsive.graphdesigner/Runtime/Opsive.GraphDesigner.Runtime.dll deleted file mode 100644 index 41d5569eae8629416111782d177b0bf9d3de180e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31232 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 diff --git a/Packages/com.opsive.graphdesigner/Runtime/Opsive.GraphDesigner.Runtime.dll.meta b/Packages/com.opsive.graphdesigner/Runtime/Opsive.GraphDesigner.Runtime.dll.meta deleted file mode 100644 index e6492218..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime/Opsive.GraphDesigner.Runtime.dll.meta +++ /dev/null @@ -1,70 +0,0 @@ -fileFormatVersion: 2 -guid: 4f899e1eda8fcfa48934476840ae43f2 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: - - GRAPH_DESIGNER - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 0 - Exclude OSXUniversal: 0 - Exclude Win: 0 - Exclude Win64: 0 - - first: - Any: - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Standalone: Linux64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Runtime/Wrappers.meta b/Packages/com.opsive.graphdesigner/Runtime/Wrappers.meta deleted file mode 100644 index 4e9b0f86..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime/Wrappers.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7036bd273b0de77498abe37a9540fd35 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/GameObjectSharedVariables.cs b/Packages/com.opsive.graphdesigner/Runtime/Wrappers/GameObjectSharedVariables.cs deleted file mode 100644 index 97d50947..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/GameObjectSharedVariables.cs +++ /dev/null @@ -1,16 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Graph Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.GraphDesigner.Runtime.Wrappers -{ - ///

- /// Wrapper for the GameObject Shared Variables component. - /// - public class GameObjectSharedVariables : Runtime.Variables.GameObjectSharedVariables - { - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/GameObjectSharedVariables.cs.meta b/Packages/com.opsive.graphdesigner/Runtime/Wrappers/GameObjectSharedVariables.cs.meta deleted file mode 100644 index c0b497c7..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/GameObjectSharedVariables.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0b02b4aaf7aa44843b836f6e31da7d39 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/Opsive.GraphDesigner.Runtime.Wrappers.asmdef b/Packages/com.opsive.graphdesigner/Runtime/Wrappers/Opsive.GraphDesigner.Runtime.Wrappers.asmdef deleted file mode 100644 index eea12c8b..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/Opsive.GraphDesigner.Runtime.Wrappers.asmdef +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "Opsive.GraphDesigner.Runtime.Wrappers", - "rootNamespace": "", - "references": [ - "GUID:e9319bc8ab9315745bdf80aeffa01d6d" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": true, - "precompiledReferences": [ - "Opsive.GraphDesigner.Runtime.dll" - ], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/Opsive.GraphDesigner.Runtime.Wrappers.asmdef.meta b/Packages/com.opsive.graphdesigner/Runtime/Wrappers/Opsive.GraphDesigner.Runtime.Wrappers.asmdef.meta deleted file mode 100644 index e4f7b4c4..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/Opsive.GraphDesigner.Runtime.Wrappers.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: bc40f46d7537e564caeff3c83ac95aa0 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/ProjectSharedVariables.cs b/Packages/com.opsive.graphdesigner/Runtime/Wrappers/ProjectSharedVariables.cs deleted file mode 100644 index d9ec5878..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/ProjectSharedVariables.cs +++ /dev/null @@ -1,16 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Graph Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.GraphDesigner.Runtime.Wrappers -{ - /// - /// Wrapper for the Project Shared Variables component. - /// - public class ProjectSharedVariables : Runtime.Variables.ProjectSharedVariables - { - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/ProjectSharedVariables.cs.meta b/Packages/com.opsive.graphdesigner/Runtime/Wrappers/ProjectSharedVariables.cs.meta deleted file mode 100644 index 2c7e39ae..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/ProjectSharedVariables.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2269736932fa70c46ab166dfef0ec61a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: -100 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/SceneSharedVariables.cs b/Packages/com.opsive.graphdesigner/Runtime/Wrappers/SceneSharedVariables.cs deleted file mode 100644 index d1a0cf45..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/SceneSharedVariables.cs +++ /dev/null @@ -1,16 +0,0 @@ -#if GRAPH_DESIGNER -/// --------------------------------------------- -/// Graph Designer -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.GraphDesigner.Runtime.Wrappers -{ - /// - /// Wrapper for the Scene Shared Variables component. - /// - public class SceneSharedVariables : Runtime.Variables.SceneSharedVariables - { - } -} -#endif \ No newline at end of file diff --git a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/SceneSharedVariables.cs.meta b/Packages/com.opsive.graphdesigner/Runtime/Wrappers/SceneSharedVariables.cs.meta deleted file mode 100644 index bed475bc..00000000 --- a/Packages/com.opsive.graphdesigner/Runtime/Wrappers/SceneSharedVariables.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 520af892e455a314a96c74d00ce80cde -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: -100 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.graphdesigner/package.json b/Packages/com.opsive.graphdesigner/package.json deleted file mode 100644 index f37ee049..00000000 --- a/Packages/com.opsive.graphdesigner/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "com.opsive.graphdesigner", - "version": "2.1.3", - "displayName": "Opsive Graph Designer", - "description": "Underying graph system used by Opsive assets.", - "documentationUrl": "https://opsive.com/", - "author": { - "name": "Opsive", - "email": "support@opsive.com", - "url": "https://opsive.com" - }, - "dependencies": { - "com.opsive.shared": "2.0.0" - } -} \ No newline at end of file diff --git a/Packages/com.opsive.graphdesigner/package.json.meta b/Packages/com.opsive.graphdesigner/package.json.meta deleted file mode 100644 index 3dfde879..00000000 --- a/Packages/com.opsive.graphdesigner/package.json.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 85f6ffb769ef0f24fb666d14032d1e24 -PackageManifestImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor.meta b/Packages/com.opsive.shared/Editor.meta deleted file mode 100644 index aef21717..00000000 --- a/Packages/com.opsive.shared/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f4eec642e3a3157478e8f25227b97d95 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons.meta b/Packages/com.opsive.shared/Editor/Icons.meta deleted file mode 100644 index c5d62a32..00000000 --- a/Packages/com.opsive.shared/Editor/Icons.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6b97d1b3df92c7f4bb0ef6961daa23ee -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/ActivateDarkIcon.png b/Packages/com.opsive.shared/Editor/Icons/ActivateDarkIcon.png deleted file mode 100644 index 624eee7b4e415f98a870423c273827f171e0ab75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1057 zcmbVLOKa3n7>(A7losk^VYNa?H;PV@n@KX0(6MGFi48clP6yhBh?(S0C$z~;liN;O zL`6huapOWRxpQ&y>%p4)R$$#juGV5;jGRjwPY(%t1`o;H(!Em>Cr?b0zSkxo%r)XtR@AfrK^&8y3H|k3xekgOxvlM@+4hC5u_zH zn{jvmXjx`~D9JK7MGHI-IG((628gO8t3rhBX0@1W`umYm0#7{#=fZ=GSG6SX#6YgHrM^1oN>e%E-j9~ zilw_nDlnaHl|ET)H4h9($3&zxe(rkPAZ>NQ(zR;xskX7XIo2al2Yc?l{G46wz5nXh z_YZfUKD_SUTo5J6T3Wxh`^uyK;zI8s{;P23BVQZ7wEk{&78V8weC_eHm4dZm!?nMRN=@ z*0gGMQZHRs3~Y0HXu}1zOVJE7mkC_mSVaUh(6Z&E*>A7kvcNLa>{6m6l-wLzu@*WW zs&*D@MrYNKO*V54%moT1uo2NgV7DA!3DRtzSE2K8n`c4agsi67K~VKl8RW2sK!S@! z4FN(RNgRwPBne&xq5wr+psy5#aU~%sViF7=mU{Edrc%)gLtk{2W>*Mt6`pUm+gv-w zVQ-m-vMh%jq8OzXQGeYbdJuK|*%5<=e8aO`Vqph_jCupFku*yq9i(8prP2|x;}3qulT;dMSEK z!^WD898%QMEIr{&%Ty9_OigMzHJ+5S`4ogHs3lW{6pX6^)MQNJI14}@#f>{4sEMyQB!Ndr^c^dFEf^4rpBJ^M8wBiTW7o5 zUwiNNzq~xiJl*Tz1!NmAN{;@?@>9jJ-rcoc47X< bjLJlAG2Mq}`16OE&9H5Y`9n&TCLN diff --git a/Packages/com.opsive.shared/Editor/Icons/ActivateLightIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/ActivateLightIcon.png.meta deleted file mode 100644 index 8b46b6c9..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/ActivateLightIcon.png.meta +++ /dev/null @@ -1,84 +0,0 @@ -fileFormatVersion: 2 -guid: e152e9061481aab429f2b07a70c12d2e -timeCreated: 1533758377 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/ActivityIndicator.png b/Packages/com.opsive.shared/Editor/Icons/ActivityIndicator.png deleted file mode 100644 index 9a333a0cf56def6414319fe2817641c4236353d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2393 zcmaJ@dpwhUAD%XN}%f?1~M=e$;$!zyn?9etgQcY2`4xSF9dL7b1 zJ*DIn2}|kVMNV(dsz)fPoOCE^jCYA;BSPylV;#2}$K+J$jxzRikPKt+p)5WRg^V>)m^czGR zg@^r>RFEGH>ctlVP!|U$d!{1_1;t<-P|hwG3*qMFgUa;^!o!- zMH8~vIDeA&_gJbG9u_GU3vfuJL?UsJI63fz5l9pki=Ed%qwQ4)dr=%u%#hmiMAi!m zBtXOzas*-yp9h^+WQ6l$#CVu0)4xjK3Vz7)MBk4|bzn#-Lx4m%IL?=}0QB?w|4=UX z2U;Zd2ma3Ye+rA}aRLD84~Y0NLZ+&5Z0q?@0-To+V2JrbI-eiCaEi1@zL+nH$Rt3>i3M2RLOvJztz;bM=ecKiE13Z=6g(_Q9kuX~jXi)=&M5If* zMz-&WrjwUu?P)J9Xi=2H)C}Jp^!U}BT7a6>oXg#OF!dfK1?3*;nTx90@=9;zuF3lu zQ(@uZN7p=xoS`H*t}$pc(*VPCB4ukg7zCM6Z54{X@#TN`;+C`jn60m@@QU3u4wQCR zer}u|tj9()*6Xp^Y?2cdelBF2X0cABVN;Lr%sah9hYz2cL4>{WTm@He1et_sPU&^% zB`mQzS~1qtL}P+eZr`NcE?l_Urm)w>hh zr^|Vn5=!zb5cP)i>e-v%&2=C9XMH*}qGi_ZArkc*_lA!S5AK!3>^oO2cb@nVW^_w~ zr@mF~dbysF!8o!&-)7{7r5dd&6E87n#s0~Il;y;IwJFq52RV)HN85VbztRD}KyEQJHTnQrQGZaDtTiwYGZ$BI>BU3p+b3!AXfaGS zw6F8!)SC(TU{G7+`(|y6B-auvlF@A=T+eX0TCY~E*FI(N3COx^&|~L;fuXz*oj2%= z+0~D=2P->igq`qz&ptV+@W@I9W$4@ccNPDdp1_C>810*4^R1d}UE;rk(XXU@7j4@4XnV9l4{E%qK^M2{`cq; z-gBEb=ZE-c8CB)SFh;6C9m`pd^8%AN@d-ose^1G6sW>!j@(NTx2be83u=4b6OdEgK zjW_=~M2gwd>pbUiyuuBvX3}^`9Q$?~?tzG@ab~|}*`^HY@8YiLJSVjTU2gXMB~Plg zcjez%e0m)@=3*Nie1-ls(r{Z-WDH0`A2 zWiariakZJ6HGu(V5I$&$Y-NeZ9#6~^<4)4iOS-Pkog+H1DTJBM!{ z(*#5EiuX(YL0>{YI(BtY2z8%aRhl-Z zi!p6W5w$bVFU_FzCBGC6898&9(D#L)@%KRY4bV#72owP=HMXx|DkS9C}lgNkRZ;5xRP!TLu$%W>l!x7nht z>NUeAo?s;yA@%~s=D69pII!#9hAu2bNb2Qwzl2njaZ)fgkD`Y@Te3JQzY~ufUI-YE^5%Bq0W}AZ6?WES(PzEIL2)F4u|vIg_TEJQlWrW*TlB_x@eTGAKt2*Q$9R86&{ z$|zUTOi9v|lw0v5YWX%!?YfEG5f>fEHOvrOl!Q$}*3t^7bqOU=mju9UDB$9<>pP?$ zT}rNJ6fMG`dlx(9ka%F2U&Gzc{y*a$ah?CknaG?Glj8WRSkf(4fys2Q^x0ysd9cqq zCSHrfGe}Nysz=GJ3$~lP(LscX!+xPW6&--!j`*L;V-rVffS&rl8 z>dUCf#`El3n3-n(Yt!OGHe8|AHeDk+ zao=!=FW4zYNc@noIc}+xgtoJZDd^(97nuBy!;d`hT$5i{8&V^z;DNWi8{xIxm6o%+ z>F6$Bx(k*Pg9-SU+92__g4jq*exz%#dAcp~U<9F?CO>wn-B<+`5@DbU`J5v`2sBNA zimGYw4v-}%ixPXa98?TdGvor8JUp`&xjmzaY7<**W%2_`LqimY!=W(D3nc1`P}lWT zLzZ(4k&AZ%YA3lMUd$8_j-AL0sYe2kD%xGLO--J8Iu5}P8;xV(Af6K6;B8ndR$g*l> zDPPS)O_pKCtp_o+0|#ezJ!W^pg{N|jN`!4nq81@rSp}>P2qp1=grKsfft%}I;F4i{ zE4`j^vkO>*U?dFO64w0z5cYIyx8CWS(=$Q4`6riY5CEa@Alh+z4sr^ ky}A9o(|Pqxy~r(exQ)-3FZFLMpG}*yUR^=&%AIGw0WnxSLI3~& diff --git a/Packages/com.opsive.shared/Editor/Icons/AddLightIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/AddLightIcon.png.meta deleted file mode 100644 index cf4d8fdd..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/AddLightIcon.png.meta +++ /dev/null @@ -1,84 +0,0 @@ -fileFormatVersion: 2 -guid: aff49c3d1ef455d488b96b6ed77550b0 -timeCreated: 1533758377 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/BackNavigation.png b/Packages/com.opsive.shared/Editor/Icons/BackNavigation.png deleted file mode 100644 index e38598433f351e4689651a3438e4b032ff52149c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmaJ=U2D@&7|xiEZ8)fdU2F_?%qFPVq-mSXWQ$wZw60)A=?d$WEKN?^&?P4(XExi_ zwyO@t7>Yl@3$FzKfEVsc@IrKm9~1FHQSeGZ5CmbKbZzH_H6%G7JkRsK=Y5~Eon5## z&_B{oQPeU-yS`tfoaI}60b&7CkZR&{JIMl z*BA2odQ}$W7Gfx8T%5iZI`$SZ`oxWo%mbP_ZlnnZJrl9W@@%~)h5(-n*ziDhfG8dHlg z$St#+D2jnbG#Vy|u(xJo%@5n&cuPTnp6;3sHjxbiMXiWdu}qUpkB?wEZCTrEmWdRM z^)-j(m`HG>7Eo3H54Ef|+QT_`lJ7r-z5JR3*&OuHs;iU6mBxcmj+AtvhLM{`Xr)!f zYz1NDRgeRcivqZ?WZDL*c^4aaRh2Tfhc#P=8AYav0%Mwn#HS+hxDw|@o=b6DDsd$d zNv9H%se~ZTCB(^ei>n}g)q*x|ag7tM(2*Nh!E#7s1-j-fXrx_afyR*~vvV%7j(Sb5 z(K(lRM=nc}VS~p0)#%n1aZfO9+myGv~S;M~**xe{(hN#y-^#otFqGu`Jm zwm0WCUQy|E`po--LvgJB{LbgCpS!!iW-oQs*}WC&_LtLlhlaK%hG*wvH@fQwJ1?ms z|H<3zy8m_m?8wKy?3=w3_2O`>&YvoS!D{b^%EXhmWG1zsJe*tJ`UAXeL^S{a diff --git a/Packages/com.opsive.shared/Editor/Icons/BackNavigation.png.meta b/Packages/com.opsive.shared/Editor/Icons/BackNavigation.png.meta deleted file mode 100644 index b4c81185..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/BackNavigation.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 3c5f9b1c17b6a9240944ce0b6ff21af6 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/DeleteDarkIcon.png b/Packages/com.opsive.shared/Editor/Icons/DeleteDarkIcon.png deleted file mode 100644 index ada25b48e32711232f1274aba0b9ed0c20a0eae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1068 zcmbVLJxtV49Iv7T2_z_qfn#aPf{|L9 zcDX_-#aY$F4sS#lK6E_FW|)b|&@;?cMA#}?vE3~9_0?;RwXH0-C>0Y$FNf;(%%+bP zHs{Lb=BlY!+~hTOB2=k>gNVU~&YByjVU}y^s&pQ03mn^okku^La;j3CXLHy`ti-3{ zW&!|KmU$pbvJA%AWCA3G1byW=5LHQ5lWDg7aMYS_)zlK4YTKf#ELSJQQw5>XXz+~` zkNp(^D2ftkB$IK9hzA=kF~YbTjCK?t3QXVjh>cw~QZ%Y~on$%cX)6TBD;AH1-JqQ) znld3YJOS_t!EvIvn&^O(&>uHWLH|h=Frk7%@ zL2Rx&$R!1s<>(1-*_J9PDJ>0inwVDfdxv5jRYR*Rn!G0OzwN3@h*D=9C9eZqU zL1xDmZP&t$;7W8ot!N?g?c2zj^0C7<^Q+n?*#CFjEw1%HITNTeLR1`o6-#G}R$w$e zE`7Q)j`3-0ygWGiLECDn0JU;>Q2lvyG}$FFgIy2b9Hw^8KRW#W<&$yd?M^;6 zzPq=#KXd=y&;#ko$kw~FcW&m=eUGnR*uFRlw%l#oe97U1O0f8(1F)OFPRJXs5ITTlRwS zfaryT@qor?;>B>_A5fz=<)%kHn0O>H@uF9Cx)1a~FtKSnukZVQkNN%Xj*ngJ>pj`a zFic;u084Z{LBHcY-Sj`$E!?2P0LfR#1g?_0;Ugwv;c3Jc9b*QSkYOz^Y@=a@IasyJ z6;jbJt0s1MBf{{Z<54!l43C7KVa_4KPNNyy)wpjjUURH%Y1~v&7j-X(YIdRFqlv~? z*=)?2ip7nbXNN zY%0ZrL^72E=U7Puk|5GI6$1%1nNp=R+kQA|&9|y*368dH(Ur#42=P=wsMqU!JiJ5qlj3r>=Gl4xxr9J0iwY4ZI9U4Wg|sn8ZQ!!qn@@xa6Db#6?TJmqG-y5 z(C`Gni-O}saW&BaDWN}Z?1>J_%N`O+D8P%pN$;aN)FIQ{?QbXoQg75NzD+O1n1|S0 zbdXDmP~+$cZ`qcbRN|R5%w-a3C7YK4kO54~qcTWjL;w{ib~N_lX7WjxPGlt|n}7i1 zWm$poTo&Y@BqpVJR_<_%Za@szL>;>}wcF-`eYtARM+U)u8RPj*1&r4)!9fjsY;GdO zo|&>;3)h3Q(e<>Vg~+#;kTvRKhi&FpwfC_9@3>oB>wj`4P-ldwIQ}Y@&K9k}Xu4ba zbg|n!$fX_Q)7IELJ@A9J)%7CGl*3P7?`L}7h&_iMzyG!JarMHfwdY5UYS#L_XIpEV zm+q`4c2=IgJ=XPPLEd@r=yPdf?bW;N%kB@e{r&nz10MFj&pr$%yRH^`2J?j_{maj5 bn^U(AFzd7ZgOfx0cGSMb{21KI-n{)A0{>3N diff --git a/Packages/com.opsive.shared/Editor/Icons/DeleteLightIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/DeleteLightIcon.png.meta deleted file mode 100644 index 81e75dcd..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/DeleteLightIcon.png.meta +++ /dev/null @@ -1,84 +0,0 @@ -fileFormatVersion: 2 -guid: 01290b743a16c0946b599beba004ca10 -timeCreated: 1533758377 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/DuplicateDarkIcon.png b/Packages/com.opsive.shared/Editor/Icons/DuplicateDarkIcon.png deleted file mode 100644 index 25bb905dfc59377a0244ed4f7ff4cffb9bb71982..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1055 zcmbVLO=#0l91jeK3r&IXN*k z!7$8Zbyly@@eKVEr^o64!Z?4M4(Ca^L6&ffbj<)UnvI(XR9$lg)sSg#ti4Aw3^Uep z>J8E`=2Q#2oEc-d$n`0kVP*=EZ(1EhKohMvUY`B_`Yj6_JI^l5hG6(5)OKb!1GKa` zU$-_pmSVGo8(=03x~ z9x93wYlvcsB2wXoN6aYYg~^eEjzTMNeBxja#ENDUuai7WJspJL`i5~N?1jTb(UkF# z>GO~ic-M{N>Z3zaLx0>j79G|%e8ksKh}Q#)-bX7rBGcTRY$yg&Z`6grp_gK=>eyO$ zkw>a}o~0+8?bxcUq_wPG(xj|XEaxE1K|PzR2z+xK{9Ja9!N=q4V zW!dp;+zqeB*E5J#M}cz}*_8mhpr2pWImUjaT+To(Tan8DihIDd|0icWb%u|N&Z#H8AKyN$ zow}IZ`FL*>_HoUmogJx+8I$p_~Bhp%>~_u%eVd7As-&*PS@mgn^s#XH--0fU1|zyJUM diff --git a/Packages/com.opsive.shared/Editor/Icons/DuplicateDarkIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/DuplicateDarkIcon.png.meta deleted file mode 100644 index e6813256..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/DuplicateDarkIcon.png.meta +++ /dev/null @@ -1,84 +0,0 @@ -fileFormatVersion: 2 -guid: 4d9d8217015eee543ac1b745a096016d -timeCreated: 1533758377 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/DuplicateLightIcon.png b/Packages/com.opsive.shared/Editor/Icons/DuplicateLightIcon.png deleted file mode 100644 index 56098274dca8bf1b031fba7b42111c67a7414cf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1055 zcmbVL&ui0A91j$S3dP|RbY33mVH0eU*EVSqR!5tpTf}aoE35~VrOE3W+vLUM&1O5P z6P;HEjH; zq|HUWPREn;!}|K}$7D|9$Zj3!ydZPK?w#FQP}LcsK_4OB;#vvuP=nq!z$+if&S zvvygvvBy~nhKs#`vKeM>J`OCqiwJ0;4c9NR-(S9Bf$NmmHL)ht0u6QC#qAKSZZ9?L z?XImj?EFPA7pqjjL&O5H*YhJaF0lh$mCloGo&^I4>6X}`Q_b26&~S)=$mO%P03nbh z4i-d7f)_wefH_{Euat!aRg~0R5sV&|S__@FTGy*1TXa=oJA?!(&-eR%uAk>{xWPk3 zQ4)<@E=v*FXv-&7ob{v3SV2dT9l8N=u@4eOtA#g7iKU(nL-2xHZC}`rMv0;+<6|q} zAt&&jm&7$dN2HGaxN#slYHS6FucHWWhBm#Ac4kbbxjWoY0;Jxk%b`mz#p>zU-t>@9 zOufX?6V7oRRaEljqOO$-MWtfM5Xw+5%2gQ_$^z6CT^MT|#1--dn3r;zQV}%>4OyvF z1x*ojS&-y{F3MxB=|{x!Z8Wy)QoAE=L_$?BBvT+4-E3Fx(C>=8ioYR#cIL$SKLFc^FKM`sWW_19Dfzdc#BqG zGTkqIy4Y_XZyGNdYOeXW`R_fkN z#+-QbQ7hiRel7Ll)Z?z1&b+&Qtk-&bcXns}c`ALPdg-eE@WYvfpVMV#a-HeGshQnx Qr@tmGYZ^=Xv&#CN-;!2C_5c6? diff --git a/Packages/com.opsive.shared/Editor/Icons/DuplicateLightIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/DuplicateLightIcon.png.meta deleted file mode 100644 index 9091899d..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/DuplicateLightIcon.png.meta +++ /dev/null @@ -1,84 +0,0 @@ -fileFormatVersion: 2 -guid: ba8a6a7b5fe943b48bef5d532c257d38 -timeCreated: 1533758377 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/FavoriteType.png b/Packages/com.opsive.shared/Editor/Icons/FavoriteType.png deleted file mode 100644 index 6ead7a07dc3d05766a36704de5ea2087b8d36971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X)_A%&hE&{2N?2eTaW`F|!GB(7!!s6ztNs4G%8awmGaGh< z@#yaQ&=?{v!myF)N(0lPScWY(8CGT5PGMu5@V3z*T;@O)L&)Vi72Y2VCpK_9+~F`1 zc*Cl|tP0LCqpr>^0a{Y{s$Ud7Cd8(U>4N6*x_ERxGAmaB}4mvPPfIja?Bzf zh6fnDn&+(IIMR0^;CPk=w-~dT!{Qf=Q}`G0E@XUj-rxm;Ljxm2MUdeMaXzbFpt~77 MUHx3vIVCg!054QpH2?qr diff --git a/Packages/com.opsive.shared/Editor/Icons/FavoriteType.png.meta b/Packages/com.opsive.shared/Editor/Icons/FavoriteType.png.meta deleted file mode 100644 index d53e498c..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/FavoriteType.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 98a5b78106788fa4187c2b78d8f7c48c -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/FindSelectDark.png b/Packages/com.opsive.shared/Editor/Icons/FindSelectDark.png deleted file mode 100644 index 8a3d2e71ecbdfc546fffbba70f2f02db9ac4e91c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1159 zcmbVMO>Em#9Ctrhv%y4n*`U(2hYQk>8rv_m9ouWx#vf@jEhS1LEt-0mW52Yfv7cwZ zlC(lq*2ARTcHn>zLPg@x6A}l6IzUttn}#+a4!tmO7+es$On}fhfXZ{56b{u6ShnAX z|G(ew|NbAoQJ$SXer)6z!!XB-GiHU3!^x96Lf>b8-?i!RGO=o84mU{4ju4Y~aUFr8 zZ!e$*{ZX;(kVuQBd3}UUFWA}J9I#0HF7VMdj zr5wBORIOA7296Mrxbd_jKnP@+gQ6tMa13MwnBfI_%V{WTlB{L2pnI`YEpi)L#VmBS z=qkr95)x`W-)gnE);Ncw1s3}$hyMdx14M93yM zs$$&iRX}+W6C5w%5EyeZID5$pT-=IZPtvo0S`$UyTgWX$*av&@)x1OWvsuZ6P%lVw zMzC}URm;e#hLW+Ayd@ik!FI9k|A`q-o#B(>_)oF)wrB+=(}U8di-YDt0qvNGw#G+K ze_o|+^;yx(SKANkf9>v04!qX6aZTS|f3UUo_pQF0kB90*o8R>TZf9rbi_U$f@b0ON z_nsPePEGwX2u?Ef>5W&0Qd=8mE}XmF92~hd{N~x2Z*P`g>b(CY^Ziy?z9$_KpEuos zskMup>(7nN4{rQ8MZgC`KfPG%|FvIio_{1V)8g%>yp2+$AHI|N6lV4FGp_1X#fhtzuVYbaW?=EwS# G^?v{xYIBzW diff --git a/Packages/com.opsive.shared/Editor/Icons/FindSelectDark.png.meta b/Packages/com.opsive.shared/Editor/Icons/FindSelectDark.png.meta deleted file mode 100644 index 0ac7ca07..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/FindSelectDark.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: a2cd301cd71673749b65d1ce06332afa -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/FindSelectLight.png b/Packages/com.opsive.shared/Editor/Icons/FindSelectLight.png deleted file mode 100644 index 860c2f77fa88e7560705cff381c038ef32527c99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1159 zcmbVMO>Em#9DlTBEgKU(jIH#*j0@V38r#qHH_ckdPSR9MiPA`m&<=C#m)11)GxjS< zt7*z6ZDJ>O;D9EC%55j4NoZ(H6Vt>HjEOVbX>dbALTo}@Hg(T!QaDsQVA*~j{{Mcz z|NDRVVr8MYfA9ES0KopzoL!~kX!?xoq3^?wHyt{>M)GyCh?}JC#0Z!kZXl)>6uRCxGRV-4YcHkS@zEx-?EJFW!V#Q zStv&qTK4DGW3;%wP;=K;T-{@5jxp06gAxRYI7}yKg^AJ0vRk|cou}J8%WRpDl`OmM zRJ~kbEF2?7=B6^P03o9&9F$~5fs>3VK#>>dtz@8N$ciDVOz&c;TI@BAs$J-5(N&gR zCL}U=zTIwf?I{k&OFYzdJ>?L^47JE4YawwunJ}5?GuS9`V?QE34w;nEY2a0oWvQpz zM+l;Fd51VmdV!)L<2z2oLr&m>AU)TXbwaA>UpIEOPHJlr;;SgZtFcS-(VXamY3!aa zlp0cRjCW(7CdFyl*j)`!NJ@5=rC&JD_Y7H|GF96$B~{PmH3&6mt6D*Wk|{u2w}n2( zZdg;2L>hQg6l4p+d`{D?f+lJOQBZZW0JT206eh$8UDVh0scsLeKNo9QF>(lwYZ$ls z6;N5m1SiWlVys1lIeNkmJ={*-PSdk}S{udwhsZ0$IAFHoYxuk9tEy~6m@CMNDCBbx z>Um4mEltd8W?r!@i|t{({}VHwI>V>M@t^LfSDgZH?~C`6INg zzAo8jt@EJqWOH+7@U8B}v$WMw?EVA_pB~z{{Ev0# z(CqI+%t6p7ZoDx(a((0Q{5!W>L*w6!zJGM?=S!8b?q@f_{p%Iw2YHXQ&-Mmq&m8Yw zcyaRN(8jN`g!z2@Rbt&OHN~ Cpl&n( diff --git a/Packages/com.opsive.shared/Editor/Icons/FindSelectLight.png.meta b/Packages/com.opsive.shared/Editor/Icons/FindSelectLight.png.meta deleted file mode 100644 index 99352f1b..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/FindSelectLight.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: e26581d8c0102fb4e8812ee8c6d1b5fe -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/ForwardNavigation.png b/Packages/com.opsive.shared/Editor/Icons/ForwardNavigation.png deleted file mode 100644 index a21b395519fcd771908c067788601295a1c85f11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1023 zcmaJ=PiWIn98R6em=4q(oPzks94M?w(=F*58`nSST*Zvi1y}H5n!K%HOI}RgY_^Nt zP7Xwv$01CQyC{kth6g7M!Gpscym%O*7r}#!odjXNbZzIs8j`#}eBbx`z2EP9i}}&3 zogHU8D2nRLjmQNuo(R77qvU^ncTXe38JsQRF*JcInhU9vfl3hMENv1Npk~b8eh(8A z)kd3Y5f_!~qK+&^3owjtIfPA7i6P(7^eKoz2~L`}ME`vKh6bh~(c`=lQJf4cniMZqP$lK*AS^fCaGzd~4eFL|>w7x+0ke+bj)g5IiN(`$-j*Jjfsy0-os) z>k*Cvg1~SCydZFWAR6JKY=pc*m>UpzL5#*g{h>)T*O(9s@^C#CSxIymV@G7!N~OY7 z`WfU-vRphK4>Y3DFhPX9SsQD9*!FrF3NrL`*L1LnY!E1FB{YL2nq<0v1j}j4+Frd( zq+qPCIV{ISf+ID6it>M`Wi`P8v7S6NGZaj0-i4Tos|| zMiujAgppT94#r%4s^Jwy%-J5+Y#rugi6#n+X&T}{oafW=SS-$SS&qx5 z(y_s;98JklE-gpWnMi{xBYnn#Hg0f@1MXl;ZeRt=A(3V1ns=Zv>>>-)jx3t3bKzU+ z)wxFNT!fZfmL$Uljs2_9jV>9ZeUQSM_{^!!~y}hBf z-s<9fy85a5U~_XfnOIp`S_+-(`mt~<`RL>J7Pr!OTD_rOIJA0XqkEzM_&xqG0;lx$ zw?$yIuWpr-FGBg7U5~kMBM(F0m*=;CC0~X%%I{3-`SQ-%dbRrlSReedb`q>pckf?* T(zElmH@K3y?5O-SeQV(lQ7}lS diff --git a/Packages/com.opsive.shared/Editor/Icons/ForwardNavigation.png.meta b/Packages/com.opsive.shared/Editor/Icons/ForwardNavigation.png.meta deleted file mode 100644 index d11bbeb3..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/ForwardNavigation.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 0def137655ef57944bd792b426f9d2ae -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/InfoDarkIcon.png b/Packages/com.opsive.shared/Editor/Icons/InfoDarkIcon.png deleted file mode 100644 index 474194d49265966c4455c84bb07cccea2901c145..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 993 zcmaJ=PiWIn91d&_84RW(=tOwD9aOOS(8_v zp_l1x$Phev@~B?LgEDs6aVK#nJu4`PH^+SG+RlSDBzb@MzVG*Yzu)&B&&^H`4UP@$yjFsKB6{={YDV!u>o7UI-4ik0t77xT`}NEQWa|s9O8x4!vRPX?J8cS24tC@9KjE}vO&}?6Dyby+o2%w zVsfMo(6asy_5Ch7q9t^i?>~j3@_LAb5{mFDaaiMOqe-Yx&k%P((93 zE^BE`Ry$l1JF7klXou^ba;2W!#0q}MBAbYKYsf7S?1R>kb+2bGTE3@Vo9p(>MJx2= z3M?5RY3yH(?rbslB-5^K*`jNF6fn0FX6w|a%{%N$+%1}!a(r0*eSAFCr*Iegc0PO_ z+dA`X@7LFl+izcNy8XlijWDZ{qHkiv_Z{xAk%xzCOCPyVE}e i4~O4G(?3Tt-0%{2Z|&UGA5R-7xpc++tobUt^zaWv@;PMy diff --git a/Packages/com.opsive.shared/Editor/Icons/InfoDarkIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/InfoDarkIcon.png.meta deleted file mode 100644 index 6fed628c..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/InfoDarkIcon.png.meta +++ /dev/null @@ -1,84 +0,0 @@ -fileFormatVersion: 2 -guid: 14890942c77df924d95bfdf229fcffe5 -timeCreated: 1533758377 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/InfoLightIcon.png b/Packages/com.opsive.shared/Editor/Icons/InfoLightIcon.png deleted file mode 100644 index 47ccd86922055df325592ef235cf347c199ab5bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 999 zcmaJ=O>5Lp6b;taQmps|t<}XN5vm-gobL4`*kl1_wq4 zD2f^^OzTB5o+aPu{yy@**vH)_!v$=V@f=#h4J(9H);;5PQ4^DKVA(Z@K?N?mzDoai^Nt3tqtf$|$(w-&tM2q#2dK&N%es4KNWaM8JdC0HO!C@s&{&+aiDNqqtRd+<17l7 zIU$qDBpRZaB8XJ9>SHTT`4Q7r&|zeUZh&3ngGAA)pgLA*lIh_Qyr3iNN3AlEf^o4G za01IGM`{C2^Z!uK>!2fCgh%=QQ#dNE29PVl2-QQIG;WDWLIsKzLJOm?gwRU6inCRO zQB*|%(B@; diff --git a/Packages/com.opsive.shared/Editor/Icons/InfoLightIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/InfoLightIcon.png.meta deleted file mode 100644 index 94a21d9a..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/InfoLightIcon.png.meta +++ /dev/null @@ -1,84 +0,0 @@ -fileFormatVersion: 2 -guid: 487848bbccf6d414bacf8e840467e094 -timeCreated: 1533758377 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/NotFavoriteType.png b/Packages/com.opsive.shared/Editor/Icons/NotFavoriteType.png deleted file mode 100644 index c682b23cb8d7bfbb5477c51e94d82b2a68ff009e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XHhH=@hE&{2N?2g}EQ{k@VEWOoeM{>>6x0*D)Mb*v4$<%jR+JF8?R<6aO<3H_B`MmpfHhEMhyUu7AR+*hatEZ}tDRh+@+5V)d2x#7Aoj}?PJ0)y1_T@nsf STz}j zJcvU*Oc;ZmJPBTQ@T%azT|9{=!IP*r58}a_Fkkv-dKeQ7N#4Kj_xpX{_r7mqu6liJ z^x`PTabx8Ysa(Uc$*CuXt6=(NsD%L4|6$_G%+aK`Vy{T-R$0Zi>Em* z(z5Ce+NjK`2C)S_v=IW^WoV9@&IYb-EMp3qc*$}y{P&lyd0?3tej!urbv^V6Qm78f5q$ugd1(w#b8?30=lFw5QXLZKn^M!n%#>{9d< zM2uA%JG6{4JUbCg%T$v}JeNX+Tq339i)jec5T(*u8YXfQL<*9I97kb`F{u#KU|Pv1 ziVzmlikz1Q{6G}P}gF*11wWL2CEi4tW)CE30WCdz+9V9;G)T|>*+^}uxH)HrsfeF^zy4(N9ZTDf5qL$n*WnCkvSuV#qn3M47XSX zhSS5+XN$w;!4B&fkF~}OJhjQ%>Q))$>cPk6uY-eZB*{%gw)Q^7ADrCY|M~5MKKpgX zJaKksXD9NBPi#MZ2%miBwc7rf?&HnUn~l*aEq{Og((|nsKZ@Dv<`?h%1}a)i6951J diff --git a/Packages/com.opsive.shared/Editor/Icons/PersistDarkIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/PersistDarkIcon.png.meta deleted file mode 100644 index 2ae78f61..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/PersistDarkIcon.png.meta +++ /dev/null @@ -1,84 +0,0 @@ -fileFormatVersion: 2 -guid: 20a2a7d0dc8114f4083f51b8883d06b6 -timeCreated: 1533758377 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/PersistLightIcon.png b/Packages/com.opsive.shared/Editor/Icons/PersistLightIcon.png deleted file mode 100644 index 9cc87c0a34375421c751ac5cfbf3abcdfd5f149d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1065 zcmbVLO=#0l9M2dI5jNa*QW2l2hy$DCwN285)zS7fuCmV26;@%&(&TjwYw}|9X0v&b zp)fBV1kYYP>&cUXyEydV!IR)gJ$Uut!HY6q`Y}C>35F!^>-YQpKi>a;e_{Ue=&_T> zIF1`F&!Q?DC)juV=m`6t8WES-aDtZVbdfY^#|$u+w@CwovTLs5DmLwnn{V+n#|<}~ zTAkJ_bGk)b!Hh9NTa(vIJdSw9=Nq~VYq?48e zAy5^BegSjPmcHQsdYoMvrxt&H-u=wsvO-rmfx%uNnI+WC~;KJxfnB9YiGj3Hy$ymI^5 z(Dme-0YD8pdO zAq*OrJ9;_^vGk#Vg^QhXfEx+O#5PBxHXM7ulDQhu_w`;Z51~^zMF-n*=kBv+xf7BV zlcSkR4sg=SyrD`NNEF^Kr2ro}7*YxnWmgfp#*|}?kY$WL5umuWbyFW#G8@s2u4F6~ z*hGY{^1QctJw%xL5@E)%=FbFVdtJz$H@YR(RNj0**@{RWUXcP`0DK+%hxid-0A_-c U5)s4I$p8QV07*qoM6N<$g6n_cHUIzs diff --git a/Packages/com.opsive.shared/Editor/Icons/PresetIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/PresetIcon.png.meta deleted file mode 100644 index 09ace74c..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/PresetIcon.png.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: e2150fcaaf9a0a34baf8e5554d64da37 -timeCreated: 1559507090 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/RadioButtonDark.png b/Packages/com.opsive.shared/Editor/Icons/RadioButtonDark.png deleted file mode 100644 index 4f47f8b399b1520acaaef540447acdf9744a6a9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|qMqobLD zft#VLrKzi+ZiHU`yg{zyTqXEneYJ@bl767!N%VfJPM?S<+!#;e!LxhOTUB)=#mKR*YS0s=DfOY(~| z@(UE4gUu8)!ZY(y^2>`gLD2*8txIZAW?5>ATTyO0Qv}Q!cMdPHU|?WW^mK6yskpUd^2M$u2Z>g9 z#}8_|4br%`YP{KXYua1RThCvvYJYJyD(gFA*P<)26W%7hbrUGDw72MJvwqMhD0{yA znfzb(lbd=>gDewv)YTQE_kDNa(y4-vD(Brc zisFx!47KWW-eBQg+P?Dk+lxQG8<<|4&%n$O&bm2{Rb9awR0w&x`njxgN@xNAU$?m; diff --git a/Packages/com.opsive.shared/Editor/Icons/RadioButtonDark.png.meta b/Packages/com.opsive.shared/Editor/Icons/RadioButtonDark.png.meta deleted file mode 100644 index 180191cd..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/RadioButtonDark.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 33aa182040c326247ad5c385143e7489 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/RadioButtonLight.png b/Packages/com.opsive.shared/Editor/Icons/RadioButtonLight.png deleted file mode 100644 index 01a80e1e53fa5b520ec9c734d4d89c54e0834394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1195 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkcXzXU{=wfJUX$lNwLsv&f7Xx!wBV!9!S64?P zCrb;MUYGpj(%jU%5}4i;gkCe8dO=Acw*Y9fOKMSOS!#+~QGTuh*vnR#xZPrm(>$o& z6x?nx!Kqgt=oo!a#3DsBObD2IKumbD1#;jCKQ#}S+KYh6I&{-URt5$}c~2L|kcwMN zf_L*CG7#A!7^JmglfyI*R-qgLHim;N4z4pA0vLrG5*kvNl^mz4ZgS9C5!6~fEjRLE z`a#cco9Eq|JO8cm`c++jo7L3L?etr-XoY*CmvYATTT11-?+XY??M{_gwn}Vvv7slU zQohXbnWfgT&no2>Z#^+R_2eg;^y#lzU+Z?Bna|=-7F%w{!8R*`z2%Wgnrk43psv8$ z>$XaB-49=k-lSP%BP;m(VbVmil)A2M`zJD9SrB$lIGBm?Tn=}nbOxiC}s=W=fx)JdIybul6c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|qMqobLD zft#VLrKzi+ZiHU`yg{zyTqXEneY9W5+PjSLM9T^*e)O^jWg z%?vDz%}w2m3|(P*J@bl767!N%VfJPM?S<+!$E(-MxhOTUB)=#mKR*YS0s=DfOY(~| z@(UE4gUu8)!ZY(y^2>`gLD2*8txIZAW?5>ATTyO0Qv}Q!KX}ZSF)%Rpc)B=-RNPt;ygQ4@QDm<+ zhuN&8(#1bG*yLSV9yfPd)?wpB)1GmBaKtDvLN@xy3&5hlfLwU@ptSlXDdH zj;x5TNSv1XY>sjIvw0IGl1oBzxl=Y@FTeQWX}iwtnTzIhHP)X=%$=>>*{^aj#Yk~$ zKnCwUHpAPUy*gstGkw$;W7c2a5~G*-&sP2a&i!jcwF$iEmPH{>)mXqV?JGeY#@b?}=Y~z!yv@Agv=d56F$?MG`IP47KlUR0?snSDSZ z;6Z{Pe~{9|Hy`8JT_zYw27RvNYCqg`<7LT_b6f8#d=&XM`|R}x`!${yneV-rA+q7t z8tcV8)8p1}k6&xYZXRg&W5yi6=@M=IFK7G`OkkLw`$J}Nx2`9syz_MRb6Mw<&;$Ty ClHuL} diff --git a/Packages/com.opsive.shared/Editor/Icons/RadioButtonSelectedDark.png.meta b/Packages/com.opsive.shared/Editor/Icons/RadioButtonSelectedDark.png.meta deleted file mode 100644 index 04ad553e..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/RadioButtonSelectedDark.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: ae6f115684054fa4d90e564387fe9636 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/RadioButtonSelectedLight.png b/Packages/com.opsive.shared/Editor/Icons/RadioButtonSelectedLight.png deleted file mode 100644 index 893625e096bcf1d03dc0490ea47a9783f361a559..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1289 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkc=xpKa>S}6aX$lNwLsv&f3v*LvGYcm(Cr3*o zLl-xgUYGpj(%jU%5}4i;gkEEudO=Acw*Y9fOKMSOS!#+~QGTuh*vnR#xZPra(>$o& z6x?nx#Hm*w=oo!a#3DsBObD2IKumbD1#;jCKQ#}S+KYh6`c5kM2L=YlT2B|pkcwMN zg7^9z3J|d~Rhyggirb(;d9GDtv$oz9RxwT+MuSHGgqaQM4G);Q-zu#>Vzn{A?bHSF z7cIiV^WHDZHP|-k#PmD!@BE%SzxrJH(!&oOo<9(ptm66c;O0!R%FIt1>FbOh<$T|I zIO(&5UFq)bj_wDOX5473TOGWz$3s}+Z<2pvV?C{u6^I)s@Gi1 zFJw6jo#%{kH8PihkyJTf$2|XdA2zJkifYZ8&t&o7&@&5W=~_2#e@2-C=ftCYZKt13 z3JDcm>&5);K;wc0<&YYcC4%D1`Z%=9UAN^G2hA;iFjRL)6U7^)&+*}kvmdESqE-=`bvcNZ%+Djdfxw%1UH zjaS)s<>CVSFD-}<*l?XT`?O1jbnK;=vjZ}~pdEQzxP!f5fA;>^q~exhr#d9f|>U;?4r7C&{W?`{Bxq!?&|QuQSWfvyWs)pQ-+ z2C@WYQDU!Ng{rCPrd$KFhiBH(U}$zwYi5hBEPh03Vv6E;JQl`^K+-J{8irA5$a0k- zs@Z-_y}TM{%cTOsnV*IU4M_|NMQ=d%sKql+ry)d%>z)e7*(^~kWn%6nA`~Psii)@< z=!|yoA2-fKXTALdiyfSiz0_y-FAhrb|M5} zU}}b9*N|hYHKWn2Ls*BXR&UjzYD*9qNGdhX;x=oFq1sR}8Y+UYS#KyUXxlZ}c4Vbx zJE-Kg*%QQ@bPc&E<8;D diff --git a/Packages/com.opsive.shared/Editor/Icons/RemoveDarkIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/RemoveDarkIcon.png.meta deleted file mode 100644 index fa4fd1a4..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/RemoveDarkIcon.png.meta +++ /dev/null @@ -1,84 +0,0 @@ -fileFormatVersion: 2 -guid: 088c80b2883e964498350b2075ecde18 -timeCreated: 1533758377 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/RemoveLightIcon.png b/Packages/com.opsive.shared/Editor/Icons/RemoveLightIcon.png deleted file mode 100644 index 60b480eac164f5f6fee006cf41c595e2bd4423b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 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 diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/Folder.png.meta b/Packages/com.opsive.shared/Editor/Icons/Units/Folder.png.meta deleted file mode 100644 index 8a9bf795..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/Units/Folder.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 616bcce9f5cac9642a3f9101c253e95d -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/System.Boolean.png b/Packages/com.opsive.shared/Editor/Icons/Units/System.Boolean.png deleted file mode 100644 index 68d24d7c292e3f67a8093ea1e03fd3c382849c28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx;$MRLn>}1B}jZ~5S)HwT|p_MLMp@4xPs`)&&+0}J{BhC z3@d*-?2+$!?|hVFH^Zt8a_xtu8uc;{WHMa2sW6+hK!V{@o6@H83wsk9+>Mz-&NU=R zOkldeyMv)rjag1V2Ba=u_@jh@psm%+i=jIEetmOT)5oEFWxb4tS^1*l4531o3>X*~ a*%&kp^>~ECT($#U#o+1c=d#Wzp$Pz$XHFUb diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/System.Boolean.png.meta b/Packages/com.opsive.shared/Editor/Icons/Units/System.Boolean.png.meta deleted file mode 100644 index bbeff063..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/Units/System.Boolean.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 479498807a425664db202c18464e8ff0 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/System.Int32.png b/Packages/com.opsive.shared/Editor/Icons/Units/System.Int32.png deleted file mode 100644 index 87aaff5098a868f9c48169f19a39a7a05b8d58f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XCV09yhE&{2N|5-}AUK`nyNEcWLMp@4xF54NKW8>8^|3H9 zXIS~$VUK**d*`DD490wCzdD?0RN+ao-cYG&`0rlXdj>y!hq=6)A{pAxJKPI!`Np?P zoaaMETEi(x0UqWchFy%}3(ln+c-+cu!Q1dFS4oapZIQdWn@)q1q{yv+{Y45l?{HqZ jgTe~DWM4fgd|gc diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/System.Int32.png.meta b/Packages/com.opsive.shared/Editor/Icons/Units/System.Int32.png.meta deleted file mode 100644 index f318deec..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/Units/System.Int32.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: defe707fac256444598e3f8a297992f7 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/System.Single.png b/Packages/com.opsive.shared/Editor/Icons/Units/System.Single.png deleted file mode 100644 index d9eed6f6f076db1a8ab1b851ef8f771612763ac3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XIz3$+Ln>}1B}jZ~5S)JGl^rvqLMp@4I1b%i9~fs_smaWe zZn#pbaF74!_k~FyCosK* nD-n3oBhx8K;@3=0g#!#l68gy-R({a{I*-BA)z4*}Q$iB}1?X1} diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/System.String.png.meta b/Packages/com.opsive.shared/Editor/Icons/Units/System.String.png.meta deleted file mode 100644 index 0247b0e0..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/Units/System.String.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 97fbf97b141837d42a7ba59bce21101b -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Color.png b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Color.png deleted file mode 100644 index 4c3240b4fd3c0ac19e5d3fd8c2b74802d5b8512d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XR(iTPhE&{2N|3mcP&&Vn`MZcXdrg+a#tb2bpuY}t7#^u_ z=sd7QjG^%1^*Ofk6RsL3Ufd(UOp>?Z$T#L#m4?d%g6AC%yFdcN+wU6tI(ZkJ13H?))78&q Iol`;+0JTqFN&o-= diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Color.png.meta b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Color.png.meta deleted file mode 100644 index 88eab610..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Color.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: fcecea8c4b2d27040939b95755c2561e -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Matrix4x4.png b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Matrix4x4.png deleted file mode 100644 index d973200a8a09041982c1a54064f7040be8da2e38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2859 zcmV+`3)J+9P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00011Nklc@N~4G)yO?4Z z47>p>IQ+~&q&W3mKvXOsyJ)z@0-iiUyI5ePG&=(T009600|3lt5mSmWWuE{5002ov JPDHLkV1g09Or`(; diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Matrix4x4.png.meta b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Matrix4x4.png.meta deleted file mode 100644 index f0a915ab..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Matrix4x4.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 08f244fd1aa17c445929ade0013b8905 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Quaternion.png b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Quaternion.png deleted file mode 100644 index e82a96b78795a58a762b16505c8510401c382e95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2913 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 LNkvXXu0mjfo$6`l diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Quaternion.png.meta b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Quaternion.png.meta deleted file mode 100644 index 1eea269f..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Quaternion.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: d1859ad3c7f5aef4bb27c748114eb378 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.RaycastHit.png b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.RaycastHit.png deleted file mode 100644 index a6a54438b0dea19a7890d9cc667e496afce9ad22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XW_h|ehE&{2N|4An;L-I+bdwsJgBL@GzKf0BXGWD{P40#E z6SNK}zU4T=?!coK!^V)S!4kw>;9;+Di`!xP8TKH~jJCsH4Fxaod|Jq5{|MKMS)6Jr8A_J@BED@cCX1^X rmvAmiR5YBmkxlN3sxt=ziv+_Zb#t$;Q(t5QUCH3->gTe~DWM4fh?P+B diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.RaycastHit.png.meta b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.RaycastHit.png.meta deleted file mode 100644 index fc5ed9d5..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.RaycastHit.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: ed8e4254d8821d847a64c6ec5a04d96c -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Time.png b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Time.png deleted file mode 100644 index 7f86552de9f1dd7e12e949aaf2a7b23b5c04aba0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2975 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 VmAIkNs8|31002ovPDHLkV1nHye#!s< diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Time.png.meta b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Time.png.meta deleted file mode 100644 index d101558f..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Time.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 56deabd8192f3954c89407519fc22b71 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Vector2.png b/Packages/com.opsive.shared/Editor/Icons/Units/UnityEngine.Vector2.png deleted file mode 100644 index dff82f5ba4f3d61a400c3e3d741fa005031a97f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XmUy~2hE&{2N|2b+P~GLtq&n+4^T&DxJq0&gWwF`Ml{r=G z&feVIpuyZQi@D)Sl};8@V_S~GDb|2ynT9KM3S}%=HV!AaeU7x9<%$$$?c!l*<-IV0 zrHSoE{14R!^(RCwBAV4x-7p5ihegz>3i!lO9> zNP#hwjTJEB(Tr|$;@6x#3((cF;4oMLh#P@89?D+`6(cze_Jc54VL&XP*Z>xMlHcy< z89-QjaH?U(DO0$sfZ;z&01$Ij{Qdj!$g|5Q@OzIn?2xF}7Ge`hZ3P5}S zD)b?==)wgMgL{gL0gw`aiaP-DgRePz7JxV`NQT8jCF?<&f!Gnvvh_%YfGhzUz=XqP zg)rMe0B9SCU5HH~x&a`YL5lly4;+ViD!T{wz zfO<;->Rr@8L@+ant@*VfHM}*flF<3K)T>sP{1+#+rtzXzU|xw z{9#bI%K(|Z=ZpFLB_F&l{5#Ba;s0f(`72~i;PS|9MkGz^p#d}z+0QH1RKdbP0U8GR zpy-Tvd?pY*7C`<6C8qQ60PA=A08|J|6Az$r2}tPyXF9k5(hTE34Y@!}I)H%$pqKiQ q{M-+<84o}XL;?Ug5Ge)#0R{lOEoI5&%QB4s0000`n zg5q!<6a>NJ?%q6kmXfZ8#fRryXFe2BGc|{d_Xe{Gt_iy zbyBa)YZi7nGsbX{>r*zv%;X~9wAK&-4YcBTS@!#zeHJ)&mR*)ALd7qlmQ&ge(9-ro z&DvhGRGZD+1T&FF1zbc-5V`AKs6|<}tEKSELf$6*ebyXJz8mDqoMoN$kSuLau2n|J* z3TY)%C>nW5R1{epaLZmuOwU3CyH0Gk$Cb|HYQ+GV1P3*Y*9R4_*un&dE$oBhk_@gb zJD!c(;q~}>deQ1AaJG;=8(ReQEqUKF$qE%!Q%nZx2$B&c8hP`R%hgf5h15cAV8! zaT1L`ySiI{SNbtses~a0B%U^o9=|>=y|_2UPX-f-33E>PG_|4Uw%+e`o&aVVWM3|3>@q`#jf}MvZ)*QVm7UkTIEwW0}b&PG1Wm~Nl(~2_4 zsj<8u2);%n5+;bS+qSUkg)KMKSCFBrIfji5WC34Mt)OL`rirJ$5KOyJ7zkVLPNGQ4 zSWmTCp5a*2^yBKHU0j5J+}IWEmfALCi_k^Ojz;dI8tRit?)En11Bo}{Wyc_wqBdou zEt}B7c{xp!6Gk_5F)lNyx?& zo>x+tTvSmMS&9k?F3w8>Zr*aSYH6@<*YNH3xY<3qqU1moBd3H=vtI%8b%c>yM>dca z65#BjVd<#lp7XD#7p)8(<2uxH4l+SEzoN05edS+q_qh81~tcXD2tlb>amR(}J(M^GjJ diff --git a/Packages/com.opsive.shared/Editor/Icons/UpdateLightIcon.png.meta b/Packages/com.opsive.shared/Editor/Icons/UpdateLightIcon.png.meta deleted file mode 100644 index 92f3862c..00000000 --- a/Packages/com.opsive.shared/Editor/Icons/UpdateLightIcon.png.meta +++ /dev/null @@ -1,84 +0,0 @@ -fileFormatVersion: 2 -guid: c1502f6cab2c3a542bb77c572d8567de -timeCreated: 1533758377 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Import.meta b/Packages/com.opsive.shared/Editor/Import.meta deleted file mode 100644 index e401f4db..00000000 --- a/Packages/com.opsive.shared/Editor/Import.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3d15ae0dbbf7a014f8a65d9f5a961927 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Import/ImportStatus.cs b/Packages/com.opsive.shared/Editor/Import/ImportStatus.cs deleted file mode 100644 index 97e50413..00000000 --- a/Packages/com.opsive.shared/Editor/Import/ImportStatus.cs +++ /dev/null @@ -1,23 +0,0 @@ -/// --------------------------------------------- -/// Opsive Shared -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- -namespace Opsive.Shared.Editor.Import -{ - using UnityEngine; - - /// - /// Small ScriptableObject which shows the import window if it has not been shown. - /// - public class ImportStatus : ScriptableObject - { - [Tooltip("Has the Character Controller Update Project Settings window been shown?")] - [SerializeField] protected bool m_CharacterProjectSettingsShown; - [Tooltip("Has the Behavior Designer Welcome window been shown?")] - [SerializeField] protected bool m_BehaviorWindowShown; - - public bool CharacterProjectSettingsShown { get { return m_CharacterProjectSettingsShown; } set { m_CharacterProjectSettingsShown = value; } } - public bool BehaviorWindowShown { get { return m_BehaviorWindowShown; } set { m_BehaviorWindowShown = value; } } - } -} \ No newline at end of file diff --git a/Packages/com.opsive.shared/Editor/Import/ImportStatus.cs.meta b/Packages/com.opsive.shared/Editor/Import/ImportStatus.cs.meta deleted file mode 100644 index efde0413..00000000 --- a/Packages/com.opsive.shared/Editor/Import/ImportStatus.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f9a6fcaab71877649a4598d315010679 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Import/Opsive.Shared.Editor.Import.asmdef b/Packages/com.opsive.shared/Editor/Import/Opsive.Shared.Editor.Import.asmdef deleted file mode 100644 index b61c3d9b..00000000 --- a/Packages/com.opsive.shared/Editor/Import/Opsive.Shared.Editor.Import.asmdef +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "Opsive.Shared.Editor.Import", - "rootNamespace": "", - "references": [], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Packages/com.opsive.shared/Editor/Import/Opsive.Shared.Editor.Import.asmdef.meta b/Packages/com.opsive.shared/Editor/Import/Opsive.Shared.Editor.Import.asmdef.meta deleted file mode 100644 index 4d69bbf2..00000000 --- a/Packages/com.opsive.shared/Editor/Import/Opsive.Shared.Editor.Import.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 27cb7fd045e5bb44f8c617ce69325b1d -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers.meta b/Packages/com.opsive.shared/Editor/Managers.meta deleted file mode 100644 index 128768f9..00000000 --- a/Packages/com.opsive.shared/Editor/Managers.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: da77870348e224c45bfa37fdd9575797 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers/Images.meta b/Packages/com.opsive.shared/Editor/Managers/Images.meta deleted file mode 100644 index df00c00a..00000000 --- a/Packages/com.opsive.shared/Editor/Managers/Images.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 06dcb97c45b1a194bb6361a85bdbaafe -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Discord.png b/Packages/com.opsive.shared/Editor/Managers/Images/Discord.png deleted file mode 100644 index a1d797416c394a31f020961fe5dbd0a631f5f51c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4585 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 H@{a!xH2pe8 diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Discord.png.meta b/Packages/com.opsive.shared/Editor/Managers/Images/Discord.png.meta deleted file mode 100644 index 653b6390..00000000 --- a/Packages/com.opsive.shared/Editor/Managers/Images/Discord.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: c234ca342a2cb274c94da04b6db74730 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/DocumentationLarge.png b/Packages/com.opsive.shared/Editor/Managers/Images/DocumentationLarge.png deleted file mode 100644 index 009ff5fa8a1dced60d267a312e6551a851d81ad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5813 zcmbVwcQ~9|*Y}--M2Qk2f)qvsQAQgwYA{5J7Bxr^GZC z2}0E9o#@d!?=8TT7jDC52+}aDF6VVQdUAd27q&m zAZA|ew2lG6 zK<$yZIo6Kf?2L!s$<7{>1^`JJCwnt<8x(={Im!}^k%FvM))#&; zXbp$75PytN{M#1zBn7b|5bVXFP$H4YPZZ|I;w+(pa5(%-hma5-$iatq#t_V$_%L|( ze>5Oacyk=uo`A+;SkE+?J;yo_q#&TD{|Uj)UQO*^#TfkGK!K1!oy_c^g8TwdJG-;E z{&3?7k5T{Y#((9;>p0t^ppQ{_tOL#*Tn`KOe}qBo{%=EPjG#B-8aOn#C}y?@ths|7 z3PVsvNI}3i{75uXTwVkw09Qc3WD#%?1zABsIgm!cg=FC(q9S5K0`Pxy{5M%SArTQd zxBv_egMlldAS)|?kcW#2D+s{v3k$&EuzzHgF?fO*#vJvJT{LL-Z&{K5Q&wCahcY8z zaXMJ6?LQfyX@w_-r%Od}OFoS~5K+lrn|4EjAroaq5 zBmYf(@ZsOhgTjD21_y49TG8X{06;gZjF8oF8d^@GAu#kMHCv9klE@jHQ+}pHrd-Dx zPWF*DfFbkF93d>E3)iiN_WIz!R<^40Xaz?d-t?5MA%eYEn*yU@bPrt9CzKF6>2{e6UJ_AJg-T?Yv9IR@oOWlmU9xd`=b)O zK`}8g;922S??7r?)R zm)ivZ2(Y_htu*x zH#%`oU+k?uJwVGGd`KPaHhf2afl_7Ysia1>q6(`f^ z1v*KKy^VWlYwA!^5S1K8w8gXCZ?`Gg=@4sg>;9t9@k;hIe&}0&z+gPJsFFC?^cSq+*vEC!dawQ*kYD2?45@!w*1sf7j&ki} z8a9aBIV_)+uKK#}n`!j2YR*%yw`i8>p21po$QREIjq^=u0KhtavL#($$TWR_`U%Ew3O1IinLuOhEIe^t@m>ADP7a_ zYhzkrsxJmF8V(kxc#EO(Agx=cgD)7ovyVP}@$%MYv%B3FI51@2a+Y*?W)i2vQyoz? z7iUtn9{N7ZJ3qdWCq*8{G~_$Fo!d1$U9QVjly0-!W*Oyy@Z4R}|9yoVcapxdX!!z^ zKd+d~l}Y3l-XKslI;!$2y}$>LLy)n0w?uO+8^ZPn-c5|((9QC^8YINwPZ3;r4FLA9 z%{Z${j>fon&+L$X-OIO+#K!8yj+h7aQap>NC3d)yNdwDpTL-QAIsof=k;^ zT%(xcuqq9auBVaSJ>zAuea7_*YaZ@W@yX4;y_JnJo~Fu_R~Z?hPw2KhCUE6rPSaFD zy}iB0j;}GZKayQc$xo*4DPOTbcag|Dpo`=9Mr1-o;Zrl9Qur z_j$3sqmi|qW=qiXm|i37*ZVS+dxzHO*|1S&RaG6ea;7xGE&$nU*Sj$6kdItf+Fzz| z@s{UoCPi3cD;GHX4CAN$k9F6+#WUf3g|D$R-08UOdGz@pA%;g^s3*ZQDlRVW%^O2K zJwKjH0`@|62e*LeV7M4l@1(rRX=>}SFHIWc7jJOJ@8eES7j7=Dk2yKI36r|Ix@9=P zYg@`R09nT@S8_?<^|p2CN0nRF!qrbSf){_w(ybpH9KdY)8=ISZnwf+xK={@M3ppp6 zkcE~O78|R)-o3S%naW|~Za>l#qVB3eSW-OY$yr!f4vW{K7lk}ej@GA}Dc!4!-;8Qy zUgI^WvqAL1aWesP${e-|%*@Ph5)v{wwy&ahmIrAhe*+roA@&hQm13j$6p@9LqdV1Zpi;Ih?x>(DKz2kYR_f9g~JiOgW>n7b?=9Jt4 zQhX)Jv8J`uHv2RQSrHHkX;;F0@x$%0D;`?>MNfl`%lBI7J?8^YIkvWXGzy*SQpw88 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 diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/DocumentationLarge.png.meta b/Packages/com.opsive.shared/Editor/Managers/Images/DocumentationLarge.png.meta deleted file mode 100644 index e701d9de..00000000 --- a/Packages/com.opsive.shared/Editor/Managers/Images/DocumentationLarge.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 4ed35e016803fb7408050e41a75f1d93 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/DocumentationSmall.png b/Packages/com.opsive.shared/Editor/Managers/Images/DocumentationSmall.png deleted file mode 100644 index 6381eac4f433311752651eb02ea4508c4fb5cd7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4894 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 diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/DocumentationSmall.png.meta b/Packages/com.opsive.shared/Editor/Managers/Images/DocumentationSmall.png.meta deleted file mode 100644 index d8f13ced..00000000 --- a/Packages/com.opsive.shared/Editor/Managers/Images/DocumentationSmall.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: b05f9a11151011a47aefb3446b5dccac -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Downloads.png b/Packages/com.opsive.shared/Editor/Managers/Images/Downloads.png deleted file mode 100644 index 9810c8a2c08b4b7744b866775ca91f40ec03dd39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5676 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 Hcf9*Q4XsgT diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Downloads.png.meta b/Packages/com.opsive.shared/Editor/Managers/Images/Downloads.png.meta deleted file mode 100644 index 2ca9c25c..00000000 --- a/Packages/com.opsive.shared/Editor/Managers/Images/Downloads.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 70a10403b4272064d96b00badc2548d7 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Forum.png b/Packages/com.opsive.shared/Editor/Managers/Images/Forum.png deleted file mode 100644 index 46ea2369c2296085cb45a227d4e95bfac29d6f83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4346 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 diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/ProfessionalServices.png.meta b/Packages/com.opsive.shared/Editor/Managers/Images/ProfessionalServices.png.meta deleted file mode 100644 index 8aa40a09..00000000 --- a/Packages/com.opsive.shared/Editor/Managers/Images/ProfessionalServices.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -fileFormatVersion: 2 -guid: 10e1cbc932df7cd4f8c57896e3ac886e -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - 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 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - 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: 3 - buildTarget: WebGL - 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: 3 - 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: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Review.png b/Packages/com.opsive.shared/Editor/Managers/Images/Review.png deleted file mode 100644 index d4dce750c1c0ea83d19c575f780e668deef44e1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4317 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 diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Review.png.meta b/Packages/com.opsive.shared/Editor/Managers/Images/Review.png.meta deleted file mode 100644 index 5c28761c..00000000 --- a/Packages/com.opsive.shared/Editor/Managers/Images/Review.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 8af2dbe9f9221bf4882aee4d8375f7d1 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Showcase.png b/Packages/com.opsive.shared/Editor/Managers/Images/Showcase.png deleted file mode 100644 index 5d13ae5ed64bcbdf00d81818399f88060d3f5abd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5172 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 K)H8%_@c#fdzH5j8 diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Showcase.png.meta b/Packages/com.opsive.shared/Editor/Managers/Images/Showcase.png.meta deleted file mode 100644 index 45b77a44..00000000 --- a/Packages/com.opsive.shared/Editor/Managers/Images/Showcase.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 7723bcc8e25ee3443a9954c35ac939ec -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Videos.png b/Packages/com.opsive.shared/Editor/Managers/Images/Videos.png deleted file mode 100644 index 6e802761e4d8e7240a3e46ebd2ec0283596eddc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4234 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 Q{P;UyplgD8qT>|tACRw^z5oCK diff --git a/Packages/com.opsive.shared/Editor/Managers/Images/Videos.png.meta b/Packages/com.opsive.shared/Editor/Managers/Images/Videos.png.meta deleted file mode 100644 index 477355bd..00000000 --- a/Packages/com.opsive.shared/Editor/Managers/Images/Videos.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -fileFormatVersion: 2 -guid: 0697e4652b4c4a040a26a775a24847d1 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 10 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Managers/Opsive.Shared.Editor.Managers.dll b/Packages/com.opsive.shared/Editor/Managers/Opsive.Shared.Editor.Managers.dll deleted file mode 100644 index ac49f628addee061b42404d096a13ea0d74bf7a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30720 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 HNZ|hgsaO1O diff --git a/Packages/com.opsive.shared/Editor/Managers/Opsive.Shared.Editor.Managers.dll.meta b/Packages/com.opsive.shared/Editor/Managers/Opsive.Shared.Editor.Managers.dll.meta deleted file mode 100644 index bad9c07f..00000000 --- a/Packages/com.opsive.shared/Editor/Managers/Opsive.Shared.Editor.Managers.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: ac3c97e8146b1a546ae1aff3bffdeeb3 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Styles.meta b/Packages/com.opsive.shared/Editor/Styles.meta deleted file mode 100644 index 661175f2..00000000 --- a/Packages/com.opsive.shared/Editor/Styles.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f09b4c446224b334c9c59424ad2350cc -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/Styles/FoldoutListViewStyles.uss b/Packages/com.opsive.shared/Editor/Styles/FoldoutListViewStyles.uss deleted file mode 100644 index 64fd3637..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/FoldoutListViewStyles.uss +++ /dev/null @@ -1,104 +0,0 @@ - -#foldout-header -{ - flex-shrink: 0; - border-width: 1px; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - border-bottom-width: 0px; - padding-left: 2px; - flex-direction: row; - justify-content: space-between; -} - -#foldout-header > Label -{ - font-size: 15px; - -unity-font-style: bold; - -unity-text-align: middle-center; -} - -#foldout-content -{ - border-width: 1px; - border-top-width: 0px; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; - min-height: 20px; -} - -.foldout-background-light -{ - background-color: rgb(225, 225, 225); - border-color: rgb(75, 75, 75); -} - -.foldout-background-dark -{ - background-color: rgb(75, 75, 75); - border-color: rgb(45, 45, 45); -} - -FoldoutHeader -{ - border-top-width: 1px; - border-top-color: rgba(1, 1, 1, 0.4); - border-bottom-width: 1px; - border-bottom-color: rgba(1, 1, 1, 0.3); -} - -FoldoutHeader > Toggle -{ - margin-left: 0; - margin-bottom: 0; -} - -.foldout-list-view-element_content -{ - padding-left: 5px; - padding: 5px; -} - -.foldout-list-view-element_foldout-header_title -{ - flex-shrink: 1; -} - -.foldout-list-view-element_foldout-header_title Label -{ - -unity-text-align: middle-left; -} - -.foldout-list-view-element_foldout-header_options -{ - flex-direction: row; - flex-shrink: 0; -} - -.foldout-list-view-element_foldout-header_options Button -{ - width: 18px; - height: 18px; - background-image: none; - margin-left: 0px; - padding: 0px; - border-top-width: 1px; - border-bottom-width: 1px; - border-top-right-radius: 0px; - border-top-left-radius: 0px; - font-size: 13px; - -unity-font-style: bold; - -unity-text-align: middle-center; -} - -.button-border-light -{ - border-color: rgb(110, 110, 110); - border-top-color: rgb(190, 190, 190); -} - -.button-border-dark -{ - border-color: rgb(35, 35, 35); - border-top-color: rgb(90, 90, 90); -} \ No newline at end of file diff --git a/Packages/com.opsive.shared/Editor/Styles/FoldoutListViewStyles.uss.meta b/Packages/com.opsive.shared/Editor/Styles/FoldoutListViewStyles.uss.meta deleted file mode 100644 index 83144f79..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/FoldoutListViewStyles.uss.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b62c5fc864a82e9458d17c82a2eea394 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.opsive.shared/Editor/Styles/InpectorStyles.uss b/Packages/com.opsive.shared/Editor/Styles/InpectorStyles.uss deleted file mode 100644 index 2bd49af9..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/InpectorStyles.uss +++ /dev/null @@ -1,31 +0,0 @@ - -.inspectable-object-field{ - flex-direction: row; - -unity-text-align: middle-left; -} - -.inspectable-object-field > ObjectField{ - flex-shrink: 1; -} - - -/* -State List -*/ -.states-reorderable-list__header -{ - flex-direction: row; - justify-content: space-around; -} - -.states-reorderable-list-element -{ - flex-direction: row; - flex-grow: 1; -} - -.states-reorderable-list-element > .unity-base-field -{ - flex-grow: 1; - width: 0; -} \ No newline at end of file diff --git a/Packages/com.opsive.shared/Editor/Styles/InpectorStyles.uss.meta b/Packages/com.opsive.shared/Editor/Styles/InpectorStyles.uss.meta deleted file mode 100644 index 057aabbe..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/InpectorStyles.uss.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d08994b95de7e054496f53903dce4031 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} - disableValidation: 0 diff --git a/Packages/com.opsive.shared/Editor/Styles/ManagerStyles.uss b/Packages/com.opsive.shared/Editor/Styles/ManagerStyles.uss deleted file mode 100644 index 001aadbf..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/ManagerStyles.uss +++ /dev/null @@ -1,232 +0,0 @@ -#contentTitle -{ - font-size: 20px; -} - -.manager-content-container -{ - margin-top: 1px; - top: -20px; - padding-top: 20px; -} - -/* || Menu || */ -#menu -{ - flex-direction: column; - flex-grow: 1; - flex-shrink: 0; - flex-basis: 0; - width: 145px; - max-width: 145px; - border-right-width: 1px; -} - -#menu-button -{ - font-size: 14px; - -unity-text-align: middle-right; - padding-top: 6px; - padding-bottom: 6px; - padding-right: 2px; -} - -.light-menu-background -{ - border-color: rgb(55, 55, 55); - background-color: rgb(211, 211, 211); -} - -.dark-menu-background -{ - border-color: rgb(40, 40, 40); - background-color: rgb(65, 65, 65); -} - -.selected-light-menu-button-background -{ - background-color: rgb(63, 126, 221); -} - -.selected-dark-menu-button-background -{ - background-color: rgb(63, 94, 151); -} - -/* || Utility Manager Classes || */ -.link-cursor -{ - cursor: link; -} - -/* || Integrations Manager || */ -#integrations-container -{ - flex-direction: row; - flex-wrap: wrap; -} - -#integrations-box -{ - margin: 3px; - padding: 2px; - width: 270px; - height: 100px; -} - -#integrations-title -{ - -unity-font-style: bold; - font-size: 13px; - margin-left: 4px; - padding-bottom: 4px; -} - -/* || Box || */ -.light-box-background, .dark-box-background -{ - border-width: 1px; - padding: 1px; - margin-top: 2px; - margin-bottom: 2px; - border-radius: 1px; -} - -.light-box-background -{ - border-color: rgb(55, 55, 55); - background-color: rgb(208, 208, 208); -} - -.dark-box-background -{ - border-color: rgb(40, 40, 40); - background-color: rgb(60, 60, 60); -} - -/* || Panels || */ -#leftPanel -{ - flex-direction: column; - flex-grow: 1; - flex-shrink: 0; - flex-basis: 0; - width: 290px; - max-width: 290px; - padding: 3px; -} - -#contentPanel -{ - padding: 3px; -} - -/* || TabToolbar || */ -#tabToolbar -{ - flex-direction: row; - justify-content: center; - margin-bottom: 4px; -} - -.selected-dark-tab-button -{ - -unity-background-image-tint-color: rgb(180, 180, 180); -} - -.selected-light-tab-button -{ - -unity-background-image-tint-color: rgb(210, 210, 210); -} - -/* || Warning Popup Window || */ -.warning-popup-window -{ - border-width: 2px; - border-color: #000000; -} - -.warning-popup-window__message -{ - margin: 10px; - white-space: normal; -} - -.warning-popup-window__button-container -{ - flex-direction: row; - flex-grow: 1; - justify-content: space-between; - margin: 10px 75px; - min-height: 20px; - height: 20px; -} - -.warning-popup-window__button-container > Button -{ - width: 75px; - min-height: 20px; -} - -/* || Sub-menu || */ -.sub-menu -{ - margin: 2px; - padding: 2px; - border-color: #010101; - border-width: 1px; - border-radius: 2px; -} - -.sub-menu-dark -{ - background-color: #404040; -} - -.sub-menu-light -{ - background-color: #CACACA; -} - -.sub-menu-title -{ - -unity-font-style: bold; - font-size: 15px; - padding-bottom: 5px; -} - -.sub-menu-button -{ - flex-grow: 0; - justify-content: center; - align-items: center; - align-self: center; - margin-top: 5px; - margin-bottom: 5px; - - min-width: 125px; - min-height: 25px; -} - -/* || Extra final touches || */ -#contentPanel ReorderableList -{ - max-height: 300px; -} - -TabToolbar -{ - min-height: 20px; -} - -#contentPanel TabToolbar -{ - flex-wrap: wrap; -} - -#ManagerMoreOptionButton{ - top: 0px; - right: 5px; - position: absolute; - align-self: flex-end; -} \ No newline at end of file diff --git a/Packages/com.opsive.shared/Editor/Styles/ManagerStyles.uss.meta b/Packages/com.opsive.shared/Editor/Styles/ManagerStyles.uss.meta deleted file mode 100644 index c00841e5..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/ManagerStyles.uss.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: dde60a90d31dc9d44be74c339427d85f -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.opsive.shared/Editor/Styles/ReorderableListStyles.uss b/Packages/com.opsive.shared/Editor/Styles/ReorderableListStyles.uss deleted file mode 100644 index 876d4508..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/ReorderableListStyles.uss +++ /dev/null @@ -1,186 +0,0 @@ -#header -{ - flex-shrink: 0; - border-width: 1px; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - border-bottom-width: 0px; - padding-left: 2px; -} - -#body -{ - border-width: 1px; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; - min-height: 20px; - padding-left: 2px; -} - -.background-light -{ - background-color: rgb(225, 225, 225); - border-color: rgb(75, 75, 75); -} - -.background-dark -{ - background-color: rgb(75, 75, 75); - border-color: rgb(45, 45, 45); -} - -#list-item -{ - position: relative; - flex-direction: row; - flex-grow: 1; - flex-shrink: 0; - flex-basis: 0; - border-top-width: 1px; -} - -.list-item-dark -{ - border-top-color: rgba(0, 0, 0, 0.2); -} - -.list-item-light -{ - border-top-color: rgba(125, 125, 125, 0.4); -} - -.list-item-selected-light -{ - background-color: rgb(61, 128, 223); -} - -.list-item-selected-dark -{ - background-color: rgb(62, 95, 150); -} - -.list-item-hovered-light -{ - background-color: rgb(200, 200, 200); -} - -.list-item-hovered-dark -{ - background-color: rgb(85, 85, 85); -} - -.list-item-dragged -{ - opacity: 0.6; -} - -#knob -{ - width: 15px; - height: 15px; - margin-top: 2px; - margin-left: 2px; -} - -#add-button -{ - width: 25px; - background-image: none; - margin-right: 0px; - padding-top: 2px; - border-top-width: 1px; - border-bottom-width: 1px; - border-top-right-radius: 0px; - border-top-left-radius: 0px; - font-size: 17px; - -unity-font-style: bold; -} - -#remove-button -{ - width: 25px; - background-image: none; - margin-left: 0px; - padding-top: 2px; - border-top-width: 1px; - border-bottom-width: 1px; - border-top-right-radius: 0px; - border-top-left-radius: 0px; - font-size: 17px; - -unity-font-style: bold; -} - -.right-button-border -{ - border-right-width: 1px; - border-bottom-right-radius: 3px; -} - -.no-right-button-border -{ - border-right-width: 0px; - border-bottom-right-radius: 0px; -} - -.left-button-border -{ - border-left-width: 1px; - border-bottom-left-radius: 3px; -} - -.no-left-button-border -{ - border-left-width: 0px; - border-bottom-left-radius: 0px; -} - -.button-border-light -{ - border-color: rgb(110, 110, 110); - border-top-color: rgb(190, 190, 190); -} - -.button-border-dark -{ - border-color: rgb(35, 35, 35); - border-top-color: rgb(90, 90, 90); -} - -.button-disabled-light -{ - color: rgb(133, 133, 133); -} - -.button-disabled-dark -{ - color: rgb(107, 107, 107); -} - -#drop-bar -{ - position: Absolute; - height: 2px; - left: 0px; - right: 0px; -} - -.drop-bar-dark -{ - background-color: rgb(58, 121, 187); -} - -.drop-bar-light -{ - background-color: rgb(62, 103, 156); -} - -#footer -{ - flex-direction: row; - justify-content: flex-end; - margin-top: -2px; - margin-bottom: 1px; - height: 22px; - min-height: 22px; - padding-right: 5px; -} \ No newline at end of file diff --git a/Packages/com.opsive.shared/Editor/Styles/ReorderableListStyles.uss.meta b/Packages/com.opsive.shared/Editor/Styles/ReorderableListStyles.uss.meta deleted file mode 100644 index 1790034b..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/ReorderableListStyles.uss.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 5ba824b8e0b8de6439f8723fb0e2cae7 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.opsive.shared/Editor/Styles/ReorderableStateListStyles.uss b/Packages/com.opsive.shared/Editor/Styles/ReorderableStateListStyles.uss deleted file mode 100644 index 3c7832db..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/ReorderableStateListStyles.uss +++ /dev/null @@ -1,82 +0,0 @@ - -#name-label -{ - flex-basis: 0px; - flex-grow: 1; - flex-shrink: 1; - margin-left: 20px; -} - -#name-field -{ - flex-basis: 0px; - flex-grow: 1; - flex-shrink: 1; -} - -#preset-label -{ - flex-basis: 0px; - flex-grow: 1; - max-width: 208px; -} - -#preset-field -{ - flex-basis: 0px; - flex-grow: 1; - max-width: 200px; -} - -#blocked-by-label -{ - margin-right: 4px; -} - -#blocked-by-field -{ - width: 82px; - margin-right: 12px; -} - -#persist-label -{ - margin-right: 4px; -} - -#persist-button -{ - margin-right: 28px; - width: 16px; -} - -.persist-dark-icon -{ - background-image: url("../Icons/PersistDarkIcon.png"); -} - -.persist-light-icon -{ - background-image: url("../Icons/PersistLightIcon.png"); -} - -#activate-label -{ - margin-right: 4px; -} - -#activate-button -{ - margin-right: 18px; - width: 16px; -} - -.activate-dark-icon -{ - background-image: url("../Icons/ActivateDarkIcon.png"); -} - -.activate-light-icon -{ - background-image: url("../Icons/ActivateLightIcon.png"); -} \ No newline at end of file diff --git a/Packages/com.opsive.shared/Editor/Styles/ReorderableStateListStyles.uss.meta b/Packages/com.opsive.shared/Editor/Styles/ReorderableStateListStyles.uss.meta deleted file mode 100644 index e6f6eedb..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/ReorderableStateListStyles.uss.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a243b2a2fb9cc0d45a2aac464a7a3ba3 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.opsive.shared/Editor/Styles/SharedStyles.uss b/Packages/com.opsive.shared/Editor/Styles/SharedStyles.uss deleted file mode 100644 index 037783f0..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/SharedStyles.uss +++ /dev/null @@ -1,295 +0,0 @@ -.horizontal-layout -{ - flex-direction: row; - flex-grow: 1; -} - -.vertical-layout -{ - flex-direction: column; - flex-grow: 1; - overflow: hidden; -} - -.flex-grow -{ - flex-grow: 1; - overflow: hidden; -} - -.flex-shrink -{ - flex-shrink: 1; -} - -.horizontal-layout-list -{ - flex-grow: 1; - flex-direction: row; -} - -.flex-list -{ - flex-grow: 1; -} - -#filter-window -{ - position: absolute; - border-width: 1px; - border-color: rgb(76, 76, 76); -} - -#tab-toolbar -{ - flex-direction: row; - justify-content: center; - margin-bottom: 4px; - flex-shrink: 0; -} - -.selected-dark-tab-button -{ - background-color: rgb(36, 36, 36); -} - -.selected-light-tab-button -{ - background-color: rgb(222, 222, 222); -} - -.right-justified-content -{ - justify-content: flex-end; -} - -.list-item-focus-light -{ - background-color: rgb(61, 128, 223); -} - -.list-item-focus-light:hover -{ - background-color: rgb(61, 128, 223); -} - -.list-item-focus-dark -{ - background-color: rgb(62, 95, 150); -} - -.list-item-focus-dark:hover -{ - background-color: rgb(62, 95, 150); -} - -/* || Header || */ -.header-attribute{ - -unity-font-style: bold; - font-size: 14px; - margin-top: 5px; - margin-bottom: 2px; -} - -.header -{ - -unity-text-align: middle-center; - flex: 0 0 auto; - overflow: hidden; - white-space: nowrap; - border-top-width: 1px; - border-bottom-width: 1px; -} - -.header-light -{ - background-color: rgb(170, 170, 170); - border-color: rgb(140, 140, 140); -} - -.header-dark -{ - background-color: rgb(66, 66, 66); - border-color: rgb(36, 36, 36); -} - -.header-text -{ - -unity-font-style: bold; - font-size: 15px; -} - -.base-field -{ - margin-left: 3px; -} - -#radio-checkmark -{ - width: 14px; - height: 14px; - flex: 0 0 auto; - align-self: center; -} - -RadioToggle > VisualElement:checked > .dark-radio-checkmark -{ - background-image: url("../Icons/RadioButtonSelectedDark.png"); -} - -RadioToggle > VisualElement > .dark-radio-checkmark -{ - background-image: url("../Icons/RadioButtonDark.png"); -} - -RadioToggle > VisualElement:checked > .light-radio-checkmark -{ - background-image: url("../Icons/RadioButtonSelectedLight.png"); -} - -RadioToggle > VisualElement > .light-radio-checkmark -{ - background-image: url("../Icons/RadioButtonLight.png"); -} - -/* || Data Map || */ -.data-map-list-element -{ - flex-direction: row; -} - -.data-map-list-element_warning -{ - width: 18px; -} - -.data-map-list-element_id -{ - margin-right: 0; -} - -.data-map-list-element_id > IntegerInput -{ - width: 90px; -} - -.data-map-list-element_reorderable_state_button -{ - width: 15px; - height: 14px; - margin: 1px 5px 0px -16px; - padding: 0px 1px 0px 1px; - font-size: 10px; -} - -.data-map-list-element_button -{ - width: 17px; - height: 16px; - margin: 0px 5px 0px -18px; - padding: 0px 1px 0px 1px; - font-size: 10px; -} - -.data-map-list-element_name -{ - flex-grow: 1; -} - -.delete-dark-icon -{ - padding-left: 8px; - padding-right: 8px; - background-image: url("../Icons/DeleteDarkIcon.png"); -} - -.delete-light-icon -{ - padding-left: 8px; - padding-right: 8px; - background-image: url("../Icons/DeleteLightIcon.png"); -} - -.info-dark-icon -{ - padding-left: 8px; - padding-right: 8px; - background-image: url("../Icons/InfoDarkIcon.png"); -} - -.info-light-icon -{ - padding-left: 8px; - padding-right: 8px; - background-image: url("../Icons/InfoLightIcon.png"); -} - -.duplicate-dark-icon -{ - padding-left: 8px; - padding-right: 8px; - background-image: url("../Icons/DuplicateDarkIcon.png"); -} - -.duplicate-light-icon -{ - padding-left: 8px; - padding-right: 8px; - background-image: url("../Icons/DuplicateLightIcon.png"); -} - -#no-border-button -{ - border-width: 0; - margin-top: 0px; - background-color: rgba(0, 0, 0, 0); - margin-bottom: 0px; -} - -#no-background-button -{ - background-color: rgba(0, 0, 0, 0); -} - -/* || Details Panel || */ -.details-panel -{ - height: 100px; - min-height: 100px; - max-height: 100px; - flex-direction: column; - flex-grow: 1; - overflow: hidden; - border-top-width: 1px; -} - -.details-panel-light -{ - border-top-color: rgba(140, 140, 140, 0.5); -} - -.details-panel-dark -{ - border-top-color: rgba(76, 76, 76, 0.5); -} - -.details-label -{ - flex-grow: 1; - overflow: hidden; - padding-left: 4px; - padding-right: 4px; - padding-top: 2px; - white-space: normal; - font-size: 11px; -} - -.details-label-light -{ - color: rgb(80, 80, 80); -} - -.details-label-dark -{ - color: rgb(200, 200, 200); -} \ No newline at end of file diff --git a/Packages/com.opsive.shared/Editor/Styles/SharedStyles.uss.meta b/Packages/com.opsive.shared/Editor/Styles/SharedStyles.uss.meta deleted file mode 100644 index b7ece0b8..00000000 --- a/Packages/com.opsive.shared/Editor/Styles/SharedStyles.uss.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: e70f56fae2d84394b861a2013cb384d0 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.opsive.shared/Editor/UIElements.meta b/Packages/com.opsive.shared/Editor/UIElements.meta deleted file mode 100644 index 212f0f02..00000000 --- a/Packages/com.opsive.shared/Editor/UIElements.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 525f8d1940e8d9c44950049a757aa03e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Editor/UIElements/Opsive.Shared.Editor.UIElements.dll b/Packages/com.opsive.shared/Editor/UIElements/Opsive.Shared.Editor.UIElements.dll deleted file mode 100644 index 8d515d6c3cb0871818ce7226ace9df4070e53fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153600 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⪙4`n?;%Hc~@UzwG? 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 diff --git a/Packages/com.opsive.shared/Editor/Utility/Opsive.Shared.Editor.Utility.dll.meta b/Packages/com.opsive.shared/Editor/Utility/Opsive.Shared.Editor.Utility.dll.meta deleted file mode 100644 index 4c6d2591..00000000 --- a/Packages/com.opsive.shared/Editor/Utility/Opsive.Shared.Editor.Utility.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: bdedcf5dba22c4649a3810a7e3d284d6 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Runtime.meta b/Packages/com.opsive.shared/Runtime.meta deleted file mode 100644 index 23b94e1a..00000000 --- a/Packages/com.opsive.shared/Runtime.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 06e39a3123a2d0d4c93e6c65d00c8e31 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Runtime/Events.meta b/Packages/com.opsive.shared/Runtime/Events.meta deleted file mode 100644 index e69ab0b7..00000000 --- a/Packages/com.opsive.shared/Runtime/Events.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b6fd69414451ff34e841c44831e29896 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Runtime/Events/DomainResetter.cs b/Packages/com.opsive.shared/Runtime/Events/DomainResetter.cs deleted file mode 100644 index ca399ace..00000000 --- a/Packages/com.opsive.shared/Runtime/Events/DomainResetter.cs +++ /dev/null @@ -1,25 +0,0 @@ -/// --------------------------------------------- -/// Opsive Shared -/// Copyright (c) Opsive. All Rights Reserved. -/// https://www.opsive.com -/// --------------------------------------------- - -namespace Opsive.Shared.Events -{ - using UnityEngine; - - ///

- /// Resets the event handler static variables. - /// - public class DomainResetter - { - /// - /// Reset the static variables for domain reloading. - /// - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - public static void DomainReset() - { - EventHandler.DomainReset(); - } - } -} \ No newline at end of file diff --git a/Packages/com.opsive.shared/Runtime/Events/DomainResetter.cs.meta b/Packages/com.opsive.shared/Runtime/Events/DomainResetter.cs.meta deleted file mode 100644 index 57b43185..00000000 --- a/Packages/com.opsive.shared/Runtime/Events/DomainResetter.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 384d3bda6eb7fa7419baa2a10de5509b -timeCreated: 1553589428 -licenseType: Store -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.opsive.shared/Runtime/Events/Opsive.Shared.Events.dll b/Packages/com.opsive.shared/Runtime/Events/Opsive.Shared.Events.dll deleted file mode 100644 index 45d40837ff354808f76b68e86c779c10d735ef98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22016 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