diff --git a/Server/Hotfix/Demo/Frame_ClickMapHandler.cs b/Server/Hotfix/Demo/Frame_ClickMapHandler.cs index 12510556e2766cb15bc9ec94ad8d2ae1fd3ec78d..f7c3dfc0fb237b261f6d1cbadc81c4597c2bad57 100644 --- a/Server/Hotfix/Demo/Frame_ClickMapHandler.cs +++ b/Server/Hotfix/Demo/Frame_ClickMapHandler.cs @@ -1,6 +1,4 @@ - -using PF; -using UnityEngine; +using UnityEngine; namespace ET { diff --git a/Server/Hotfix/Demo/G2M_CreateUnitHandler.cs b/Server/Hotfix/Demo/G2M_CreateUnitHandler.cs index 491e535fdf6635f6453f23ca8e5c7bc6875cd8de..c01e6321bd0e5a07a313e06b7c7cae0bf6d69a37 100644 --- a/Server/Hotfix/Demo/G2M_CreateUnitHandler.cs +++ b/Server/Hotfix/Demo/G2M_CreateUnitHandler.cs @@ -1,6 +1,4 @@ using System; - -using PF; using UnityEngine; namespace ET diff --git a/Server/Hotfix/Demo/UnitPathComponentSystem.cs b/Server/Hotfix/Demo/UnitPathComponentSystem.cs index dfb13a17b845acba83b42449e7ee4adf495bb30a..eb6ee1e788f6e166623c2833c8ec281aa452d7d9 100644 --- a/Server/Hotfix/Demo/UnitPathComponentSystem.cs +++ b/Server/Hotfix/Demo/UnitPathComponentSystem.cs @@ -1,7 +1,4 @@ using System.Collections.Generic; -using System.Threading; - -using PF; using UnityEngine; namespace ET @@ -23,7 +20,7 @@ namespace ET self.BroadcastPath(path, i, 3); } Vector3 v3 = path[i]; - await self.Parent.GetComponent().MoveToAsync(v3, self.CancellationToken); + //await self.Parent.GetComponent().MoveToAsync(v3, self.CancellationToken); } } @@ -37,17 +34,6 @@ namespace ET self.Target = target; Unit unit = self.GetParent(); - - - PathfindingComponent pathfindingComponent = self.Domain.GetComponent(); - self.ABPath = EntityFactory.Create(self.Domain, unit.Position, new Vector3(target.x, target.y, target.z)); - pathfindingComponent.Search(self.ABPath); - Log.Debug($"find result: {self.ABPath.Result.ListToString()}"); - - self.CancellationToken?.Cancel(); - self.CancellationToken = new ETCancellationToken(); - await self.MoveAsync(self.ABPath.Result); - self.CancellationToken = null; } // 从index找接下来3个点,广播 @@ -60,18 +46,8 @@ namespace ET m2CPathfindingResult.Y = unitPos.y; m2CPathfindingResult.Z = unitPos.z; m2CPathfindingResult.Id = unit.Id; - - for (int i = 0; i < offset; ++i) - { - if (index + i >= self.ABPath.Result.Count) - { - break; - } - Vector3 v = self.ABPath.Result[index + i]; - m2CPathfindingResult.Xs.Add(v.x); - m2CPathfindingResult.Ys.Add(v.y); - m2CPathfindingResult.Zs.Add(v.z); - } + + MessageHelper.Broadcast(unit, m2CPathfindingResult); } } diff --git a/Server/Hotfix/Scene/SceneFactory.cs b/Server/Hotfix/Scene/SceneFactory.cs index 2ab25df5fc8bed2c885580522bb9d0fd62ac4223..e7b077586537c4e29e4838b6fbe94836a86fbbd2 100644 --- a/Server/Hotfix/Scene/SceneFactory.cs +++ b/Server/Hotfix/Scene/SceneFactory.cs @@ -29,7 +29,6 @@ namespace ET break; case SceneType.Map: scene.AddComponent(); - scene.AddComponent(); break; case SceneType.Location: scene.AddComponent(); diff --git a/Server/Model/Demo/Unit.cs b/Server/Model/Demo/Unit.cs index 193d0fa5ac253d38692a7e96c8a548577c45802c..c42be7fe1b89178ce2d88fb113561319314fba38 100644 --- a/Server/Model/Demo/Unit.cs +++ b/Server/Model/Demo/Unit.cs @@ -1,5 +1,4 @@ -using PF; -using UnityEngine; +using UnityEngine; namespace ET { diff --git a/Server/Model/Demo/UnitPathComponent.cs b/Server/Model/Demo/UnitPathComponent.cs index fe94cb976bfa15bdde1e84d6eec696b779aff3c5..118090004471d74dfb8c42fb71dd01de1964131a 100644 --- a/Server/Model/Demo/UnitPathComponent.cs +++ b/Server/Model/Demo/UnitPathComponent.cs @@ -1,6 +1,3 @@ -using System.Collections.Generic; -using System.Threading; -using PF; using UnityEngine; namespace ET @@ -8,35 +5,5 @@ namespace ET public class UnitPathComponent: Entity { public Vector3 Target; - - private ABPathWrap abPath; - - public List Path; - - public ETCancellationToken CancellationToken; - - public ABPathWrap ABPath - { - get - { - return this.abPath; - } - set - { - this.abPath?.Dispose(); - this.abPath = value; - } - } - - public override void Dispose() - { - if (this.IsDisposed) - { - return; - } - base.Dispose(); - - this.abPath?.Dispose(); - } } } \ No newline at end of file diff --git a/Server/Model/Module/Pathfinding/ABPathWrap.cs b/Server/Model/Module/Pathfinding/ABPathWrap.cs deleted file mode 100644 index 7d3e8c93e570d8d545329810921fe2d653b52b78..0000000000000000000000000000000000000000 --- a/Server/Model/Module/Pathfinding/ABPathWrap.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Collections.Generic; -using PF; -using UnityEngine; - -namespace ET -{ - public class ABPathAwakeSystem : AwakeSystem - { - public override void Awake(ABPathWrap self, Vector3 start, Vector3 end) - { - self.Awake(start, end); - } - } - - public class ABPathWrap: Entity - { - public ABPath Path { get; private set; } - - public void Awake(Vector3 start, Vector3 end) - { - this.Path = ABPath.Construct(start, end); - this.Path.Claim(this); - } - - public List Result - { - get - { - return this.Path.vectorPath; - } - } - - public override void Dispose() - { - if (this.IsDisposed) - { - return; - } - - base.Dispose(); - - this.Path.Release(this); - } - } -} \ No newline at end of file diff --git a/Server/Model/Module/Pathfinding/DeserializeHelper.cs b/Server/Model/Module/Pathfinding/DeserializeHelper.cs deleted file mode 100644 index a940d057b719414a2980205ba1228d8dbf25934a..0000000000000000000000000000000000000000 --- a/Server/Model/Module/Pathfinding/DeserializeHelper.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Collections.Generic; -using PF; -using Guid = PF.Guid; - -namespace ET -{ - public static class DeserializeHelper - { - public static NavGraph[] Load(string filePath) - { - byte[] bytes = AstarSerializer.LoadFromFile(filePath); - - AstarSerializer sr = new AstarSerializer(); - - if (!sr.OpenDeserialize(bytes)) - { - throw new Exception("Invalid data file (cannot read zip).\nThe data is either corrupt or it was saved using a 3.0.x or earlier version of the system"); - } - - var gr = new List(); - - // Set an offset so that the deserializer will load - // the graphs with the correct graph indexes - sr.SetGraphIndexOffset(gr.Count); - - gr.AddRange(sr.DeserializeGraphs()); - - NavGraph[] graphs = gr.ToArray(); - - sr.DeserializeEditorSettingsCompatibility(); - sr.DeserializeExtraInfo(); - - //Assign correct graph indices. - for (int i = 0; i < graphs.Length; i++) - { - if (graphs[i] == null) - { - continue; - } - int i1 = i; - graphs[i].GetNodes(node => node.GraphIndex = (uint)i1); - } - - for (int i = 0; i < graphs.Length; i++) - { - for (int j = i+1; j < graphs.Length; j++) - { - if (graphs[i] != null && graphs[j] != null && graphs[i].guid == graphs[j].guid) - { - graphs[i].guid = Guid.NewGuid(); - break; - } - } - } - - sr.PostDeserialization(); - - sr.CloseDeserialize(); - return graphs; - } - } -} \ No newline at end of file diff --git a/Server/Model/Module/Pathfinding/PathModifyHelper.cs b/Server/Model/Module/Pathfinding/PathModifyHelper.cs deleted file mode 100644 index 0f4c6e2362d103dac7a4fc64e02aba595ce13a5c..0000000000000000000000000000000000000000 --- a/Server/Model/Module/Pathfinding/PathModifyHelper.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using PF; -using UnityEngine; - -namespace ET -{ - public static class PathModifyHelper - { - public static void StartEndModify(PF.ABPath abPath) - { - if (abPath.vectorPath.Count == 1) - { - abPath.vectorPath.Add(abPath.vectorPath[0]); - } - abPath.vectorPath[0] = abPath.startPoint; - abPath.vectorPath[abPath.vectorPath.Count - 1] = abPath.endPoint; - } - - public static void FunnelModify (Path p) { - if (p.path == null || p.path.Count == 0 || p.vectorPath == null || p.vectorPath.Count == 0) { - return; - } - - List funnelPath = ListPool.Claim(); - - // Split the path into different parts (separated by custom links) - // and run the funnel algorithm on each of them in turn - var parts = Funnel.SplitIntoParts(p); - - if (parts.Count == 0) { - // As a really special case, it might happen that the path contained only a single node - // and that node was part of a custom link (e.g added by the NodeLink2 component). - // In that case the SplitIntoParts method will not know what to do with it because it is - // neither a link (as only 1 of the 2 nodes of the link was part of the path) nor a normal - // path part. So it will skip it. This will cause it to return an empty list. - // In that case we want to simply keep the original path, which is just a single point. - return; - } - - for (int i = 0; i < parts.Count; i++) { - var part = parts[i]; - if (!part.isLink) { - var portals = Funnel.ConstructFunnelPortals(p.path, part); - var result = Funnel.Calculate(portals, true, false); - funnelPath.AddRange(result); - ListPool.Release(ref portals.left); - ListPool.Release(ref portals.right); - ListPool.Release(ref result); - } else { - // non-link parts will add the start/end points for the adjacent parts. - // So if there is no non-link part before this one, then we need to add the start point of the link - // and if there is no non-link part after this one, then we need to add the end point. - if (i == 0 || parts[i-1].isLink) { - funnelPath.Add(part.startPoint); - } - if (i == parts.Count - 1 || parts[i+1].isLink) { - funnelPath.Add(part.endPoint); - } - } - } - - ListPool.Release(ref parts); - // Pool the previous vectorPath - ListPool.Release(ref p.vectorPath); - p.vectorPath = funnelPath; - } - } -} \ No newline at end of file diff --git a/Server/Model/Module/Pathfinding/PathfindingComponent.cs b/Server/Model/Module/Pathfinding/PathfindingComponent.cs deleted file mode 100644 index 053eeeae057582b1330a15249ea3d2824b64d70d..0000000000000000000000000000000000000000 --- a/Server/Model/Module/Pathfinding/PathfindingComponent.cs +++ /dev/null @@ -1,51 +0,0 @@ -using PF; - -namespace ET -{ - public class PathfindingComponentAwakeSystem : AwakeSystem - { - public override void Awake(PathfindingComponent self) - { - self.PathReturnQueue = new PathReturnQueue(self); - self.PathProcessor = new PathProcessor(self.PathReturnQueue, 1, false); - - // 读取寻路配置 - self.AStarConfig = new AStarConfig(); //MongoHelper.FromJson(File.ReadAllText("./pathfinding.config")); - self.AStarConfig.pathProcessor = self.PathProcessor; - - // 读取地图数据 - self.AStarConfig.graphs = DeserializeHelper.Load("../Config/graph.bytes"); - } - } - - public class PathfindingComponent: Entity - { - public PathReturnQueue PathReturnQueue; - - public PathProcessor PathProcessor; - - public AStarConfig AStarConfig; - - public bool Search(ABPathWrap path) - { - this.PathProcessor.queue.Push(path.Path); - while (this.PathProcessor.CalculatePaths().MoveNext()) - { - if (path.Path.CompleteState != PathCompleteState.NotCalculated) - { - break; - } - } - - if (path.Path.CompleteState != PathCompleteState.Complete) - { - return false; - } - - PathModifyHelper.StartEndModify(path.Path); - PathModifyHelper.FunnelModify(path.Path); - - return true; - } - } -} \ No newline at end of file diff --git a/Server/Model/Server.Model.csproj b/Server/Model/Server.Model.csproj index d663396cd7bbad9b14fbf0783ad43e6353623694..f1e4e10926732e6ef0a232098197ee2d37b27571 100644 --- a/Server/Model/Server.Model.csproj +++ b/Server/Model/Server.Model.csproj @@ -264,135 +264,6 @@ Module\Numeric\NumericWatcherComponent.cs - - Module\Pathfinding\Recast\ArrayPool.cs - - - Module\Pathfinding\Recast\AstarChecksum.cs - - - Module\Pathfinding\Recast\AStarConfig.cs - - - Module\Pathfinding\Recast\AstarDeserializer.cs - - - Module\Pathfinding\Recast\AstarMath.cs - - - Module\Pathfinding\Recast\AstarMemory.cs - - - Module\Pathfinding\Recast\BBTree.cs - - - Module\Pathfinding\Recast\BinaryHeap.cs - - - Module\Pathfinding\Recast\EuclideanEmbedding.cs - - - Module\Pathfinding\Recast\Funnel.cs - - - Module\Pathfinding\Recast\GraphNode.cs - - - Module\Pathfinding\Recast\GraphTransform.cs - - - Module\Pathfinding\Recast\Guid.cs - - - Module\Pathfinding\Recast\INavmesh.cs - - - Module\Pathfinding\Recast\Int3.cs - - - Module\Pathfinding\Recast\IntRect.cs - - - Module\Pathfinding\Recast\ListPool.cs - - - Module\Pathfinding\Recast\NavGraph.cs - - - Module\Pathfinding\Recast\NavmeshBase.cs - - - Module\Pathfinding\Recast\NavmeshTile.cs - - - Module\Pathfinding\Recast\NN.cs - - - Module\Pathfinding\Recast\ObjectPool.cs - - - Module\Pathfinding\Recast\Path.cs - - - Module\Pathfinding\Recast\Pathfinders\ABPath.cs - - - Module\Pathfinding\Recast\Pathfinders\ConstantPath.cs - - - Module\Pathfinding\Recast\Pathfinders\FleePath.cs - - - Module\Pathfinding\Recast\Pathfinders\FloodPath.cs - - - Module\Pathfinding\Recast\FloodPathTracer.cs - - - Module\Pathfinding\Recast\Pathfinders\MultiTargetPath.cs - - - Module\Pathfinding\Recast\Pathfinders\RandomPath.cs - - - Module\Pathfinding\Recast\Pathfinders\XPath.cs - - - Module\Pathfinding\Recast\PathFindHelper.cs - - - Module\Pathfinding\Recast\PathHandler.cs - - - Module\Pathfinding\Recast\PathPool.cs - - - Module\Pathfinding\Recast\PathProcessor.cs - - - Module\Pathfinding\Recast\PathReturnQueue.cs - - - Module\Pathfinding\Recast\RecastGenerator.cs - - - Module\Pathfinding\Recast\Serialization\JsonSerializer.cs - - - Module\Pathfinding\Recast\Serialization\SimpleZipReplacement.cs - - - Module\Pathfinding\Recast\Serialization\TinyJson.cs - - - Module\Pathfinding\Recast\ThreadControlQueue.cs - - - Module\Pathfinding\Recast\TriangleMeshNode.cs - - - Module\Pathfinding\Recast\WindowsStoreCompatibility.cs - diff --git a/Unity/Assets/Editor/AstarPathfindingProject/AIBaseEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/AIBaseEditor.cs deleted file mode 100644 index cbde6247cbb1490766b97c2f66a78aa03f49da02..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/AIBaseEditor.cs +++ /dev/null @@ -1,96 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace Pathfinding { - [CustomEditor(typeof(AIBase), true)] - [CanEditMultipleObjects] - public class BaseAIEditor : EditorBase { - protected SerializedProperty gravity, groundMask, centerOffset, rotationIn2D, acceleration; - float lastSeenCustomGravity = float.NegativeInfinity; - - protected override void OnEnable () { - base.OnEnable(); - gravity = serializedObject.FindProperty("gravity"); - groundMask = serializedObject.FindProperty("groundMask"); - centerOffset = serializedObject.FindProperty("centerOffset"); - rotationIn2D = serializedObject.FindProperty("rotationIn2D"); - acceleration = serializedObject.FindProperty("maxAcceleration"); - } - - protected override void Inspector () { - // Iterate over all properties of the script - var p = serializedObject.GetIterator(); - - p.Next(true); - while (p.NextVisible(false)) { - if (!SerializedProperty.EqualContents(p, groundMask) && !SerializedProperty.EqualContents(p, centerOffset) && !SerializedProperty.EqualContents(p, gravity) && !SerializedProperty.EqualContents(p, rotationIn2D)) { - if (SerializedProperty.EqualContents(p, acceleration) && typeof(AIPath).IsAssignableFrom(target.GetType())) { - EditorGUI.BeginChangeCheck(); - int grav = acceleration.hasMultipleDifferentValues ? -1 : (acceleration.floatValue >= 0 ? 1 : 0); - var ngrav = EditorGUILayout.Popup("Max Acceleration", grav, new [] { "Default", "Custom" }); - if (EditorGUI.EndChangeCheck()) { - if (ngrav == 0) acceleration.floatValue = -2.5f; - else if (acceleration.floatValue < 0) acceleration.floatValue = 10; - } - - if (!acceleration.hasMultipleDifferentValues && ngrav == 1) { - EditorGUI.indentLevel++; - PropertyField(acceleration.propertyPath); - EditorGUI.indentLevel--; - acceleration.floatValue = Mathf.Max(acceleration.floatValue, 0.01f); - } - } else { - PropertyField(p); - } - } - } - - PropertyField(rotationIn2D); - - var mono = target as MonoBehaviour; - var rigid = mono.GetComponent(); - var rigid2D = mono.GetComponent(); - var controller = mono.GetComponent(); - var canUseGravity = (controller != null && controller.enabled) || ((rigid == null || rigid.isKinematic) && (rigid2D == null || rigid2D.isKinematic)); - - if (canUseGravity) { - EditorGUI.BeginChangeCheck(); - int grav = gravity.hasMultipleDifferentValues ? -1 : (gravity.vector3Value == Vector3.zero ? 0 : (float.IsNaN(gravity.vector3Value.x) ? 1 : 2)); - var ngrav = EditorGUILayout.Popup("Gravity", grav, new [] { "None", "Use Project Settings", "Custom" }); - if (EditorGUI.EndChangeCheck()) { - if (ngrav == 0) gravity.vector3Value = Vector3.zero; - else if (ngrav == 1) gravity.vector3Value = new Vector3(float.NaN, float.NaN, float.NaN); - else if (float.IsNaN(gravity.vector3Value.x) || gravity.vector3Value == Vector3.zero) gravity.vector3Value = Physics.gravity; - lastSeenCustomGravity = float.NegativeInfinity; - } - - if (!gravity.hasMultipleDifferentValues) { - // A sort of delayed Vector3 field (to prevent the field from dissappearing if you happen to enter zeroes into x, y and z for a short time) - // Note: cannot use != in this case because that will not give the correct result in case of NaNs - if (!(gravity.vector3Value == Vector3.zero)) lastSeenCustomGravity = Time.realtimeSinceStartup; - if (Time.realtimeSinceStartup - lastSeenCustomGravity < 2f) { - EditorGUI.indentLevel++; - if (!float.IsNaN(gravity.vector3Value.x)) { - PropertyField(gravity.propertyPath); - } - - if (controller == null || !controller.enabled) { - PropertyField(groundMask.propertyPath, "Raycast Ground Mask"); - PropertyField(centerOffset.propertyPath, "Raycast Center Offset"); - } - - EditorGUI.indentLevel--; - } - } - } else { - EditorGUI.BeginDisabledGroup(true); - EditorGUILayout.Popup(new GUIContent(gravity.displayName, "Disabled because a non-kinematic rigidbody is attached"), 0, new [] { new GUIContent("Handled by Rigidbody") }); - EditorGUI.EndDisabledGroup(); - } - - if ((rigid != null || rigid2D != null) && (controller != null && controller.enabled)) { - EditorGUILayout.HelpBox("You are using both a Rigidbody and a Character Controller. Those components are not really designed for that. Please use only one of them.", MessageType.Warning); - } - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/AIBaseEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/AIBaseEditor.cs.meta deleted file mode 100644 index 85f1c71b24abd7518b864cb3677362a94e3a2cb9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/AIBaseEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ab4eeab9df88a4d069163baf60aad496 -timeCreated: 1489745284 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/AILerpEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/AILerpEditor.cs deleted file mode 100644 index b714edd9e0d463a729e9d2700bb21da957016db7..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/AILerpEditor.cs +++ /dev/null @@ -1,27 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace Pathfinding { - [CustomEditor(typeof(AILerp), true)] - [CanEditMultipleObjects] - public class AILerpEditor : EditorBase { - protected override void Inspector () { - PropertyField("speed"); - PropertyField("repathRate"); - PropertyField("canSearch"); - PropertyField("canMove"); - if (PropertyField("enableRotation")) { - EditorGUI.indentLevel++; - PropertyField("rotationSpeed"); - PropertyField("rotationIn2D"); - EditorGUI.indentLevel--; - } - - if (PropertyField("interpolatePathSwitches")) { - EditorGUI.indentLevel++; - PropertyField("switchPathInterpolationSpeed"); - EditorGUI.indentLevel--; - } - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/AILerpEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/AILerpEditor.cs.meta deleted file mode 100644 index 64e381aab077aed87b842f3f07aaa29a8878baff..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/AILerpEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e9e1d37b65158413c85aad4706d94ff0 -timeCreated: 1495016528 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/AstarPathEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/AstarPathEditor.cs deleted file mode 100644 index 34bc2f6d9931e4585802c62b43f8c6178cf7ece8..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/AstarPathEditor.cs +++ /dev/null @@ -1,1409 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; -using System.Reflection; -using PF; -using Mathf = UnityEngine.Mathf; - -namespace Pathfinding { - [CustomEditor(typeof(AstarPath))] - public class AstarPathEditor : Editor { - /** List of all graph editors available (e.g GridGraphEditor) */ - static Dictionary graphEditorTypes = new Dictionary(); - - /** - * Holds node counts for each graph to avoid calculating it every frame. - * Only used for visualization purposes - */ - static Dictionary > > graphNodeCounts; - - /** List of all graph editors for the graphs */ - GraphEditor[] graphEditors; - - System.Type[] graphTypes { - get { - return script.data.graphTypes; - } - } - - static int lastUndoGroup = -1000; - - /** Used to make sure correct behaviour when handling undos */ - static uint ignoredChecksum; - - const string scriptsFolder = "Assets/AstarPathfindingProject"; - - #region SectionFlags - - static bool showSettings; - static bool customAreaColorsOpen; - static bool editTags; - - static FadeArea settingsArea; - static FadeArea colorSettingsArea; - static FadeArea editorSettingsArea; - static FadeArea aboutArea; - static FadeArea optimizationSettingsArea; - static FadeArea serializationSettingsArea; - static FadeArea tagsArea; - static FadeArea graphsArea; - static FadeArea addGraphsArea; - static FadeArea alwaysVisibleArea; - - #endregion - - /** AstarPath instance that is being inspected */ - public AstarPath script { get; private set; } - - #region Styles - - static bool stylesLoaded; - public static GUISkin astarSkin { get; private set; } - - static GUIStyle level0AreaStyle, level0LabelStyle; - static GUIStyle level1AreaStyle, level1LabelStyle; - - static GUIStyle graphDeleteButtonStyle, graphInfoButtonStyle, graphGizmoButtonStyle, graphEditNameButtonStyle; - - public static GUIStyle helpBox { get; private set; } - public static GUIStyle thinHelpBox { get; private set; } - - #endregion - - /** Holds defines found in script files, used for optimizations. - * \astarpro */ - List defines; - - /** Enables editor stuff. Loads graphs, reads settings and sets everything up */ - public void OnEnable () { - script = target as AstarPath; - - // Make sure all references are set up to avoid NullReferenceExceptions - script.ConfigureReferencesInternal(); - - Undo.undoRedoPerformed += OnUndoRedoPerformed; - - // Search the assembly for graph types and graph editors - if (graphEditorTypes == null || graphEditorTypes.Count == 0) - FindGraphTypes(); - - try { - GetAstarEditorSettings(); - } catch (System.Exception e) { - Debug.LogException(e); - } - - LoadStyles(); - - // Load graphs only when not playing, or in extreme cases, when data.graphs is null - if ((!Application.isPlaying && (script.data == null || script.data.graphs == null || script.data.graphs.Length == 0)) || script.data.graphs == null) { - LoadGraphs(); - } - - CreateFadeAreas(); - } - - void CreateFadeAreas () { - if (settingsArea == null) { - aboutArea = new FadeArea(false, this, level0AreaStyle, level0LabelStyle); - optimizationSettingsArea = new FadeArea(false, this, level0AreaStyle, level0LabelStyle); - graphsArea = new FadeArea(false, this, level0AreaStyle, level0LabelStyle); - serializationSettingsArea = new FadeArea(false, this, level0AreaStyle, level0LabelStyle); - settingsArea = new FadeArea(showSettings, this, level0AreaStyle, level0LabelStyle); - - addGraphsArea = new FadeArea(false, this, level1AreaStyle, level1LabelStyle); - colorSettingsArea = new FadeArea(false, this, level1AreaStyle, level1LabelStyle); - editorSettingsArea = new FadeArea(false, this, level1AreaStyle, level1LabelStyle); - alwaysVisibleArea = new FadeArea(true, this, level1AreaStyle, level1LabelStyle); - tagsArea = new FadeArea(editTags, this, level1AreaStyle, level1LabelStyle); - } - } - - /** Cleans up editor stuff */ - public void OnDisable () { - Undo.undoRedoPerformed -= OnUndoRedoPerformed; - - if (target == null) { - return; - } - - SetAstarEditorSettings(); - CheckGraphEditors(); - - SaveGraphsAndUndo(); - } - - /** Reads settings frome EditorPrefs */ - void GetAstarEditorSettings () { - FadeArea.fancyEffects = EditorPrefs.GetBool("EditorGUILayoutx.fancyEffects", true); - } - - void SetAstarEditorSettings () { - EditorPrefs.SetBool("EditorGUILayoutx.fancyEffects", FadeArea.fancyEffects); - } - - /** Checks if JS support is enabled. This is done by checking if the directory 'Assets/AstarPathfindingEditor/Editor' exists */ - static bool IsJsEnabled () { - return System.IO.Directory.Exists(Application.dataPath+"/AstarPathfindingEditor/Editor"); - } - - /** Enables JS support. This is done by restructuring folders in the project */ - static void EnableJs () { - // Path to the project folder (with /Assets at the end) - string projectPath = Application.dataPath; - - if (projectPath.EndsWith("/Assets")) { - projectPath = projectPath.Remove(projectPath.Length-("Assets".Length)); - } - - if (!System.IO.Directory.Exists(projectPath + scriptsFolder)) { - string error = "Could not enable Js support. AstarPathfindingProject folder did not exist in the default location.\n" + - "If you get this message and the AstarPathfindingProject is not at the root of your Assets folder (i.e at Assets/AstarPathfindingProject)" + - " then you should move it to the root"; - - Debug.LogError(error); - EditorUtility.DisplayDialog("Could not enable Js support", error, "ok"); - return; - } - - if (!System.IO.Directory.Exists(Application.dataPath+"/AstarPathfindingEditor")) { - System.IO.Directory.CreateDirectory(Application.dataPath+"/AstarPathfindingEditor"); - AssetDatabase.Refresh(); - } - if (!System.IO.Directory.Exists(Application.dataPath+"/Plugins")) { - System.IO.Directory.CreateDirectory(Application.dataPath+"/Plugins"); - AssetDatabase.Refresh(); - } - - - AssetDatabase.MoveAsset(scriptsFolder + "/Editor", "Assets/AstarPathfindingEditor/Editor"); - AssetDatabase.MoveAsset(scriptsFolder, "Assets/Plugins/AstarPathfindingProject"); - AssetDatabase.Refresh(); - } - - /** Disables JS support if it was enabled. This is done by restructuring folders in the project */ - static void DisableJs () { - if (System.IO.Directory.Exists(Application.dataPath+"/Plugins/AstarPathfindingProject")) { - string error = AssetDatabase.MoveAsset("Assets/Plugins/AstarPathfindingProject", scriptsFolder); - if (error != "") { - Debug.LogError("Couldn't disable Js - "+error); - } else { - try { - System.IO.Directory.Delete(Application.dataPath+"/Plugins"); - } catch (System.Exception) {} - } - } else { - Debug.LogWarning("Could not disable JS - Could not find directory '"+Application.dataPath+"/Plugins/AstarPathfindingProject'"); - } - - if (System.IO.Directory.Exists(Application.dataPath+"/AstarPathfindingEditor/Editor")) { - string error = AssetDatabase.MoveAsset("Assets/AstarPathfindingEditor/Editor", scriptsFolder + "/Editor"); - if (error != "") { - Debug.LogError("Couldn't disable Js - "+error); - } else { - try { - System.IO.Directory.Delete(Application.dataPath+"/AstarPathfindingEditor"); - } catch (System.Exception) {} - } - } else { - Debug.LogWarning("Could not disable JS - Could not find directory '"+Application.dataPath+"/AstarPathfindingEditor/Editor'"); - } - - AssetDatabase.Refresh(); - } - - /** Repaints Scene View. - * \warning Uses Undocumented Unity Calls (should be safe for Unity 3.x though) */ - void RepaintSceneView () { - if (!Application.isPlaying || EditorApplication.isPaused) SceneView.RepaintAll(); - } - - /** Tell Unity that we want to use the whole inspector width */ - public override bool UseDefaultMargins () { - return false; - } - - public override void OnInspectorGUI () { - // Do some loading and checking - if (!LoadStyles()) { - EditorGUILayout.HelpBox("The GUISkin 'AstarEditorSkin.guiskin' in the folder "+EditorResourceHelper.editorAssets+"/ was not found or some custom styles in it does not exist.\n"+ - "This file is required for the A* Pathfinding Project editor.\n\n"+ - "If you are trying to add A* to a new project, please do not copy the files outside Unity, "+ - "export them as a UnityPackage and import them to this project or download the package from the Asset Store"+ - "or the 'scripts only' package from the A* Pathfinding Project website.\n\n\n"+ - "Skin loading is done in the AstarPathEditor.cs --> LoadStyles method", MessageType.Error); - return; - } - - EditorGUI.BeginChangeCheck(); - - Undo.RecordObject(script, "A* inspector"); - - CheckGraphEditors(); - - // End loading and checking - - EditorGUI.indentLevel = 1; - - // Apparently these can sometimes get eaten by unity components - // so I catch them here for later use - EventType storedEventType = Event.current.type; - string storedEventCommand = Event.current.commandName; - - DrawMainArea(); - - GUILayout.Space(5); - - if (GUILayout.Button(new GUIContent("Scan", "Recalculate all graphs. Shortcut cmd+alt+s ( ctrl+alt+s on windows )"))) { - MenuScan(); - } - - - #if ProfileAstar - if (GUILayout.Button("Log Profiles")) { - AstarProfiler.PrintResults(); - AstarProfiler.PrintFastResults(); - AstarProfiler.Reset(); - } - #endif - - // Handle undo - SaveGraphsAndUndo(storedEventType, storedEventCommand); - - if (EditorGUI.EndChangeCheck()) { - RepaintSceneView(); - EditorUtility.SetDirty(script); - } - } - - /** Loads GUISkin and sets up styles. - * \see EditorResourceHelper.LocateEditorAssets - * \returns True if all styles were found, false if there was an error somewhere - */ - static bool LoadStyles () { - if (stylesLoaded) return true; - - // Dummy styles in case the loading fails - var inspectorSkin = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector); - - if (!EditorResourceHelper.LocateEditorAssets()) { - return false; - } - - var skinPath = EditorResourceHelper.editorAssets + "/AstarEditorSkin" + (EditorGUIUtility.isProSkin ? "Dark" : "Light") + ".guiskin"; - astarSkin = AssetDatabase.LoadAssetAtPath(skinPath, typeof(GUISkin)) as GUISkin; - - if (astarSkin != null) { - astarSkin.button = inspectorSkin.button; - } else { - Debug.LogWarning("Could not load editor skin at '" + skinPath + "'"); - return false; - } - - level0AreaStyle = astarSkin.FindStyle("PixelBox"); - - // If the first style is null, then the rest are likely corrupted as well - // Probably due to the user not copying meta files - if (level0AreaStyle == null) { - return false; - } - - level1LabelStyle = astarSkin.FindStyle("BoxHeader"); - level0LabelStyle = astarSkin.FindStyle("TopBoxHeader"); - - level1AreaStyle = astarSkin.FindStyle("PixelBox3"); - graphDeleteButtonStyle = astarSkin.FindStyle("PixelButton"); - graphInfoButtonStyle = astarSkin.FindStyle("InfoButton"); - graphGizmoButtonStyle = astarSkin.FindStyle("GizmoButton"); - graphEditNameButtonStyle = astarSkin.FindStyle("EditButton"); - - helpBox = inspectorSkin.FindStyle("HelpBox") ?? inspectorSkin.box; - - thinHelpBox = new GUIStyle(helpBox); - thinHelpBox.stretchWidth = false; - thinHelpBox.clipping = TextClipping.Overflow; - thinHelpBox.overflow.bottom += 2; - - stylesLoaded = true; - return true; - } - - /** Draws the main area in the inspector */ - void DrawMainArea () { - CheckGraphEditors(); - - graphsArea.Begin(); - graphsArea.Header("Graphs", ref script.showGraphs); - - if (graphsArea.BeginFade()) { - bool anyNonNull = false; - for (int i = 0; i < script.graphs.Length; i++) { - if (script.graphs[i] != null) { - anyNonNull = true; - DrawGraph(graphEditors[i]); - } - } - - // Draw the Add Graph button - addGraphsArea.Begin(); - addGraphsArea.open |= !anyNonNull; - addGraphsArea.Header("Add New Graph"); - - if (addGraphsArea.BeginFade()) { - if (graphTypes == null) script.data.FindGraphTypes(); - for (int i = 0; i < graphTypes.Length; i++) { - if (graphEditorTypes.ContainsKey(graphTypes[i].Name)) { - if (GUILayout.Button(graphEditorTypes[graphTypes[i].Name].displayName)) { - addGraphsArea.open = false; - AddGraph(graphTypes[i]); - } - } else if (!graphTypes[i].Name.Contains("Base")) { - EditorGUI.BeginDisabledGroup(true); - GUILayout.Label(graphTypes[i].Name + " (no editor found)", "Button"); - EditorGUI.EndDisabledGroup(); - } - } - } - addGraphsArea.End(); - } - - graphsArea.End(); - - DrawSettings(); - DrawSerializationSettings(); - DrawOptimizationSettings(); - DrawAboutArea(); - - bool showNavGraphs = EditorGUILayout.Toggle("Show Graphs", script.showNavGraphs); - if (script.showNavGraphs != showNavGraphs) { - script.showNavGraphs = showNavGraphs; - RepaintSceneView(); - } - } - - /** Draws optimizations settings. - * \astarpro - */ - void DrawOptimizationSettings () { - optimizationSettingsArea.Begin(); - optimizationSettingsArea.Header("Optimization"); - - if (optimizationSettingsArea.BeginFade()) { - defines = defines ?? OptimizationHandler.FindDefines(); - - EditorGUILayout.HelpBox("Using C# pre-processor directives, performance and memory usage can be improved by disabling features that you don't use in the project.\n" + - "Every change to these settings requires recompiling the scripts", MessageType.Info); - - foreach (var define in defines) { - EditorGUILayout.Separator(); - - var label = new GUIContent(ObjectNames.NicifyVariableName(define.name), define.description); - define.enabled = EditorGUILayout.Toggle(label, define.enabled); - EditorGUILayout.HelpBox(define.description, MessageType.None); - - if (!define.consistent) { - GUIUtilityx.PushTint(Color.red); - EditorGUILayout.HelpBox("This define is not consistent for all build targets, some have it enabled enabled some have it disabled. Press Apply to change them to the same value", MessageType.Error); - GUIUtilityx.PopTint(); - } - } - - EditorGUILayout.Separator(); - GUILayout.BeginHorizontal(); - GUILayout.FlexibleSpace(); - - if (GUILayout.Button("Apply", GUILayout.Width(150))) { - if (EditorUtility.DisplayDialog("Apply Optimizations", "Applying optimizations requires (in case anything changed) a recompilation of the scripts. The inspector also has to be reloaded. Do you want to continue?", "Ok", "Cancel")) { - OptimizationHandler.ApplyDefines(defines); - AssetDatabase.Refresh(); - defines = null; - } - } - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - } - - optimizationSettingsArea.End(); - } - - /** Returns a version with all fields fully defined. - * This is used because by default new Version(3,0,0) > new Version(3,0). - * This is not the desired behaviour so we make sure that all fields are defined here - */ - public static System.Version FullyDefinedVersion (System.Version v) { - return new System.Version(Mathf.Max(v.Major, 0), Mathf.Max(v.Minor, 0), Mathf.Max(v.Build, 0), Mathf.Max(v.Revision, 0)); - } - - void DrawAboutArea () { - System.Version newVersion = AstarUpdateChecker.latestVersion; - bool beta = false; - - // Check if either the latest release version or the latest beta version is newer than this version - if (FullyDefinedVersion(AstarUpdateChecker.latestVersion) > FullyDefinedVersion(AstarPath.Version) || FullyDefinedVersion(AstarUpdateChecker.latestBetaVersion) > FullyDefinedVersion(AstarPath.Version)) { - if (FullyDefinedVersion(AstarUpdateChecker.latestVersion) <= FullyDefinedVersion(AstarPath.Version)) { - newVersion = AstarUpdateChecker.latestBetaVersion; - beta = true; - } - } - - aboutArea.Begin(); - - GUILayout.BeginHorizontal(); - - if (GUILayout.Button("About", level0LabelStyle)) { - aboutArea.open = !aboutArea.open; - GUI.changed = true; - } - - // Check if the latest version is newer than this version - if (FullyDefinedVersion(newVersion) > FullyDefinedVersion(AstarPath.Version)) { - GUIUtilityx.PushTint(Color.green); - if (GUILayout.Button((beta ? "Beta" : "New") + " Version Available! "+newVersion, thinHelpBox, GUILayout.Height(15))) { - Application.OpenURL(AstarUpdateChecker.GetURL("download")); - } - GUIUtilityx.PopTint(); - GUILayout.Space(20); - } - - GUILayout.EndHorizontal(); - - if (aboutArea.BeginFade()) { - GUILayout.Label("The A* Pathfinding Project was made by Aron Granberg\nYour current version is "+AstarPath.Version); - - if (FullyDefinedVersion(newVersion) > FullyDefinedVersion(AstarPath.Version)) { - EditorGUILayout.HelpBox("A new "+(beta ? "beta " : "")+"version of the A* Pathfinding Project is available, the new version is "+ - newVersion, MessageType.Info); - - if (GUILayout.Button("What's new?")) { - Application.OpenURL(AstarUpdateChecker.GetURL(beta ? "beta_changelog" : "changelog")); - } - - if (GUILayout.Button("Click here to find out more")) { - Application.OpenURL(AstarUpdateChecker.GetURL("findoutmore")); - } - - GUIUtilityx.PushTint(new Color(0.3F, 0.9F, 0.3F)); - - if (GUILayout.Button("Download new version")) { - Application.OpenURL(AstarUpdateChecker.GetURL("download")); - } - - GUIUtilityx.PopTint(); - } - - if (GUILayout.Button(new GUIContent("Documentation", "Open the documentation for the A* Pathfinding Project"))) { - Application.OpenURL(AstarUpdateChecker.GetURL("documentation")); - } - - if (GUILayout.Button(new GUIContent("Project Homepage", "Open the homepage for the A* Pathfinding Project"))) { - Application.OpenURL(AstarUpdateChecker.GetURL("homepage")); - } - } - - aboutArea.End(); - } - - /** Graph editor which has its 'name' field focused */ - GraphEditor graphNameFocused; - - void DrawGraphHeader (GraphEditor graphEditor) { - var graph = graphEditor.target; - - // Graph guid, just used to get a unique value - string graphGUIDString = graph.guid.ToString(); - - GUILayout.BeginHorizontal(); - - if (graphNameFocused == graphEditor) { - GUI.SetNextControlName(graphGUIDString); - graph.name = GUILayout.TextField(graph.name ?? "", level1LabelStyle, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(false)); - - // Mark the name field as deselected when it has been deselected or when the user presses Return or Escape - if ((Event.current.type == EventType.Repaint && GUI.GetNameOfFocusedControl() != graphGUIDString) || (Event.current.type == EventType.KeyUp && (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.Escape))) { - if (Event.current.type == EventType.KeyUp) Event.current.Use(); - graphNameFocused = null; - } - } else { - // If the graph name text field is not focused and the graph name is empty, then fill it in - if (graph.name == null || graph.name == "") graph.name = graphEditorTypes[graph.GetType().Name].displayName; - - if (GUILayout.Button(graph.name, level1LabelStyle)) { - graphEditor.fadeArea.open = graph.open = !graph.open; - if (!graph.open) { - graph.infoScreenOpen = false; - } - RepaintSceneView(); - } - } - - if (script.prioritizeGraphs) { - var moveUp = GUILayout.Button(new GUIContent("Up", "Increase the graph priority"), GUILayout.Width(40)); - var moveDown = GUILayout.Button(new GUIContent("Down", "Decrease the graph priority"), GUILayout.Width(40)); - - if (moveUp || moveDown) { - int index = script.data.GetGraphIndex(graph); - - int next; - if (moveUp) { - // Find the previous non null graph - next = index-1; - for (; next >= 0; next--) if (script.graphs[next] != null) break; - } else { - // Find the next non null graph - next = index+1; - for (; next < script.graphs.Length; next++) if (script.graphs[next] != null) break; - } - - if (next >= 0 && next < script.graphs.Length) { - NavGraph tmp = script.graphs[next]; - script.graphs[next] = graph; - script.graphs[index] = tmp; - - GraphEditor tmpEditor = graphEditors[next]; - graphEditors[next] = graphEditors[index]; - graphEditors[index] = tmpEditor; - } - CheckGraphEditors(); - Repaint(); - } - } - - // The OnInspectorGUI method ensures that the scene view is repainted when gizmos are toggled on or off by checking for EndChangeCheck - graph.drawGizmos = GUILayout.Toggle(graph.drawGizmos, new GUIContent("Draw Gizmos", "Draw Gizmos"), graphGizmoButtonStyle); - - if (GUILayout.Button(new GUIContent("", "Edit Name"), graphEditNameButtonStyle)) { - graphNameFocused = graphEditor; - GUI.FocusControl(graphGUIDString); - } - - if (GUILayout.Toggle(graph.infoScreenOpen, new GUIContent("Info", "Info"), graphInfoButtonStyle)) { - if (!graph.infoScreenOpen) { - graphEditor.infoFadeArea.open = graph.infoScreenOpen = true; - graphEditor.fadeArea.open = graph.open = true; - } - } else { - graphEditor.infoFadeArea.open = graph.infoScreenOpen = false; - } - - if (GUILayout.Button(new GUIContent("Delete", "Delete"), graphDeleteButtonStyle)) { - RemoveGraph(graph); - } - GUILayout.EndHorizontal(); - } - - void DrawGraphInfoArea (GraphEditor graphEditor) { - graphEditor.infoFadeArea.Begin(); - - if (graphEditor.infoFadeArea.BeginFade()) { - bool anyNodesNull = false; - int total = 0; - int numWalkable = 0; - - // Calculate number of nodes in the graph - KeyValuePair > pair; - graphNodeCounts = graphNodeCounts ?? new Dictionary > >(); - - if (!graphNodeCounts.TryGetValue(graphEditor.target, out pair) || (Time.realtimeSinceStartup-pair.Key) > 2) { - graphEditor.target.GetNodes(node => { - if (node == null) { - anyNodesNull = true; - } else { - total++; - if (node.Walkable) numWalkable++; - } - }); - pair = new KeyValuePair >(Time.realtimeSinceStartup, new KeyValuePair(total, numWalkable)); - graphNodeCounts[graphEditor.target] = pair; - } - - total = pair.Value.Key; - numWalkable = pair.Value.Value; - - - EditorGUI.indentLevel++; - - if (anyNodesNull) { - Debug.LogError("Some nodes in the graph are null. Please report this error."); - } - - EditorGUILayout.LabelField("Nodes", total.ToString()); - EditorGUILayout.LabelField("Walkable", numWalkable.ToString()); - EditorGUILayout.LabelField("Unwalkable", (total-numWalkable).ToString()); - if (total == 0) EditorGUILayout.HelpBox("The number of nodes in the graph is zero. The graph might not be scanned", MessageType.Info); - - EditorGUI.indentLevel--; - } - - graphEditor.infoFadeArea.End(); - } - - /** Draws the inspector for the given graph with the given graph editor */ - void DrawGraph (GraphEditor graphEditor) { - graphEditor.fadeArea.Begin(); - DrawGraphHeader(graphEditor); - - if (graphEditor.fadeArea.BeginFade()) { - DrawGraphInfoArea(graphEditor); - graphEditor.OnInspectorGUI(graphEditor.target); - graphEditor.OnBaseInspectorGUI(graphEditor.target); - } - - graphEditor.fadeArea.End(); - } - - public void OnSceneGUI () { - script = target as AstarPath; - - // OnSceneGUI may be called from EditorUtility.DisplayProgressBar - // which is called repeatedly while the graphs are scanned in the - // editor. However running the OnSceneGUI method while the graphs - // are being scanned is a bad idea since it can interfere with - // scanning, especially by serializing changes - if (script.isScanning) { - return; - } - - script.ConfigureReferencesInternal(); - EditorGUI.BeginChangeCheck(); - - if (!LoadStyles()) return; - - // Some GUI controls might change this to Used, so we need to grab it here - EventType et = Event.current.type; - - CheckGraphEditors(); - for (int i = 0; i < script.graphs.Length; i++) { - NavGraph graph = script.graphs[i]; - if (graph != null) { - graphEditors[i].OnSceneGUI(graph); - } - } - - SaveGraphsAndUndo(et); - - if (EditorGUI.EndChangeCheck()) { - EditorUtility.SetDirty(target); - } - } - - TextAsset SaveGraphData (byte[] bytes, TextAsset target = null) { - string projectPath = System.IO.Path.GetDirectoryName(Application.dataPath) + "/"; - - string path; - - if (target != null) { - path = AssetDatabase.GetAssetPath(target); - } else { - // Find a valid file name - int i = 0; - do { - path = "Assets/GraphCaches/GraphCache" + (i == 0 ? "" : i.ToString()) + ".bytes"; - i++; - } while (System.IO.File.Exists(projectPath+path)); - } - - string fullPath = projectPath + path; - System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(fullPath)); - var fileInfo = new System.IO.FileInfo(fullPath); - // Make sure we can write to the file - if (fileInfo.Exists && fileInfo.IsReadOnly) - fileInfo.IsReadOnly = false; - System.IO.File.WriteAllBytes(fullPath, bytes); - - AssetDatabase.Refresh(); - return AssetDatabase.LoadAssetAtPath(path); - } - - void DrawSerializationSettings () { - serializationSettingsArea.Begin(); - GUILayout.BeginHorizontal(); - - if (GUILayout.Button("Save & Load", level0LabelStyle)) { - serializationSettingsArea.open = !serializationSettingsArea.open; - } - - if (script.data.cacheStartup && script.data.file_cachedStartup != null) { - GUIUtilityx.PushTint(Color.yellow); - GUILayout.Label("Startup cached", thinHelpBox, GUILayout.Height(15)); - GUILayout.Space(20); - GUIUtilityx.PopTint(); - } - - GUILayout.EndHorizontal(); - - // This displays the serialization settings - if (serializationSettingsArea.BeginFade()) { - script.data.cacheStartup = EditorGUILayout.Toggle(new GUIContent("Cache startup", "If enabled, will cache the graphs so they don't have to be scanned at startup"), script.data.cacheStartup); - - script.data.file_cachedStartup = EditorGUILayout.ObjectField(script.data.file_cachedStartup, typeof(TextAsset), false) as TextAsset; - - if (script.data.cacheStartup && script.data.file_cachedStartup == null) { - EditorGUILayout.HelpBox("No cache has been generated", MessageType.Error); - } - - if (script.data.cacheStartup && script.data.file_cachedStartup != null) { - EditorGUILayout.HelpBox("All graph settings will be replaced with the ones from the cache when the game starts", MessageType.Info); - } - - GUILayout.BeginHorizontal(); - - if (GUILayout.Button("Generate cache")) { - var serializationSettings = new SerializeSettings(); - serializationSettings.nodes = true; - - if (EditorUtility.DisplayDialog("Scan before generating cache?", "Do you want to scan the graphs before saving the cache.\n" + - "If the graphs have not been scanned then the cache may not contain node data and then the graphs will have to be scanned at startup anyway.", "Scan", "Don't scan")) { - MenuScan(); - } - - // Save graphs - var bytes = script.data.SerializeGraphs(serializationSettings); - - // Store it in a file - script.data.file_cachedStartup = SaveGraphData(bytes, script.data.file_cachedStartup); - script.data.cacheStartup = true; - } - - if (GUILayout.Button("Load from cache")) { - if (EditorUtility.DisplayDialog("Are you sure you want to load from cache?", "Are you sure you want to load graphs from the cache, this will replace your current graphs?", "Yes", "Cancel")) { - script.data.LoadFromCache(); - } - } - - GUILayout.EndHorizontal(); - - if (script.data.data_cachedStartup != null && script.data.data_cachedStartup.Length > 0) { - EditorGUILayout.HelpBox("Storing the cached starup data on the AstarPath object has been deprecated. It is now stored " + - "in a separate file.", MessageType.Error); - - if (GUILayout.Button("Transfer cache data to separate file")) { - script.data.file_cachedStartup = SaveGraphData(script.data.data_cachedStartup); - script.data.data_cachedStartup = null; - } - } - - GUILayout.Space(5); - - GUILayout.BeginHorizontal(); - if (GUILayout.Button("Save to file")) { - string path = EditorUtility.SaveFilePanel("Save Graphs", "", "graph.bytes", "bytes"); - - if (path != "") { - var serializationSettings = SerializeSettings.Settings; - if (EditorUtility.DisplayDialog("Include node data?", "Do you want to include node data in the save file. " + - "If node data is included the graph can be restored completely without having to scan it first.", "Include node data", "Only settings")) { - serializationSettings.nodes = true; - } - - if (serializationSettings.nodes && EditorUtility.DisplayDialog("Scan before saving?", "Do you want to scan the graphs before saving? " + - "\nNot scanning can cause node data to be omitted from the file if the graph is not yet scanned.", "Scan", "Don't scan")) { - MenuScan(); - } - - uint checksum; - var bytes = SerializeGraphs(serializationSettings, out checksum); - AstarSerializer.SaveToFile(path, bytes); - - EditorUtility.DisplayDialog("Done Saving", "Done saving graph data.", "Ok"); - } - } - - if (GUILayout.Button("Load from file")) { - string path = EditorUtility.OpenFilePanel("Load Graphs", "", ""); - - if (path != "") { - try { - byte[] bytes = AstarSerializer.LoadFromFile(path); - DeserializeGraphs(bytes); - } catch (System.Exception e) { - Debug.LogError("Could not load from file at '"+path+"'\n"+e); - } - } - } - - GUILayout.EndHorizontal(); - } - - serializationSettingsArea.End(); - } - - void DrawSettings () { - settingsArea.Begin(); - settingsArea.Header("Settings", ref showSettings); - - if (settingsArea.BeginFade()) { - DrawPathfindingSettings(); - DrawDebugSettings(); - DrawColorSettings(); - DrawTagSettings(); - DrawEditorSettings(); - } - - settingsArea.End(); - } - - void DrawPathfindingSettings () { - alwaysVisibleArea.Begin(); - alwaysVisibleArea.HeaderLabel("Pathfinding"); - alwaysVisibleArea.BeginFade(); - - EditorGUI.BeginDisabledGroup(Application.isPlaying); - - script.threadCount = (ThreadCount)EditorGUILayout.EnumPopup(new GUIContent("Thread Count", "Number of threads to run the pathfinding in (if any). More threads " + - "can boost performance on multi core systems. \n" + - "Use None for debugging or if you dont use pathfinding that much.\n " + - "See docs for more info"), script.threadCount); - - EditorGUI.EndDisabledGroup(); - - int threads = AstarPath.CalculateThreadCount(script.threadCount); - if (threads > 0) EditorGUILayout.HelpBox("Using " + threads +" thread(s)" + (script.threadCount < 0 ? " on your machine" : ""), MessageType.None); - else EditorGUILayout.HelpBox("Using a single coroutine (no threads)" + (script.threadCount < 0 ? " on your machine" : ""), MessageType.None); - if (threads > SystemInfo.processorCount) EditorGUILayout.HelpBox("Using more threads than there are CPU cores may not have a positive effect on performance", MessageType.Warning); - - if (script.threadCount == ThreadCount.None) { - script.maxFrameTime = EditorGUILayout.FloatField(new GUIContent("Max Frame Time", "Max number of milliseconds to use for path calculation per frame"), script.maxFrameTime); - } else { - script.maxFrameTime = 10; - } - - script.maxNearestNodeDistance = EditorGUILayout.FloatField(new GUIContent("Max Nearest Node Distance", - "Normally, if the nearest node to e.g the start point of a path was not walkable" + - " a search will be done for the nearest node which is walkble. This is the maximum distance (world units) which it will serarch"), - script.maxNearestNodeDistance); - - script.heuristic = (Heuristic)EditorGUILayout.EnumPopup("Heuristic", script.heuristic); - - if (script.heuristic == Heuristic.Manhattan || script.heuristic == Heuristic.Euclidean || script.heuristic == Heuristic.DiagonalManhattan) { - EditorGUI.indentLevel++; - script.heuristicScale = EditorGUILayout.FloatField("Heuristic Scale", script.heuristicScale); - EditorGUI.indentLevel--; - } - - GUILayout.Label(new GUIContent("Advanced"), EditorStyles.boldLabel); - - DrawHeuristicOptimizationSettings(); - - script.batchGraphUpdates = EditorGUILayout.Toggle(new GUIContent("Batch Graph Updates", "Limit graph updates to only run every x seconds. Can have positive impact on performance if many graph updates are done"), script.batchGraphUpdates); - - if (script.batchGraphUpdates) { - EditorGUI.indentLevel++; - script.graphUpdateBatchingInterval = EditorGUILayout.FloatField(new GUIContent("Update Interval (s)", "Minimum number of seconds between each batch of graph updates"), script.graphUpdateBatchingInterval); - EditorGUI.indentLevel--; - } - - script.prioritizeGraphs = EditorGUILayout.Toggle(new GUIContent("Prioritize Graphs", "Normally, the system will search for the closest node in all graphs and choose the closest one" + - "but if Prioritize Graphs is enabled, the first graph which has a node closer than Priority Limit will be chosen and additional search (e.g for the closest WALKABLE node) will be carried out on that graph only"), - script.prioritizeGraphs); - if (script.prioritizeGraphs) { - EditorGUI.indentLevel++; - script.prioritizeGraphsLimit = EditorGUILayout.FloatField("Priority Limit", script.prioritizeGraphsLimit); - EditorGUI.indentLevel--; - } - - script.fullGetNearestSearch = EditorGUILayout.Toggle(new GUIContent("Full Get Nearest Node Search", "Forces more accurate searches on all graphs. " + - "Normally only the closest graph in the initial fast check will perform additional searches, " + - "if this is toggled, all graphs will do additional searches. Slower, but more accurate"), script.fullGetNearestSearch); - script.scanOnStartup = EditorGUILayout.Toggle(new GUIContent("Scan on Awake", "Scan all graphs on Awake. If this is false, you must call AstarPath.active.Scan () yourself. Useful if you want to make changes to the graphs with code."), script.scanOnStartup); - - alwaysVisibleArea.End(); - } - - void DrawHeuristicOptimizationSettings () { - script.euclideanEmbedding.mode = (HeuristicOptimizationMode)EditorGUILayout.EnumPopup(new GUIContent("Heuristic Optimization"), script.euclideanEmbedding.mode); - - EditorGUI.indentLevel++; - if (script.euclideanEmbedding.mode == HeuristicOptimizationMode.Random) { - script.euclideanEmbedding.spreadOutCount = EditorGUILayout.IntField(new GUIContent("Count", "Number of optimization points, higher numbers give better heuristics and could make it faster, " + - "but too many could make the overhead too great and slow it down. Try to find the optimal value for your map. Recommended value < 100"), script.euclideanEmbedding.spreadOutCount); - } else if (script.euclideanEmbedding.mode == HeuristicOptimizationMode.RandomSpreadOut) { - script.euclideanEmbedding.spreadOutCount = EditorGUILayout.IntField(new GUIContent("Count", "Number of optimization points, higher numbers give better heuristics and could make it faster, " + - "but too many could make the overhead too great and slow it down. Try to find the optimal value for your map. Recommended value < 100"), script.euclideanEmbedding.spreadOutCount); - } - - if (script.euclideanEmbedding.mode != HeuristicOptimizationMode.None) { - EditorGUILayout.HelpBox("Heuristic optimization assumes the graph remains static. No graph updates, dynamic obstacles or similar should be applied to the graph " + - "when using heuristic optimization.", MessageType.Info); - } - - EditorGUI.indentLevel--; - } - - /** Opens the A* Inspector and shows the section for editing tags */ - public static void EditTags () { - AstarPath astar = GameObject.FindObjectOfType(); - - if (astar != null) { - editTags = true; - showSettings = true; - Selection.activeGameObject = astar.gameObject; - } else { - Debug.LogWarning("No AstarPath component in the scene"); - } - } - - void DrawTagSettings () { - tagsArea.Begin(); - tagsArea.Header("Tag Names", ref editTags); - - if (tagsArea.BeginFade()) { - string[] tagNames = script.GetTagNames(); - - for (int i = 0; i < tagNames.Length; i++) { - tagNames[i] = EditorGUILayout.TextField(new GUIContent("Tag "+i, "Name for tag "+i), tagNames[i]); - if (tagNames[i] == "") tagNames[i] = ""+i; - } - } - - tagsArea.End(); - } - - void DrawEditorSettings () { - editorSettingsArea.Begin(); - editorSettingsArea.Header("Editor"); - - if (editorSettingsArea.BeginFade()) { - FadeArea.fancyEffects = EditorGUILayout.Toggle("Smooth Transitions", FadeArea.fancyEffects); - - if (IsJsEnabled()) { - if (GUILayout.Button(new GUIContent("Disable Js Support", "Revert to only enable pathfinding calls from C#"))) { - DisableJs(); - } - } else { - if (GUILayout.Button(new GUIContent("Enable Js Support", "Folders can be restructured to enable pathfinding calls from Js instead of just from C#"))) { - EnableJs(); - } - } - } - - editorSettingsArea.End(); - } - - static void DrawColorSlider (ref float left, ref float right, bool editable) { - GUILayout.BeginHorizontal(); - GUILayout.Space(20); - GUILayout.BeginVertical(); - - GUILayout.Box("", astarSkin.GetStyle("ColorInterpolationBox")); - GUILayout.BeginHorizontal(); - if (editable) { - left = EditorGUILayout.IntField((int)left); - } else { - GUILayout.Label(left.ToString("0")); - } - GUILayout.FlexibleSpace(); - if (editable) { - right = EditorGUILayout.IntField((int)right); - } else { - GUILayout.Label(right.ToString("0")); - } - GUILayout.EndHorizontal(); - - GUILayout.EndVertical(); - GUILayout.Space(4); - GUILayout.EndHorizontal(); - } - - void DrawDebugSettings () { - alwaysVisibleArea.Begin(); - alwaysVisibleArea.HeaderLabel("Debug"); - alwaysVisibleArea.BeginFade(); - - script.logPathResults = (PathLog)EditorGUILayout.EnumPopup("Path Logging", script.logPathResults); - script.debugMode = (GraphDebugMode)EditorGUILayout.EnumPopup("Graph Coloring", script.debugMode); - - if (script.debugMode == GraphDebugMode.G || script.debugMode == GraphDebugMode.H || script.debugMode == GraphDebugMode.F || script.debugMode == GraphDebugMode.Penalty) { - script.manualDebugFloorRoof = !EditorGUILayout.Toggle("Automatic Limits", !script.manualDebugFloorRoof); - DrawColorSlider(ref script.debugFloor, ref script.debugRoof, script.manualDebugFloorRoof); - } - - script.showSearchTree = EditorGUILayout.Toggle("Show Search Tree", script.showSearchTree); - if (script.showSearchTree) { - EditorGUILayout.HelpBox("Show Search Tree is enabled, you may see rendering glitches in the graph rendering" + - " while the game is running. This is nothing to worry about and is simply due to the paths being calculated at the same time as the gizmos" + - " are being rendered. You can pause the game to see an accurate rendering.", MessageType.Info); - } - script.showUnwalkableNodes = EditorGUILayout.Toggle("Show Unwalkable Nodes", script.showUnwalkableNodes); - - if (script.showUnwalkableNodes) { - EditorGUI.indentLevel++; - script.unwalkableNodeDebugSize = EditorGUILayout.FloatField("Size", script.unwalkableNodeDebugSize); - EditorGUI.indentLevel--; - } - - alwaysVisibleArea.End(); - } - - void DrawColorSettings () { - colorSettingsArea.Begin(); - colorSettingsArea.Header("Colors"); - - if (colorSettingsArea.BeginFade()) { - // Make sure the object is not null - AstarColor colors = script.colorSettings = script.colorSettings ?? new AstarColor(); - - colors._NodeConnection = EditorGUILayout.ColorField(new GUIContent("Node Connection", "Color used for node connections when 'Path Debug Mode'='Connections'"), colors._NodeConnection); - colors._UnwalkableNode = EditorGUILayout.ColorField("Unwalkable Node", colors._UnwalkableNode); - colors._BoundsHandles = EditorGUILayout.ColorField("Bounds Handles", colors._BoundsHandles); - - colors._ConnectionLowLerp = EditorGUILayout.ColorField("Connection Gradient (low)", colors._ConnectionLowLerp); - colors._ConnectionHighLerp = EditorGUILayout.ColorField("Connection Gradient (high)", colors._ConnectionHighLerp); - - colors._MeshEdgeColor = EditorGUILayout.ColorField("Mesh Edge", colors._MeshEdgeColor); - - if (EditorResourceHelper.GizmoSurfaceMaterial != null && EditorResourceHelper.GizmoLineMaterial != null) { - EditorGUI.BeginChangeCheck(); - var col1 = EditorResourceHelper.GizmoSurfaceMaterial.color; - col1.a = EditorGUILayout.Slider("Navmesh Surface Opacity", col1.a, 0, 1); - - var col2 = EditorResourceHelper.GizmoLineMaterial.color; - col2.a = EditorGUILayout.Slider("Navmesh Outline Opacity", col2.a, 0, 1); - - var fade = EditorResourceHelper.GizmoSurfaceMaterial.GetColor("_FadeColor"); - fade.a = EditorGUILayout.Slider("Opacity Behind Objects", fade.a, 0, 1); - - if (EditorGUI.EndChangeCheck()) { - Undo.RecordObjects(new [] { EditorResourceHelper.GizmoSurfaceMaterial, EditorResourceHelper.GizmoLineMaterial }, "Change navmesh transparency"); - EditorResourceHelper.GizmoSurfaceMaterial.color = col1; - EditorResourceHelper.GizmoLineMaterial.color = col2; - EditorResourceHelper.GizmoSurfaceMaterial.SetColor("_FadeColor", fade); - EditorResourceHelper.GizmoLineMaterial.SetColor("_FadeColor", fade * new Color(1, 1, 1, 0.7f)); - } - } - - colors._AreaColors = colors._AreaColors ?? new Color[0]; - - // Custom Area Colors - customAreaColorsOpen = EditorGUILayout.Foldout(customAreaColorsOpen, "Custom Area Colors"); - if (customAreaColorsOpen) { - EditorGUI.indentLevel += 2; - - for (int i = 0; i < colors._AreaColors.Length; i++) { - GUILayout.BeginHorizontal(); - colors._AreaColors[i] = EditorGUILayout.ColorField("Area "+i+(i == 0 ? " (not used usually)" : ""), colors._AreaColors[i]); - if (GUILayout.Button(new GUIContent("", "Reset to the default color"), astarSkin.FindStyle("SmallReset"), GUILayout.Width(20))) { - colors._AreaColors[i] = UnityHelper.IntToColor(i, 1F); - } - GUILayout.EndHorizontal(); - } - - GUILayout.BeginHorizontal(); - EditorGUI.BeginDisabledGroup(colors._AreaColors.Length > 255); - - if (GUILayout.Button("Add New")) { - var newcols = new Color[colors._AreaColors.Length+1]; - colors._AreaColors.CopyTo(newcols, 0); - newcols[newcols.Length-1] = UnityHelper.IntToColor(newcols.Length-1, 1F); - colors._AreaColors = newcols; - } - - EditorGUI.EndDisabledGroup(); - EditorGUI.BeginDisabledGroup(colors._AreaColors.Length == 0); - - if (GUILayout.Button("Remove last") && colors._AreaColors.Length > 0) { - var newcols = new Color[colors._AreaColors.Length-1]; - for (int i = 0; i < colors._AreaColors.Length-1; i++) { - newcols[i] = colors._AreaColors[i]; - } - colors._AreaColors = newcols; - } - - EditorGUI.EndDisabledGroup(); - GUILayout.EndHorizontal(); - - EditorGUI.indentLevel -= 2; - } - - if (GUI.changed) { - colors.OnEnable(); - } - } - - colorSettingsArea.End(); - } - - /** Make sure every graph has a graph editor */ - void CheckGraphEditors (bool forceRebuild = false) { - if (forceRebuild || graphEditors == null || script.graphs == null || script.graphs.Length != graphEditors.Length) { - if (script.data.graphs == null) { - script.data.graphs = new NavGraph[0]; - } - - graphEditors = new GraphEditor[script.graphs.Length]; - - for (int i = 0; i < script.graphs.Length; i++) { - NavGraph graph = script.graphs[i]; - - if (graph == null) continue; - - if (graph.guid == new Guid()) { - graph.guid = Guid.NewGuid(); - } - - graphEditors[i] = CreateGraphEditor(graph); - } - } else { - for (int i = 0; i < script.graphs.Length; i++) { - if (script.graphs[i] == null) continue; - - if (graphEditors[i] == null || graphEditorTypes[script.graphs[i].GetType().Name].editorType != graphEditors[i].GetType()) { - CheckGraphEditors(true); - return; - } - - if (script.graphs[i].guid == new Guid()) { - script.graphs[i].guid = Guid.NewGuid(); - } - - graphEditors[i].target = script.graphs[i]; - } - } - } - - void RemoveGraph (NavGraph graph) { - script.data.RemoveGraph(graph); - CheckGraphEditors(true); - GUI.changed = true; - Repaint(); - } - - void AddGraph (System.Type type) { - script.data.AddGraph(type); - CheckGraphEditors(); - GUI.changed = true; - } - - /** Creates a GraphEditor for a graph */ - GraphEditor CreateGraphEditor (NavGraph graph) { - var graphType = graph.GetType().Name; - GraphEditor result; - - if (graphEditorTypes.ContainsKey(graphType)) { - result = System.Activator.CreateInstance(graphEditorTypes[graphType].editorType) as GraphEditor; - } else { - Debug.LogError("Couldn't find an editor for the graph type '" + graphType + "' There are " + graphEditorTypes.Count + " available graph editors"); - result = new GraphEditor(); - } - - result.editor = this; - result.fadeArea = new FadeArea(graph.open, this, level1AreaStyle, level1LabelStyle); - result.infoFadeArea = new FadeArea(graph.infoScreenOpen, this, null, null); - result.target = graph; - result.OnEnable(); - return result; - } - - bool HandleUndo () { - // The user has tried to undo something, apply that - if (script.data.GetData() == null) { - script.data.SetData(new byte[0]); - } else { - LoadGraphs(); - return true; - } - return false; - } - - /** Hashes the contents of a byte array */ - static int ByteArrayHash (byte[] arr) { - if (arr == null) return -1; - int hash = -1; - for (int i = 0; i < arr.Length; i++) { - hash ^= (arr[i]^i)*3221; - } - return hash; - } - - void SerializeIfDataChanged () { - uint checksum; - - byte[] bytes = SerializeGraphs(out checksum); - - int byteHash = ByteArrayHash(bytes); - int dataHash = ByteArrayHash(script.data.GetData()); - //Check if the data is different than the previous data, use checksums - bool isDifferent = checksum != ignoredChecksum && dataHash != byteHash; - - //Only save undo if the data was different from the last saved undo - if (isDifferent) { - //Assign the new data - script.data.SetData(bytes); - - EditorUtility.SetDirty(script); - Undo.IncrementCurrentGroup(); - Undo.RegisterCompleteObjectUndo(script, "A* Graph Settings"); - } - } - - /** Called when an undo or redo operation has been performed */ - void OnUndoRedoPerformed () { - if (!this) return; - - uint checksum; - byte[] bytes = SerializeGraphs(out checksum); - - //Check if the data is different than the previous data, use checksums - bool isDifferent = ByteArrayHash(script.data.GetData()) != ByteArrayHash(bytes); - - if (isDifferent) { - HandleUndo(); - } - - CheckGraphEditors(); - // Deserializing a graph does not necessarily yield the same hash as the data loaded from - // this is (probably) because editor settings are not saved all the time - // so we explicitly ignore the new hash - SerializeGraphs(out checksum); - ignoredChecksum = checksum; - } - - public void SaveGraphsAndUndo (EventType et = EventType.Used, string eventCommand = "") { - // Serialize the settings of the graphs - - // Dont process undo events in editor, we don't want to reset graphs - // Also don't do this if the graph is being updated as serializing the graph - // might interfere with that (in particular it might unblock the path queue) - if (Application.isPlaying || script.isScanning || script.IsAnyWorkItemInProgress) { - return; - } - - if ((Undo.GetCurrentGroup() != lastUndoGroup || et == EventType.MouseUp) && eventCommand != "UndoRedoPerformed") { - SerializeIfDataChanged(); - - lastUndoGroup = Undo.GetCurrentGroup(); - } - - if (Event.current == null || script.data.GetData() == null) { - SerializeIfDataChanged(); - return; - } - } - - /** Load graphs from serialized data */ - public void LoadGraphs () { - DeserializeGraphs(); - } - - public byte[] SerializeGraphs (out uint checksum) { - var settings = SerializeSettings.Settings; - - settings.editorSettings = true; - return SerializeGraphs(settings, out checksum); - } - - public byte[] SerializeGraphs (SerializeSettings settings, out uint checksum) { - byte[] bytes = null; - uint tmpChecksum = 0; - - // Serialize all graph editors - var output = new System.Text.StringBuilder(); - for (int i = 0; i < graphEditors.Length; i++) { - if (graphEditors[i] == null) continue; - output.Length = 0; - TinyJsonSerializer.Serialize(graphEditors[i], output); - (graphEditors[i].target as IGraphInternals).SerializedEditorSettings = output.ToString(); - } - // Serialize all graphs (including serialized editor data) - bytes = script.data.SerializeGraphs(settings, out tmpChecksum); - - // Make sure the above work item is executed immediately - AstarPath.active.FlushWorkItems(); - checksum = tmpChecksum; - return bytes; - } - - void DeserializeGraphs () { - if (script.data.GetData() == null || script.data.GetData().Length == 0) { - script.data.graphs = new NavGraph[0]; - } else { - DeserializeGraphs(script.data.GetData()); - } - } - - void DeserializeGraphs (byte[] bytes) { - try { - script.data.DeserializeGraphs(bytes); - // Make sure every graph has a graph editor - CheckGraphEditors(); - // Deserialize editor settings - for (int i = 0; i < graphEditors.Length; i++) { - var data = (graphEditors[i].target as IGraphInternals).SerializedEditorSettings; - if (data != null) TinyJsonDeserializer.Deserialize(data, graphEditors[i].GetType(), graphEditors[i]); - } - } catch (System.Exception e) { - Debug.LogError("Failed to deserialize graphs"); - Debug.LogException(e); - script.data.SetData(null); - } - } - - [MenuItem("Edit/Pathfinding/Scan All Graphs %&s")] - public static void MenuScan () { - if (AstarPath.active == null) { - AstarPath.active = FindObjectOfType(); - if (AstarPath.active == null) { - return; - } - } - - if (!Application.isPlaying && (AstarPath.active.data.graphs == null || AstarPath.active.data.graphTypes == null)) { - EditorUtility.DisplayProgressBar("Scanning", "Deserializing", 0); - AstarPath.active.data.DeserializeGraphs(); - } - - try { - var lastMessageTime = Time.realtimeSinceStartup; - foreach (var p in AstarPath.active.ScanAsync()) { - // Displaying the progress bar is pretty slow, so don't do it too often - if (Time.realtimeSinceStartup - lastMessageTime > 0.2f) { - // Display a progress bar of the scan - UnityEditor.EditorUtility.DisplayProgressBar("Scanning", p.description, p.progress); - lastMessageTime = Time.realtimeSinceStartup; - } - } - } catch (System.Exception e) { - Debug.LogError("There was an error generating the graphs:\n"+e+"\n\nIf you think this is a bug, please contact me on forum.arongranberg.com (post a new thread)\n"); - EditorUtility.DisplayDialog("Error Generating Graphs", "There was an error when generating graphs, check the console for more info", "Ok"); - throw e; - } finally { - EditorUtility.ClearProgressBar(); - } - } - - /** Searches in the current assembly for GraphEditor and NavGraph types */ - void FindGraphTypes () { - graphEditorTypes = new Dictionary(); - - Assembly asm = Assembly.GetAssembly(typeof(AstarPathEditor)); - System.Type[] types = asm.GetTypes(); - var graphList = new List(); - - // Iterate through the assembly for classes which inherit from GraphEditor - foreach (var type in types) { - System.Type baseType = type.BaseType; - while (!System.Type.Equals(baseType, null)) { - if (System.Type.Equals(baseType, typeof(GraphEditor))) { - System.Object[] att = type.GetCustomAttributes(false); - - // Loop through the attributes for the CustomGraphEditorAttribute attribute - foreach (System.Object attribute in att) { - var cge = attribute as CustomGraphEditorAttribute; - - if (cge != null && !System.Type.Equals(cge.graphType, null)) { - cge.editorType = type; - graphList.Add(cge.graphType); - graphEditorTypes.Add(cge.graphType.Name, cge); - } - } - break; - } - - baseType = baseType.BaseType; - } - } - - // Make sure graph types (not graph editor types) are also up to date - script.data.FindGraphTypes(); - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/AstarPathEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/AstarPathEditor.cs.meta deleted file mode 100644 index 71b7d411e581edd2171360c41ce9e924b359d1a2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/AstarPathEditor.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: aa27fa41f8abe460a8b64e13d7be43ad -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateChecker.cs b/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateChecker.cs deleted file mode 100644 index ed788db50ea39c579fe3503531405b84f2a05401..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateChecker.cs +++ /dev/null @@ -1,283 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; -using System.Linq; - -namespace Pathfinding { - /** Handles update checking for the A* Pathfinding Project */ - [InitializeOnLoad] - public static class AstarUpdateChecker { - /** Used for downloading new version information */ - static WWW updateCheckDownload; - - static System.DateTime _lastUpdateCheck; - static bool _lastUpdateCheckRead; - - static System.Version _latestVersion; - - static System.Version _latestBetaVersion; - - /** Description of the latest update of the A* Pathfinding Project */ - static string _latestVersionDescription; - - static bool hasParsedServerMessage; - - /** Number of days between update checks */ - const double updateCheckRate = 1F; - - /** URL to the version file containing the latest version number. */ - const string updateURL = "http://www.arongranberg.com/astar/version.php"; - - /** Last time an update check was made */ - public static System.DateTime lastUpdateCheck { - get { - try { - // Reading from EditorPrefs is relatively slow, avoid it - if (_lastUpdateCheckRead) return _lastUpdateCheck; - - _lastUpdateCheck = System.DateTime.Parse(EditorPrefs.GetString("AstarLastUpdateCheck", "1/1/1971 00:00:01"), System.Globalization.CultureInfo.InvariantCulture); - _lastUpdateCheckRead = true; - } - catch (System.FormatException) { - lastUpdateCheck = System.DateTime.UtcNow; - Debug.LogWarning("Invalid DateTime string encountered when loading from preferences"); - } - return _lastUpdateCheck; - } - private set { - _lastUpdateCheck = value; - EditorPrefs.SetString("AstarLastUpdateCheck", _lastUpdateCheck.ToString(System.Globalization.CultureInfo.InvariantCulture)); - } - } - - /** Latest version of the A* Pathfinding Project */ - public static System.Version latestVersion { - get { - RefreshServerMessage(); - return _latestVersion ?? AstarPath.Version; - } - private set { - _latestVersion = value; - } - } - - /** Latest beta version of the A* Pathfinding Project */ - public static System.Version latestBetaVersion { - get { - RefreshServerMessage(); - return _latestBetaVersion ?? AstarPath.Version; - } - private set { - _latestBetaVersion = value; - } - } - - /** Summary of the latest update */ - public static string latestVersionDescription { - get { - RefreshServerMessage(); - return _latestVersionDescription ?? ""; - } - private set { - _latestVersionDescription = value; - } - } - - /** Holds various URLs and text for the editor. - * This info can be updated when a check for new versions is done to ensure that there are no invalid links. - */ - static Dictionary astarServerData = new Dictionary { - { "URL:modifiers", "http://www.arongranberg.com/astar/docs/modifiers.php" }, - { "URL:astarpro", "http://arongranberg.com/unity/a-pathfinding/astarpro/" }, - { "URL:documentation", "http://arongranberg.com/astar/docs/" }, - { "URL:findoutmore", "http://arongranberg.com/astar" }, - { "URL:download", "http://arongranberg.com/unity/a-pathfinding/download" }, - { "URL:changelog", "http://arongranberg.com/astar/docs/changelog.php" }, - { "URL:tags", "http://arongranberg.com/astar/docs/tags.php" }, - { "URL:homepage", "http://arongranberg.com/astar/" } - }; - - static AstarUpdateChecker() { - // Add a callback so that we can parse the message when it has been downloaded - EditorApplication.update += UpdateCheckLoop; - } - - static void RefreshServerMessage () { - if (!hasParsedServerMessage) { - var serverMessage = EditorPrefs.GetString("AstarServerMessage"); - - if (!string.IsNullOrEmpty(serverMessage)) { - ParseServerMessage(serverMessage); - ShowUpdateWindowIfRelevant(); - } - } - } - - public static string GetURL (string tag) { - RefreshServerMessage(); - string url; - astarServerData.TryGetValue("URL:"+tag, out url); - return url ?? ""; - } - - /** Initiate a check for updates now, regardless of when the last check was done */ - public static void CheckForUpdatesNow () { - lastUpdateCheck = System.DateTime.UtcNow.AddDays(-5); - - // Remove the callback if it already exists - EditorApplication.update -= UpdateCheckLoop; - - // Add a callback so that we can parse the message when it has been downloaded - EditorApplication.update += UpdateCheckLoop; - } - - /** - * Checking for updates... - * Should be called from EditorApplication.update - */ - static void UpdateCheckLoop () { - // Go on until the update check has been completed - if (!CheckForUpdates()) { - EditorApplication.update -= UpdateCheckLoop; - } - } - - /** Checks for updates if there was some time since last check. - * It must be called repeatedly to ensure that the result is processed. - * \returns True if an update check is progressing (WWW request) - */ - static bool CheckForUpdates () { - if (updateCheckDownload != null && updateCheckDownload.isDone) { - if (!string.IsNullOrEmpty(updateCheckDownload.error)) { - Debug.LogWarning("There was an error checking for updates to the A* Pathfinding Project\n" + - "The error might disappear if you switch build target from Webplayer to Standalone because of the webplayer security emulation\nError: " + - updateCheckDownload.error); - updateCheckDownload = null; - return false; - } - UpdateCheckCompleted(updateCheckDownload.text); - updateCheckDownload = null; - } - - // Check if it is time to check for updates - // Check for updates a bit earlier if we are in play mode or have the AstarPath object in the scene - // as then the collected statistics will be a bit more accurate - var offsetMinutes = (Application.isPlaying && Time.time > 60) || AstarPath.active != null ? -20 : 20; - var minutesUntilUpdate = lastUpdateCheck.AddDays(updateCheckRate).AddMinutes(offsetMinutes).Subtract(System.DateTime.UtcNow).TotalMinutes; - if (minutesUntilUpdate < 0) { - DownloadVersionInfo(); - } - - return updateCheckDownload != null || minutesUntilUpdate < 10; - } - - static void DownloadVersionInfo () { - var script = AstarPath.active != null ? AstarPath.active : GameObject.FindObjectOfType(typeof(AstarPath)) as AstarPath; - - if (script != null) { - script.ConfigureReferencesInternal(); - if ((!Application.isPlaying && (script.data.graphs == null || script.data.graphs.Length == 0)) || script.data.graphs == null) { - script.data.DeserializeGraphs(); - } - } - - bool mecanim = GameObject.FindObjectOfType(typeof(Animator)) != null; - string query = updateURL+ - "?v="+AstarPath.Version+ - "&pro=1"+ - "&check="+updateCheckRate+"&distr="+AstarPath.Distribution+ - "&unitypro="+(Application.HasProLicense() ? "1" : "0")+ - "&inscene="+(script != null ? "1" : "0")+ - "&targetplatform="+EditorUserBuildSettings.activeBuildTarget+ - "&devplatform="+Application.platform+ - "&mecanim="+(mecanim ? "1" : "0")+ - "&hasNavmesh=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "NavMeshGraph") ? 1 : 0) + - "&hasPoint=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "PointGraph") ? 1 : 0) + - "&hasGrid=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "GridGraph") ? 1 : 0) + - "&hasLayered=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "LayerGridGraph") ? 1 : 0) + - "&hasRecast=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "RecastGraph") ? 1 : 0) + - "&hasGrid=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "GridGraph") ? 1 : 0) + - "&hasCustom=" + (script != null && script.data.graphs.Any(g => g != null && !g.GetType().FullName.Contains("Pathfinding.")) ? 1 : 0) + - "&graphCount=" + (script != null ? script.data.graphs.Count(g => g != null) : 0) + - "&unityversion="+Application.unityVersion + - "&branch="+AstarPath.Branch; - - updateCheckDownload = new WWW(query); - lastUpdateCheck = System.DateTime.UtcNow; - } - - /** Handles the data from the update page */ - static void UpdateCheckCompleted (string result) { - EditorPrefs.SetString("AstarServerMessage", result); - ParseServerMessage(result); - ShowUpdateWindowIfRelevant(); - } - - static void ParseServerMessage (string result) { - if (string.IsNullOrEmpty(result)) { - return; - } - - hasParsedServerMessage = true; - - #if ASTARDEBUG - Debug.Log("Result from update check:\n"+result); - #endif - - string[] splits = result.Split('|'); - latestVersionDescription = splits.Length > 1 ? splits[1] : ""; - - if (splits.Length > 4) { - // First 4 are just compatibility fields - var fields = splits.Skip(4).ToArray(); - - // Take all pairs of fields - for (int i = 0; i < (fields.Length/2)*2; i += 2) { - string key = fields[i]; - string val = fields[i+1]; - astarServerData[key] = val; - } - } - - try { - latestVersion = new System.Version(astarServerData["VERSION:branch"]); - } catch (System.Exception ex) { - Debug.LogWarning("Could not parse version\n"+ex); - } - - try { - latestBetaVersion = new System.Version(astarServerData["VERSION:beta"]); - } catch (System.Exception ex) { - Debug.LogWarning("Could not parse version\n"+ex); - } - } - - static void ShowUpdateWindowIfRelevant () { - try { - System.DateTime remindDate; - var remindVersion = new System.Version(EditorPrefs.GetString("AstarRemindUpdateVersion", "0.0.0.0")); - if (latestVersion == remindVersion && System.DateTime.TryParse(EditorPrefs.GetString("AstarRemindUpdateDate", "1/1/1971 00:00:01"), out remindDate)) { - if (System.DateTime.UtcNow < remindDate) { - // Don't remind yet - return; - } - } else { - EditorPrefs.DeleteKey("AstarRemindUpdateDate"); - EditorPrefs.DeleteKey("AstarRemindUpdateVersion"); - } - } catch { - Debug.LogError("Invalid AstarRemindUpdateVersion or AstarRemindUpdateDate"); - } - - var skipVersion = new System.Version(EditorPrefs.GetString("AstarSkipUpToVersion", AstarPath.Version.ToString())); - - if (AstarPathEditor.FullyDefinedVersion(latestVersion) != AstarPathEditor.FullyDefinedVersion(skipVersion) && AstarPathEditor.FullyDefinedVersion(latestVersion) > AstarPathEditor.FullyDefinedVersion(AstarPath.Version)) { - EditorPrefs.DeleteKey("AstarSkipUpToVersion"); - EditorPrefs.DeleteKey("AstarRemindUpdateDate"); - EditorPrefs.DeleteKey("AstarRemindUpdateVersion"); - - AstarUpdateWindow.Init(latestVersion, latestVersionDescription); - } - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateChecker.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateChecker.cs.meta deleted file mode 100644 index fd7da51c42101c588a0eaf7c9949f7a4bd17cc82..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateChecker.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8df9913c9ee004459b24d89644e573d7 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateWindow.cs b/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateWindow.cs deleted file mode 100644 index 61a29cfb22061ba110300eab7dbdd185f8e7bdd4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateWindow.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace Pathfinding { - public class AstarUpdateWindow : EditorWindow { - static GUIStyle largeStyle; - static GUIStyle normalStyle; - Version version; - string summary; - bool setReminder; - - public static AstarUpdateWindow Init (Version version, string summary) { - // Get existing open window or if none, make a new one: - AstarUpdateWindow window = EditorWindow.GetWindow(true, "", true); - - window.position = new Rect(Screen.currentResolution.width/2 - 300, Mathf.Max(5, Screen.currentResolution.height/3 - 150), 600, 400); - window.version = version; - window.summary = summary; -#if UNITY_4_6 || UNITY_5_0 - window.title = "New Version of the A* Pathfinding Project"; -#else - window.titleContent = new GUIContent("New Version of the A* Pathfinding Project"); -#endif - return window; - } - - public void OnDestroy () { - if (version != null && !setReminder) { - Debug.Log("Closed window, reminding again tomorrow"); - EditorPrefs.SetString("AstarRemindUpdateDate", DateTime.UtcNow.AddDays(1).ToString(System.Globalization.CultureInfo.InvariantCulture)); - EditorPrefs.SetString("AstarRemindUpdateVersion", version.ToString()); - } - } - - void OnGUI () { - if (largeStyle == null) { - largeStyle = new GUIStyle(EditorStyles.largeLabel); - largeStyle.fontSize = 32; - largeStyle.alignment = TextAnchor.UpperCenter; - largeStyle.richText = true; - - normalStyle = new GUIStyle(EditorStyles.label); - normalStyle.wordWrap = true; - normalStyle.richText = true; - } - - if (version == null) { - return; - } - - GUILayout.Label("New Update Available!", largeStyle); - GUILayout.Label("There is a new version of the A* Pathfinding Project available for download.\n" + - "The new version is " + version + " you have " + AstarPath.Version + "\n\n"+ - "Summary:\n"+summary, normalStyle - ); - - GUILayout.FlexibleSpace(); - - GUILayout.BeginHorizontal(); - GUILayout.FlexibleSpace(); - - GUILayout.BeginVertical(); - - Color col = GUI.color; - GUI.backgroundColor *= new Color(0.5f, 1f, 0.5f); - if (GUILayout.Button("Take me to the download page!", GUILayout.Height(30), GUILayout.MaxWidth(300))) { - Application.OpenURL(AstarUpdateChecker.GetURL("download")); - } - GUI.backgroundColor = col; - - - if (GUILayout.Button("What's new? (full changelog)")) { - Application.OpenURL(AstarUpdateChecker.GetURL("changelog")); - } - - GUILayout.EndVertical(); - - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - - GUILayout.FlexibleSpace(); - - GUILayout.BeginHorizontal(); - - if (GUILayout.Button("Skip this version", GUILayout.MaxWidth(100))) { - EditorPrefs.SetString("AstarSkipUpToVersion", version.ToString()); - setReminder = true; - Close(); - } - - if (GUILayout.Button("Remind me later ( 1 week )", GUILayout.MaxWidth(200))) { - EditorPrefs.SetString("AstarRemindUpdateDate", DateTime.UtcNow.AddDays(7).ToString(System.Globalization.CultureInfo.InvariantCulture)); - EditorPrefs.SetString("AstarRemindUpdateVersion", version.ToString()); - setReminder = true; - Close(); - } - - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateWindow.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateWindow.cs.meta deleted file mode 100644 index 624c04dc746ea5b1552399bb10011f2f95d1440e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/AstarUpdateWindow.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 97d8d5fc46a644f22b0d66c6ee18e753 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/CustomGraphEditorAttribute.cs b/Unity/Assets/Editor/AstarPathfindingProject/CustomGraphEditorAttribute.cs deleted file mode 100644 index 08a162f4369293a2bdcb1b6072f74af1db8ecbad..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/CustomGraphEditorAttribute.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace Pathfinding { - /** Added to editors of custom graph types */ - [System.AttributeUsage(System.AttributeTargets.All, Inherited = false, AllowMultiple = true)] - public class CustomGraphEditorAttribute : System.Attribute { - /** Graph type which this is an editor for */ - public System.Type graphType; - - /** Name displayed in the inpector */ - public string displayName; - - /** Type of the editor for the graph */ - public System.Type editorType; - - public CustomGraphEditorAttribute (System.Type t, string displayName) { - graphType = t; - this.displayName = displayName; - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/CustomGraphEditorAttribute.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/CustomGraphEditorAttribute.cs.meta deleted file mode 100644 index 796cadccd2ab2c5519a03741479a730180fc6720..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/CustomGraphEditorAttribute.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 576dcf42aca804a48b5923974edaee01 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets.meta deleted file mode 100644 index 20e1937f0c968773de03ec38230879a8b4102326..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 43c4f2e196bd25a429f1383adc6615a4 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinDark.guiskin b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinDark.guiskin deleted file mode 100644 index 8c1042a7aa8658475cc44b17cc4bb6a4443aaf31..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinDark.guiskin +++ /dev/null @@ -1,2715 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 1 - m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0} - m_Name: AstarEditorSkinDark - m_EditorClassIdentifier: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_box: - m_Name: box - m_Normal: - m_Background: {fileID: 11001, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 1 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_button: - m_Name: button - m_Normal: - m_Background: {fileID: -573041650897247223, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: -1537457205435906773, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: -7527060558648309217, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: -8766172725880940643, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 7832598784815925287, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: -9059002882264723198, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: -4454209017672384243, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: -4993635991501620529, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnActive: - m_Background: {fileID: 4047951448802137905, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: 7382603045041641420, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnFocused: - m_Background: {fileID: 8556163245987529883, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: 8718812295543890339, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 4 - m_Bottom: 4 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 3 - m_Bottom: 3 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 2 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 4 - m_WordWrap: 0 - m_RichText: 0 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_toggle: - m_Name: toggle - m_Normal: - m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.89112896, g: 0.89112896, b: 0.89112896, a: 1} - m_Hover: - m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.8901961, g: 0.8901961, b: 0.8901961, a: 1} - m_OnHover: - m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnActive: - m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 14 - m_Right: 0 - m_Top: 14 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 15 - m_Right: 0 - m_Top: 3 - m_Bottom: 0 - m_Overflow: - m_Left: -1 - m_Right: 0 - m_Top: -4 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_label: - m_Name: label - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.86734694, g: 0.86734694, b: 0.86734694, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 1 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_textField: - m_Name: textfield - m_Normal: - m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} - m_Hover: - m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 3 - m_Right: 3 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 3 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_textArea: - m_Name: textarea - m_Normal: - m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} - m_Hover: - m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 3 - m_Right: 3 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 1 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_window: - m_Name: window - m_Normal: - m_Background: {fileID: 11023, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 18 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 10 - m_Right: 10 - m_Top: 20 - m_Bottom: 10 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 1 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: -18} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalSlider: - m_Name: horizontalslider - m_Normal: - m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 3 - m_Right: 3 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: -1 - m_Right: -1 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -2 - m_Bottom: -3 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 12 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalSliderThumb: - m_Name: horizontalsliderthumb - m_Normal: - m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 4 - m_Right: 4 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 7 - m_Right: 7 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: -1 - m_Right: -1 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 12 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalSlider: - m_Name: verticalslider - m_Normal: - m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 3 - m_Bottom: 3 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: -1 - m_Overflow: - m_Left: -2 - m_Right: -3 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 12 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 1 - m_verticalSliderThumb: - m_Name: verticalsliderthumb - m_Normal: - m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 7 - m_Bottom: 7 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: -1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 12 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 1 - m_horizontalScrollbar: - m_Name: horizontalscrollbar - m_Normal: - m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 9 - m_Right: 9 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 1 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 15 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalScrollbarThumb: - m_Name: horizontalscrollbarthumb - m_Normal: - m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 13 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalScrollbarLeftButton: - m_Name: horizontalscrollbarleftbutton - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalScrollbarRightButton: - m_Name: horizontalscrollbarrightbutton - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalScrollbar: - m_Name: verticalscrollbar - m_Normal: - m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 9 - m_Bottom: 9 - m_Margin: - m_Left: 1 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 1 - m_Bottom: 1 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 15 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalScrollbarThumb: - m_Name: verticalscrollbarthumb - m_Normal: - m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 6 - m_Bottom: 6 - m_Overflow: - m_Left: -1 - m_Right: -1 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 15 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 1 - m_verticalScrollbarUpButton: - m_Name: verticalscrollbarupbutton - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalScrollbarDownButton: - m_Name: verticalscrollbardownbutton - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_ScrollView: - m_Name: scrollview - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_CustomStyles: - - m_Name: PixelBox - m_Normal: - m_Background: {fileID: 2800000, guid: 5d951d0a838a34f40ac2b9ce8968a7d6, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 8 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 4 - m_Bottom: 6 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 1 - m_Right: 1 - m_Top: 0 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: ColorInterpolationBox - m_Normal: - m_Background: {fileID: 2800000, guid: 0790ee8db18ed49ed8369be285199835, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 7 - m_Right: 7 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 6 - m_Bottom: 4 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 0 - m_Bottom: 4 - m_Overflow: - m_Left: 1 - m_Right: 1 - m_Top: 0 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 12 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: StretchWidth - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: BoxHeader - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.6334038, g: 0.63352257, b: 0.6333745, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.7397959, g: 0.7397959, b: 0.7397959, a: 1} - m_Focused: - m_Background: {fileID: 2800000, guid: db5b85df63e094a1c96f11019bccc577, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.63529414, g: 0.63529414, b: 0.63529414, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 8 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 8 - m_Right: 6 - m_Top: 2 - m_Bottom: 2 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 1 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 0 - m_TextClipping: 0 - m_ImagePosition: 3 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 18 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: TopBoxHeader - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.6334038, g: 0.63352257, b: 0.6333745, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.7397959, g: 0.7397959, b: 0.7397959, a: 1} - m_Focused: - m_Background: {fileID: 2800000, guid: db5b85df63e094a1c96f11019bccc577, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.63529414, g: 0.63529414, b: 0.63529414, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 8 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 0 - m_Bottom: 2 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 1 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 0 - m_TextClipping: 3 - m_ImagePosition: 3 - m_ContentOffset: {x: 0, y: 5} - m_FixedWidth: 0 - m_FixedHeight: 24 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: PixelBox3 - m_Normal: - m_Background: {fileID: 2800000, guid: 7991166a167af4b4793b4fc8fcc3bfe2, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 9043fef44c60647b7a763eb86f912ba1, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 8 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 5 - m_Bottom: 2 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 2 - m_Bottom: 2 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: PixelButton - m_Normal: - m_Background: {fileID: 2800000, guid: b5a4a564ac2dc4261a13719673f157e1, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: c730485723dee4bcbad9d8a7593a8799, type: 3} - m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: d0f7738d6b5b2420b9a77bfef3926e2a, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: b9d7d6d7befb34b9c889e6195746c452, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 8 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 4 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: -1 - m_Right: 1 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 16 - m_FixedHeight: 16 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: LinkButton - m_Normal: - m_Background: {fileID: 2800000, guid: 53ee29e7cbeb545bcb1ca238a2736fb8, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 1066e2a70f10b481984312db993dadc8, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 34 - m_FixedHeight: 34 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: CloseButton - m_Normal: - m_Background: {fileID: 2800000, guid: 9496521dd08a64ed2a92bc4e90a3a271, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 921542314cf2f4a55952ad059454677e, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: -2 - m_Right: 2 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 13 - m_FixedHeight: 13 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: GridPivotSelectButton - m_Normal: - m_Background: {fileID: 2800000, guid: 37972c32346084c13bfddb8c3dbed143, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 7ea4fc739ffbb4af1a466f655bf1d178, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 2800000, guid: 7ea4fc739ffbb4af1a466f655bf1d178, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 2800000, guid: 37972c32346084c13bfddb8c3dbed143, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: GridPivotSelectBackground - m_Normal: - m_Background: {fileID: 2800000, guid: 11b8d44fcb3cf4c048a576df708e0ec6, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 7 - m_Right: 4 - m_Top: 14 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: CollisionHeader - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.6334038, g: 0.63352257, b: 0.6333745, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 6 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 1 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 3 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: InfoButton - m_Normal: - m_Background: {fileID: 2800000, guid: 1986ec06d68774254928f44b896a3913, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 623f6adf01f324cb7bc6aefe7f87d623, type: 3} - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: d008deade2077407fbf14446df2547c9, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 9b266e42522c048f6b62832985be51ed, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 2800000, guid: d008deade2077407fbf14446df2547c9, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 9b266e42522c048f6b62832985be51ed, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 2800000, guid: 1986ec06d68774254928f44b896a3913, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 623f6adf01f324cb7bc6aefe7f87d623, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 1 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 1 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 16 - m_FixedHeight: 16 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: PixelBox3Separator - m_Normal: - m_Background: {fileID: 2800000, guid: 3a08de11a34c44da28de4c086fd13461, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 3 - m_Right: 3 - m_Top: 8 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 1 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -2 - m_Bottom: 2 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 4 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: GridSizeLock - m_Normal: - m_Background: {fileID: 2800000, guid: c43744025f7024e20b5fe880600d19a7, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 957d0fd6ae3494da9aed50c5d7d7ce4e, type: 3} - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: aaae516f9c5404f77a3e586cdd59695b, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 6c38830c1556942fcb6ce893085d1daa, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 2800000, guid: aaae516f9c5404f77a3e586cdd59695b, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 6c38830c1556942fcb6ce893085d1daa, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 2800000, guid: c43744025f7024e20b5fe880600d19a7, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 957d0fd6ae3494da9aed50c5d7d7ce4e, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 5 - m_Right: 0 - m_Top: 1 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 27 - m_FixedHeight: 28 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: UpArrow - m_Normal: - m_Background: {fileID: 2800000, guid: b1722c752c8754c5281b2efd6cf8477c, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 4c914fdaf554243fe9fb26afc323caef, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 11 - m_FixedHeight: 10 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: DownArrow - m_Normal: - m_Background: {fileID: 2800000, guid: 12ea2fbedc5cc4bd191d795f44b2de75, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: d8951099054c64beaaa49d675d71cfcf, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 11 - m_FixedHeight: 10 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: SmallReset - m_Normal: - m_Background: {fileID: 2800000, guid: fb3e1d793e4f0459f8b913d0d2d76e6c, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 990963b32226c440fb1a72e47e0ad7a2, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 1 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 12 - m_FixedHeight: 12 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: GizmoButton - m_Normal: - m_Background: {fileID: 2800000, guid: b05124c2b9dc5429a84ef0195a916fce, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 3772050cdbd2a472789aa76d6de5b270, type: 3} - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 54ad5f6eb8a9349568e58cd1204388a2, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: a454b67ef7bd04780aca99e364202679, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 2800000, guid: 54ad5f6eb8a9349568e58cd1204388a2, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: a454b67ef7bd04780aca99e364202679, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 2800000, guid: b05124c2b9dc5429a84ef0195a916fce, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 3772050cdbd2a472789aa76d6de5b270, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 1 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 16 - m_FixedHeight: 16 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: EditButton - m_Normal: - m_Background: {fileID: 2800000, guid: 705155b2c3fce47f0a818ac32d5abe3f, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: e8ebb72a41d314b288545fddfd20cafd, type: 3} - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: e0cb3cc51f25a48bf8b0c647452b09b1, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: f6a4baf90a7bb4e4a92abe07f1a0a9d3, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: - - {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: - - {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 1 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 16 - m_FixedHeight: 16 - m_StretchWidth: 0 - m_StretchHeight: 0 - m_Settings: - m_DoubleClickSelectsWord: 1 - m_TripleClickSelectsLine: 1 - m_CursorColor: {r: 1, g: 1, b: 1, a: 1} - m_CursorFlashSpeed: -1 - m_SelectionColor: {r: 1, g: 0.38403907, b: 0, a: 0.7} ---- !u!1002 &11400001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinDark.guiskin.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinDark.guiskin.meta deleted file mode 100644 index 052aa3fc671599e4bb8b81defb317f450a7b2abf..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinDark.guiskin.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 8fc713511eb5d4fb9937ab63de6af346 diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinLight.guiskin b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinLight.guiskin deleted file mode 100644 index 3d87777ad948ce22147641576604180385cb5200..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinLight.guiskin +++ /dev/null @@ -1,2715 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 1 - m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0} - m_Name: AstarEditorSkinLight - m_EditorClassIdentifier: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_box: - m_Name: box - m_Normal: - m_Background: {fileID: 11001, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 1 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_button: - m_Name: button - m_Normal: - m_Background: {fileID: -573041650897247223, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: -1537457205435906773, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: -7527060558648309217, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: -8766172725880940643, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 7832598784815925287, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: -9059002882264723198, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: -4454209017672384243, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: -4993635991501620529, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnActive: - m_Background: {fileID: 4047951448802137905, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: 7382603045041641420, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnFocused: - m_Background: {fileID: 8556163245987529883, guid: 0000000000000000d000000000000000, - type: 0} - m_ScaledBackgrounds: - - {fileID: 8718812295543890339, guid: 0000000000000000d000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 4 - m_Bottom: 4 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 3 - m_Bottom: 3 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 2 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 4 - m_WordWrap: 0 - m_RichText: 0 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_toggle: - m_Name: toggle - m_Normal: - m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.89112896, g: 0.89112896, b: 0.89112896, a: 1} - m_Hover: - m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.8901961, g: 0.8901961, b: 0.8901961, a: 1} - m_OnHover: - m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnActive: - m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 14 - m_Right: 0 - m_Top: 14 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 15 - m_Right: 0 - m_Top: 3 - m_Bottom: 0 - m_Overflow: - m_Left: -1 - m_Right: 0 - m_Top: -4 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_label: - m_Name: label - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 1 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_textField: - m_Name: textfield - m_Normal: - m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} - m_Hover: - m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 3 - m_Right: 3 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 3 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_textArea: - m_Name: textarea - m_Normal: - m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} - m_Hover: - m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 3 - m_Right: 3 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 1 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_window: - m_Name: window - m_Normal: - m_Background: {fileID: 11023, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 18 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 10 - m_Right: 10 - m_Top: 20 - m_Bottom: 10 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 1 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: -18} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalSlider: - m_Name: horizontalslider - m_Normal: - m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 3 - m_Right: 3 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: -1 - m_Right: -1 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -2 - m_Bottom: -3 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 12 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalSliderThumb: - m_Name: horizontalsliderthumb - m_Normal: - m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 4 - m_Right: 4 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 7 - m_Right: 7 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: -1 - m_Right: -1 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 12 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalSlider: - m_Name: verticalslider - m_Normal: - m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 3 - m_Bottom: 3 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: -1 - m_Overflow: - m_Left: -2 - m_Right: -3 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 12 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 1 - m_verticalSliderThumb: - m_Name: verticalsliderthumb - m_Normal: - m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 7 - m_Bottom: 7 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: -1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 12 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 1 - m_horizontalScrollbar: - m_Name: horizontalscrollbar - m_Normal: - m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 9 - m_Right: 9 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 1 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 15 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalScrollbarThumb: - m_Name: horizontalscrollbarthumb - m_Normal: - m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 13 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalScrollbarLeftButton: - m_Name: horizontalscrollbarleftbutton - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalScrollbarRightButton: - m_Name: horizontalscrollbarrightbutton - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalScrollbar: - m_Name: verticalscrollbar - m_Normal: - m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 9 - m_Bottom: 9 - m_Margin: - m_Left: 1 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 1 - m_Bottom: 1 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 15 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalScrollbarThumb: - m_Name: verticalscrollbarthumb - m_Normal: - m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 6 - m_Bottom: 6 - m_Overflow: - m_Left: -1 - m_Right: -1 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 15 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 1 - m_verticalScrollbarUpButton: - m_Name: verticalscrollbarupbutton - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalScrollbarDownButton: - m_Name: verticalscrollbardownbutton - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_ScrollView: - m_Name: scrollview - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_CustomStyles: - - m_Name: PixelBox - m_Normal: - m_Background: {fileID: 2800000, guid: 2fa6580cc9f7f40919411d1ed85c6fe1, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 8 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 4 - m_Bottom: 6 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 1 - m_Right: 1 - m_Top: 0 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: ColorInterpolationBox - m_Normal: - m_Background: {fileID: 2800000, guid: 9bf4f8f9d8795455bb87213dd56ed793, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 7 - m_Right: 7 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 6 - m_Bottom: 4 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 0 - m_Bottom: 4 - m_Overflow: - m_Left: 1 - m_Right: 1 - m_Top: 0 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 12 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: StretchWidth - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: BoxHeader - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.7397959, g: 0.7397959, b: 0.7397959, a: 1} - m_Focused: - m_Background: {fileID: 2800000, guid: 620f088d04c284b21939ce24996fdbee, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12156863, g: 0.12156863, b: 0.12156863, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 8 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 8 - m_Right: 6 - m_Top: 2 - m_Bottom: 2 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 1 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 0 - m_TextClipping: 0 - m_ImagePosition: 3 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 18 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: TopBoxHeader - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.7397959, g: 0.7397959, b: 0.7397959, a: 1} - m_Focused: - m_Background: {fileID: 2800000, guid: 620f088d04c284b21939ce24996fdbee, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12156863, g: 0.12156863, b: 0.12156863, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 8 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 0 - m_Bottom: 2 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 1 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 0 - m_TextClipping: 3 - m_ImagePosition: 3 - m_ContentOffset: {x: 0, y: 5} - m_FixedWidth: 0 - m_FixedHeight: 24 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: PixelBox3 - m_Normal: - m_Background: {fileID: 2800000, guid: 86cd0618b10f3494c831ac9215649110, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 5ed56a3e069cd4b5aa4360154acc026a, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 8 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 5 - m_Bottom: 2 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 2 - m_Bottom: 2 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: PixelButton - m_Normal: - m_Background: {fileID: 2800000, guid: 3240f334343ca4dee8239c16d2de57c6, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 6444e8eb74e6f40e0a966d1e26744d08, type: 3} - m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: c051ffc737cd54d909137d2937e82930, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 19e49615b2c8540fd8a11acd2a26c335, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 8 - m_Right: 8 - m_Top: 8 - m_Bottom: 8 - m_Margin: - m_Left: 0 - m_Right: 4 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: -1 - m_Right: 1 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 16 - m_FixedHeight: 16 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: LinkButton - m_Normal: - m_Background: {fileID: 2800000, guid: 53ee29e7cbeb545bcb1ca238a2736fb8, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 1066e2a70f10b481984312db993dadc8, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 34 - m_FixedHeight: 34 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: CloseButton - m_Normal: - m_Background: {fileID: 2800000, guid: 9496521dd08a64ed2a92bc4e90a3a271, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 921542314cf2f4a55952ad059454677e, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: -2 - m_Right: 2 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 13 - m_FixedHeight: 13 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: GridPivotSelectButton - m_Normal: - m_Background: {fileID: 2800000, guid: 9de7a15ab4e1d48da9861247bc34226d, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 3d11311e97436432e897a4bd0b5fbfac, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 2800000, guid: 3d11311e97436432e897a4bd0b5fbfac, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 2800000, guid: 9de7a15ab4e1d48da9861247bc34226d, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: GridPivotSelectBackground - m_Normal: - m_Background: {fileID: 2800000, guid: b593db43606434498a7200f8281297d8, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 7 - m_Right: 4 - m_Top: 14 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: CollisionHeader - m_Normal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 6 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 1 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 3 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: InfoButton - m_Normal: - m_Background: {fileID: 2800000, guid: efb7b60811b9a4ec7b92ecfcaa9bcd0d, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 7ef0e648811f14f65b69c2df3f27de11, type: 3} - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 7604699b5bc8f4343b03cc4d0b603403, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 8acb97c3fcc694bf3b7d33b1ff321337, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 2800000, guid: 7604699b5bc8f4343b03cc4d0b603403, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 8acb97c3fcc694bf3b7d33b1ff321337, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 2800000, guid: efb7b60811b9a4ec7b92ecfcaa9bcd0d, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 7ef0e648811f14f65b69c2df3f27de11, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 1 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 1 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 16 - m_FixedHeight: 16 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: PixelBox3Separator - m_Normal: - m_Background: {fileID: 2800000, guid: e101da2dcb7a14fa2aed1a65c384a99b, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 3 - m_Right: 3 - m_Top: 8 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 1 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -2 - m_Bottom: 2 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 4 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: GridSizeLock - m_Normal: - m_Background: {fileID: 2800000, guid: 3805c157b9b38472684befb652c5d213, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: d04d4a88875f842c88825d3d5b2b529c, type: 3} - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 5e0cd84e9d84642ac883c25ca8d667ac, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 7b229d059f89d49918aec1466c0c5819, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 2800000, guid: 5e0cd84e9d84642ac883c25ca8d667ac, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 7b229d059f89d49918aec1466c0c5819, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 2800000, guid: 3805c157b9b38472684befb652c5d213, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: d04d4a88875f842c88825d3d5b2b529c, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 5 - m_Right: 0 - m_Top: 1 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 27 - m_FixedHeight: 28 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: UpArrow - m_Normal: - m_Background: {fileID: 2800000, guid: b1722c752c8754c5281b2efd6cf8477c, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 4c914fdaf554243fe9fb26afc323caef, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 11 - m_FixedHeight: 10 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: DownArrow - m_Normal: - m_Background: {fileID: 2800000, guid: 12ea2fbedc5cc4bd191d795f44b2de75, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: d8951099054c64beaaa49d675d71cfcf, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 11 - m_FixedHeight: 10 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: SmallReset - m_Normal: - m_Background: {fileID: 2800000, guid: fb3e1d793e4f0459f8b913d0d2d76e6c, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 990963b32226c440fb1a72e47e0ad7a2, type: 3} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 1 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 12 - m_FixedHeight: 12 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: GizmoButton - m_Normal: - m_Background: {fileID: 2800000, guid: c780955fc9d0f458abc0de8f2f9cedb2, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: deb2afb942c3b42fbba8823da7f05894, type: 3} - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 455f4fe795672465c8a4e8db3c6b9ccb, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 731ce0beec302410299a12fa1da2dc54, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 2800000, guid: 455f4fe795672465c8a4e8db3c6b9ccb, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 731ce0beec302410299a12fa1da2dc54, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 2800000, guid: c780955fc9d0f458abc0de8f2f9cedb2, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: deb2afb942c3b42fbba8823da7f05894, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 1 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 1 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 16 - m_FixedHeight: 16 - m_StretchWidth: 0 - m_StretchHeight: 0 - - m_Name: EditButton - m_Normal: - m_Background: {fileID: 2800000, guid: 71ef598858974450ead310c33f29d5d3, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: 7e276a83ed42e4e3584a50b6084eef8d, type: 3} - m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 3354fe2e1951d420fa49d8f4fec2954b, type: 3} - m_ScaledBackgrounds: - - {fileID: 2800000, guid: f7ae6f90d33d043c684812513307ec16, type: 3} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_ScaledBackgrounds: - - {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_ScaledBackgrounds: - - {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_ScaledBackgrounds: [] - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 1 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 1 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 16 - m_FixedHeight: 16 - m_StretchWidth: 0 - m_StretchHeight: 0 - m_Settings: - m_DoubleClickSelectsWord: 1 - m_TripleClickSelectsLine: 1 - m_CursorColor: {r: 1, g: 1, b: 1, a: 1} - m_CursorFlashSpeed: -1 - m_SelectionColor: {r: 1, g: 0.38403907, b: 0, a: 0.7} ---- !u!1002 &11400001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinLight.guiskin.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinLight.guiskin.meta deleted file mode 100644 index 89d157f3d9cffd3324cf044df0a0472e3c973c58..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/AstarEditorSkinLight.guiskin.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 66428235a3cda4584bd90de6998ad4d2 diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin.meta deleted file mode 100644 index fb2fab5347fc816a9a46a6ddccc23953c7c446b4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 253c7abd5d5cd044789918a8880fc867 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/colorInterpolationBox.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/colorInterpolationBox.png deleted file mode 100644 index d8d06e3f9bbd7c7d578b8922b008c5c462712375..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/colorInterpolationBox.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/colorInterpolationBox.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/colorInterpolationBox.png.meta deleted file mode 100644 index 269010fa04c2d3143570297308742aeb03bb61d2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/colorInterpolationBox.png.meta +++ /dev/null @@ -1,47 +0,0 @@ -fileFormatVersion: 2 -guid: 0790ee8db18ed49ed8369be285199835 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - 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: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@1x.png deleted file mode 100644 index 88d8ff412abd80063e0fbdc4be14dc88fe0c75e0..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@1x.png.meta deleted file mode 100644 index e70bfda72398baebb16a7ae452957b67ae525de6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: b5a4a564ac2dc4261a13719673f157e1 -timeCreated: 1498132652 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@2x.png deleted file mode 100644 index e8cf2e1eac18748b2ea92520d9b0a4d3acab9770..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@2x.png.meta deleted file mode 100644 index 7eac08822d90a2f38a3d612ef20e09f06b70bbb8..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: c730485723dee4bcbad9d8a7593a8799 -timeCreated: 1498131761 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@1x.png deleted file mode 100644 index 9a8d12a64af2f87675960b6dd9dd840b4f209490..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@1x.png.meta deleted file mode 100644 index e496c38169c08b20b45c0875e9d85b6f18ef74b6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: d0f7738d6b5b2420b9a77bfef3926e2a -timeCreated: 1498133640 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@2x.png deleted file mode 100644 index 85042f0b0402c04bad62c7ece91a31c3c491fead..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@2x.png.meta deleted file mode 100644 index 0411ce68bc7ab1d03f1e6b768b96099a29bfd287..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/deleteButton_active@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: b9d7d6d7befb34b9c889e6195746c452 -timeCreated: 1498133640 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@1x.png deleted file mode 100644 index 98da8d80ce0872d3515436472454021fed022428..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@1x.png.meta deleted file mode 100644 index 6e8eccb3cb5dad781527e1ccaaa483c6ff8e626c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 705155b2c3fce47f0a818ac32d5abe3f -timeCreated: 1499339103 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@2x.png deleted file mode 100644 index c79317a1e59484ac75ccef0912c07cffc4087380..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@2x.png.meta deleted file mode 100644 index f84eba3b9f440c51276f7dacad7b7900a62b5da1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: e8ebb72a41d314b288545fddfd20cafd -timeCreated: 1499339103 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@1x.png deleted file mode 100644 index 588407e3772b5566fc4cebccd8e441b5629f629a..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@1x.png.meta deleted file mode 100644 index 037e5e22379d403d8ecd3a4896c81bdab0e1de36..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: e0cb3cc51f25a48bf8b0c647452b09b1 -timeCreated: 1499339103 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@2x.png deleted file mode 100644 index e0b9b54fe6475598aeb1d704cae23e261feb3362..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@2x.png.meta deleted file mode 100644 index 38f2321988be229ea4dc439c2022e44478902262..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/editButton_active@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: f6a4baf90a7bb4e4a92abe07f1a0a9d3 -timeCreated: 1499339103 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@1x.png deleted file mode 100644 index b47a297fee783665eee30b4ca9b70f8b5ffc5ac1..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@1x.png.meta deleted file mode 100644 index 2a0e6e5e0ec994d7b873d65149f2dece2cfbe150..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: b05124c2b9dc5429a84ef0195a916fce -timeCreated: 1498128537 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@2x.png deleted file mode 100644 index 57e79b06d427f192a5eddeed9c104d39fff801d2..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@2x.png.meta deleted file mode 100644 index fd1911d926a9810da4d6f83105e9a4ef95c8515c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_off@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 3772050cdbd2a472789aa76d6de5b270 -timeCreated: 1498128911 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@1x.png deleted file mode 100644 index c3ddfa2c17a4ece4907f87ee2efe84a80197a911..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@1x.png.meta deleted file mode 100644 index 6e277e1ba3031e1ced4e4f29a67e31ab7a039bd7..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 54ad5f6eb8a9349568e58cd1204388a2 -timeCreated: 1498131017 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@2x.png deleted file mode 100644 index 5f93e7398e65e3d8e131a3c1f179a09e8d650776..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@2x.png.meta deleted file mode 100644 index 89a0c91a777aae16daad4d39dec7ffe5b1b12d21..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gizmoButton_on@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: a454b67ef7bd04780aca99e364202679 -timeCreated: 1498131017 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gridPivotSelect.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gridPivotSelect.png deleted file mode 100644 index f681cd5175b6b102ce0b7b3e094b9f94a241d503..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gridPivotSelect.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gridPivotSelect.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gridPivotSelect.png.meta deleted file mode 100644 index ec5d57a2fa4bbcabc1f66b7a843bc6b1cefb04a9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/gridPivotSelect.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 11b8d44fcb3cf4c048a576df708e0ec6 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/headerBackground.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/headerBackground.png deleted file mode 100644 index bb4b1450677cbe71746511356630712c7fc3b523..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/headerBackground.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/headerBackground.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/headerBackground.png.meta deleted file mode 100644 index 58ba0b21406baa4c68185ffa6358bb5070b62181..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/headerBackground.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: db5b85df63e094a1c96f11019bccc577 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images.meta deleted file mode 100644 index 8a10a861519afa9a0cd69728fd5a98cd979d6e94..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: dd113e7f4ceed0945903fc146a961735 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect-03.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect-03.png deleted file mode 100644 index f8aaa12f6198795ef1886776c5d230a81180ce3b..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect-03.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect-03.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect-03.png.meta deleted file mode 100644 index 905c90ea5ffedefcfdcae32499a9e99c6bdc9eff..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect-03.png.meta +++ /dev/null @@ -1,45 +0,0 @@ -fileFormatVersion: 2 -guid: 0758c9e42111d4aec99694c875e9badc -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect.png deleted file mode 100644 index ba04f8fcb8ce1321b32f241a4860973985986300..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect.png.meta deleted file mode 100644 index dd858cf073e616def9330b7ce48d732b3cccd73d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect.png.meta +++ /dev/null @@ -1,45 +0,0 @@ -fileFormatVersion: 2 -guid: 5006aa4ede39e49198b851d98e267b5d -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png deleted file mode 100644 index 184a7f70d9ad587b8d21e6072912e305783308bb..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png.meta deleted file mode 100644 index 511baaa71a79b8dee22a866a3f5bd0135447b4c5..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png.meta +++ /dev/null @@ -1,45 +0,0 @@ -fileFormatVersion: 2 -guid: 37972c32346084c13bfddb8c3dbed143 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_On.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_On.png deleted file mode 100644 index 6b8f130b67afd75765193d0421f234f6cea38edf..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_On.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_On.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_On.png.meta deleted file mode 100644 index 3f5086172cad525a40acdf403c5477112db37c2a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/images/gridPivotSelect_On.png.meta +++ /dev/null @@ -1,45 +0,0 @@ -fileFormatVersion: 2 -guid: 7ea4fc739ffbb4af1a466f655bf1d178 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@1x.png deleted file mode 100644 index d05c224817267b763970db75f205db39f8cf2cee..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@1x.png.meta deleted file mode 100644 index fa00722f311bb04d433121e75a8777615c26db70..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 1986ec06d68774254928f44b896a3913 -timeCreated: 1498131401 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@2x.png deleted file mode 100644 index b5813bd7d52eca07059ffcd2c9686342928c66bd..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@2x.png.meta deleted file mode 100644 index 12dab6f2266c1cdcc7b2a7253a3bae5a6ef5ae65..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 623f6adf01f324cb7bc6aefe7f87d623 -timeCreated: 1498131297 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@1x.png deleted file mode 100644 index ee1c0e4378c743e7c28f8cd617b147037f1fd732..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@1x.png.meta deleted file mode 100644 index 053aaab7b4c5f56162df396c1c9f266df9cb3b51..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: d008deade2077407fbf14446df2547c9 -timeCreated: 1498131543 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@2x.png deleted file mode 100644 index 68fe2b55662d315dd51e1d29b793502d4db0c36e..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@2x.png.meta deleted file mode 100644 index 73d3262e18eb31080cb439e748e705d981e12c73..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/infoButton_active@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 9b266e42522c048f6b62832985be51ed -timeCreated: 1498131543 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@1x.png deleted file mode 100644 index 9c23f918510ec6295f18b1ec0c0c4e4437ff4b19..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@1x.png.meta deleted file mode 100644 index 5fa6f2ccea13ff3b3e3d1fe4141ed5e1522fff22..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@1x.png.meta +++ /dev/null @@ -1,76 +0,0 @@ -fileFormatVersion: 2 -guid: aaae516f9c5404f77a3e586cdd59695b -timeCreated: 1498137820 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 1 - 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: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - 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: 1024 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 1024 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@2x.png deleted file mode 100644 index 8289e0201666cdb2622a72c69db2eaf64e5eafd3..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@2x.png.meta deleted file mode 100644 index fcf3a2183714952c355ffc7935a645fba7aa82e9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_closed@2x.png.meta +++ /dev/null @@ -1,76 +0,0 @@ -fileFormatVersion: 2 -guid: 6c38830c1556942fcb6ce893085d1daa -timeCreated: 1498137820 -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: 0 - 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 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@1x.png deleted file mode 100644 index 4ee59fd9988e0af567773975f9e9e55a874635ed..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@1x.png.meta deleted file mode 100644 index 203cafa2147b3624a04a14523b2f248965236faa..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@1x.png.meta +++ /dev/null @@ -1,76 +0,0 @@ -fileFormatVersion: 2 -guid: c43744025f7024e20b5fe880600d19a7 -timeCreated: 1498138222 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 1 - 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: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - 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: 1024 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 1024 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@2x.png deleted file mode 100644 index 861f8fed35cdf24fec1bc093e14abd71048fc20b..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@2x.png.meta deleted file mode 100644 index cdc3174c77ba4bd32b53ee8e13845ffdd74f5667..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/lock_open@2x.png.meta +++ /dev/null @@ -1,76 +0,0 @@ -fileFormatVersion: 2 -guid: 957d0fd6ae3494da9aed50c5d7d7ce4e -timeCreated: 1498138222 -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: 0 - 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 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox2.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox2.png deleted file mode 100644 index 982aacf0265831a742c8b2b87e1b4e407a5dfe90..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox2.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox2.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox2.png.meta deleted file mode 100644 index 7b8a5593c557e0a5f23aa61161344dee0b585ff4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox2.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: 5d951d0a838a34f40ac2b9ce8968a7d6 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@1x.png deleted file mode 100644 index 8149b8b882faadd8c7a7848d52bd3c970e139e6b..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@1x.png.meta deleted file mode 100644 index 7b98371ff74f86ec570aece4549e7edd179b5560..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 7991166a167af4b4793b4fc8fcc3bfe2 -timeCreated: 1498136635 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@2x.png deleted file mode 100644 index 9e8843aeb9a1410ac369ad6d7554932a422f1866..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@2x.png.meta deleted file mode 100644 index d102b63ca50b49ae26a262623387eabd88708598..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 9043fef44c60647b7a763eb86f912ba1 -timeCreated: 1498136635 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3_separator.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3_separator.png deleted file mode 100644 index 5b8357f69cf888bc712b81dd9297d9a5a55a2e36..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3_separator.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3_separator.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3_separator.png.meta deleted file mode 100644 index 5b48465c2154be1ca729ca4344c176af685851cc..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/DarkSkin/pixelBox3_separator.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 3a08de11a34c44da28de4c086fd13461 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin.meta deleted file mode 100644 index e853f727e9c1aee6649571af5020cc699fd290d9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: f1713f58b9a99154d8a227c3e34972e6 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/colorInterpolationBox.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/colorInterpolationBox.png deleted file mode 100644 index 2563ffad2668658481215242fe23dc74ef944ebe..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/colorInterpolationBox.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/colorInterpolationBox.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/colorInterpolationBox.png.meta deleted file mode 100644 index 7ab786581c7e730b1fd2d7d7a4c5f3d084fd059f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/colorInterpolationBox.png.meta +++ /dev/null @@ -1,47 +0,0 @@ -fileFormatVersion: 2 -guid: 9bf4f8f9d8795455bb87213dd56ed793 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - 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: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@1x.png deleted file mode 100644 index 8bd150aa40aa2dc20709135101da89437c50f62a..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@1x.png.meta deleted file mode 100644 index e808cdbb67a8ce12d0e70316d24a74f19ecb8222..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 3240f334343ca4dee8239c16d2de57c6 -timeCreated: 1498135848 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@2x.png deleted file mode 100644 index 5a152243a5d3bba4d69c433f60f99e99305d2634..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@2x.png.meta deleted file mode 100644 index 2e7ea6aa3b00bc039e57fdd263377901932887d1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 6444e8eb74e6f40e0a966d1e26744d08 -timeCreated: 1498135848 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@1x.png deleted file mode 100644 index d8b10e2800d8aa4d60702c85fd577a1724316cd4..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@1x.png.meta deleted file mode 100644 index 7dd1ac65a147f19d62ff32dbfc285d9fb8ef63c1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: c051ffc737cd54d909137d2937e82930 -timeCreated: 1498135848 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@2x.png deleted file mode 100644 index bf12997bb6be4fca40f1754f98caf7ad0b224791..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@2x.png.meta deleted file mode 100644 index 4a5df8d1341a1bdfc15a4f4042bcc990d392e052..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/deleteButton_active@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 19e49615b2c8540fd8a11acd2a26c335 -timeCreated: 1498135848 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@1x.png deleted file mode 100644 index 14b12b8b30a7b2bdf01c0c3a74fc92191a3727e0..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@1x.png.meta deleted file mode 100644 index 72df30159f93e7843114d2d92f6a8729ac8c3e5e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 71ef598858974450ead310c33f29d5d3 -timeCreated: 1499339589 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@2x.png deleted file mode 100644 index ae8c9caae2754e5b48b7a715104668d82be25bcd..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@2x.png.meta deleted file mode 100644 index a83dbb5c9dec501af2233fbb5548e0085ece48cc..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 7e276a83ed42e4e3584a50b6084eef8d -timeCreated: 1499339218 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@1x.png deleted file mode 100644 index 0b17373ba9492f8843e70a61cbb78aef8a15d846..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@1x.png.meta deleted file mode 100644 index 2f14cffdd59d081b4f0a3243448cfc4f76db2b2d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 3354fe2e1951d420fa49d8f4fec2954b -timeCreated: 1499339580 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@2x.png deleted file mode 100644 index 3effbaa5d0c5eb4bf2b0119fdeb93ab93b310e5f..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@2x.png.meta deleted file mode 100644 index 3a25f4cbb676b8ba9b944b25ec4c17413a3d5345..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/editButton_active@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: f7ae6f90d33d043c684812513307ec16 -timeCreated: 1499339218 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@1x.png deleted file mode 100644 index c37f01fc656fb0292d68bc927f8b24b73e62b0b2..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@1x.png.meta deleted file mode 100644 index 3355c30c069e830c8adcb709d33fa8da0b44e783..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: c780955fc9d0f458abc0de8f2f9cedb2 -timeCreated: 1498135848 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@2x.png deleted file mode 100644 index 106c1bcdb9433184b390a5a2ccb25c6b2bf5f86b..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@2x.png.meta deleted file mode 100644 index 6baface779db7cd4baef21d40eacec394f0ed38d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_off@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: deb2afb942c3b42fbba8823da7f05894 -timeCreated: 1498135848 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@1x.png deleted file mode 100644 index 22521769bbb7739ac2c709ab174c50643a4f937c..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@1x.png.meta deleted file mode 100644 index c0131fa99bcb2bdb65d8efd56bb83662c338bad2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 455f4fe795672465c8a4e8db3c6b9ccb -timeCreated: 1498135848 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@2x.png deleted file mode 100644 index 97c06a163d5e8f3e6b09ea01bed755cb03876a44..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@2x.png.meta deleted file mode 100644 index 90a53b7039e16dd235a63228b8e2c635b0bef521..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/gizmoButton_on@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 731ce0beec302410299a12fa1da2dc54 -timeCreated: 1498135848 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/headerBackground.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/headerBackground.png deleted file mode 100644 index 2005c5cb431332b34e0db383f8ecb81228c3168b..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/headerBackground.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/headerBackground.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/headerBackground.png.meta deleted file mode 100644 index 23f4328fa005a93ab054d89a6695b6334e427d3a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/headerBackground.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: 620f088d04c284b21939ce24996fdbee -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@1x.png deleted file mode 100644 index 856cffd287d02bc6013be803c1402d49e87b7ee0..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@1x.png.meta deleted file mode 100644 index 70af4b981475946d121c032bf012bfcf264c95f1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: efb7b60811b9a4ec7b92ecfcaa9bcd0d -timeCreated: 1498135616 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@2x.png deleted file mode 100644 index 3fc60c06f0cf59f4bacba3b5837d195ff9712bdc..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@2x.png.meta deleted file mode 100644 index cb49254309e95a860512d4ba0c1ce922658e009e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 7ef0e648811f14f65b69c2df3f27de11 -timeCreated: 1498135616 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@1x.png deleted file mode 100644 index 698e74632668cdcbc0dbbfcfe629386cd123fd47..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@1x.png.meta deleted file mode 100644 index f51b6f2a3354a37c355f7ea9f097a03f38a451cb..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 7604699b5bc8f4343b03cc4d0b603403 -timeCreated: 1498135616 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@2x.png deleted file mode 100644 index 5c0abe10c6bb86e874ec09c31fa6d6bc1ad2e735..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@2x.png.meta deleted file mode 100644 index 533c5d29ef72671c3e65a2dad43442644da5c724..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/infoButton_active@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 8acb97c3fcc694bf3b7d33b1ff321337 -timeCreated: 1498135616 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@1x.png deleted file mode 100644 index cc8754982fc3ad091b259fbf20668d4236cc7c2c..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@1x.png.meta deleted file mode 100644 index c4f3e5051e899930606477968c75584997bc2fe8..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@1x.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: 5e0cd84e9d84642ac883c25ca8d667ac -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@2x.png deleted file mode 100644 index f5e1bdcae237b521cd8d564dc6aa389d5825078a..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@2x.png.meta deleted file mode 100644 index 6c2033c1ad2700950fac0956385819aa8462c28b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_closed@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 7b229d059f89d49918aec1466c0c5819 -timeCreated: 1498138836 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@1x.png deleted file mode 100644 index 53e32e73d5182c1af1ec8f31abc1942c6afc44ea..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@1x.png.meta deleted file mode 100644 index eb817d4f9816772b9a5d34f65103b736559f6e87..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@1x.png.meta +++ /dev/null @@ -1,54 +0,0 @@ -fileFormatVersion: 2 -guid: 3805c157b9b38472684befb652c5d213 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@2x.png deleted file mode 100644 index 5645369f4d3315556eb743748565feb717d4f698..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@2x.png.meta deleted file mode 100644 index fcd64e4fdb7d96b036f3c2b27b2819f99cb3b502..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/lock_open@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: d04d4a88875f842c88825d3d5b2b529c -timeCreated: 1498138836 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@1x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@1x.png deleted file mode 100644 index 53fb86b287d4e5a07a9d7cb25bab29713022391d..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@1x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@1x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@1x.png.meta deleted file mode 100644 index 479408d3f07348c3fff0738ce8f236635ace280e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@1x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 86cd0618b10f3494c831ac9215649110 -timeCreated: 1498136947 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@2x.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@2x.png deleted file mode 100644 index 0528ee8c506d00ef92f3da4cc536f58eb9716f50..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@2x.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@2x.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@2x.png.meta deleted file mode 100644 index 3c2d2f21f15e2f598ff48daa7d702cdcbe37c736..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/pixelBox3@2x.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 5ed56a3e069cd4b5aa4360154acc026a -timeCreated: 1498136947 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_normal.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_normal.png deleted file mode 100644 index 28442e24cfd9064c5d5c52558472bd577b2865c0..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_normal.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_normal.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_normal.png.meta deleted file mode 100644 index a61085d635f081f934949a9fbb94665b6d6f4816..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_normal.png.meta +++ /dev/null @@ -1,45 +0,0 @@ -fileFormatVersion: 2 -guid: fb3e1d793e4f0459f8b913d0d2d76e6c -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - 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: .5, y: .5} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_on.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_on.png deleted file mode 100644 index 18b5bc024164b12cf0eb1bda6f4bc658fc0f2836..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_on.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_on.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_on.png.meta deleted file mode 100644 index a3a8e84d421947230e667097a50030fdbeb6d1f4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/LightSkin/reset_on.png.meta +++ /dev/null @@ -1,45 +0,0 @@ -fileFormatVersion: 2 -guid: 990963b32226c440fb1a72e47e0ad7a2 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - 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: .5, y: .5} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials.meta deleted file mode 100644 index bd76f5ae831a184405c63e1314dca0c221ca4f03..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 74d2b246b6fb3974992dfd58112acee3 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.cginc b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.cginc deleted file mode 100644 index 83619ba5ce40a298f81978eb79592ac8359e7a88..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.cginc +++ /dev/null @@ -1,78 +0,0 @@ -struct appdata_color { - float4 vertex : POSITION; - fixed4 color : COLOR; - float3 normal : NORMAL; - float2 uv : TEXCOORD0; -}; - -struct line_v2f { - half4 col : COLOR; - float2 normal : TEXCOORD0; - float4 screenPos : TEXCOORD1; - float4 originScreenPos : TEXCOORD2; -}; - -// Redefine the matrix here in order to confuse the Unity shader upgrader. -// Otherwise it will start modifying some things below even though this script is specifically -// written to be compatible with multiple versions of Unity. -#define MVP_Matrix UNITY_MATRIX_MVP - -// d = normalized distance to line -float lineAA(float d) { - d = max(min(d, 1.0), 0) * 1.116; - float v = 0.93124*d*d*d - 1.42215*d*d - 0.42715*d + 0.95316; - v /= 0.95316; - return max(v, 0); -} - -line_v2f line_vert (appdata_color v, float pixelWidth, out float4 outpos : SV_POSITION) { - line_v2f o; - // UnityObjectToClipPos only exists in Unity 5.4 or above and there it has to be used -#if defined(UNITY_USE_PREMULTIPLIED_MATRICES) - float4 Mv = UnityObjectToClipPos(v.vertex); - float4 Mn = UnityObjectToClipPos(float4(v.normal.x, v.normal.y, v.normal.z, 0)); -#else - float4 Mv = mul(MVP_Matrix, v.vertex); - float4 Mn = mul(MVP_Matrix, float4(v.normal.x, v.normal.y, v.normal.z, 0)); -#endif - // delta is the limit value of doing the calculation - // x1 = M*v - // x2 = M*(v + e*n) - // lim e->0 (x2/x2.w - x1.w)/e - // Where M = UNITY_MATRIX_MVP, v = v.vertex, n = v.normal, e = a very small value - // Previously the above calculation was done with just e = 0.001, however this could yield graphical artifacts - // at large coordinate values as the floating point coordinates would start to run out of precision. - // Essentially we calculate the normal of the line in screen space. - float4 delta = (Mn - Mv*Mn.w/Mv.w) / Mv.w; - - // Handle DirectX properly. See https://docs.unity3d.com/Manual/SL-PlatformDifferences.html - float2 screenSpaceNormal = float2(-delta.y, delta.x) * _ProjectionParams.x; - float2 normalizedScreenSpaceNormal = normalize(screenSpaceNormal); - screenSpaceNormal = normalizedScreenSpaceNormal / _ScreenParams.xy; - float4 sn = float4(screenSpaceNormal.x, screenSpaceNormal.y, 0, 0); - - if (Mv.w < 0) { - // Seems to have a very minor effect, but the distance - // seems to be more accurate with this enabled - sn *= -1; - } - - float side = (v.uv.x - 0.5)*2; - outpos = (Mv / Mv.w) + side*sn*pixelWidth*0.5; - // Multiply by w because homogeneous coordinates (it still needs to be clipped) - outpos *= Mv.w; - o.normal = normalizedScreenSpaceNormal; - o.originScreenPos = ComputeScreenPos(Mv); - o.screenPos = ComputeScreenPos(outpos); - return o; -} - -/** Copied from UnityCG.cginc because this function does not exist in Unity 5.2 */ -inline bool IsGammaSpaceCompatibility() { -#if defined(UNITY_NO_LINEAR_COLORSPACE) - return true; -#else - // unity_ColorSpaceLuminance.w == 1 when in Linear space, otherwise == 0 - return unity_ColorSpaceLuminance.w == 0; -#endif -} \ No newline at end of file diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.cginc.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.cginc.meta deleted file mode 100644 index 51714adeaa5aabe241e7e209c7890a02eb23674b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1b135520270114849b121a628fe61ba8 -timeCreated: 1472987846 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.mat b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.mat deleted file mode 100644 index b777050d4c56056d1143a647c90915a53268b5be..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.mat +++ /dev/null @@ -1,95 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: Navmesh - m_Shader: {fileID: 4800000, guid: 6dad35c0b62e44c26ab244ad80deee1a, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 5 - m_CustomRenderQueue: -1 - stringTagMap: {} - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 2, y: 2} - m_Offset: {x: 0, y: 0} - data: - first: - name: _BumpMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _DecalTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - data: - first: - name: _Scale - second: -2.68000007 - data: - first: - name: _Shininess - second: .699999988 - data: - first: - name: _InvFade - second: 1 - m_Colors: - data: - first: - name: _Color - second: {r: 1, g: 1, b: 1, a: .550999999} - data: - first: - name: _SpecColor - second: {r: 1, g: 1, b: 1, a: 1} - data: - first: - name: _Emission - second: {r: 0, g: 0, b: 0, a: 1} - data: - first: - name: _Tint - second: {r: 1, g: 1, b: 1, a: 1} - data: - first: - name: _FadeColor - second: {r: .656880796, g: .656880796, b: .656880796, a: .448000014} - data: - first: - name: _TintColor - second: {r: .5, g: .5, b: .5, a: .5} - data: - first: - name: _EmisColor - second: {r: .200000003, g: .200000003, b: .200000003, a: 0} - data: - first: - name: _Amb - second: {r: 0, g: 1, b: .33381772, a: 1} - data: - first: - name: _Low - second: {r: 1, g: 1, b: 1, a: .699999988} - data: - first: - name: _Emmission - second: {r: .474489808, g: .474489808, b: .474489808, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.mat.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.mat.meta deleted file mode 100644 index c96943fec9fb1f70a8b15f9dbeca93e30274e67b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 5ce51318bbfb1466188b929a68a6bd3a diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.shader b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.shader deleted file mode 100644 index 498fb0a7e30ee833aef505634031e2de635db3e6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.shader +++ /dev/null @@ -1,118 +0,0 @@ -// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/AstarPathfindingProject/Navmesh" { -Properties { - _Color ("Main Color", Color) = (1,1,1,0.5) - _MainTex ("Texture", 2D) = "white" { } - _Scale ("Scale", float) = 1 - _FadeColor ("Fade Color", Color) = (1,1,1,0.3) -} -SubShader { - - Pass { - ZWrite On - ColorMask 0 - } - - Tags {"Queue"="Transparent+1" "IgnoreProjector"="True" "RenderType"="Transparent"} - LOD 200 - - - - Offset -2, -20 - Cull Off - - Pass { - ZWrite Off - ZTest Greater - Blend SrcAlpha OneMinusSrcAlpha - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - #include "Navmesh.cginc" - - sampler2D _MainTex; - float _Scale; - float4 _Color; - float4 _FadeColor; - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float4 col : COLOR; - }; - - float4 _MainTex_ST; - - v2f vert (appdata_color v) { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - - float4 worldSpace = mul (unity_ObjectToWorld, v.vertex); - o.uv = float2 (worldSpace.x*_Scale,worldSpace.z*_Scale); - o.col = v.color * _Color * _FadeColor; - if (!IsGammaSpaceCompatibility()) { - o.col.rgb = GammaToLinearSpace(o.col.rgb); - } - return o; - } - - float4 frag (v2f i) : COLOR { - return tex2D (_MainTex, i.uv) * i.col; - } - ENDCG - - } - - Pass { - ZWrite Off - ZTest LEqual - Blend SrcAlpha OneMinusSrcAlpha - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - #include "Navmesh.cginc" - - float4 _Color; - sampler2D _MainTex; - float _Scale; - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float4 col : COLOR; - }; - - v2f vert (appdata_color v) - { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - - float4 worldSpace = mul (unity_ObjectToWorld, v.vertex); - o.uv = float2 (worldSpace.x*_Scale,worldSpace.z*_Scale); - o.col = v.color * _Color; - if (!IsGammaSpaceCompatibility()) { - o.col.rgb = GammaToLinearSpace(o.col.rgb); - } - return o; - } - - float4 frag (v2f i) : COLOR - { - return tex2D (_MainTex, i.uv) * i.col; - } - ENDCG - - } - - - } -Fallback Off -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.shader.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.shader.meta deleted file mode 100644 index 52f87d23ef4876ebd337fbe9e4e686f7a36d1c7e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/Navmesh.shader.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 6dad35c0b62e44c26ab244ad80deee1a diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.mat b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.mat deleted file mode 100644 index 463538acd8b34d80aafec5a5af71196c9c871214..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.mat +++ /dev/null @@ -1,106 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: NavmeshOutline - m_Shader: {fileID: 4800000, guid: 6c78a6dd468954643a87ebf0014bc305, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 5 - m_CustomRenderQueue: -1 - stringTagMap: {} - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 2800000, guid: 0ff27a4aaa0ce4d1ba6a39ce3c868a76, type: 3} - m_Scale: {x: 2, y: 2} - m_Offset: {x: 0, y: 0} - data: - first: - name: _BumpMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _DecalTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _Falloff - second: - m_Texture: {fileID: 2800000, guid: 6267c94129d874d7bafe507aa753046a, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - data: - first: - name: _Scale - second: -2.68000007 - data: - first: - name: _Shininess - second: .699999988 - data: - first: - name: _InvFade - second: 1 - data: - first: - name: _PixelWidth - second: 4.4000001 - m_Colors: - data: - first: - name: _Color - second: {r: 1, g: 1, b: 1, a: .745000005} - data: - first: - name: _SpecColor - second: {r: 1, g: 1, b: 1, a: 1} - data: - first: - name: _Emission - second: {r: 0, g: 0, b: 0, a: 1} - data: - first: - name: _Tint - second: {r: 1, g: 1, b: 1, a: 1} - data: - first: - name: _FadeColor - second: {r: .656880796, g: .656880796, b: .656880796, a: .313600004} - data: - first: - name: _TintColor - second: {r: .5, g: .5, b: .5, a: .5} - data: - first: - name: _EmisColor - second: {r: .200000003, g: .200000003, b: .200000003, a: 0} - data: - first: - name: _Amb - second: {r: 0, g: 1, b: .33381772, a: 1} - data: - first: - name: _Low - second: {r: 1, g: 1, b: 1, a: .699999988} - data: - first: - name: _Emmission - second: {r: .474489808, g: .474489808, b: .474489808, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.mat.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.mat.meta deleted file mode 100644 index 9cf2beeb3a8731595ceba8810481962e417d2e74..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 91035448860ba4e708919485c73f7edc -timeCreated: 1442945121 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.shader b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.shader deleted file mode 100644 index a6a276a2d1cfe7259ab275b6ba9e381b4902c65c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.shader +++ /dev/null @@ -1,87 +0,0 @@ -Shader "Hidden/AstarPathfindingProject/Navmesh Outline" { - Properties { - _Color ("Main Color", Color) = (1,1,1,0.5) - _FadeColor ("Fade Color", Color) = (1,1,1,0.3) - _PixelWidth ("Width (px)", Float) = 4 - } - SubShader { - Blend SrcAlpha OneMinusSrcAlpha - ZWrite Off - Offset -2, -50 - - Pass { - ZTest LEqual - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - #include "Navmesh.cginc" - - float4 _Color; - float _PixelWidth; - - // Number of screen pixels that the _Falloff texture corresponds to - static const float FalloffTextureScreenPixels = 2; - - line_v2f vert (appdata_color v, out float4 outpos : SV_POSITION) { - line_v2f o = line_vert(v, _PixelWidth, outpos); - o.col = v.color * _Color; - if (!IsGammaSpaceCompatibility()) { - o.col.rgb = GammaToLinearSpace(o.col.rgb); - } - return o; - } - - half4 frag (line_v2f i, UNITY_VPOS_TYPE screenPos : VPOS) : COLOR { - float2 p = (i.screenPos.xy/i.screenPos.w) - (i.originScreenPos.xy / i.originScreenPos.w); - // Handle DirectX properly. See https://docs.unity3d.com/Manual/SL-PlatformDifferences.html - p.y *= _ProjectionParams.x; - float dist = dot(p*_ScreenParams.xy, i.normal) / _PixelWidth; - float FalloffFractionOfWidth = FalloffTextureScreenPixels/(_PixelWidth*0.5); - float a = lineAA((abs(dist*4) - (1 - FalloffFractionOfWidth))/FalloffFractionOfWidth); - return i.col * float4(1,1,1,a); - } - ENDCG - } - - Pass { - ZTest Greater - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - #include "Navmesh.cginc" - - float4 _Color; - float4 _FadeColor; - float _PixelWidth; - - static const float FalloffTextureScreenPixels = 2; - - line_v2f vert (appdata_color v, out float4 outpos : SV_POSITION) { - line_v2f o = line_vert(v, _PixelWidth, outpos); - o.col = v.color * _Color * _FadeColor; - if (!IsGammaSpaceCompatibility()) { - o.col.rgb = GammaToLinearSpace(o.col.rgb); - } - return o; - } - - half4 frag (line_v2f i, UNITY_VPOS_TYPE screenPos : VPOS) : COLOR { - float2 p = (i.screenPos.xy/i.screenPos.w) - (i.originScreenPos.xy / i.originScreenPos.w); - // Handle DirectX properly. See https://docs.unity3d.com/Manual/SL-PlatformDifferences.html - p.y *= _ProjectionParams.x; - float dist = dot(p*_ScreenParams.xy, i.normal) / _PixelWidth; - float FalloffFractionOfWidth = FalloffTextureScreenPixels/(_PixelWidth*0.5); - float a = lineAA((abs(dist*4) - (1 - FalloffFractionOfWidth))/FalloffFractionOfWidth); - return i.col * float4(1,1,1,a); - } - ENDCG - } - } - Fallback Off -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.shader.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.shader.meta deleted file mode 100644 index 212dc4abb0ef84c6c3f7dec9a0fbeffce337bc76..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/NavmeshOutline.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 6c78a6dd468954643a87ebf0014bc305 -timeCreated: 1442945130 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/line_falloff_1px.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/line_falloff_1px.png deleted file mode 100644 index 19f3b61233d326736408b30228ef4366cb5edb87..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/line_falloff_1px.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/line_falloff_1px.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/line_falloff_1px.png.meta deleted file mode 100644 index d4d963422202ed015a33343a0f039727d19c7f3b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/Materials/line_falloff_1px.png.meta +++ /dev/null @@ -1,56 +0,0 @@ -fileFormatVersion: 2 -guid: 6267c94129d874d7bafe507aa753046a -timeCreated: 1474192509 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: 0 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - allowsAlphaSplitting: 0 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 5 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/grid.psd b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/grid.psd deleted file mode 100644 index d857d9870bad760d11ea31a3c2b51580112e18d7..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/grid.psd and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/grid.psd.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/grid.psd.meta deleted file mode 100644 index 3d4f89d7c10cc60f6453558f2c73526b3c6e740f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/grid.psd.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: 527965173b00f43f9a1b8fc9e8c2e64b -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 - textureSettings: - filterMode: 2 - aniso: 7 - mipBias: -1 - wrapMode: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - textureType: 5 - buildTargetSettings: [] diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images.meta deleted file mode 100644 index 303be6dcd6efa138bcd28db885ab10174ffe13ac..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 8858de7fdb3178644ae5a3d2ffdfdae2 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown.png deleted file mode 100644 index 0b5fa3c539afe90ed8f1673493fe0b77e9655ac7..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown.png.meta deleted file mode 100644 index eec1b5d7f9f1ea1dd751ea506b5bc1c1ad30546b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 12ea2fbedc5cc4bd191d795f44b2de75 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown_on.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown_on.png deleted file mode 100644 index 3f494ac61de9138a044b9d202cb36ba26f6694f1..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown_on.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown_on.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown_on.png.meta deleted file mode 100644 index 65ed2f768c97a32a3291bb7f28a1f137ffdbfc10..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowDown_on.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: d8951099054c64beaaa49d675d71cfcf -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp.png deleted file mode 100644 index 7fd0ad0180cde2391192d7a7afce2cbfaaa53c14..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp.png.meta deleted file mode 100644 index 62bf0afe33fc8f0e38b69e921c0586c9e5144d2a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: b1722c752c8754c5281b2efd6cf8477c -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp_on.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp_on.png deleted file mode 100644 index af1461a51d89ef4e46420fd8f4c159cf7f86aa1c..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp_on.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp_on.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp_on.png.meta deleted file mode 100644 index c9355c2e9fd4c274866e3669aab1198821dabee4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/ArrowUp_on.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 4c914fdaf554243fe9fb26afc323caef -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect.png deleted file mode 100644 index 67c91da461a52194b91d3ad17dbf7b20bb3f1dbe..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect.png.meta deleted file mode 100644 index db6c14f0e6485661cc6b3115ea147aaa42fe59e0..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: b593db43606434498a7200f8281297d8 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_Normal.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_Normal.png deleted file mode 100644 index d7bb55d2d648095a02f548aff34bc97d0a6cecee..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_Normal.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_Normal.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_Normal.png.meta deleted file mode 100644 index 77004bb6236cf54d694c1e0c3576efcd5188762a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_Normal.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 9de7a15ab4e1d48da9861247bc34226d -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_On.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_On.png deleted file mode 100644 index 4cd6f53dd8bd41b058debeb559a975f5405cd3d1..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_On.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_On.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_On.png.meta deleted file mode 100644 index 9730cdf88f66ad086ee2078ba6d694c3afb077ca..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/gridPivotSelect_On.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 3d11311e97436432e897a4bd0b5fbfac -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_01.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_01.png deleted file mode 100644 index bb43e9f5fd3036098b58a2bd61345dce5bffc3e4..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_01.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_01.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_01.png.meta deleted file mode 100644 index e8842c3d09d947a31187eef8ed3477c998e53d57..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_01.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: e4a6b67ac365349d8b7c358676aaf022 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_02.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_02.png deleted file mode 100644 index 978bdb265c9fd8c479608cd86fae86cf9741bfc8..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_02.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_02.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_02.png.meta deleted file mode 100644 index 1710b74bdcb96cc158bc60e541f217f93432842c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownArrow_02.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 0a9d941450e7c46cf8928d06762c2189 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_01.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_01.png deleted file mode 100644 index c4e1966feaea63c6840be1c5206c26727f88d8bc..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_01.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_01.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_01.png.meta deleted file mode 100644 index 635224de781d5f50e552a8d39ed0a1fd2c20431a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_01.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 4cecafde1350347fd984baee5961a393 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_02.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_02.png deleted file mode 100644 index 41ea21130632414ae4e26e368cb32d7ee3028d04..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_02.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_02.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_02.png.meta deleted file mode 100644 index b658a45af8493e508aef259a09c12b1ccea4df6b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/images/upDownButtons_02.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: c7970d065c27b4d7c9ac2ff73b61733e -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_active.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_active.png deleted file mode 100644 index 18b1194bc93fbcc96745ac7f7c072f98d3464697..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_active.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_active.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_active.png.meta deleted file mode 100644 index 99c46b043bd1d86baf9b99a69506be455706c723..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_active.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 1066e2a70f10b481984312db993dadc8 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_normal.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_normal.png deleted file mode 100644 index 01889801e8bea7059a23e42d36230a0a7cae56bc..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_normal.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_normal.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_normal.png.meta deleted file mode 100644 index 7db26090a985c3140a11e633180f6ade18ef8c80..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/linkButton_normal.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 53ee29e7cbeb545bcb1ca238a2736fb8 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox.png deleted file mode 100644 index a87ee575558bc287c8636f235642be0e4391c74f..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox.png.meta deleted file mode 100644 index 5482a1d2700f77f3f045eaadc74bf8b45af3add4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: bdec0523f27864115b7b727c8f5d90e2 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox2.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox2.png deleted file mode 100644 index 9bb3204fdf5642a8b84ece8a2c95ff5884d0b818..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox2.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox2.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox2.png.meta deleted file mode 100644 index eaaf91a8fcdb6bdacfdca03df81b6d0e061c0ed9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox2.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: 2fa6580cc9f7f40919411d1ed85c6fe1 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 0 - textureType: 0 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox3_separator.png b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox3_separator.png deleted file mode 100644 index 29367605733a96c7ebc7d7304ce283ca9c96f931..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox3_separator.png and /dev/null differ diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox3_separator.png.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox3_separator.png.meta deleted file mode 100644 index d7144f70b8bd53c0db664a2d6479418bdae079f1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/pixelBox3_separator.png.meta +++ /dev/null @@ -1,36 +0,0 @@ -fileFormatVersion: 2 -guid: e101da2dcb7a14fa2aed1a65c384a99b -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/tooltips.tsv b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/tooltips.tsv deleted file mode 100644 index a8736764154fb34ffd3a2f9daf157e923d428808..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/tooltips.tsv +++ /dev/null @@ -1,1535 +0,0 @@ -Pathfinding.ABPath.calculatePartial class_pathfinding_1_1_a_b_path.php#adb241127befc08aa01a5696f071e8c93 -Pathfinding.ABPath.endNode class_pathfinding_1_1_a_b_path.php#af18b6389a12a37404cbad29940993b89 -Pathfinding.ABPath.endPoint class_pathfinding_1_1_a_b_path.php#ab08561da980cd37e8c922cea780c45eb -Pathfinding.ABPath.originalEndPoint class_pathfinding_1_1_a_b_path.php#a5e07633cbeb18046b1f3d77f2eb68ea5 -Pathfinding.ABPath.originalStartPoint class_pathfinding_1_1_a_b_path.php#a417900a77d5a24cb3bcdb4b4d61dbc2a -Pathfinding.ABPath.startIntPoint class_pathfinding_1_1_a_b_path.php#af4d8428e71a7b0038bd3055a3cecb27a -Pathfinding.ABPath.startNode class_pathfinding_1_1_a_b_path.php#a20a2d6fc322886eb264c02e6c2cf6f7a -Pathfinding.ABPath.startPoint class_pathfinding_1_1_a_b_path.php#ac307764268b7cb29706e6fc22d893d97 -Pathfinding.ABPath.endNodeCosts class_pathfinding_1_1_a_b_path.php#af9b6b879aaed98de511033cabdebbc57 -Pathfinding.ABPath.partialBestTarget class_pathfinding_1_1_a_b_path.php#abfcd57c901158325c54300743fe44078 -Pathfinding.ABPath.gridSpecialCaseNode class_pathfinding_1_1_a_b_path.php#a6ee647f07d40686cca6d12522272325b -Pathfinding.ABPathEndingCondition.abPath class_pathfinding_1_1_a_b_path_ending_condition.php#a46f8011b0669b6a87bd980de4336e085 -Pathfinding.AdvancedSmooth.turnConstruct1 class_pathfinding_1_1_advanced_smooth.php#a880e64b40bc4ea2afbdb5e34cc857e9b -Pathfinding.AdvancedSmooth.turnConstruct2 class_pathfinding_1_1_advanced_smooth.php#a03faa091a6784f199001a72f80fce492 -Pathfinding.AdvancedSmooth.turningRadius class_pathfinding_1_1_advanced_smooth.php#a29ba3f4110245ccad5b233fb4f4c0c5f -Pathfinding.RVO.Sampled.Agent.locked class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a18a0f1e6c3d21c252b14ea6ae162e2ff -Pathfinding.RVO.Sampled.Agent.next class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a2cb3cb485f5f007ad857db792f491c34 -Pathfinding.RVO.Sampled.Agent.position class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a568c4f7cea202cebb7430ebac674107a -Pathfinding.RVO.Sampled.Agent.radius class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a5050a760c11da521cd4aee6336f6529f -Pathfinding.RVO.Sampled.Agent.simulator class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a1015df8222470d6426d5d3fd91018c09 -Pathfinding.RVO.Sampled.Agent.agentTimeHorizon class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#aae87304c6923138c031ff9918dd3a997 -Pathfinding.RVO.Sampled.Agent.calculatedSpeed class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a675bb4df8ab314419319bff6243b4709 -Pathfinding.RVO.Sampled.Agent.calculatedTargetPoint class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a8eff832cb9a840bb810a037ea256e4e1 -Pathfinding.RVO.Sampled.Agent.collidesWith class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a16d7780623f31c8671b911426a455509 -Pathfinding.RVO.Sampled.Agent.collisionNormal class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a7cc75e3f912af80a8a25052a7cb6e6ba -Pathfinding.RVO.Sampled.Agent.currentVelocity class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#ace5d01974d288cb6c9702004284bae53 -Pathfinding.RVO.Sampled.Agent.debugDraw class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a95a5ea64a0a4bfaf997195fd60d790e0 -Pathfinding.RVO.Sampled.Agent.desiredSpeed class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#aa24955379bf6e7c6a1008a9dbfa5ded8 -Pathfinding.RVO.Sampled.Agent.desiredTargetPointInVelocitySpace class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#aa6efe62ec9bf6bd2f2ee87ab589715b8 -Pathfinding.RVO.Sampled.Agent.desiredVelocity class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a303d9eb8245020b9cf16518556fb1ea0 -Pathfinding.RVO.Sampled.Agent.DesiredVelocityWeight class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#ab61d236b37674b712b5d1b4e4bf80578 -Pathfinding.RVO.Sampled.Agent.elevationCoordinate class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#ad1592b9b14d1f31dd0f100b55e9712e6 -Pathfinding.RVO.Sampled.Agent.height class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a48083b65ac9a863566dc3e3fff09a5b4 -Pathfinding.RVO.Sampled.Agent.layer class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a4338870e6579f71d5c457d9979986c98 -Pathfinding.RVO.Sampled.Agent.manuallyControlled class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a8a9a11d05ba4d5a4c02e7ff0cb5bfd10 -Pathfinding.RVO.Sampled.Agent.maxNeighbours class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#afc4894bb6cdea8cdd3fb808617a6783a -Pathfinding.RVO.Sampled.Agent.maxSpeed class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a3c105180f93a78cf3fb0903df278cf3f -Pathfinding.RVO.Sampled.Agent.neighbourDists class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a158711b1fc1ed240c180163730b23f20 -Pathfinding.RVO.Sampled.Agent.neighbours class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#ae17be8d800427b9315d5dc01d5f99d21 -Pathfinding.RVO.Sampled.Agent.nextDesiredSpeed class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#a68e7a363a20c267cab5cc732469f5c91 -Pathfinding.RVO.Sampled.Agent.nextMaxSpeed class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#adbf661e6e8544d2dbd3ef62cf4fe8866 -Pathfinding.RVO.Sampled.Agent.nextTargetPoint class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#ac1f4d3c70ac781a1b10b7f592d580b77 -Pathfinding.RVO.Sampled.Agent.obstacles class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#aa913b435c2cdde6b9871be474e7f91b1 -Pathfinding.RVO.Sampled.Agent.obstaclesBuffered class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#adf2b61ff62b4405ccf9c1d9ab5ec3e0f -Pathfinding.RVO.Sampled.Agent.obstacleTimeHorizon class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#aaae09db88e3bf152d9ad44de274b7a5c -Pathfinding.RVO.Sampled.Agent.WallWeight class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent.php#af04561275348ac77234ad13ae57eec06 -Pathfinding.AIBase.canMove class_pathfinding_1_1_a_i_base.php#a3fe2c59b75abe53721d72ccca45ff013 -Pathfinding.AIBase.canSearch class_pathfinding_1_1_a_i_base.php#a02f6188029045e6a1f08b82ab58028ed -Pathfinding.AIBase.centerOffset class_pathfinding_1_1_a_i_base.php#ae6827467204bd181fba954dfe3e247b7 -Pathfinding.AIBase.gravity class_pathfinding_1_1_a_i_base.php#afb24001fefa634eba76e8cbba3606e1c -Pathfinding.AIBase.groundMask class_pathfinding_1_1_a_i_base.php#afe87c68088b94d186ce119183b56eb2a -Pathfinding.AIBase.maxSpeed class_pathfinding_1_1_a_i_base.php#a3c105180f93a78cf3fb0903df278cf3f -Pathfinding.AIBase.movementPlane class_pathfinding_1_1_a_i_base.php#a8c9a060ada27b938875e04083e27b442 -Pathfinding.AIBase.repathRate class_pathfinding_1_1_a_i_base.php#a19f304392630a404236b0df6896bca75 -Pathfinding.AIBase.rotationIn2D class_pathfinding_1_1_a_i_base.php#ad9db1a64225d1b3325a5893a8471ac05 -Pathfinding.AIBase.updatePosition class_pathfinding_1_1_a_i_base.php#a2fcd14dc4983eb5b92166a915cb2a038 -Pathfinding.AIBase.updateRotation class_pathfinding_1_1_a_i_base.php#a323cfe70429e0e24b6168e39334b5f88 -Pathfinding.AIBase.controller class_pathfinding_1_1_a_i_base.php#ab91b4eac1bea5f77dfeb2635b060ef1b -Pathfinding.AIBase.lastDeltaPosition class_pathfinding_1_1_a_i_base.php#a61cbaf19bbb85369afdc4f6890875dca -Pathfinding.AIBase.lastDeltaTime class_pathfinding_1_1_a_i_base.php#accecb1bd7c32d923f7a5711810a402ae -Pathfinding.AIBase.lastRepath class_pathfinding_1_1_a_i_base.php#abf8fc57ecb6d04cac39bb13b64558d41 -Pathfinding.AIBase.prevFrame class_pathfinding_1_1_a_i_base.php#a97db5dfeb29dbb10f38ffe11d961572b -Pathfinding.AIBase.prevPosition1 class_pathfinding_1_1_a_i_base.php#ab11e2def143e0dae74da1892c81eafd8 -Pathfinding.AIBase.prevPosition2 class_pathfinding_1_1_a_i_base.php#a53b72feda0b21d267bcdc81218ac4d23 -Pathfinding.AIBase.rigid class_pathfinding_1_1_a_i_base.php#a52a334c3b37260dbdffa24509490e637 -Pathfinding.AIBase.rigid2D class_pathfinding_1_1_a_i_base.php#a985be0452ae3f95821f96f1bc6a7aaf5 -Pathfinding.AIBase.rvoController class_pathfinding_1_1_a_i_base.php#ac1cbe9c663383d58aaa0bb87cdbf9156 -Pathfinding.AIBase.seeker class_pathfinding_1_1_a_i_base.php#a2cc99ba55c7911c446051a8d9c7afdbb -Pathfinding.AIBase.simulatedPosition class_pathfinding_1_1_a_i_base.php#af75b7f60f077977d7126393721b76f9b -Pathfinding.AIBase.simulatedRotation class_pathfinding_1_1_a_i_base.php#a306d7f4f0a444b9cf13b9fd213008580 -Pathfinding.AIBase.tr class_pathfinding_1_1_a_i_base.php#a79a17507a0e6ad3b0345e0397a4a038f -Pathfinding.AIBase.velocity2D class_pathfinding_1_1_a_i_base.php#a45ae24d24120b6598f65ed026fe9590c -Pathfinding.AIBase.verticalVelocity class_pathfinding_1_1_a_i_base.php#ac7df6713592a476d3adc1f73aae1e6e1 -Pathfinding.AIBase.waitingForPathCalculation class_pathfinding_1_1_a_i_base.php#a8c5a1992b1721ce6d0558bc4c4673fec -Pathfinding.AIBase.accumulatedMovementDelta class_pathfinding_1_1_a_i_base.php#a3ff090e27fab6611de7df3584475c3b7 -Pathfinding.AIBase.startHasRun class_pathfinding_1_1_a_i_base.php#a04ac3fa4323a1fdbec76f7798d102a48 -Pathfinding.AIBase.targetCompatibility class_pathfinding_1_1_a_i_base.php#a98ff384e75d936efaec0c31add09f685 -Pathfinding.AIBase.GizmoColorRaycast class_pathfinding_1_1_a_i_base.php#a264231c51a2a87a0508df1ef082cf5d1 -Pathfinding.AIDestinationSetter.target class_pathfinding_1_1_a_i_destination_setter.php#a8a24b37582e07ee23646b165d54fa600 -Pathfinding.AIDestinationSetter.ai class_pathfinding_1_1_a_i_destination_setter.php#aefe9b5dad4b144f8fe19b0f1da2a0adc -Pathfinding.AILerp.canMove class_pathfinding_1_1_a_i_lerp.php#a3fe2c59b75abe53721d72ccca45ff013 -Pathfinding.AILerp.canSearch class_pathfinding_1_1_a_i_lerp.php#a02f6188029045e6a1f08b82ab58028ed -Pathfinding.AILerp.enableRotation class_pathfinding_1_1_a_i_lerp.php#a07f240b46eb33c6060bbbb908e3f9bd9 -Pathfinding.AILerp.interpolatePathSwitches class_pathfinding_1_1_a_i_lerp.php#a4af3d55077e063e40abbb564ee7ccd7d -Pathfinding.AILerp.repathRate class_pathfinding_1_1_a_i_lerp.php#a19f304392630a404236b0df6896bca75 -Pathfinding.AILerp.rotationIn2D class_pathfinding_1_1_a_i_lerp.php#ad9db1a64225d1b3325a5893a8471ac05 -Pathfinding.AILerp.rotationSpeed class_pathfinding_1_1_a_i_lerp.php#a36389ec100eb0f432833a0512e25d4a6 -Pathfinding.AILerp.speed class_pathfinding_1_1_a_i_lerp.php#a7f7e4724cf57d59513b39c5ecc81adc8 -Pathfinding.AILerp.switchPathInterpolationSpeed class_pathfinding_1_1_a_i_lerp.php#a9ad5eba4bbf71acbcd108db87292b14b -Pathfinding.AILerp.updatePosition class_pathfinding_1_1_a_i_lerp.php#a2fcd14dc4983eb5b92166a915cb2a038 -Pathfinding.AILerp.updateRotation class_pathfinding_1_1_a_i_lerp.php#a323cfe70429e0e24b6168e39334b5f88 -Pathfinding.AILerp.canSearchAgain class_pathfinding_1_1_a_i_lerp.php#a1c875f5c4bee119b38ce33fcbed55697 -Pathfinding.AILerp.interpolator class_pathfinding_1_1_a_i_lerp.php#a46dbc6717108f535dff352cbc0239ba0 -Pathfinding.AILerp.lastRepath class_pathfinding_1_1_a_i_lerp.php#abf8fc57ecb6d04cac39bb13b64558d41 -Pathfinding.AILerp.path class_pathfinding_1_1_a_i_lerp.php#a489b52fbe5bb047ce54861121a3e5dcb -Pathfinding.AILerp.pathSwitchInterpolationTime class_pathfinding_1_1_a_i_lerp.php#ab1275a3e042fb0edecbaf4d8c2d46b3c -Pathfinding.AILerp.previousMovementDirection class_pathfinding_1_1_a_i_lerp.php#a3cb98f2726106ad7a5c0a40262ae0e05 -Pathfinding.AILerp.previousMovementOrigin class_pathfinding_1_1_a_i_lerp.php#ae71796bf04f2e4925b85ae5910f8a4d2 -Pathfinding.AILerp.seeker class_pathfinding_1_1_a_i_lerp.php#a2cc99ba55c7911c446051a8d9c7afdbb -Pathfinding.AILerp.tr class_pathfinding_1_1_a_i_lerp.php#a79a17507a0e6ad3b0345e0397a4a038f -Pathfinding.AILerp.previousPosition1 class_pathfinding_1_1_a_i_lerp.php#a00eacb1c6ad47d53d521effb738733ec -Pathfinding.AILerp.previousPosition2 class_pathfinding_1_1_a_i_lerp.php#a75ee60f6b702a5665c871d18099d1f2d -Pathfinding.AILerp.simulatedPosition class_pathfinding_1_1_a_i_lerp.php#af75b7f60f077977d7126393721b76f9b -Pathfinding.AILerp.simulatedRotation class_pathfinding_1_1_a_i_lerp.php#a306d7f4f0a444b9cf13b9fd213008580 -Pathfinding.AILerp.startHasRun class_pathfinding_1_1_a_i_lerp.php#a04ac3fa4323a1fdbec76f7798d102a48 -Pathfinding.AILerp.targetCompatibility class_pathfinding_1_1_a_i_lerp.php#a98ff384e75d936efaec0c31add09f685 -Pathfinding.AIPath.alwaysDrawGizmos class_pathfinding_1_1_a_i_path.php#ae30ecf73f5fea91161e70f05d19c12fa -Pathfinding.AIPath.constrainInsideGraph class_pathfinding_1_1_a_i_path.php#a2dbaef281a36c0da0121ee11f7845a4e -Pathfinding.AIPath.endReachedDistance class_pathfinding_1_1_a_i_path.php#a63c4a3553ed94104f2e984d54cf7dfdb -Pathfinding.AIPath.maxAcceleration class_pathfinding_1_1_a_i_path.php#a75acfe5b3bb67a256ce3ad91cbac056e -Pathfinding.AIPath.pickNextWaypointDist class_pathfinding_1_1_a_i_path.php#a03bd54c4afff5414ca67ecab3e16ed8a -Pathfinding.AIPath.rotationSpeed class_pathfinding_1_1_a_i_path.php#a36389ec100eb0f432833a0512e25d4a6 -Pathfinding.AIPath.slowdownDistance class_pathfinding_1_1_a_i_path.php#ad4085752f25fa164f6c1635acaf7274e -Pathfinding.AIPath.slowWhenNotFacingTarget class_pathfinding_1_1_a_i_path.php#ac9e8f32656bc67bf5d8dff4a82661932 -Pathfinding.AIPath.whenCloseToDestination class_pathfinding_1_1_a_i_path.php#a54d4312596d67ed9467a36fd8704b8c7 -Pathfinding.AIPath.interpolator class_pathfinding_1_1_a_i_path.php#a46dbc6717108f535dff352cbc0239ba0 -Pathfinding.AIPath.path class_pathfinding_1_1_a_i_path.php#aea4bb978a006652d3ff42b927337913d -Pathfinding.AIPath.cachedNNConstraint class_pathfinding_1_1_a_i_path.php#acd70e1ae0bfdc99784cb70079ee4b64e -Pathfinding.AlternativePath.penalty class_pathfinding_1_1_alternative_path.php#a70500289fa53bc6e8b1c2d7b82a11640 -Pathfinding.AlternativePath.randomStep class_pathfinding_1_1_alternative_path.php#a4f8151e935662e4adbc9c764189d775e -Pathfinding.AlternativePath.destroyed class_pathfinding_1_1_alternative_path.php#aa374dac244a8e916c8f4b96aa937430d -Pathfinding.AlternativePath.prevNodes class_pathfinding_1_1_alternative_path.php#a3d99b9af7dc50fca9b1d00e086157d10 -Pathfinding.AlternativePath.prevPenalty class_pathfinding_1_1_alternative_path.php#adf59f14d9c564a0f8110252994a1989e -Pathfinding.AlternativePath.rnd class_pathfinding_1_1_alternative_path.php#a87e18ab9e2d5e7f3bdb6cbdd12fde5a4 -Pathfinding.AnimationLink.animSpeed class_pathfinding_1_1_animation_link.php#a6e54f6ef596f2af94c19d38f78e84f62 -Pathfinding.AnimationLink.boneRoot class_pathfinding_1_1_animation_link.php#a3158366bc25dffd34623be78f8d1c77d -Pathfinding.AnimationLink.clip class_pathfinding_1_1_animation_link.php#a5bc6475f9a589b0dfa814020f64ae026 -Pathfinding.AnimationLink.referenceMesh class_pathfinding_1_1_animation_link.php#a88a7b432fd01bda102e9c1626945db80 -Pathfinding.AnimationLink.reverseAnim class_pathfinding_1_1_animation_link.php#aaa972f9b9fef5913f8dbc6b70f778e45 -Pathfinding.AnimationLink.sequence class_pathfinding_1_1_animation_link.php#a74e3f308a09b14a69d1b6873f58e75c5 -Pathfinding.Examples.AnimationLinkTraverser.anim class_pathfinding_1_1_examples_1_1_animation_link_traverser.php#a6f1b952926d36dbafbaba90c743ce09f -Pathfinding.Examples.AnimationLinkTraverser.ai class_pathfinding_1_1_examples_1_1_animation_link_traverser.php#aa9df41055f9a805aadf722646e177943 -Pathfinding.Util.APIUpgrader.project class_pathfinding_1_1_util_1_1_a_p_i_upgrader.php#aa540f1838f3e6eb6de45eea8709d2a52 -Pathfinding.Util.APIUpgrader.tag class_pathfinding_1_1_util_1_1_a_p_i_upgrader.php#ab7c4d9a472cd54362a28c0a4aa13a9e3 -Pathfinding.Util.APIUpgrader.dataFile class_pathfinding_1_1_util_1_1_a_p_i_upgrader.php#a9feb29c2bd0bcf77aac3f991432b4b61 -Pathfinding.Util.APIUpgrader.re class_pathfinding_1_1_util_1_1_a_p_i_upgrader.php#a008e281c69dab8e5e34a77c9574d14d2 -Pathfinding.Util.APIUpgrader.tempFileOutput class_pathfinding_1_1_util_1_1_a_p_i_upgrader.php#a10a2604bc27b886310a77b574e7f3c3b -Pathfinding.Util.APIUpgrader.upgradeItems class_pathfinding_1_1_util_1_1_a_p_i_upgrader.php#a505525bf85b6ed873bf1e7810daa5f7d -Pathfinding.Util.ArrayPool.MaximumExactArrayLength class_pathfinding_1_1_util_1_1_array_pool.php#a51c2ae2c401dc472538d9d5e8067772c -Pathfinding.Util.ArrayPool.exactPool class_pathfinding_1_1_util_1_1_array_pool.php#a7a0e8b5465d5edd29af49ea49c60c55b -Pathfinding.Util.ArrayPool.inPool class_pathfinding_1_1_util_1_1_array_pool.php#a586bc2a537125fda9ad5deb74c5ff093 -Pathfinding.Util.ArrayPool.pool class_pathfinding_1_1_util_1_1_array_pool.php#a3a12f81f983cf807e128fa9832fd0472 -Pathfinding.Examples.Astar3DButton.node class_pathfinding_1_1_examples_1_1_astar3_d_button.php#ad38a0e14c26a92de3abc582d51413e1b -Pathfinding.AstarColor._AreaColors class_pathfinding_1_1_astar_color.php#aecb5e0277541474fc58a1d889b220da4 -Pathfinding.AstarColor._BoundsHandles class_pathfinding_1_1_astar_color.php#aeff8612fec740e996121a8621d7dfd0c -Pathfinding.AstarColor._ConnectionHighLerp class_pathfinding_1_1_astar_color.php#ac9c313f25b0bdba836619a4a0d2c6d14 -Pathfinding.AstarColor._ConnectionLowLerp class_pathfinding_1_1_astar_color.php#a03ce9d4cfed43caa8ed4525d67e9b1d6 -Pathfinding.AstarColor._MeshEdgeColor class_pathfinding_1_1_astar_color.php#a8a18bd260e31efcdb88d4e29cfbd55b6 -Pathfinding.AstarColor._NodeConnection class_pathfinding_1_1_astar_color.php#af7e71c1cfd4e4caf7208f0d3bc35d5d3 -Pathfinding.AstarColor._UnwalkableNode class_pathfinding_1_1_astar_color.php#a9e4a9be5b64ec1170cd89869a46af94a -Pathfinding.AstarColor.BoundsHandles class_pathfinding_1_1_astar_color.php#a73f04abceba0f375d9309541f4099f34 -Pathfinding.AstarColor.ConnectionHighLerp class_pathfinding_1_1_astar_color.php#ac6b833f30a2f1c2c07030785170b60be -Pathfinding.AstarColor.ConnectionLowLerp class_pathfinding_1_1_astar_color.php#a0b27ec23273410adbda9786e8261da2b -Pathfinding.AstarColor.MeshEdgeColor class_pathfinding_1_1_astar_color.php#a41fe134675985e5ec67add4eaf63e017 -Pathfinding.AstarColor.NodeConnection class_pathfinding_1_1_astar_color.php#a2c2387d19eaf51c573e4ff81b53e9679 -Pathfinding.AstarColor.UnwalkableNode class_pathfinding_1_1_astar_color.php#a0fb6c4362dc617b2fa12cc0632aa3f62 -Pathfinding.AstarColor.AreaColors class_pathfinding_1_1_astar_color.php#a893ebe36da05cc4440ae60f9a924e4e4 -Pathfinding.AstarData.cacheStartup class_pathfinding_1_1_astar_data.php#aadbf1a3a584b166ed504a4220f129947 -Pathfinding.AstarData.data_cachedStartup class_pathfinding_1_1_astar_data.php#aba2557ca1b56a753aa8bed4a1096e0a9 -Pathfinding.AstarData.file_cachedStartup class_pathfinding_1_1_astar_data.php#a34414294d09ad009911bc0967f742d50 -Pathfinding.AstarData.graphs class_pathfinding_1_1_astar_data.php#ab6f474b6907ebd1b9105ef82b90b8823 -Pathfinding.AstarData.dataString class_pathfinding_1_1_astar_data.php#a58d35a464b6c0ee24f22f2b064fab4fd -Pathfinding.AstarData.graphStructureLocked class_pathfinding_1_1_astar_data.php#accf09d5840cb8fba6b3dde5d0512f3f4 -Pathfinding.AstarData.upgradeData class_pathfinding_1_1_astar_data.php#a97cf050a3097cd9647e80047ad6a7495 -Pathfinding.AstarDebugger.font class_pathfinding_1_1_astar_debugger.php#a1e52b0778d1df763fc5b497c26ead7a9 -Pathfinding.AstarDebugger.fontSize class_pathfinding_1_1_astar_debugger.php#a78dc3704e7e01da52c9a93a70c5bc45d -Pathfinding.AstarDebugger.graphBufferSize class_pathfinding_1_1_astar_debugger.php#af1200aaba354cc2d26f097e75b4b198f -Pathfinding.AstarDebugger.show class_pathfinding_1_1_astar_debugger.php#a5bafc98f16f9fd53e0f929fe20b17e1c -Pathfinding.AstarDebugger.showFPS class_pathfinding_1_1_astar_debugger.php#a9fe4520d50ff6c6a43cd95dffe5ad117 -Pathfinding.AstarDebugger.showGraph class_pathfinding_1_1_astar_debugger.php#a0b33c67bbb696dd8c3dc02809563a70a -Pathfinding.AstarDebugger.showInEditor class_pathfinding_1_1_astar_debugger.php#ae436229f89638b31f3d2198b3ee11e35 -Pathfinding.AstarDebugger.showMemProfile class_pathfinding_1_1_astar_debugger.php#a48ae81e394eddd1098f95019a03c6670 -Pathfinding.AstarDebugger.showPathProfile class_pathfinding_1_1_astar_debugger.php#ad7bd80bbe2680527517f29170f68dbda -Pathfinding.AstarDebugger.yOffset class_pathfinding_1_1_astar_debugger.php#a016718268d32fcb95b1190cc1071e270 -Pathfinding.AstarDebugger.allocMem class_pathfinding_1_1_astar_debugger.php#a6d5772a94f9959ca91b1969f009c1e88 -Pathfinding.AstarDebugger.allocRate class_pathfinding_1_1_astar_debugger.php#a7c1f5a897b5b33808d13fa69f68954a2 -Pathfinding.AstarDebugger.boxRect class_pathfinding_1_1_astar_debugger.php#a1999853031f6936a19729df84eecc14f -Pathfinding.AstarDebugger.cachedText class_pathfinding_1_1_astar_debugger.php#a62c625331acd09f4679ab6543e430931 -Pathfinding.AstarDebugger.cam class_pathfinding_1_1_astar_debugger.php#a3b23650c3f80b53cee3a2c471797c732 -Pathfinding.AstarDebugger.collectAlloc class_pathfinding_1_1_astar_debugger.php#a8ac0a00b13eee2f31530cfd646b9d8c7 -Pathfinding.AstarDebugger.debugTypes class_pathfinding_1_1_astar_debugger.php#aab777cf7e84986fa3df6385e72139158 -Pathfinding.AstarDebugger.delayedDeltaTime class_pathfinding_1_1_astar_debugger.php#aa6ae44aa4eebf85204db920506f2d8f8 -Pathfinding.AstarDebugger.delta class_pathfinding_1_1_astar_debugger.php#a1ee4a05b54419bfadd66ee351d05812e -Pathfinding.AstarDebugger.fpsDropCounterSize class_pathfinding_1_1_astar_debugger.php#a2010d46c7aa0c9353b81c18daf0a97a4 -Pathfinding.AstarDebugger.fpsDrops class_pathfinding_1_1_astar_debugger.php#a329033dfef32f0164894b1cb68061b80 -Pathfinding.AstarDebugger.graph class_pathfinding_1_1_astar_debugger.php#ae5b7d89c01f01bc4947d1ac0ad47a6d3 -Pathfinding.AstarDebugger.graphHeight class_pathfinding_1_1_astar_debugger.php#a24a7d9fe0a8a6480570ce5bacfc42406 -Pathfinding.AstarDebugger.graphOffset class_pathfinding_1_1_astar_debugger.php#a52cd193488772e037ce9fe0cfb735709 -Pathfinding.AstarDebugger.graphWidth class_pathfinding_1_1_astar_debugger.php#a70a39cc2db6eb35274c127f828f7de00 -Pathfinding.AstarDebugger.lastAllocMemory class_pathfinding_1_1_astar_debugger.php#a731a8eca85dabc3a771d36faf465df6b -Pathfinding.AstarDebugger.lastAllocSet class_pathfinding_1_1_astar_debugger.php#a6cac23bde5d294acac850eab6f64d172 -Pathfinding.AstarDebugger.lastCollect class_pathfinding_1_1_astar_debugger.php#a9932ec2cf5fde50747a4998d98fdc91f -Pathfinding.AstarDebugger.lastCollectNum class_pathfinding_1_1_astar_debugger.php#a3c513562bdfa72453c6d5b44f30be7c8 -Pathfinding.AstarDebugger.lastDeltaTime class_pathfinding_1_1_astar_debugger.php#accecb1bd7c32d923f7a5711810a402ae -Pathfinding.AstarDebugger.lastUpdate class_pathfinding_1_1_astar_debugger.php#a4f960fd4f8434912f6e1876890d3a211 -Pathfinding.AstarDebugger.maxNodePool class_pathfinding_1_1_astar_debugger.php#a8e09c745c7f956eaa4a3660dc8117fbc -Pathfinding.AstarDebugger.maxVecPool class_pathfinding_1_1_astar_debugger.php#ae28f6087967b6634ecfe63d12b22357b -Pathfinding.AstarDebugger.peakAlloc class_pathfinding_1_1_astar_debugger.php#aa2f3f8d4a5bfe9684bd606f44fdb8c85 -Pathfinding.AstarDebugger.style class_pathfinding_1_1_astar_debugger.php#aee410f5d50fe08f95612aa57800c337e -Pathfinding.AstarDebugger.text class_pathfinding_1_1_astar_debugger.php#a92d1017c3b52fca3efaa42249a414c86 -AstarPath.showNavGraphs class_astar_path.php#a5c8aca200b940c2428221034245ca792 -AstarPath.showUnwalkableNodes class_astar_path.php#ab6e55ba1fc238c69c1e984441a7e8098 -AstarPath.debugMode class_astar_path.php#afa1001dc4a08174303c8f383a36c20eb -AstarPath.debugFloor class_astar_path.php#a0ce65f9adf13eab40539e82414011c83 -AstarPath.debugRoof class_astar_path.php#a07fe200e1bc5e23a9833229912102ea5 -AstarPath.manualDebugFloorRoof class_astar_path.php#aa9cc44a0cfe417600355a6f975bf4021 -AstarPath.showSearchTree class_astar_path.php#a59ac99ea09482346581808bdca794c6f -AstarPath.unwalkableNodeDebugSize class_astar_path.php#aea95861c1c2b0dfdef54fb5ebd96c8d7 -AstarPath.logPathResults class_astar_path.php#a1383d1d6a28c00bda0b0961fbe28626e -AstarPath.maxNearestNodeDistance class_astar_path.php#aa5b496fb1f393abb6896edc7777397b0 -AstarPath.scanOnStartup class_astar_path.php#a3dea072d18b2c5e3f8e377e533ac83e5 -AstarPath.fullGetNearestSearch class_astar_path.php#a10d5c41cd51043fb472da8692ffb1577 -AstarPath.prioritizeGraphs class_astar_path.php#a565b110e4b10f36bc9d8cb8573599a33 -AstarPath.prioritizeGraphsLimit class_astar_path.php#aeafbb0cfb95de7a3d41b6c6087bb0937 -AstarPath.colorSettings class_astar_path.php#a6798b1c6406fb6f4e514256b8b561edd -AstarPath.heuristic class_astar_path.php#a075542dfca7754bc1e390b6bb13e5e92 -AstarPath.heuristicScale class_astar_path.php#aee92349c20768e49169e32671e74a820 -AstarPath.threadCount class_astar_path.php#aad1c5fcb415a05b4a6d17d70f76d5569 -AstarPath.maxFrameTime class_astar_path.php#a5d24acfb76c2889e85afb1a9ed186217 -AstarPath.minAreaSize class_astar_path.php#ac7ba28d0299aca1ddd99f1e4597f50e1 -AstarPath.batchGraphUpdates class_astar_path.php#a88da553087354f51cbd2413f1cbe052b -AstarPath.graphUpdateBatchingInterval class_astar_path.php#a56e647a3c7361cf3bb3aa7053e9fb183 -AstarPath.tagNames class_astar_path.php#a641ae4a3bc3faa47da3a43409e8048dd -AstarPath.debugPathData class_astar_path.php#a4d99c4e91a40a2d9ef5a840474fd0bee -AstarPath.debugPathID class_astar_path.php#a67b86ff24ca6b84413455d616a05b5d5 -AstarPath.inGameDebugPath class_astar_path.php#a0494e239f287d8e704621f38f5fc736b -AstarPath.OnAwakeSettings class_astar_path.php#aa6e19eb1620546d32011593e17f6e804 -AstarPath.OnGraphPreScan class_astar_path.php#ae8ec613b79575204e2086ce77f57db63 -AstarPath.OnGraphPostScan class_astar_path.php#ab448cb2e0b2727c342dfb66e61b23cee -AstarPath.OnPathPreSearch class_astar_path.php#ab5b069e4ec515ead310039862789d979 -AstarPath.OnPathPostSearch class_astar_path.php#a2f09898f1021c1e504cd2f8ad0158b0d -AstarPath.OnPreScan class_astar_path.php#a85094b1ab6f75a8a173f6a3fc60f4c1b -AstarPath.OnPostScan class_astar_path.php#a0f85ab95acf0f5ad88a3ac590efaa0b5 -AstarPath.OnLatePostScan class_astar_path.php#a56fc0edd3b51a122454f6dc811191a7a -AstarPath.OnGraphsUpdated class_astar_path.php#a8c6d31ec81922e83c11aaf8a96f33cb2 -AstarPath.On65KOverflow class_astar_path.php#ad5c732caa4464ee80efd0259199af550 -AstarPath.OnGraphsWillBeUpdated class_astar_path.php#a1b0f39ed0e4d9a7f3e97dabd0a19098a -AstarPath.OnGraphsWillBeUpdated2 class_astar_path.php#ad2be3e85a211923a85bbcc779676e0e8 -AstarPath.active class_astar_path.php#a434d5613ef9ff4b88d1be0ce9527825e -AstarPath.Branch class_astar_path.php#a2199523dc18ae916ce97af1c443c3c40 -AstarPath.Distribution class_astar_path.php#ad37cf4b71c210a53ab23e8494bcd33eb -AstarPath.Version class_astar_path.php#a0744f92e6a21619f2cb44bb548341187 -AstarPath.data class_astar_path.php#ac28d1cd5250fde3b78fb691e6a51bae3 -AstarPath.euclideanEmbedding class_astar_path.php#a9452e0e93430c2a34a017afde43f8864 -AstarPath.showGraphs class_astar_path.php#a18a218e6cca45fd69c909d144df4105d -AstarPath.gizmos class_astar_path.php#a7d4093d5d4824569cc7e54c4d5d73303 -AstarPath.graphUpdateRoutineRunning class_astar_path.php#ac78e82e2537fe21dcecd13a07ea9deba -AstarPath.graphUpdates class_astar_path.php#a6dea15ca6985fb39c865e73bde66cc0d -AstarPath.graphUpdatesWorkItemAdded class_astar_path.php#afc89e65706b398ea64848e5b7d92c2ff -AstarPath.isScanningBacking class_astar_path.php#a2cdee0795204b1f56f0bc826bb80ed6d -AstarPath.lastGraphUpdate class_astar_path.php#ab25ca58ece790d3540e79247ac137040 -AstarPath.nextFreePathID class_astar_path.php#a76ca7f511cbc8e69e8443667f2f6402e -AstarPath.pathProcessor class_astar_path.php#acd4140e863620b1ea5790001cf7d4a4d -AstarPath.workItemLock class_astar_path.php#aab0670f9e95971ce566cd8b7c67a4191 -AstarPath.workItems class_astar_path.php#ad4eda3eb9b771cd8fffaa6299f68819e -AstarPath.pathReturnQueue class_astar_path.php#a4aa22be850b75011e0afa8e7709dc7f8 -AstarPath.waitForPathDepth class_astar_path.php#a8110e3bbc1a41c0cea55747adf398462 -Pathfinding.AstarPathEditor.aboutArea class_pathfinding_1_1_astar_path_editor.php#af57d2b32680297cd54ba41f259a7d4fc -Pathfinding.AstarPathEditor.addGraphsArea class_pathfinding_1_1_astar_path_editor.php#a63f53107858970ffe9733a7089a32dcc -Pathfinding.AstarPathEditor.alwaysVisibleArea class_pathfinding_1_1_astar_path_editor.php#ae40df2eaa7eba3ee54b8a84fdd7e5f8c -Pathfinding.AstarPathEditor.colorSettingsArea class_pathfinding_1_1_astar_path_editor.php#a8188e1b6a9d8d591bb41373c83f8a8a6 -Pathfinding.AstarPathEditor.customAreaColorsOpen class_pathfinding_1_1_astar_path_editor.php#a919796ecebc2ba3579f9fec032d31874 -Pathfinding.AstarPathEditor.editorSettingsArea class_pathfinding_1_1_astar_path_editor.php#a40d785fd5ea50e934fce87258ed3bd71 -Pathfinding.AstarPathEditor.editTags class_pathfinding_1_1_astar_path_editor.php#a3b5bafbd8c8a03516585761d0305924f -Pathfinding.AstarPathEditor.graphDeleteButtonStyle class_pathfinding_1_1_astar_path_editor.php#a9046c9609bebf0ab717506dcb0c06ffc -Pathfinding.AstarPathEditor.graphEditNameButtonStyle class_pathfinding_1_1_astar_path_editor.php#a8ab2ca167c92aebbd1a3226f87e9827a -Pathfinding.AstarPathEditor.graphEditorTypes class_pathfinding_1_1_astar_path_editor.php#aabc5e4b287c6df20ee6e79c64fadc1d2 -Pathfinding.AstarPathEditor.graphGizmoButtonStyle class_pathfinding_1_1_astar_path_editor.php#aad686a4f762607401b026509bb6dce17 -Pathfinding.AstarPathEditor.graphInfoButtonStyle class_pathfinding_1_1_astar_path_editor.php#a952080362e23e1285d834a73a77a6b92 -Pathfinding.AstarPathEditor.graphNodeCounts class_pathfinding_1_1_astar_path_editor.php#aaddb047d0baa1ee9ba9c79e232d48fc6 -Pathfinding.AstarPathEditor.graphsArea class_pathfinding_1_1_astar_path_editor.php#a09dbaa5af21d135c8602cea4ff4ca42b -Pathfinding.AstarPathEditor.ignoredChecksum class_pathfinding_1_1_astar_path_editor.php#af7e4453a78e61b98406b33723728b696 -Pathfinding.AstarPathEditor.lastUndoGroup class_pathfinding_1_1_astar_path_editor.php#a69f5bce11253e3547f80ec0e17e1b562 -Pathfinding.AstarPathEditor.level0AreaStyle class_pathfinding_1_1_astar_path_editor.php#afff0ed1e1785c5c23e9ef88535b022af -Pathfinding.AstarPathEditor.level0LabelStyle class_pathfinding_1_1_astar_path_editor.php#a6c95537dc50819298f4421232e59ffac -Pathfinding.AstarPathEditor.level1AreaStyle class_pathfinding_1_1_astar_path_editor.php#af3b0c744e66d9c152461a9b3f64ee30c -Pathfinding.AstarPathEditor.level1LabelStyle class_pathfinding_1_1_astar_path_editor.php#a65b851b70ce2f66e0ace6caeb3f943e5 -Pathfinding.AstarPathEditor.optimizationSettingsArea class_pathfinding_1_1_astar_path_editor.php#abcbdf95065f8819be0b1158fdb42ecdb -Pathfinding.AstarPathEditor.serializationSettingsArea class_pathfinding_1_1_astar_path_editor.php#ac44f8a943a30e9e15a48eaf1739dec0f -Pathfinding.AstarPathEditor.settingsArea class_pathfinding_1_1_astar_path_editor.php#aae01f7264988612f4f5aec5aa58183f7 -Pathfinding.AstarPathEditor.showSettings class_pathfinding_1_1_astar_path_editor.php#a2b6f676a15f18353c728dd844981eb83 -Pathfinding.AstarPathEditor.stylesLoaded class_pathfinding_1_1_astar_path_editor.php#ae3342d30d24502431c7c3502bf492882 -Pathfinding.AstarPathEditor.tagsArea class_pathfinding_1_1_astar_path_editor.php#ad8b4c1f2a26fd8c3835ba8239cd04f30 -Pathfinding.AstarPathEditor.defines class_pathfinding_1_1_astar_path_editor.php#acb6367006f00baf617b799d28bc94538 -Pathfinding.AstarPathEditor.graphEditors class_pathfinding_1_1_astar_path_editor.php#a93be7200072a10b74041c4dd6bd37256 -Pathfinding.AstarPathEditor.graphNameFocused class_pathfinding_1_1_astar_path_editor.php#a5f325cb2687ac49bc8f2216e0f9b30b8 -Pathfinding.AstarPathEditor.scriptsFolder class_pathfinding_1_1_astar_path_editor.php#a968082660501ec4c98516304325d25c6 -Pathfinding.AstarProfiler.profiles class_pathfinding_1_1_astar_profiler.php#a0cc202a796cd244e9e1bad7b560f3b0f -Pathfinding.AstarProfiler.startTime class_pathfinding_1_1_astar_profiler.php#a4cfee1eade10a265003d7c1fe3394596 -Pathfinding.AstarProfiler.fastProfileNames class_pathfinding_1_1_astar_profiler.php#ae8f9c18cc4d8be41091848ed26699d92 -Pathfinding.AstarProfiler.fastProfiles class_pathfinding_1_1_astar_profiler.php#a5572ddadebe94f7720a491c4b7858d27 -Pathfinding.Serialization.AstarSerializer.binaryExt class_pathfinding_1_1_serialization_1_1_astar_serializer.php#a5c24432224bafcfb11483972fb547046 -Pathfinding.Serialization.AstarSerializer.checksum class_pathfinding_1_1_serialization_1_1_astar_serializer.php#afa50f8cf3e101abae4f591420e1ab097 -Pathfinding.Serialization.AstarSerializer.data class_pathfinding_1_1_serialization_1_1_astar_serializer.php#ac28d1cd5250fde3b78fb691e6a51bae3 -Pathfinding.Serialization.AstarSerializer.encoding class_pathfinding_1_1_serialization_1_1_astar_serializer.php#ade6a1454ad3a6a733f7903bb6dccb981 -Pathfinding.Serialization.AstarSerializer.graphIndexInZip class_pathfinding_1_1_serialization_1_1_astar_serializer.php#aab6533bfd73fd91b355076fb0cbc8a4a -Pathfinding.Serialization.AstarSerializer.graphIndexOffset class_pathfinding_1_1_serialization_1_1_astar_serializer.php#ae2dbce3df971058b2d1d122a10a3964b -Pathfinding.Serialization.AstarSerializer.graphs class_pathfinding_1_1_serialization_1_1_astar_serializer.php#ab6f474b6907ebd1b9105ef82b90b8823 -Pathfinding.Serialization.AstarSerializer.jsonExt class_pathfinding_1_1_serialization_1_1_astar_serializer.php#ac9b7b168c72a600f2fd501ef488ac42a -Pathfinding.Serialization.AstarSerializer.meta class_pathfinding_1_1_serialization_1_1_astar_serializer.php#a29ca825e5d7f5e6192c504c6980e1a86 -Pathfinding.Serialization.AstarSerializer.settings class_pathfinding_1_1_serialization_1_1_astar_serializer.php#a9ef140a7a352b0482080212f5c83e40c -Pathfinding.Serialization.AstarSerializer.zip class_pathfinding_1_1_serialization_1_1_astar_serializer.php#a812079ac6284882df689098a680185e4 -Pathfinding.Serialization.AstarSerializer.zipStream class_pathfinding_1_1_serialization_1_1_astar_serializer.php#ad0aaac0a13ef3452cdaf2a5289255523 -Pathfinding.Serialization.AstarSerializer._stringBuilder class_pathfinding_1_1_serialization_1_1_astar_serializer.php#a4af5098cbab4035643ab88ecf04e63b8 -Pathfinding.Serialization.AstarSerializer.V3_8_3 class_pathfinding_1_1_serialization_1_1_astar_serializer.php#af16e3c94f2f95250e7254b1191036ab5 -Pathfinding.Serialization.AstarSerializer.V3_9_0 class_pathfinding_1_1_serialization_1_1_astar_serializer.php#aed0c88e3fc43c6e7b8e03139e2c374c2 -Pathfinding.Serialization.AstarSerializer.V4_1_0 class_pathfinding_1_1_serialization_1_1_astar_serializer.php#aca30670d2b161a69a2e3b23080ebeb85 -Pathfinding.Examples.AstarSmoothFollow2.damping class_pathfinding_1_1_examples_1_1_astar_smooth_follow2.php#a99d817470e9063f458d39529c7c1724b -Pathfinding.Examples.AstarSmoothFollow2.distance class_pathfinding_1_1_examples_1_1_astar_smooth_follow2.php#a06f14a9abd47b91465f895d5259cdc1b -Pathfinding.Examples.AstarSmoothFollow2.followBehind class_pathfinding_1_1_examples_1_1_astar_smooth_follow2.php#adb5653ca4c704244f18792419b625acd -Pathfinding.Examples.AstarSmoothFollow2.height class_pathfinding_1_1_examples_1_1_astar_smooth_follow2.php#a48083b65ac9a863566dc3e3fff09a5b4 -Pathfinding.Examples.AstarSmoothFollow2.rotationDamping class_pathfinding_1_1_examples_1_1_astar_smooth_follow2.php#a2aff0fc619720960ebfdc2d731327179 -Pathfinding.Examples.AstarSmoothFollow2.smoothRotation class_pathfinding_1_1_examples_1_1_astar_smooth_follow2.php#ae285c751113aa05c2fd5bb77f2cffcab -Pathfinding.Examples.AstarSmoothFollow2.staticOffset class_pathfinding_1_1_examples_1_1_astar_smooth_follow2.php#ad84546b76e65b2f46aa9813f9ea9924f -Pathfinding.Examples.AstarSmoothFollow2.target class_pathfinding_1_1_examples_1_1_astar_smooth_follow2.php#a8a24b37582e07ee23646b165d54fa600 -Pathfinding.AstarUpdateChecker._lastUpdateCheck class_pathfinding_1_1_astar_update_checker.php#a678796ba5f6c9e429510f6741e143507 -Pathfinding.AstarUpdateChecker._lastUpdateCheckRead class_pathfinding_1_1_astar_update_checker.php#afae767b3b2e70aa0d7fbf0aaaa8c30c5 -Pathfinding.AstarUpdateChecker._latestBetaVersion class_pathfinding_1_1_astar_update_checker.php#a8eafe1cee302d50ff1a605a38f9266bd -Pathfinding.AstarUpdateChecker._latestVersion class_pathfinding_1_1_astar_update_checker.php#a9efdb23685d2fa06e8ddfd90fb8c1e30 -Pathfinding.AstarUpdateChecker._latestVersionDescription class_pathfinding_1_1_astar_update_checker.php#a35125b9110e36896fcfbed2caf3a2d30 -Pathfinding.AstarUpdateChecker.astarServerData class_pathfinding_1_1_astar_update_checker.php#abd7a681fb23e3b20b40f573aee38216f -Pathfinding.AstarUpdateChecker.hasParsedServerMessage class_pathfinding_1_1_astar_update_checker.php#a2ef884dee80272c3a0c0c6020ff28f22 -Pathfinding.AstarUpdateChecker.updateCheckDownload class_pathfinding_1_1_astar_update_checker.php#a0cae587f52daf6b1c0d417fcf0c9b0df -Pathfinding.AstarUpdateChecker.updateCheckRate class_pathfinding_1_1_astar_update_checker.php#a1ba9427bb5817bf939a61ed632606cf4 -Pathfinding.AstarUpdateChecker.updateURL class_pathfinding_1_1_astar_update_checker.php#a2d6ca11c299d39b6e535ae40c5175c68 -Pathfinding.AstarUpdateWindow.largeStyle class_pathfinding_1_1_astar_update_window.php#a2d2eb1b48e56cfa21129c1f8f99efb7b -Pathfinding.AstarUpdateWindow.normalStyle class_pathfinding_1_1_astar_update_window.php#af505f05513d5bc4cf0ea8c0f4c35d323 -Pathfinding.AstarUpdateWindow.setReminder class_pathfinding_1_1_astar_update_window.php#adb368cf8de6d008647bf91ca319802a7 -Pathfinding.AstarUpdateWindow.summary class_pathfinding_1_1_astar_update_window.php#a37c83116998ce381ed1a972a99471673 -Pathfinding.AstarUpdateWindow.version class_pathfinding_1_1_astar_update_window.php#ac620c19e22394db7bca83528aab69634 -Pathfinding.BaseAIEditor.gravity class_pathfinding_1_1_base_a_i_editor.php#a2cdc0eeb892de75d7c81ebb5022d82bf -Pathfinding.BaseAIEditor.acceleration class_pathfinding_1_1_base_a_i_editor.php#a717176f740ace119cbc23ed30c849662 -Pathfinding.BaseAIEditor.centerOffset class_pathfinding_1_1_base_a_i_editor.php#a1c5370b80b85a97eacbfffe1821fe378 -Pathfinding.BaseAIEditor.groundMask class_pathfinding_1_1_base_a_i_editor.php#adde07d696889f68c98bc4de82034494e -Pathfinding.BaseAIEditor.lastSeenCustomGravity class_pathfinding_1_1_base_a_i_editor.php#ac17ef7ab85d44ca00221bf57588c8b77 -Pathfinding.BaseAIEditor.rotationIn2D class_pathfinding_1_1_base_a_i_editor.php#aa4c9495a64fc05b5f59f762887948f4e -Pathfinding.BBTree.count class_pathfinding_1_1_b_b_tree.php#ad43c3812e6d13e0518d9f8b8f463ffcf -Pathfinding.BBTree.leafNodes class_pathfinding_1_1_b_b_tree.php#adebaebaaafea917fc39275a2a1f5a374 -Pathfinding.BBTree.MaximumLeafSize class_pathfinding_1_1_b_b_tree.php#a20de937194e9d80a0db97255709d0acc -Pathfinding.BBTree.nodeLookup class_pathfinding_1_1_b_b_tree.php#a2208e02ee3161e30fd30c5504281b287 -Pathfinding.BBTree.tree class_pathfinding_1_1_b_b_tree.php#ab345b57154b3684bbe6eb1ed38376503 -Pathfinding.Examples.BezierMover.points class_pathfinding_1_1_examples_1_1_bezier_mover.php#aa0de34bbfdd0b8a327ca07f3ccdaa8b2 -Pathfinding.Examples.BezierMover.speed class_pathfinding_1_1_examples_1_1_bezier_mover.php#a7f7e4724cf57d59513b39c5ecc81adc8 -Pathfinding.Examples.BezierMover.tiltAmount class_pathfinding_1_1_examples_1_1_bezier_mover.php#a486442287a61c5db31258d3376b6ca1d -Pathfinding.Examples.BezierMover.time class_pathfinding_1_1_examples_1_1_bezier_mover.php#a8b8dfe2335a5bf90695960dc6a1c5d3b -Pathfinding.BinaryHeap.growthFactor class_pathfinding_1_1_binary_heap.php#a8c17e01c89721611afec886547fcfeed -Pathfinding.BinaryHeap.NotInHeap class_pathfinding_1_1_binary_heap.php#aa291735bd7ba057f08c23e6c2bd8205c -Pathfinding.BinaryHeap.numberOfItems class_pathfinding_1_1_binary_heap.php#aefeb70f054f51564fc05a92bc9013a6f -Pathfinding.BinaryHeap.D class_pathfinding_1_1_binary_heap.php#acf1e03a8a1d3f8754ef7ed73b2577adb -Pathfinding.BinaryHeap.heap class_pathfinding_1_1_binary_heap.php#a6ac8b893298905cfb291f6a72d3eaea7 -Pathfinding.BinaryHeap.SortGScores class_pathfinding_1_1_binary_heap.php#a6d01bf346b1c601c4e40233ad60c0fbf -Pathfinding.BlockManager.blocked class_pathfinding_1_1_block_manager.php#a260e598cd6cd8754de273936110f7b9e -Pathfinding.Util.RetainedGizmos.Builder.lineColors class_pathfinding_1_1_util_1_1_retained_gizmos_1_1_builder.php#ad9e63b37a038d1a851cb2eae1f66881b -Pathfinding.Util.RetainedGizmos.Builder.lines class_pathfinding_1_1_util_1_1_retained_gizmos_1_1_builder.php#a9bf176aa01a6fdb7d58e5f053b67225b -Pathfinding.Util.RetainedGizmos.Builder.meshes class_pathfinding_1_1_util_1_1_retained_gizmos_1_1_builder.php#a0483a16482494e8d2f1e1fc6a7942fc1 -Pathfinding.Recast.RecastMeshGatherer.CapsuleCache.height class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer_1_1_capsule_cache.php#a48083b65ac9a863566dc3e3fff09a5b4 -Pathfinding.Recast.RecastMeshGatherer.CapsuleCache.rows class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer_1_1_capsule_cache.php#a061459acc9e078fa4699e0e349887215 -Pathfinding.Recast.RecastMeshGatherer.CapsuleCache.tris class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer_1_1_capsule_cache.php#a661a2dd45ef4a81177a8fadb31ea50bb -Pathfinding.Recast.RecastMeshGatherer.CapsuleCache.verts class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer_1_1_capsule_cache.php#a57cea70d99b3d108e0604fd80335ad49 -Pathfinding.Util.Checksum.CRCTable class_pathfinding_1_1_util_1_1_checksum.php#a017a4f57a998a6a0b572052c6ef6151b -Pathfinding.ConstantPath.allNodes class_pathfinding_1_1_constant_path.php#a184b53035787f45ca44468506288c891 -Pathfinding.ConstantPath.endingCondition class_pathfinding_1_1_constant_path.php#a774fd05dcd911513c2a1d72a2f28a709 -Pathfinding.ConstantPath.originalStartPoint class_pathfinding_1_1_constant_path.php#a417900a77d5a24cb3bcdb4b4d61dbc2a -Pathfinding.ConstantPath.startNode class_pathfinding_1_1_constant_path.php#a20a2d6fc322886eb264c02e6c2cf6f7a -Pathfinding.ConstantPath.startPoint class_pathfinding_1_1_constant_path.php#ac307764268b7cb29706e6fc22d893d97 -Pathfinding.AdvancedSmooth.ConstantTurn.circleCenter class_pathfinding_1_1_advanced_smooth_1_1_constant_turn.php#aaf00f2c45b9adc61355c5fc8e280be30 -Pathfinding.AdvancedSmooth.ConstantTurn.clockwise class_pathfinding_1_1_advanced_smooth_1_1_constant_turn.php#a8c32e373535c10f020ae906ae769e3b9 -Pathfinding.AdvancedSmooth.ConstantTurn.gamma1 class_pathfinding_1_1_advanced_smooth_1_1_constant_turn.php#aa0ca2c13c38c11da3cd6a915eb7b8b4d -Pathfinding.AdvancedSmooth.ConstantTurn.gamma2 class_pathfinding_1_1_advanced_smooth_1_1_constant_turn.php#a2e1e574832f4214189a63276dc3dea8d -Pathfinding.CustomGraphEditorAttribute.displayName class_pathfinding_1_1_custom_graph_editor_attribute.php#aa782ccbdf1d5af49aae11b97a526d56a -Pathfinding.CustomGraphEditorAttribute.editorType class_pathfinding_1_1_custom_graph_editor_attribute.php#acd47ff7ceea718b38ee71faab2de809f -Pathfinding.CustomGraphEditorAttribute.graphType class_pathfinding_1_1_custom_graph_editor_attribute.php#a89ce7ffcb2fd367df77183e25e613041 -Pathfinding.CustomPath.penaltyMultiplier class_pathfinding_1_1_custom_path.php#afd47b48731f595ebfed95fc6a1c73df4 -Pathfinding.Util.TileHandler.Cut.bounds class_pathfinding_1_1_util_1_1_tile_handler_1_1_cut.php#a7cbe97e5def44d8fd157a524671a1eb7 -Pathfinding.Util.TileHandler.Cut.boundsY class_pathfinding_1_1_util_1_1_tile_handler_1_1_cut.php#a05eae446436aed4cdddb72ba2b70bfe9 -Pathfinding.Util.TileHandler.Cut.contour class_pathfinding_1_1_util_1_1_tile_handler_1_1_cut.php#a1461c1ef7910fa8b864fa33c9723451c -Pathfinding.Util.TileHandler.Cut.cutsAddedGeom class_pathfinding_1_1_util_1_1_tile_handler_1_1_cut.php#aedf1f396872671c1c7857ca78b9fde46 -Pathfinding.Util.TileHandler.Cut.isDual class_pathfinding_1_1_util_1_1_tile_handler_1_1_cut.php#a13ae3bd250cca9cb99e405b1b8ab7440 -Pathfinding.DebugUtility.defaultMaterial class_pathfinding_1_1_debug_utility.php#a186529c07d40d11060c6e4775e502f67 -Pathfinding.DebugUtility.offset class_pathfinding_1_1_debug_utility.php#a3e60b3c561be982d7c8e23f14c01fd5b -Pathfinding.DebugUtility.optimizeMeshes class_pathfinding_1_1_debug_utility.php#a7494ade56e583ab9d120829d2d727e2d -Pathfinding.DebugUtility.active class_pathfinding_1_1_debug_utility.php#a1bc656a7ac2c81bd85fc1b7eaeaf078a -Pathfinding.OptimizationHandler.DefineDefinition.consistent class_pathfinding_1_1_optimization_handler_1_1_define_definition.php#a2aa7664da441186441d46f22a945496c -Pathfinding.OptimizationHandler.DefineDefinition.description class_pathfinding_1_1_optimization_handler_1_1_define_definition.php#a23af17c78302b71c14ef38ea40b8d1d7 -Pathfinding.OptimizationHandler.DefineDefinition.enabled class_pathfinding_1_1_optimization_handler_1_1_define_definition.php#a8740ba80e30dd75e71d09fa1dcf04f3d -Pathfinding.OptimizationHandler.DefineDefinition.name class_pathfinding_1_1_optimization_handler_1_1_define_definition.php#a8ccf841cb59e451791bcb2e1ac4f1edc -Pathfinding.Examples.DoorController.bounds class_pathfinding_1_1_examples_1_1_door_controller.php#a024318f4225ee6bedb20b7f865205d34 -Pathfinding.Examples.DoorController.open class_pathfinding_1_1_examples_1_1_door_controller.php#a8c7e45250b1eb6821dd59fb2a9a016d7 -Pathfinding.Examples.DoorController.closedtag class_pathfinding_1_1_examples_1_1_door_controller.php#ae54ea1e1b544c8e16c2a8ab39f17032f -Pathfinding.Examples.DoorController.opentag class_pathfinding_1_1_examples_1_1_door_controller.php#a3231cb0abae034b6f26012dfd440fe40 -Pathfinding.Examples.DoorController.updateGraphsWithGUO class_pathfinding_1_1_examples_1_1_door_controller.php#adbf354e29f7b0cd81a372f142ab41e70 -Pathfinding.Examples.DoorController.yOffset class_pathfinding_1_1_examples_1_1_door_controller.php#a5193d79f9884fd5dad21aa7981429d16 -Pathfinding.Util.Draw.Debug class_pathfinding_1_1_util_1_1_draw.php#ad98d72b461234ac65a0b91adf8cfb7a4 -Pathfinding.Util.Draw.Gizmos class_pathfinding_1_1_util_1_1_draw.php#a664124b5856f853389a8b0bae6ceba75 -Pathfinding.Util.Draw.gizmos class_pathfinding_1_1_util_1_1_draw.php#a6394f65cf478ea2a0f9b847083f96c30 -Pathfinding.Util.Draw.matrix class_pathfinding_1_1_util_1_1_draw.php#a0fe016efbd0e96eb5b62f08da732b9f6 -Pathfinding.DynamicGridObstacle.coll class_pathfinding_1_1_dynamic_grid_obstacle.php#a2fd346c48fd320f14180c8e3ce912f70 -Pathfinding.DynamicGridObstacle.coll2D class_pathfinding_1_1_dynamic_grid_obstacle.php#a7e99acc7eba979c5c756eb778ef02da4 -Pathfinding.DynamicGridObstacle.lastCheckTime class_pathfinding_1_1_dynamic_grid_obstacle.php#a8a85baea412c3c3695022f7189438461 -Pathfinding.DynamicGridObstacle.prevBounds class_pathfinding_1_1_dynamic_grid_obstacle.php#ae62575e3905d98d71d8b52c80a155b15 -Pathfinding.DynamicGridObstacle.prevEnabled class_pathfinding_1_1_dynamic_grid_obstacle.php#a716b46f7601c66278bef8c36a6c0bbf7 -Pathfinding.DynamicGridObstacle.prevRotation class_pathfinding_1_1_dynamic_grid_obstacle.php#a5410ac6bb903e6d6fd8195ab39ba44ef -Pathfinding.DynamicGridObstacle.tr class_pathfinding_1_1_dynamic_grid_obstacle.php#a79a17507a0e6ad3b0345e0397a4a038f -Pathfinding.DynamicGridObstacle.checkTime class_pathfinding_1_1_dynamic_grid_obstacle.php#a5e1c58ad9b33dedc8f3e3dc7b759ce07 -Pathfinding.DynamicGridObstacle.updateError class_pathfinding_1_1_dynamic_grid_obstacle.php#ae53a769472cff769692e0ba9d121a899 -Pathfinding.EditorBase.cachedTooltips class_pathfinding_1_1_editor_base.php#a7221ff1f189beeb18649223b417fb516 -Pathfinding.EditorBase.cachedURLs class_pathfinding_1_1_editor_base.php#ab9b47119d7e8c073aef9480f8ba60d8d -Pathfinding.EditorBase.content class_pathfinding_1_1_editor_base.php#a52ab857447798ef1335b84cee70929df -Pathfinding.EditorBase.noOptions class_pathfinding_1_1_editor_base.php#a0c9e67e1e0dba90a05960ad61eefdd45 -Pathfinding.EditorBase.showInDocContent class_pathfinding_1_1_editor_base.php#a7534df3739e266855c4faec0f95f827c -Pathfinding.EditorBase.localTooltips class_pathfinding_1_1_editor_base.php#a76400b6110b5b1be059f655b52e13cfd -Pathfinding.EditorBase.props class_pathfinding_1_1_editor_base.php#abeaf9375ed09af49e62139ce3ef86a3e -Pathfinding.EditorGUILayoutx.lastUpdateTick class_pathfinding_1_1_editor_g_u_i_layoutx.php#ac400b70e9b15ad6b47623f00cd952a9c -Pathfinding.EditorGUILayoutx.layerNames class_pathfinding_1_1_editor_g_u_i_layoutx.php#a365f90e943c528492fa813eae9d223c3 -Pathfinding.EditorGUILayoutx.tagNamesAndEditTagsButton class_pathfinding_1_1_editor_g_u_i_layoutx.php#af9ffe4f536c56f35834e2b9c173dedbd -Pathfinding.EditorGUILayoutx.timeLastUpdatedTagNames class_pathfinding_1_1_editor_g_u_i_layoutx.php#ae1000d69904d7ee53210f77a4530f2c5 -Pathfinding.EndingConditionDistance.maxGScore class_pathfinding_1_1_ending_condition_distance.php#a235223a372e44cfb718dca27914b47ff -Pathfinding.EndingConditionProximity.maxDistance class_pathfinding_1_1_ending_condition_proximity.php#af22920f041b5db58118ffb07b37e9a25 -Pathfinding.EuclideanEmbedding.dirty class_pathfinding_1_1_euclidean_embedding.php#ad25edacba00e4d0666a9959053b7cc10 -Pathfinding.EuclideanEmbedding.mode class_pathfinding_1_1_euclidean_embedding.php#a9e01b4537eb1adca1cc4fc968cd95b08 -Pathfinding.EuclideanEmbedding.pivotPointRoot class_pathfinding_1_1_euclidean_embedding.php#a7977c62ed072de561bea4aa3458a6684 -Pathfinding.EuclideanEmbedding.seed class_pathfinding_1_1_euclidean_embedding.php#a1447ad288a0a73454510f5777bdc3ed1 -Pathfinding.EuclideanEmbedding.spreadOutCount class_pathfinding_1_1_euclidean_embedding.php#a39f1fcb74a7a14df5add328f08be486c -Pathfinding.EuclideanEmbedding.costs class_pathfinding_1_1_euclidean_embedding.php#a96b3e6ed31741c3f6a095cf9e8f503d5 -Pathfinding.EuclideanEmbedding.lockObj class_pathfinding_1_1_euclidean_embedding.php#a83b0a40b11dfff6d6d163a361d6ad0fa -Pathfinding.EuclideanEmbedding.maxNodeIndex class_pathfinding_1_1_euclidean_embedding.php#aa6b997b502e27141dd00ed60967dbc07 -Pathfinding.EuclideanEmbedding.pivotCount class_pathfinding_1_1_euclidean_embedding.php#ac949aa1607a103bcfca2a8ecff2c75a5 -Pathfinding.EuclideanEmbedding.pivots class_pathfinding_1_1_euclidean_embedding.php#a416a18b729643955b2cf1aeb9b0b1873 -Pathfinding.EuclideanEmbedding.ra class_pathfinding_1_1_euclidean_embedding.php#ab57dbac60b8271cc0c6bb3e5896e411d -Pathfinding.EuclideanEmbedding.rc class_pathfinding_1_1_euclidean_embedding.php#a6de73ec2a1c7a646db586d37c0b8c2cc -Pathfinding.EuclideanEmbedding.rval class_pathfinding_1_1_euclidean_embedding.php#a3ed5dbe8011b726f7cb2539974ca5ef4 -Pathfinding.Examples.ExampleMover.agent class_pathfinding_1_1_examples_1_1_example_mover.php#a41e4bd6e31974f3a0be9127ccce2286f -Pathfinding.Examples.ExampleMover.target class_pathfinding_1_1_examples_1_1_example_mover.php#a8a24b37582e07ee23646b165d54fa600 -Pathfinding.FadeArea.animationSpeed class_pathfinding_1_1_fade_area.php#a9bbe9a8ee4ca2a95a75c20c741e3c496 -Pathfinding.FadeArea.areaStyle class_pathfinding_1_1_fade_area.php#aedec733d5931e170965b237c397a7635 -Pathfinding.FadeArea.editor class_pathfinding_1_1_fade_area.php#aaf05829bfbd0bd059896c8523e22dfd5 -Pathfinding.FadeArea.labelStyle class_pathfinding_1_1_fade_area.php#a14cd2fd842b0b6420c60e3a3e2d47705 -Pathfinding.FadeArea.lastRect class_pathfinding_1_1_fade_area.php#a1eea7ac14e752f3b7a85bc9aa710185b -Pathfinding.FadeArea.lastUpdate class_pathfinding_1_1_fade_area.php#a4f960fd4f8434912f6e1876890d3a211 -Pathfinding.FadeArea.value class_pathfinding_1_1_fade_area.php#a17956fe0129d3d4c94ebc06cfef2ad82 -Pathfinding.FadeArea.visible class_pathfinding_1_1_fade_area.php#aa54a57ae048476d840caf6d4d2c47aa3 -Pathfinding.FadeArea.open class_pathfinding_1_1_fade_area.php#a8c7e45250b1eb6821dd59fb2a9a016d7 -Pathfinding.FadeArea.fancyEffects class_pathfinding_1_1_fade_area.php#aff4648bbdeba4d5b404f937808a3ccb7 -Pathfinding.FloodPath.originalStartPoint class_pathfinding_1_1_flood_path.php#a417900a77d5a24cb3bcdb4b4d61dbc2a -Pathfinding.FloodPath.saveParents class_pathfinding_1_1_flood_path.php#ae18e294140ed9c69fc8b715da9357cb8 -Pathfinding.FloodPath.startNode class_pathfinding_1_1_flood_path.php#a20a2d6fc322886eb264c02e6c2cf6f7a -Pathfinding.FloodPath.startPoint class_pathfinding_1_1_flood_path.php#ac307764268b7cb29706e6fc22d893d97 -Pathfinding.FloodPath.parents class_pathfinding_1_1_flood_path.php#ae74ceff467fed9f3b1c73317f6f9fb16 -Pathfinding.FloodPathConstraint.path class_pathfinding_1_1_flood_path_constraint.php#a5f7bd659e6ad5a2d5322921444e0f7fe -Pathfinding.FloodPathTracer.flood class_pathfinding_1_1_flood_path_tracer.php#a3f17ab0d404df8317cbff1afefb385c1 -Pathfinding.FunnelModifier.splitAtEveryPortal class_pathfinding_1_1_funnel_modifier.php#ab7b6f6d38f721fff79669e56c74809ff -Pathfinding.FunnelModifier.unwrap class_pathfinding_1_1_funnel_modifier.php#a763ac1b7927cb47199cccda3f2226e94 -Pathfinding.GraphCollision.collisionCheck class_pathfinding_1_1_graph_collision.php#a7b285cb247d2cca3876488c3f43e3872 -Pathfinding.GraphCollision.collisionOffset class_pathfinding_1_1_graph_collision.php#aa5f13f9dd72d3f1c1c082669407bbc54 -Pathfinding.GraphCollision.diameter class_pathfinding_1_1_graph_collision.php#a917f89a3bf5986b82c6e560173a6d1da -Pathfinding.GraphCollision.fromHeight class_pathfinding_1_1_graph_collision.php#aa0fb02ce79e98cd3e4e3ce9d657ecab6 -Pathfinding.GraphCollision.height class_pathfinding_1_1_graph_collision.php#a48083b65ac9a863566dc3e3fff09a5b4 -Pathfinding.GraphCollision.heightCheck class_pathfinding_1_1_graph_collision.php#ab35aba2fc7d8091c96eedf9f416ad06e -Pathfinding.GraphCollision.heightMask class_pathfinding_1_1_graph_collision.php#ae9b18d4ebda86d3a65bf8533f8822c15 -Pathfinding.GraphCollision.mask class_pathfinding_1_1_graph_collision.php#a427e7d78bb1a767d205d60ef36cdf39c -Pathfinding.GraphCollision.RaycastErrorMargin class_pathfinding_1_1_graph_collision.php#af8800a1dd4080d1b43676b181b9c3547 -Pathfinding.GraphCollision.rayDirection class_pathfinding_1_1_graph_collision.php#a5e1a9516e5e980803cf6000feba739a3 -Pathfinding.GraphCollision.thickRaycast class_pathfinding_1_1_graph_collision.php#a264d5f661a491686d8841cd329815849 -Pathfinding.GraphCollision.thickRaycastDiameter class_pathfinding_1_1_graph_collision.php#ac9e988e5537a1b0d9d3ed1aab4cd5619 -Pathfinding.GraphCollision.type class_pathfinding_1_1_graph_collision.php#a8b89c5359b1bc089f8dfb2602a7e6df2 -Pathfinding.GraphCollision.unwalkableWhenNoGround class_pathfinding_1_1_graph_collision.php#a265261e50b607ac479d27610217837f2 -Pathfinding.GraphCollision.up class_pathfinding_1_1_graph_collision.php#abca6edc712cc585d919d49cbdb6350b4 -Pathfinding.GraphCollision.use2D class_pathfinding_1_1_graph_collision.php#a49ba648379789fb002460095e1c468a6 -Pathfinding.GraphCollision.finalRadius class_pathfinding_1_1_graph_collision.php#a3ac61f3ec90aa6bd42d262bf730a7085 -Pathfinding.GraphCollision.finalRaycastRadius class_pathfinding_1_1_graph_collision.php#a6ffd4a2777936ef97e438646ec1af585 -Pathfinding.GraphCollision.upheight class_pathfinding_1_1_graph_collision.php#a904ea6a21842e18612c45d5143bde80b -Pathfinding.GraphEditor.editor class_pathfinding_1_1_graph_editor.php#a8ae91ee18aba4d5c048b3ebf1648eb16 -Pathfinding.GraphEditor.fadeArea class_pathfinding_1_1_graph_editor.php#a347fb36125207f0561a4668ae8db3fb7 -Pathfinding.GraphEditor.infoFadeArea class_pathfinding_1_1_graph_editor.php#ab3045981020ec0b8411b3f9937c5124c -Pathfinding.GraphEditorBase.target class_pathfinding_1_1_graph_editor_base.php#a5176cc0bc64e4f4762196b5e96535600 -Pathfinding.Util.GraphGizmoHelper.debugData class_pathfinding_1_1_util_1_1_graph_gizmo_helper.php#a92d447e7092c87cc6267b1246d3d534f -Pathfinding.Util.GraphGizmoHelper.debugFloor class_pathfinding_1_1_util_1_1_graph_gizmo_helper.php#a0ce65f9adf13eab40539e82414011c83 -Pathfinding.Util.GraphGizmoHelper.debugMode class_pathfinding_1_1_util_1_1_graph_gizmo_helper.php#afa1001dc4a08174303c8f383a36c20eb -Pathfinding.Util.GraphGizmoHelper.debugPathID class_pathfinding_1_1_util_1_1_graph_gizmo_helper.php#a67b86ff24ca6b84413455d616a05b5d5 -Pathfinding.Util.GraphGizmoHelper.debugRoof class_pathfinding_1_1_util_1_1_graph_gizmo_helper.php#a07fe200e1bc5e23a9833229912102ea5 -Pathfinding.Util.GraphGizmoHelper.drawConnection class_pathfinding_1_1_util_1_1_graph_gizmo_helper.php#a9d00afe916cca59a75d34b32d55e0f9b -Pathfinding.Util.GraphGizmoHelper.drawConnectionColor class_pathfinding_1_1_util_1_1_graph_gizmo_helper.php#a8181a9260903e244759c55e7a0cb9c53 -Pathfinding.Util.GraphGizmoHelper.drawConnectionStart class_pathfinding_1_1_util_1_1_graph_gizmo_helper.php#a05532f6a994bd5353bebe3826085d7d9 -Pathfinding.Util.GraphGizmoHelper.gizmos class_pathfinding_1_1_util_1_1_graph_gizmo_helper.php#a7d4093d5d4824569cc7e54c4d5d73303 -Pathfinding.Util.GraphGizmoHelper.showSearchTree class_pathfinding_1_1_util_1_1_graph_gizmo_helper.php#a59ac99ea09482346581808bdca794c6f -Pathfinding.Serialization.GraphMeta.graphs class_pathfinding_1_1_serialization_1_1_graph_meta.php#a6c6b413958b44748491a8475e31bac26 -Pathfinding.Serialization.GraphMeta.guids class_pathfinding_1_1_serialization_1_1_graph_meta.php#a677e5284018b8d26f4e76b492426fd4e -Pathfinding.Serialization.GraphMeta.typeNames class_pathfinding_1_1_serialization_1_1_graph_meta.php#af874977a7a8f185d90859a756cd28223 -Pathfinding.Serialization.GraphMeta.version class_pathfinding_1_1_serialization_1_1_graph_meta.php#ac620c19e22394db7bca83528aab69634 -Pathfinding.GraphModifier.root class_pathfinding_1_1_graph_modifier.php#ae2f3c9cb1be1a87e6ae5f19b6e25f2a5 -Pathfinding.GraphModifier.next class_pathfinding_1_1_graph_modifier.php#a30f74c7bf7a88685d894a576321573c0 -Pathfinding.GraphModifier.prev class_pathfinding_1_1_graph_modifier.php#a16ebfc919fbb4172639604be97913072 -Pathfinding.GraphModifier.uniqueID class_pathfinding_1_1_graph_modifier.php#ac4280e81eaba556e31e9b6596431b1cb -Pathfinding.GraphModifier.usedIDs class_pathfinding_1_1_graph_modifier.php#a68847e631e5e65f5478d0a2717846a07 -Pathfinding.GraphNode.DestroyedNodeIndex class_pathfinding_1_1_graph_node.php#a1fa18f39b18d8982ef3cb4f9ddb8e32d -Pathfinding.GraphNode.FlagsAreaMask class_pathfinding_1_1_graph_node.php#a95d6287aa9ca175dd353c81a9a4bade4 -Pathfinding.GraphNode.FlagsAreaOffset class_pathfinding_1_1_graph_node.php#a26ab73aaf85818ad3ff207cd7f37d7ed -Pathfinding.GraphNode.FlagsGraphMask class_pathfinding_1_1_graph_node.php#a99ea3327e63b120abe0b8fdcd15ccabb -Pathfinding.GraphNode.FlagsGraphOffset class_pathfinding_1_1_graph_node.php#a8d835531dab8645fd58e9ea36b69994f -Pathfinding.GraphNode.FlagsTagMask class_pathfinding_1_1_graph_node.php#a61a37d13adaf143e6f0faefc458f4325 -Pathfinding.GraphNode.FlagsTagOffset class_pathfinding_1_1_graph_node.php#a9d8fda17508228ee6259acf58081155f -Pathfinding.GraphNode.FlagsWalkableMask class_pathfinding_1_1_graph_node.php#acaac226ccad87a267a885ca90dced10d -Pathfinding.GraphNode.FlagsWalkableOffset class_pathfinding_1_1_graph_node.php#a5067550574626c41b7db195667c978e8 -Pathfinding.GraphNode.nodeIndex class_pathfinding_1_1_graph_node.php#aff0d62fe47891e971ee7161fb743726a -Pathfinding.GraphNode.NodeIndexMask class_pathfinding_1_1_graph_node.php#a54444b5fe055e2477b55a9f5c653ba7a -Pathfinding.GraphNode.penalty class_pathfinding_1_1_graph_node.php#a66fdb8bc01ac3eb653f710b8d12531e8 -Pathfinding.GraphNode.TemporaryFlag1Mask class_pathfinding_1_1_graph_node.php#ac9005d1e63c68ea1da1130c39f86f8fb -Pathfinding.GraphNode.TemporaryFlag2Mask class_pathfinding_1_1_graph_node.php#afb3b950cd9c469a2083754707cd4a037 -Pathfinding.GraphNode.flags class_pathfinding_1_1_graph_node.php#a660f9db871d26052904976a8bfe8432d -Pathfinding.GraphNode.MaxAreaIndex class_pathfinding_1_1_graph_node.php#a9e20c7478b965c8b1559f2697b36ba50 -Pathfinding.GraphNode.MaxGraphIndex class_pathfinding_1_1_graph_node.php#a35c97de4242227b9308c33a6bec10028 -Pathfinding.GraphNode.position class_pathfinding_1_1_graph_node.php#ad0b853f1105e1ebcfde41e1ef9217b3f -Pathfinding.Serialization.GraphSerializationContext.id2NodeMapping class_pathfinding_1_1_serialization_1_1_graph_serialization_context.php#a7d59f06d2629404bfb5f3cf68401dac9 -Pathfinding.Serialization.GraphSerializationContext.graphIndex class_pathfinding_1_1_serialization_1_1_graph_serialization_context.php#a11ffb3325e7c15e191b92af698a897e8 -Pathfinding.Serialization.GraphSerializationContext.meta class_pathfinding_1_1_serialization_1_1_graph_serialization_context.php#ac00586f8282d2346f4bb22cc55943e2b -Pathfinding.Serialization.GraphSerializationContext.reader class_pathfinding_1_1_serialization_1_1_graph_serialization_context.php#a4f460654eb9a8c6019f86463628400e0 -Pathfinding.Serialization.GraphSerializationContext.writer class_pathfinding_1_1_serialization_1_1_graph_serialization_context.php#a5a1d21c1346e9ffa0ddd1efab3894579 -Pathfinding.Util.GraphTransform.identity class_pathfinding_1_1_util_1_1_graph_transform.php#a231647e1d00deb4c98763613b369c2d2 -Pathfinding.Util.GraphTransform.onlyTranslational class_pathfinding_1_1_util_1_1_graph_transform.php#a3d4230f18e283cee5a1785c7cc47cb7f -Pathfinding.Util.GraphTransform.i3translation class_pathfinding_1_1_util_1_1_graph_transform.php#a1a2399d0f239ecc5e4ebecfb36f9ed8a -Pathfinding.Util.GraphTransform.inverseMatrix class_pathfinding_1_1_util_1_1_graph_transform.php#a13be5d98e3847045980f5f71fde8712b -Pathfinding.Util.GraphTransform.inverseRotation class_pathfinding_1_1_util_1_1_graph_transform.php#ad6a0e827b3dbc76b21098c5cbbeb79f9 -Pathfinding.Util.GraphTransform.isXY class_pathfinding_1_1_util_1_1_graph_transform.php#a29db1248f9bc7a5ecf6fa23f09df2a3b -Pathfinding.Util.GraphTransform.isXZ class_pathfinding_1_1_util_1_1_graph_transform.php#a5336ce9e14d14254a03ddb091753bf88 -Pathfinding.Util.GraphTransform.matrix class_pathfinding_1_1_util_1_1_graph_transform.php#add88d13f64211846fb76312ee6304cba -Pathfinding.Util.GraphTransform.rotation class_pathfinding_1_1_util_1_1_graph_transform.php#aa72d043f8d30c30ebd07970933dd5e66 -Pathfinding.Util.GraphTransform.translation class_pathfinding_1_1_util_1_1_graph_transform.php#af263435e70ab6f2ad56ead6fc2eef25c -Pathfinding.Util.GraphTransform.up class_pathfinding_1_1_util_1_1_graph_transform.php#a6767b928b6cb5a8eb12dd70826ac6090 -Pathfinding.Util.GraphTransform.identityTransform class_pathfinding_1_1_util_1_1_graph_transform.php#a99fdbb6d02f914169846c31bcffd1026 -Pathfinding.GraphUpdateObject.addPenalty class_pathfinding_1_1_graph_update_object.php#aba2a0e1ea6583ac15e47e21a492de2fc -Pathfinding.GraphUpdateObject.bounds class_pathfinding_1_1_graph_update_object.php#a024318f4225ee6bedb20b7f865205d34 -Pathfinding.GraphUpdateObject.changedNodes class_pathfinding_1_1_graph_update_object.php#af6a2d090c6514c641e3700ab50b213dd -Pathfinding.GraphUpdateObject.modifyTag class_pathfinding_1_1_graph_update_object.php#add96fb95ff8c820c477a6b9e7d70145a -Pathfinding.GraphUpdateObject.modifyWalkability class_pathfinding_1_1_graph_update_object.php#a2861ffb55997ec06c4bab822ca1f6eb7 -Pathfinding.GraphUpdateObject.nnConstraint class_pathfinding_1_1_graph_update_object.php#af6ea73fa8f1c34669d3b2d1854758808 -Pathfinding.GraphUpdateObject.requiresFloodFill class_pathfinding_1_1_graph_update_object.php#a2efbcd7b73c47dce7781034f38b35da6 -Pathfinding.GraphUpdateObject.resetPenaltyOnPhysics class_pathfinding_1_1_graph_update_object.php#a0ce99169ed2be7e5cf342893991513a9 -Pathfinding.GraphUpdateObject.setTag class_pathfinding_1_1_graph_update_object.php#acb3b2cf8a1820af99439c79bc87f8d01 -Pathfinding.GraphUpdateObject.setWalkability class_pathfinding_1_1_graph_update_object.php#ac4e414eb56d8eb7fb25f0ad49b60c49f -Pathfinding.GraphUpdateObject.shape class_pathfinding_1_1_graph_update_object.php#ac3e0638ffc3ef65e0cca863f8f1d8d97 -Pathfinding.GraphUpdateObject.trackChangedNodes class_pathfinding_1_1_graph_update_object.php#a47ef15f2ab91e9a4c989a1edea97460a -Pathfinding.GraphUpdateObject.updateErosion class_pathfinding_1_1_graph_update_object.php#adb8e01da5cf6e622140ef020b55c5118 -Pathfinding.GraphUpdateObject.updatePhysics class_pathfinding_1_1_graph_update_object.php#a62de4bd11cc168fe0e75cb5bfdb4b269 -Pathfinding.GraphUpdateObject.backupData class_pathfinding_1_1_graph_update_object.php#ad32d6e2488e6a88e08ae753d5c124f81 -Pathfinding.GraphUpdateObject.backupPositionData class_pathfinding_1_1_graph_update_object.php#a170d4825f882fe775675e15f13ca540d -Pathfinding.GraphUpdateProcessor.anyGraphUpdateInProgress class_pathfinding_1_1_graph_update_processor.php#ae3f2934530ccdf6b9225e6282228b7dc -Pathfinding.GraphUpdateProcessor.astar class_pathfinding_1_1_graph_update_processor.php#abad30d7567baa44751f3a848a0bfaa8b -Pathfinding.GraphUpdateProcessor.asyncGraphUpdatesComplete class_pathfinding_1_1_graph_update_processor.php#a23e4dc9e9748a790d3c9da4016197e95 -Pathfinding.GraphUpdateProcessor.exitAsyncThread class_pathfinding_1_1_graph_update_processor.php#ace98848b8d3867355f29f6d0d3e42ce7 -Pathfinding.GraphUpdateProcessor.graphUpdateAsyncEvent class_pathfinding_1_1_graph_update_processor.php#af68992349667c27bfe46cba155176246 -Pathfinding.GraphUpdateProcessor.graphUpdateQueue class_pathfinding_1_1_graph_update_processor.php#a5a0d3a7f1f17b4f21904d689f8c4bd1b -Pathfinding.GraphUpdateProcessor.graphUpdateQueueAsync class_pathfinding_1_1_graph_update_processor.php#aa6c8b59547a54ddc6fba89261a548d88 -Pathfinding.GraphUpdateProcessor.graphUpdateQueuePost class_pathfinding_1_1_graph_update_processor.php#a02a026d7dac9286659127ea76ab478ba -Pathfinding.GraphUpdateProcessor.graphUpdateQueueRegular class_pathfinding_1_1_graph_update_processor.php#a45ee5bb86399d0a3ec69101b5b044c7b -Pathfinding.GraphUpdateProcessor.graphUpdateThread class_pathfinding_1_1_graph_update_processor.php#a691cf031677b7aa090db818874413c08 -Pathfinding.GraphUpdateProcessor.lastUniqueAreaIndex class_pathfinding_1_1_graph_update_processor.php#adb950b13c378aa881328192572eb688a -Pathfinding.GraphUpdateScene.applyOnScan class_pathfinding_1_1_graph_update_scene.php#a14572a55674ed823ac6efefa762c1324 -Pathfinding.GraphUpdateScene.applyOnStart class_pathfinding_1_1_graph_update_scene.php#a1c94aae03b28deb259e681fd32aefdb9 -Pathfinding.GraphUpdateScene.convex class_pathfinding_1_1_graph_update_scene.php#adf57f7307451b26c33863e4ffb86a82d -Pathfinding.GraphUpdateScene.legacyMode class_pathfinding_1_1_graph_update_scene.php#a3c4eadecc15f092c3e1826bbce7fa19d -Pathfinding.GraphUpdateScene.minBoundsHeight class_pathfinding_1_1_graph_update_scene.php#abeb615cf25c5b6fe31a1e148433478cf -Pathfinding.GraphUpdateScene.modifyTag class_pathfinding_1_1_graph_update_scene.php#add96fb95ff8c820c477a6b9e7d70145a -Pathfinding.GraphUpdateScene.modifyWalkability class_pathfinding_1_1_graph_update_scene.php#a2861ffb55997ec06c4bab822ca1f6eb7 -Pathfinding.GraphUpdateScene.penaltyDelta class_pathfinding_1_1_graph_update_scene.php#ae8b4eacb5710bd15dd52a291119d6729 -Pathfinding.GraphUpdateScene.points class_pathfinding_1_1_graph_update_scene.php#a4c3eb69bface7072f36347cf91ad5d51 -Pathfinding.GraphUpdateScene.resetPenaltyOnPhysics class_pathfinding_1_1_graph_update_scene.php#a0ce99169ed2be7e5cf342893991513a9 -Pathfinding.GraphUpdateScene.setTag class_pathfinding_1_1_graph_update_scene.php#acb3b2cf8a1820af99439c79bc87f8d01 -Pathfinding.GraphUpdateScene.setWalkability class_pathfinding_1_1_graph_update_scene.php#ac4e414eb56d8eb7fb25f0ad49b60c49f -Pathfinding.GraphUpdateScene.updateErosion class_pathfinding_1_1_graph_update_scene.php#adb8e01da5cf6e622140ef020b55c5118 -Pathfinding.GraphUpdateScene.updatePhysics class_pathfinding_1_1_graph_update_scene.php#a62de4bd11cc168fe0e75cb5bfdb4b269 -Pathfinding.GraphUpdateScene.convexPoints class_pathfinding_1_1_graph_update_scene.php#a6b8c05d00a7bae8e877115df9507b4d3 -Pathfinding.GraphUpdateScene.firstApplied class_pathfinding_1_1_graph_update_scene.php#aa52857762e38127ab69d655ebb84b3df -Pathfinding.GraphUpdateScene.legacyUseWorldSpace class_pathfinding_1_1_graph_update_scene.php#a7886522660364aee597e22d01aa667fb -Pathfinding.GraphUpdateScene.serializedVersion class_pathfinding_1_1_graph_update_scene.php#aa09697b0515d8a077189d0bac54fdda5 -Pathfinding.GraphUpdateScene.setTagInvert class_pathfinding_1_1_graph_update_scene.php#a517d66af9aa4b61d3a3e0b454ef774fb -Pathfinding.GraphUpdateSceneEditor.pointGizmosRadius class_pathfinding_1_1_graph_update_scene_editor.php#a518a171ab1e2a904ea6c1b6303d7c695 -Pathfinding.GraphUpdateSceneEditor.scripts class_pathfinding_1_1_graph_update_scene_editor.php#a18b2ce6a3faf826abc72ff5398710036 -Pathfinding.GraphUpdateSceneEditor.selectedPoint class_pathfinding_1_1_graph_update_scene_editor.php#a8a0d22183fd6a5e18122018ce35c1fa4 -Pathfinding.GraphUpdateSceneEditor.PointColor class_pathfinding_1_1_graph_update_scene_editor.php#abbf98488320400d5db3665b443ace6f0 -Pathfinding.GraphUpdateSceneEditor.PointSelectedColor class_pathfinding_1_1_graph_update_scene_editor.php#a7991500b3ea8294dd4f85d31e6d186bd -Pathfinding.GraphUpdateShape._convex class_pathfinding_1_1_graph_update_shape.php#afd26cfea26572df712561d371bedb6c3 -Pathfinding.GraphUpdateShape._convexPoints class_pathfinding_1_1_graph_update_shape.php#a2cbdfa3f01d422b0928e1edd2a54ad53 -Pathfinding.GraphUpdateShape._points class_pathfinding_1_1_graph_update_shape.php#a1b7bd1e28179dbd23a6830e6f6018a85 -Pathfinding.GraphUpdateShape.forward class_pathfinding_1_1_graph_update_shape.php#a2c1aa83e28c89230df70ba51127d7b42 -Pathfinding.GraphUpdateShape.origin class_pathfinding_1_1_graph_update_shape.php#a02b21174ba0d11e753b88c99cdc82cb0 -Pathfinding.GraphUpdateShape.right class_pathfinding_1_1_graph_update_shape.php#a3c5841f1725fe6d33d1522b916819c78 -Pathfinding.GraphUpdateShape.up class_pathfinding_1_1_graph_update_shape.php#abca6edc712cc585d919d49cbdb6350b4 -Pathfinding.GraphUpdateShape.minimumHeight class_pathfinding_1_1_graph_update_shape.php#aeb1a8ff21a341c830f8f3dba611cacd6 -Pathfinding.GridGraph.inspectorGridMode class_pathfinding_1_1_grid_graph.php#a662b0e091c81865bce7827aae13bb2c3 -Pathfinding.GridGraph.width class_pathfinding_1_1_grid_graph.php#a2474a5474cbff19523a51eb1de01cda4 -Pathfinding.GridGraph.depth class_pathfinding_1_1_grid_graph.php#acb5ba97551079e0b072c62c21d784ac5 -Pathfinding.GridGraph.aspectRatio class_pathfinding_1_1_grid_graph.php#a5c2c11f6d7929bafc3926f68dd5c00f3 -Pathfinding.GridGraph.isometricAngle class_pathfinding_1_1_grid_graph.php#a5de8d3cd52d9ca6371dece4640f10d1c -Pathfinding.GridGraph.uniformEdgeCosts class_pathfinding_1_1_grid_graph.php#ada9ccf02570edeab871c19d639b1567f -Pathfinding.GridGraph.rotation class_pathfinding_1_1_grid_graph.php#aa20f4df5769ec2f2f32b43a05c7dc44c -Pathfinding.GridGraph.center class_pathfinding_1_1_grid_graph.php#ae037808a191021995ac2ab44255dc4f1 -Pathfinding.GridGraph.unclampedSize class_pathfinding_1_1_grid_graph.php#a6991668443ae95f9091a971ab70ae6a8 -Pathfinding.GridGraph.nodeSize class_pathfinding_1_1_grid_graph.php#a08ea566fbbbc4abd87ac7f1b066ec1df -Pathfinding.GridGraph.collision class_pathfinding_1_1_grid_graph.php#a56fdf7ca63100e3e572e7190c1da4631 -Pathfinding.GridGraph.maxClimb class_pathfinding_1_1_grid_graph.php#a109a64ff8260b94b3a91f4fe1e29d2c3 -Pathfinding.GridGraph.maxSlope class_pathfinding_1_1_grid_graph.php#a1b3ccfcd6d92aafbc9274eaf0e86bff5 -Pathfinding.GridGraph.erodeIterations class_pathfinding_1_1_grid_graph.php#a5d5f816947928ce3ebcdeebdaccf5728 -Pathfinding.GridGraph.erosionUseTags class_pathfinding_1_1_grid_graph.php#af156f09628f08d32091ea67e48e42b71 -Pathfinding.GridGraph.erosionFirstTag class_pathfinding_1_1_grid_graph.php#a7aa57887040aed878e8c41d959330e40 -Pathfinding.GridGraph.neighbours class_pathfinding_1_1_grid_graph.php#ac2c77e79829b685a1d1183712cd33b3e -Pathfinding.GridGraph.cutCorners class_pathfinding_1_1_grid_graph.php#a2de5531c24dd5054dbed9ef5159c9dde -Pathfinding.GridGraph.penaltyPositionOffset class_pathfinding_1_1_grid_graph.php#add85970217c573057e81b043be6e41b2 -Pathfinding.GridGraph.penaltyPosition class_pathfinding_1_1_grid_graph.php#a51c5b666f367c8e4a190595473c5e2dc -Pathfinding.GridGraph.penaltyPositionFactor class_pathfinding_1_1_grid_graph.php#ab57f82b9228153229f8dd7aea6e9c434 -Pathfinding.GridGraph.penaltyAngle class_pathfinding_1_1_grid_graph.php#a457e30083dec688369847b32522163e8 -Pathfinding.GridGraph.penaltyAngleFactor class_pathfinding_1_1_grid_graph.php#a31d49224c97eed94c0233ecd373ea82d -Pathfinding.GridGraph.penaltyAnglePower class_pathfinding_1_1_grid_graph.php#abb51ddfcbca018ac372f57f66761aeb4 -Pathfinding.GridGraph.useJumpPointSearch class_pathfinding_1_1_grid_graph.php#adf1d5aa2d10bad133c45b1c0b6d0e317 -Pathfinding.GridGraph.showMeshOutline class_pathfinding_1_1_grid_graph.php#af4b5c2b3e2935c60b3855e861c01dba9 -Pathfinding.GridGraph.showNodeConnections class_pathfinding_1_1_grid_graph.php#aecc5205eaeb72a74e48023f48c5c9f02 -Pathfinding.GridGraph.showMeshSurface class_pathfinding_1_1_grid_graph.php#a520a06f54e1cdaa68ebd7e505a971dc3 -Pathfinding.GridGraph.textureData class_pathfinding_1_1_grid_graph.php#ac855bb1ba0ecd663efca9bda41527a6c -Pathfinding.GridGraph.getNearestForceOverlap class_pathfinding_1_1_grid_graph.php#ac77ea05e3dd724eea575661c59e6dac6 -Pathfinding.GridGraph.neighbourCosts class_pathfinding_1_1_grid_graph.php#ac1afd90286789028da46494a398d2502 -Pathfinding.GridGraph.neighbourOffsets class_pathfinding_1_1_grid_graph.php#a33b21d81193b401670f85882ee240733 -Pathfinding.GridGraph.neighbourXOffsets class_pathfinding_1_1_grid_graph.php#ab856cb1769fb30815358519b9e25f6f1 -Pathfinding.GridGraph.neighbourZOffsets class_pathfinding_1_1_grid_graph.php#ade0f7989d929e467001992ce46e8d515 -Pathfinding.GridGraph.nodes class_pathfinding_1_1_grid_graph.php#a7111c22525f4f5e5d724ec46478a78aa -Pathfinding.GridGraph.hexagonNeighbourIndices class_pathfinding_1_1_grid_graph.php#a60f5bf8e93ed6cab23cf4550c3638ada -Pathfinding.GridGraphEditor.isMouseDown class_pathfinding_1_1_grid_graph_editor.php#a82f95918776da9f155229f565f4ea492 -Pathfinding.GridGraphEditor.locked class_pathfinding_1_1_grid_graph_editor.php#a18a0f1e6c3d21c252b14ea6ae162e2ff -Pathfinding.GridGraphEditor.pivot class_pathfinding_1_1_grid_graph_editor.php#a8ced58ee77d2de635d7c51e1dc50581a -Pathfinding.GridGraphEditor.showExtra class_pathfinding_1_1_grid_graph_editor.php#aeef633c9ae4d004a31792d7504c21c29 -Pathfinding.GridGraphEditor.savedDimensions class_pathfinding_1_1_grid_graph_editor.php#a9c6893340d0a1920301a0231d58ac9f2 -Pathfinding.GridGraphEditor.savedNodeSize class_pathfinding_1_1_grid_graph_editor.php#a3893349391c49477f937d20bce6420f1 -Pathfinding.GridGraphEditor.savedTransform class_pathfinding_1_1_grid_graph_editor.php#ad4711ef25dbda045fc488cf5a08ede47 -Pathfinding.GridGraphEditor.gridPivotSelectBackground class_pathfinding_1_1_grid_graph_editor.php#ae6d4f5fe7fc467e00baff65d9f0d17fa -Pathfinding.GridGraphEditor.gridPivotSelectButton class_pathfinding_1_1_grid_graph_editor.php#abbd80dd8ca47c49d3d1b31ac1646775b -Pathfinding.GridGraphEditor.handlePoints class_pathfinding_1_1_grid_graph_editor.php#aab8cae1884c72925065b3f94ff3fee55 -Pathfinding.GridGraphEditor.lockStyle class_pathfinding_1_1_grid_graph_editor.php#a5dcf8537f4b728ed364c9a26995d258a -Pathfinding.GridGraphEditor.standardDimetric class_pathfinding_1_1_grid_graph_editor.php#ae22d989f3cf2f38b1adc577da91a90b9 -Pathfinding.GridGraphEditor.standardIsometric class_pathfinding_1_1_grid_graph_editor.php#a1323304deff7784d6e4022eb16090d62 -Pathfinding.GridGraphEditor.ChannelUseNames class_pathfinding_1_1_grid_graph_editor.php#a56cb39d39ea73e5fee9ab57139e1dde0 -Pathfinding.Util.GridLookup.all class_pathfinding_1_1_util_1_1_grid_lookup.php#a70858c85f321ff19a760a1e19c170f2b -Pathfinding.Util.GridLookup.cells class_pathfinding_1_1_util_1_1_grid_lookup.php#a27e9a84380217405ab0d68ad25778ca0 -Pathfinding.Util.GridLookup.itemPool class_pathfinding_1_1_util_1_1_grid_lookup.php#a206da59e517fc6b3abd16d9046159d3e -Pathfinding.Util.GridLookup.rootLookup class_pathfinding_1_1_util_1_1_grid_lookup.php#ad02037cd410f0b6a47a1f02c643fc53c -Pathfinding.Util.GridLookup.size class_pathfinding_1_1_util_1_1_grid_lookup.php#a9302236bbe761b3e4623618730ac45b6 -Pathfinding.GridNode._gridGraphs class_pathfinding_1_1_grid_node.php#a1192fc6f309d0569679cea5d002eb46a -Pathfinding.GridNode.GridFlagsConnectionBit0 class_pathfinding_1_1_grid_node.php#aa146a95bc770b14ff876ac9dd32fd90a -Pathfinding.GridNode.GridFlagsConnectionMask class_pathfinding_1_1_grid_node.php#a58dbbcf7f3892dd8646c629501b7765d -Pathfinding.GridNode.GridFlagsConnectionOffset class_pathfinding_1_1_grid_node.php#a738c038ba24b6c608c23b297070eca36 -Pathfinding.GridNode.GridFlagsEdgeNodeMask class_pathfinding_1_1_grid_node.php#a72e0028682bd9b3e3803db04c1bfd8b0 -Pathfinding.GridNode.GridFlagsEdgeNodeOffset class_pathfinding_1_1_grid_node.php#abea423bf94640106be1a47790f1e9527 -Pathfinding.GridNodeBase.GridFlagsWalkableErosionMask class_pathfinding_1_1_grid_node_base.php#a2917bf028f2ddd4ccd526f8c179e5964 -Pathfinding.GridNodeBase.GridFlagsWalkableErosionOffset class_pathfinding_1_1_grid_node_base.php#a9c52e3026bc0e5c59a6feb6310880d99 -Pathfinding.GridNodeBase.GridFlagsWalkableTmpMask class_pathfinding_1_1_grid_node_base.php#ac63809cfccc567e5b11fdd3897a086e4 -Pathfinding.GridNodeBase.GridFlagsWalkableTmpOffset class_pathfinding_1_1_grid_node_base.php#a90001747aab900af4cd0d430df9ac3a1 -Pathfinding.GridNodeBase.gridFlags class_pathfinding_1_1_grid_node_base.php#a26176514eb2dcdaa6ddb380a87c3568a -Pathfinding.GridNodeBase.nodeInGridIndex class_pathfinding_1_1_grid_node_base.php#a7027f0aeac6857133bc0bde82ff056f8 -Pathfinding.GridNodeBase.NodeInGridIndexLayerOffset class_pathfinding_1_1_grid_node_base.php#ac5c512aad822461a3db3fdb99572cc8f -Pathfinding.GridNodeBase.NodeInGridIndexMask class_pathfinding_1_1_grid_node_base.php#aef3c4677bf5d5768be64ba156f825a08 -Pathfinding.GridNodeBase.connections class_pathfinding_1_1_grid_node_base.php#a6866e54610b798b23ab5dbce1ef228d7 -Pathfinding.Examples.GroupController.adjustCamera class_pathfinding_1_1_examples_1_1_group_controller.php#a03fbe83c4c117b43c0944c3209641a39 -Pathfinding.Examples.GroupController.selectionBox class_pathfinding_1_1_examples_1_1_group_controller.php#a9e697890ba9fd7b0b07218bb95babcbe -Pathfinding.Examples.GroupController.cam class_pathfinding_1_1_examples_1_1_group_controller.php#a3b23650c3f80b53cee3a2c471797c732 -Pathfinding.Examples.GroupController.end class_pathfinding_1_1_examples_1_1_group_controller.php#a27bfb4b904ea16aefcc3dba717a772be -Pathfinding.Examples.GroupController.rad2Deg class_pathfinding_1_1_examples_1_1_group_controller.php#a1afd74c1b3a69010a437fdc30c9eb551 -Pathfinding.Examples.GroupController.selection class_pathfinding_1_1_examples_1_1_group_controller.php#af64c6bdea9f8588af5bab4c71da85ac7 -Pathfinding.Examples.GroupController.sim class_pathfinding_1_1_examples_1_1_group_controller.php#a5ba7b96391aa0fa02fd2895b66bf309d -Pathfinding.Examples.GroupController.start class_pathfinding_1_1_examples_1_1_group_controller.php#aaa6fd4b1ff8677247540cd62338de5d5 -Pathfinding.Examples.GroupController.wasDown class_pathfinding_1_1_examples_1_1_group_controller.php#a0ee85279add2cadc894337669fe8b9b7 -Pathfinding.GUIUtilityx.colors class_pathfinding_1_1_g_u_i_utilityx.php#adcd77809e3e4a14efee9580646ff77e2 -Pathfinding.Examples.HexagonTrigger.button class_pathfinding_1_1_examples_1_1_hexagon_trigger.php#aa56e877ca6a7524cf1e891c7435c3ace -Pathfinding.Examples.HexagonTrigger.anim class_pathfinding_1_1_examples_1_1_hexagon_trigger.php#a9c362bec5a5fff98c2de55648d6f284e -Pathfinding.Examples.HexagonTrigger.visible class_pathfinding_1_1_examples_1_1_hexagon_trigger.php#aa54a57ae048476d840caf6d4d2c47aa3 -Pathfinding.WorkItemProcessor.IndexedQueue.buffer class_pathfinding_1_1_work_item_processor_1_1_indexed_queue.php#a1c84b722970e4a469004712ec2d1839e -Pathfinding.WorkItemProcessor.IndexedQueue.start class_pathfinding_1_1_work_item_processor_1_1_indexed_queue.php#a37722a150250e2a5a98e5e0d11e53449 -Pathfinding.Util.GridLookup.Item.prev class_pathfinding_1_1_util_1_1_grid_lookup_1_1_item.php#a032d9b5ade334382e1911eac1e8e09c0 -Pathfinding.Util.GridLookup.Item.root class_pathfinding_1_1_util_1_1_grid_lookup_1_1_item.php#af8655989e8addc485bf6df76305abedc -Pathfinding.Util.GridLookup.Item.next class_pathfinding_1_1_util_1_1_grid_lookup_1_1_item.php#a5eb2ec7609d95667c4ab1780d8186f43 -Pathfinding.LayerGridGraph.lastScannedDepth class_pathfinding_1_1_layer_grid_graph.php#a2a6be94de3ea1aa14c1a9b6e9d530486 -Pathfinding.LayerGridGraph.lastScannedWidth class_pathfinding_1_1_layer_grid_graph.php#adfb19504f982aef8d1807564f9f04e8b -Pathfinding.LayerGridGraph.layerCount class_pathfinding_1_1_layer_grid_graph.php#a3e69185f25b7b306dd5fca9ecaeab1ec -Pathfinding.LayerGridGraph.characterHeight class_pathfinding_1_1_layer_grid_graph.php#a3c9a9a4870b16406538f8dd9ad2eb0e4 -Pathfinding.LayerGridGraph.mergeSpanRange class_pathfinding_1_1_layer_grid_graph.php#a55bea4ef9c6cc33877d62c44f9450fd8 -Pathfinding.LayerGridGraph.nodes class_pathfinding_1_1_layer_grid_graph.php#af1a4190bf3bfd61fc74b1d8d87c5bac8 -Pathfinding.LayerGridGraphUpdate.preserveExistingNodes class_pathfinding_1_1_layer_grid_graph_update.php#ac80ca45315790cc332b342ade3a57a5b -Pathfinding.LayerGridGraphUpdate.recalculateNodes class_pathfinding_1_1_layer_grid_graph_update.php#a00ef0b3387e4733b19760ac4b3a7d7af -Pathfinding.Legacy.LegacyAIPath.closestOnPathCheck class_pathfinding_1_1_legacy_1_1_legacy_a_i_path.php#ac9de815a127f5e3dbcfe941e7111465d -Pathfinding.Legacy.LegacyAIPath.forwardLook class_pathfinding_1_1_legacy_1_1_legacy_a_i_path.php#a3de1f12643bbfec848ea5178f2ad1fe8 -Pathfinding.Legacy.LegacyAIPath.currentWaypointIndex class_pathfinding_1_1_legacy_1_1_legacy_a_i_path.php#ac28a07790eea8f8decc912be5f8d2a97 -Pathfinding.Legacy.LegacyAIPath.lastFoundWaypointPosition class_pathfinding_1_1_legacy_1_1_legacy_a_i_path.php#ac92def55a3d022b85748fb67066eff77 -Pathfinding.Legacy.LegacyAIPath.lastFoundWaypointTime class_pathfinding_1_1_legacy_1_1_legacy_a_i_path.php#a4f4b7fb7117a0f090fdd6feb9c69c8ae -Pathfinding.Legacy.LegacyAIPath.minMoveScale class_pathfinding_1_1_legacy_1_1_legacy_a_i_path.php#a30d530c4a497404c08cdf558862082dd -Pathfinding.Legacy.LegacyAIPath.targetDirection class_pathfinding_1_1_legacy_1_1_legacy_a_i_path.php#a995cdf49ef931e43bba8c8e08f1aeb82 -Pathfinding.Legacy.LegacyRichAI.preciseSlowdown class_pathfinding_1_1_legacy_1_1_legacy_rich_a_i.php#ab728c40ba68be76181f56f038dbd97a6 -Pathfinding.Legacy.LegacyRichAI.raycastingForGroundPlacement class_pathfinding_1_1_legacy_1_1_legacy_rich_a_i.php#aa0983a7327e7f98118f7444acc41a48b -Pathfinding.Legacy.LegacyRichAI.currentTargetDirection class_pathfinding_1_1_legacy_1_1_legacy_rich_a_i.php#ae49464b8806ea2a5b5571ff071f37d9d -Pathfinding.Legacy.LegacyRichAI.lastTargetPoint class_pathfinding_1_1_legacy_1_1_legacy_rich_a_i.php#a5c51937d2399234699f10a8f1508933c -Pathfinding.Legacy.LegacyRichAI.velocity class_pathfinding_1_1_legacy_1_1_legacy_rich_a_i.php#a3b25b511511877deeb366b65cf3b9d16 -Pathfinding.Legacy.LegacyRichAI.deltaTime class_pathfinding_1_1_legacy_1_1_legacy_rich_a_i.php#a1a61318ed6aa02b4ff346e7eb8f68891 -Pathfinding.Legacy.LegacyRVOController.enableRotation class_pathfinding_1_1_legacy_1_1_legacy_r_v_o_controller.php#a3f20f59721353a6d1d0a2f813bbffb11 -Pathfinding.Legacy.LegacyRVOController.mask class_pathfinding_1_1_legacy_1_1_legacy_r_v_o_controller.php#ab160857267f179452f394ff7aa956c52 -Pathfinding.Legacy.LegacyRVOController.rotationSpeed class_pathfinding_1_1_legacy_1_1_legacy_r_v_o_controller.php#a4c73d2f5726a32947e538ff9f524d81f -Pathfinding.LevelGridNode._gridGraphs class_pathfinding_1_1_level_grid_node.php#acc47e202fcfa21d2ff41b220f598d3f6 -Pathfinding.LevelGridNode.ConnectionMask class_pathfinding_1_1_level_grid_node.php#abcfc4ca800375dcbf7811d945b20ad44 -Pathfinding.LevelGridNode.gridConnections class_pathfinding_1_1_level_grid_node.php#a0b6dbd0cb5148b8c5f98dd86eb714041 -Pathfinding.LevelGridNode.MaxLayerCount class_pathfinding_1_1_level_grid_node.php#af438da61b6313a876858a1ef0af7f536 -Pathfinding.LevelGridNode.NoConnection class_pathfinding_1_1_level_grid_node.php#a89d03ea76dc6dc6d99ac20a733bcdb7a -Pathfinding.LevelGridNode.gridGraphs class_pathfinding_1_1_level_grid_node.php#a35ca0709160735581688a541841c9515 -Pathfinding.LevelGridNode.ConnectionStride class_pathfinding_1_1_level_grid_node.php#ad8bdbc3a8dbd886aa219126c263ad31d -Pathfinding.Examples.LightweightRVO.agentCount class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a95bcb790e75fde09eec7202257e57e27 -Pathfinding.Examples.LightweightRVO.agentTimeHorizon class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#aae87304c6923138c031ff9918dd3a997 -Pathfinding.Examples.LightweightRVO.debug class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a398527b3e9e358c345c5047b16871957 -Pathfinding.Examples.LightweightRVO.exampleScale class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a3d921a4bbfd9cf05f3b6a9b2e0da6919 -Pathfinding.Examples.LightweightRVO.maxNeighbours class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#afc4894bb6cdea8cdd3fb808617a6783a -Pathfinding.Examples.LightweightRVO.maxSpeed class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a3c105180f93a78cf3fb0903df278cf3f -Pathfinding.Examples.LightweightRVO.obstacleTimeHorizon class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#aaae09db88e3bf152d9ad44de274b7a5c -Pathfinding.Examples.LightweightRVO.radius class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a5050a760c11da521cd4aee6336f6529f -Pathfinding.Examples.LightweightRVO.renderingOffset class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a4db38b2afd9d13b66047dc08ce6d11ff -Pathfinding.Examples.LightweightRVO.type class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a879898dfdef247bcb103e915329c0f94 -Pathfinding.Examples.LightweightRVO.agents class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a528a46d939b955ebe7dd99d04c5ffdec -Pathfinding.Examples.LightweightRVO.colors class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#af70f6a0defc8ca2b648b7442274df960 -Pathfinding.Examples.LightweightRVO.goals class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a3a7e2e1da58ff6ddb9eceeb2b46e95bd -Pathfinding.Examples.LightweightRVO.interpolatedRotations class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a4d7618982136ad1aaca6085bec42bc42 -Pathfinding.Examples.LightweightRVO.interpolatedVelocities class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a37ca096ece1b0d599d0349db0304483c -Pathfinding.Examples.LightweightRVO.mesh class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a7b3d47f25e4b65dc13c94392a3da8076 -Pathfinding.Examples.LightweightRVO.meshColors class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a31f782dc16a301dd9ac9cd9fff6783d4 -Pathfinding.Examples.LightweightRVO.sim class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#add5f6cfafe4f43c8da15040c62eb4282 -Pathfinding.Examples.LightweightRVO.tris class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a661a2dd45ef4a81177a8fadb31ea50bb -Pathfinding.Examples.LightweightRVO.uv class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a2359b2a3027bbd65cb6218cf20498626 -Pathfinding.Examples.LightweightRVO.verts class_pathfinding_1_1_examples_1_1_lightweight_r_v_o.php#a57cea70d99b3d108e0604fd80335ad49 -Pathfinding.AnimationLink.LinkClip.clip class_pathfinding_1_1_animation_link_1_1_link_clip.php#ad4ed26fd7b88ea04030a7b2073121dbd -Pathfinding.AnimationLink.LinkClip.loopCount class_pathfinding_1_1_animation_link_1_1_link_clip.php#af0e842a53b6692a1e808f86da5741152 -Pathfinding.AnimationLink.LinkClip.velocity class_pathfinding_1_1_animation_link_1_1_link_clip.php#a657f2be2faad1298aeefc486884ce193 -Pathfinding.LinkedLevelNode.height class_pathfinding_1_1_linked_level_node.php#a48083b65ac9a863566dc3e3fff09a5b4 -Pathfinding.LinkedLevelNode.hit class_pathfinding_1_1_linked_level_node.php#a4abbe4bef8d804aab326f134efe02ea0 -Pathfinding.LinkedLevelNode.next class_pathfinding_1_1_linked_level_node.php#a74a8f100f19f95248432445b60ab699c -Pathfinding.LinkedLevelNode.position class_pathfinding_1_1_linked_level_node.php#acfb76c74e507fea066625f69fbc8a146 -Pathfinding.LinkedLevelNode.walkable class_pathfinding_1_1_linked_level_node.php#a0ea3fe499578e27285c246dbf6cb20f7 -Pathfinding.Util.ListPool.inPool class_pathfinding_1_1_util_1_1_list_pool.php#a1038ed80f6d46a1bb3ef32842e283418 -Pathfinding.Util.ListPool.largePool class_pathfinding_1_1_util_1_1_list_pool.php#a74888c4ca82980c04382cbf4a83af8a4 -Pathfinding.Util.ListPool.pool class_pathfinding_1_1_util_1_1_list_pool.php#afc405656cfd6e45c6ef3d4d686c26161 -Pathfinding.Util.ListPool.LargeThreshold class_pathfinding_1_1_util_1_1_list_pool.php#ae7f6a4a2796764d61455dfecb10f2183 -Pathfinding.Util.ListPool.MaxCapacitySearchLength class_pathfinding_1_1_util_1_1_list_pool.php#a16d9ef3b011833ea8215c905da9ad715 -Pathfinding.Util.ListPool.MaxLargePoolSize class_pathfinding_1_1_util_1_1_list_pool.php#a6d6e4f4d0dde2b3f85eb758bed46e3c1 -Pathfinding.LocalSpaceGraph.originalMatrix class_pathfinding_1_1_local_space_graph.php#a2d349722ab4e9fd4a0f7a0d011cfab04 -Pathfinding.Examples.LocalSpaceRichAI.graph class_pathfinding_1_1_examples_1_1_local_space_rich_a_i.php#a4d609d2494634b7f5b82b2441c9b7263 -Pathfinding.Examples.ManualRVOAgent.rvo class_pathfinding_1_1_examples_1_1_manual_r_v_o_agent.php#a06d8a9eba8b80bbab23274a3748b6c13 -Pathfinding.Examples.ManualRVOAgent.speed class_pathfinding_1_1_examples_1_1_manual_r_v_o_agent.php#a7f7e4724cf57d59513b39c5ecc81adc8 -Pathfinding.AdvancedSmooth.MaxTurn.alfaLeftLeft class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a3199c86b71919006b2fe653908c5594b -Pathfinding.AdvancedSmooth.MaxTurn.alfaLeftRight class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a513fe1a683a31aab16f13b0336027322 -Pathfinding.AdvancedSmooth.MaxTurn.alfaRightLeft class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a626ff793def9242419505faa7f515e82 -Pathfinding.AdvancedSmooth.MaxTurn.alfaRightRight class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#abee395626966b55ab64a6ef97a3e4768 -Pathfinding.AdvancedSmooth.MaxTurn.betaLeftLeft class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a6ae102baa0557e5f186c931561b4eaed -Pathfinding.AdvancedSmooth.MaxTurn.betaLeftRight class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a2c9c9cac46ca4e0514c05ad71ff1ec45 -Pathfinding.AdvancedSmooth.MaxTurn.betaRightLeft class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#adc31caed18d3e259b5ac669a6085de61 -Pathfinding.AdvancedSmooth.MaxTurn.betaRightRight class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a55a46e1b890b2c3235fdd9c5c78b7027 -Pathfinding.AdvancedSmooth.MaxTurn.deltaLeftRight class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#aede9d923123dfe5565aee6bf6c480d1d -Pathfinding.AdvancedSmooth.MaxTurn.deltaRightLeft class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a794fe6c05e74abbde469d463578c1842 -Pathfinding.AdvancedSmooth.MaxTurn.gammaLeft class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a228ac72d512b5fcdb5da22b185c1b974 -Pathfinding.AdvancedSmooth.MaxTurn.gammaRight class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#ab6bafb9a649496f248c19a70f65adceb -Pathfinding.AdvancedSmooth.MaxTurn.leftCircleCenter class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a1d102a743eb3b0e8886316a40e9a0854 -Pathfinding.AdvancedSmooth.MaxTurn.preLeftCircleCenter class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#aa67de3a9fd4f9e632ab07ecc98a2d759 -Pathfinding.AdvancedSmooth.MaxTurn.preRightCircleCenter class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a06381bbb71b662d29bb7a9240d94231d -Pathfinding.AdvancedSmooth.MaxTurn.preVaLeft class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a6ac8bf0b851a95e9e952c6ccb1de2bd5 -Pathfinding.AdvancedSmooth.MaxTurn.preVaRight class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a19a0244d1ae63aec12df9bbabdf6e230 -Pathfinding.AdvancedSmooth.MaxTurn.rightCircleCenter class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#aa2a97e2db932f58ab914c6dade1803c4 -Pathfinding.AdvancedSmooth.MaxTurn.vaLeft class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#ab4eb9c93f3e7afdec3a8da7b8e6a92b5 -Pathfinding.AdvancedSmooth.MaxTurn.vaRight class_pathfinding_1_1_advanced_smooth_1_1_max_turn.php#a126992725f7e2c9ad7dbccf7f9c1edf0 -Pathfinding.Examples.MecanimBridge.velocitySmoothing class_pathfinding_1_1_examples_1_1_mecanim_bridge.php#a634682b60fc00ba098612de62de04ffb -Pathfinding.Examples.MecanimBridge.ai class_pathfinding_1_1_examples_1_1_mecanim_bridge.php#aefe9b5dad4b144f8fe19b0f1da2a0adc -Pathfinding.Examples.MecanimBridge.anim class_pathfinding_1_1_examples_1_1_mecanim_bridge.php#a9c362bec5a5fff98c2de55648d6f284e -Pathfinding.Examples.MecanimBridge.footTransforms class_pathfinding_1_1_examples_1_1_mecanim_bridge.php#a6c24064901815df783ff8b65424d658e -Pathfinding.Examples.MecanimBridge.prevFootPos class_pathfinding_1_1_examples_1_1_mecanim_bridge.php#ab40b196141c0eff62c5c3d58a63f0c41 -Pathfinding.Examples.MecanimBridge.smoothedVelocity class_pathfinding_1_1_examples_1_1_mecanim_bridge.php#aa0e2af9caa0407bf19c12cc17d976193 -Pathfinding.Examples.MecanimBridge.tr class_pathfinding_1_1_examples_1_1_mecanim_bridge.php#a79a17507a0e6ad3b0345e0397a4a038f -Pathfinding.MeshNode.connections class_pathfinding_1_1_mesh_node.php#a6866e54610b798b23ab5dbce1ef228d7 -Pathfinding.Examples.MineBotAI.anim class_pathfinding_1_1_examples_1_1_mine_bot_a_i.php#a6f1b952926d36dbafbaba90c743ce09f -Pathfinding.Examples.MineBotAI.animationSpeed class_pathfinding_1_1_examples_1_1_mine_bot_a_i.php#a5b68360a66199e508b85785a0871029a -Pathfinding.Examples.MineBotAI.endOfPathEffect class_pathfinding_1_1_examples_1_1_mine_bot_a_i.php#adce7dc4e6aefd7e189862127b901af7b -Pathfinding.Examples.MineBotAI.sleepVelocity class_pathfinding_1_1_examples_1_1_mine_bot_a_i.php#af21cdc15459ac4a472595db396d779da -Pathfinding.Examples.MineBotAnimation.anim class_pathfinding_1_1_examples_1_1_mine_bot_animation.php#a6f1b952926d36dbafbaba90c743ce09f -Pathfinding.Examples.MineBotAnimation.animationSpeed class_pathfinding_1_1_examples_1_1_mine_bot_animation.php#a5b68360a66199e508b85785a0871029a -Pathfinding.Examples.MineBotAnimation.endOfPathEffect class_pathfinding_1_1_examples_1_1_mine_bot_animation.php#adce7dc4e6aefd7e189862127b901af7b -Pathfinding.Examples.MineBotAnimation.sleepVelocity class_pathfinding_1_1_examples_1_1_mine_bot_animation.php#af21cdc15459ac4a472595db396d779da -Pathfinding.Examples.MineBotAnimation.ai class_pathfinding_1_1_examples_1_1_mine_bot_animation.php#aefe9b5dad4b144f8fe19b0f1da2a0adc -Pathfinding.Examples.MineBotAnimation.isAtDestination class_pathfinding_1_1_examples_1_1_mine_bot_animation.php#a5d38104a71975f0f54c3aef1273f9f62 -Pathfinding.Examples.MineBotAnimation.tr class_pathfinding_1_1_examples_1_1_mine_bot_animation.php#a79a17507a0e6ad3b0345e0397a4a038f -Pathfinding.Examples.MineBotAnimation.lastTarget class_pathfinding_1_1_examples_1_1_mine_bot_animation.php#a269b1f01948bdc7b97861144103b4ad3 -Pathfinding.MonoModifier.seeker class_pathfinding_1_1_mono_modifier.php#a2cc99ba55c7911c446051a8d9c7afdbb -Pathfinding.MultiTargetPath.callbacks class_pathfinding_1_1_multi_target_path.php#a69fa8c04ed023bc94c23cb4cc14a9137 -Pathfinding.MultiTargetPath.chosenTarget class_pathfinding_1_1_multi_target_path.php#ad94377b095e3bde630fa2c63ecf17cfd -Pathfinding.MultiTargetPath.heuristicMode class_pathfinding_1_1_multi_target_path.php#a73a20b25be199cd7c2ce68161adc4261 -Pathfinding.MultiTargetPath.nodePaths class_pathfinding_1_1_multi_target_path.php#ad0fc4eaf6aa62366e873df6e348c38c9 -Pathfinding.MultiTargetPath.originalTargetPoints class_pathfinding_1_1_multi_target_path.php#aca0a4b7daba2a2aaed48a6be10767a58 -Pathfinding.MultiTargetPath.pathsForAll class_pathfinding_1_1_multi_target_path.php#a64e6f0caabc4c686e7b0293939c599af -Pathfinding.MultiTargetPath.targetNodes class_pathfinding_1_1_multi_target_path.php#a81a1be0800611bc03b43cc8239fddb5e -Pathfinding.MultiTargetPath.targetPoints class_pathfinding_1_1_multi_target_path.php#ae9adfff477436018f083e320623fffc3 -Pathfinding.MultiTargetPath.targetsFound class_pathfinding_1_1_multi_target_path.php#a1b02a57810390e1c4e22bf96fb57a07d -Pathfinding.MultiTargetPath.vectorPaths class_pathfinding_1_1_multi_target_path.php#a332e1e582fe9af4139378384aa58f5ed -Pathfinding.MultiTargetPath.targetNodeCount class_pathfinding_1_1_multi_target_path.php#a1ea70129521a49c77e3bf23a9fa0eced -Pathfinding.MultiTargetPath.sequentialTarget class_pathfinding_1_1_multi_target_path.php#a4b9ad70024cc8f8fa3d76aab7d312ef3 -Pathfinding.NavGraph.active class_pathfinding_1_1_nav_graph.php#a434d5613ef9ff4b88d1be0ce9527825e -Pathfinding.NavGraph.drawGizmos class_pathfinding_1_1_nav_graph.php#ae9c11225f455a44cd7086edfb44f1dda -Pathfinding.NavGraph.graphIndex class_pathfinding_1_1_nav_graph.php#abb7b3c3728081b8ab67059b80f3022f1 -Pathfinding.NavGraph.guid class_pathfinding_1_1_nav_graph.php#a0c8f65c9d3118ff62b1d40950e5154f8 -Pathfinding.NavGraph.infoScreenOpen class_pathfinding_1_1_nav_graph.php#a446b024d347557e040a2487a4dad35d4 -Pathfinding.NavGraph.initialPenalty class_pathfinding_1_1_nav_graph.php#a8ce0a60a61300cf40e5b80d38d725618 -Pathfinding.NavGraph.inverseMatrix class_pathfinding_1_1_nav_graph.php#afb324eca94dcbe6ba08d65cc718ed7f7 -Pathfinding.NavGraph.matrix class_pathfinding_1_1_nav_graph.php#a0fe016efbd0e96eb5b62f08da732b9f6 -Pathfinding.NavGraph.name class_pathfinding_1_1_nav_graph.php#a8ccf841cb59e451791bcb2e1ac4f1edc -Pathfinding.NavGraph.open class_pathfinding_1_1_nav_graph.php#a8c7e45250b1eb6821dd59fb2a9a016d7 -Pathfinding.NavGraph.serializedEditorSettings class_pathfinding_1_1_nav_graph.php#a0045b5a5067d04ef29ce2a40f628bfdf -Pathfinding.NavmeshAdd.center class_pathfinding_1_1_navmesh_add.php#ae037808a191021995ac2ab44255dc4f1 -Pathfinding.NavmeshAdd.mesh class_pathfinding_1_1_navmesh_add.php#a7b3d47f25e4b65dc13c94392a3da8076 -Pathfinding.NavmeshAdd.meshScale class_pathfinding_1_1_navmesh_add.php#afe95ae0308d6f4c862ad1e16e821d97f -Pathfinding.NavmeshAdd.rectangleSize class_pathfinding_1_1_navmesh_add.php#a9a4e1c763bd18df42234531a6db6cf26 -Pathfinding.NavmeshAdd.type class_pathfinding_1_1_navmesh_add.php#aaa071e07466ef6bc421181a7eb58adeb -Pathfinding.NavmeshAdd.updateDistance class_pathfinding_1_1_navmesh_add.php#a5462390d0033c9240bfac7acc0bb13eb -Pathfinding.NavmeshAdd.updateRotationDistance class_pathfinding_1_1_navmesh_add.php#a2da8f5725982e92c217f8f0bdb594096 -Pathfinding.NavmeshAdd.useRotationAndScale class_pathfinding_1_1_navmesh_add.php#aab028a6449284b1198569d69eec9fd45 -Pathfinding.NavmeshAdd.lastPosition class_pathfinding_1_1_navmesh_add.php#adbba78e1f8f92f45fe1dcab4046525be -Pathfinding.NavmeshAdd.lastRotation class_pathfinding_1_1_navmesh_add.php#a74372ca20cc16b748035990f340e6f16 -Pathfinding.NavmeshAdd.tris class_pathfinding_1_1_navmesh_add.php#a661a2dd45ef4a81177a8fadb31ea50bb -Pathfinding.NavmeshAdd.verts class_pathfinding_1_1_navmesh_add.php#a57cea70d99b3d108e0604fd80335ad49 -Pathfinding.NavmeshAdd.tr class_pathfinding_1_1_navmesh_add.php#a79a17507a0e6ad3b0345e0397a4a038f -Pathfinding.NavmeshAdd.GizmoColor class_pathfinding_1_1_navmesh_add.php#aefb8168acb75f1973913a7f240f07d0b -Pathfinding.NavmeshBase.forcedBoundsSize class_pathfinding_1_1_navmesh_base.php#a24a4f86c42d493269588d3525e5ba366 -Pathfinding.NavmeshBase.nearestSearchOnlyXZ class_pathfinding_1_1_navmesh_base.php#a4f9800d09304f871069bfdf0f2fc5641 -Pathfinding.NavmeshBase.OnRecalculatedTiles class_pathfinding_1_1_navmesh_base.php#a7aa2f64dbb5a57180e065d32b8ea4fee -Pathfinding.NavmeshBase.showMeshOutline class_pathfinding_1_1_navmesh_base.php#af4b5c2b3e2935c60b3855e861c01dba9 -Pathfinding.NavmeshBase.showMeshSurface class_pathfinding_1_1_navmesh_base.php#a520a06f54e1cdaa68ebd7e505a971dc3 -Pathfinding.NavmeshBase.showNodeConnections class_pathfinding_1_1_navmesh_base.php#aecc5205eaeb72a74e48023f48c5c9f02 -Pathfinding.NavmeshBase.TileIndexMask class_pathfinding_1_1_navmesh_base.php#a87b08b23d867187b988055180e5ebe1d -Pathfinding.NavmeshBase.TileIndexOffset class_pathfinding_1_1_navmesh_base.php#a85bee8d74cff85d15d7ab5fc549b4a1a -Pathfinding.NavmeshBase.tileXCount class_pathfinding_1_1_navmesh_base.php#a34ddc11f1ebb9ddd7ecb14b5305bc0f1 -Pathfinding.NavmeshBase.tileZCount class_pathfinding_1_1_navmesh_base.php#ad9e3905042cadee45185c9958e66aa45 -Pathfinding.NavmeshBase.transform class_pathfinding_1_1_navmesh_base.php#a80ebac8614ff7478640680b2503c9120 -Pathfinding.NavmeshBase.VertexIndexMask class_pathfinding_1_1_navmesh_base.php#a9368046cbd0ed455fc73cfd0fd3addb8 -Pathfinding.NavmeshBase.tiles class_pathfinding_1_1_navmesh_base.php#a756fe56fd298535f0f2a6ef336931da4 -Pathfinding.NavmeshBase.batchNodesToDestroy class_pathfinding_1_1_navmesh_base.php#ae7ebfa51893d52a9048e322be92f14bc -Pathfinding.NavmeshBase.batchTileUpdate class_pathfinding_1_1_navmesh_base.php#a3a19c2a30cd9d1f3681716f16f93b124 -Pathfinding.NavmeshBase.batchUpdatedTiles class_pathfinding_1_1_navmesh_base.php#a4f877ff1c0db09e0fefbe9f80a1e780d -Pathfinding.NavmeshBase.nodeRecyclingHashBuffer class_pathfinding_1_1_navmesh_base.php#a0f923e65a217ffe4194f1083e1a23928 -Pathfinding.NavmeshBase.LinecastShapeEdgeLookup class_pathfinding_1_1_navmesh_base.php#a5f1012910a212a143cd564af239e2825 -Pathfinding.NavmeshBase.NNConstraintDistanceXZ class_pathfinding_1_1_navmesh_base.php#a65f6f5365526a6e79b258ba3fc3dd75a -Pathfinding.NavmeshBase.NNConstraintNone class_pathfinding_1_1_navmesh_base.php#a10eddac9be5f09fd86fc0c02cebdadb7 -Pathfinding.NavmeshClamp.prevNode class_pathfinding_1_1_navmesh_clamp.php#a0757ef25bee7e3409dd62490c9432771 -Pathfinding.NavmeshClamp.prevPos class_pathfinding_1_1_navmesh_clamp.php#aabfd64ed4e9f40217ae48d67e27ffe25 -Pathfinding.NavmeshClipper.all class_pathfinding_1_1_navmesh_clipper.php#a13a15eacabc694209c77fc044ace6ae9 -Pathfinding.NavmeshClipper.OnDisableCallback class_pathfinding_1_1_navmesh_clipper.php#a2d59a1b91b864b5bbfdc7bc7e6961b2d -Pathfinding.NavmeshClipper.OnEnableCallback class_pathfinding_1_1_navmesh_clipper.php#a97589400c1a0818a250c07256b6bfd06 -Pathfinding.NavmeshClipper.node class_pathfinding_1_1_navmesh_clipper.php#aff32cd002468f65e3df952094dfd1ec7 -Pathfinding.NavmeshCut.center class_pathfinding_1_1_navmesh_cut.php#ae037808a191021995ac2ab44255dc4f1 -Pathfinding.NavmeshCut.circleRadius class_pathfinding_1_1_navmesh_cut.php#a0219c2a0a81cd793e60947c72eacd29d -Pathfinding.NavmeshCut.circleResolution class_pathfinding_1_1_navmesh_cut.php#a0148ef0e887ff3b5c8087210aabbd12b -Pathfinding.NavmeshCut.cutsAddedGeom class_pathfinding_1_1_navmesh_cut.php#aedf1f396872671c1c7857ca78b9fde46 -Pathfinding.NavmeshCut.height class_pathfinding_1_1_navmesh_cut.php#a48083b65ac9a863566dc3e3fff09a5b4 -Pathfinding.NavmeshCut.isDual class_pathfinding_1_1_navmesh_cut.php#a13ae3bd250cca9cb99e405b1b8ab7440 -Pathfinding.NavmeshCut.mesh class_pathfinding_1_1_navmesh_cut.php#a7b3d47f25e4b65dc13c94392a3da8076 -Pathfinding.NavmeshCut.meshScale class_pathfinding_1_1_navmesh_cut.php#afe95ae0308d6f4c862ad1e16e821d97f -Pathfinding.NavmeshCut.rectangleSize class_pathfinding_1_1_navmesh_cut.php#a9a4e1c763bd18df42234531a6db6cf26 -Pathfinding.NavmeshCut.type class_pathfinding_1_1_navmesh_cut.php#aaa071e07466ef6bc421181a7eb58adeb -Pathfinding.NavmeshCut.updateDistance class_pathfinding_1_1_navmesh_cut.php#a5462390d0033c9240bfac7acc0bb13eb -Pathfinding.NavmeshCut.updateRotationDistance class_pathfinding_1_1_navmesh_cut.php#a2da8f5725982e92c217f8f0bdb594096 -Pathfinding.NavmeshCut.useRotationAndScale class_pathfinding_1_1_navmesh_cut.php#aab028a6449284b1198569d69eec9fd45 -Pathfinding.NavmeshCut.contours class_pathfinding_1_1_navmesh_cut.php#ab3fac71f63e22ce0bf3b37ee285d641f -Pathfinding.NavmeshCut.lastMesh class_pathfinding_1_1_navmesh_cut.php#a7a5fc6846221d280408fede47b4b6b70 -Pathfinding.NavmeshCut.lastPosition class_pathfinding_1_1_navmesh_cut.php#adbba78e1f8f92f45fe1dcab4046525be -Pathfinding.NavmeshCut.lastRotation class_pathfinding_1_1_navmesh_cut.php#a74372ca20cc16b748035990f340e6f16 -Pathfinding.NavmeshCut.tr class_pathfinding_1_1_navmesh_cut.php#a79a17507a0e6ad3b0345e0397a4a038f -Pathfinding.NavmeshCut.edges class_pathfinding_1_1_navmesh_cut.php#ace43357a56bb60700fc848a32169f962 -Pathfinding.NavmeshCut.pointers class_pathfinding_1_1_navmesh_cut.php#ab267a7652da84644456358f7001ce139 -Pathfinding.NavmeshCut.GizmoColor class_pathfinding_1_1_navmesh_cut.php#aefb8168acb75f1973913a7f240f07d0b -Pathfinding.NavMeshGraph.offset class_pathfinding_1_1_nav_mesh_graph.php#a7f408ba1aa97876b758ef307de0a1daa -Pathfinding.NavMeshGraph.recalculateNormals class_pathfinding_1_1_nav_mesh_graph.php#ae58981d8efc041ef9811b324e5491d5d -Pathfinding.NavMeshGraph.rotation class_pathfinding_1_1_nav_mesh_graph.php#aa20f4df5769ec2f2f32b43a05c7dc44c -Pathfinding.NavMeshGraph.scale class_pathfinding_1_1_nav_mesh_graph.php#a1d28dec57cce925ad92342891bd71e7c -Pathfinding.NavMeshGraph.sourceMesh class_pathfinding_1_1_nav_mesh_graph.php#ad916e371470f01843fb2db65dfbfc35c -Pathfinding.NavmeshTile.bbTree class_pathfinding_1_1_navmesh_tile.php#abbbbd18b7e6568df83f3804d78ed74a0 -Pathfinding.NavmeshTile.d class_pathfinding_1_1_navmesh_tile.php#a6f364afbe132c4ecfea48bde1b0618ba -Pathfinding.NavmeshTile.flag class_pathfinding_1_1_navmesh_tile.php#a8b3ab54ed3e81c69863d65e4e6c424a0 -Pathfinding.NavmeshTile.graph class_pathfinding_1_1_navmesh_tile.php#adcc25dabc06c3cbda7e5c2738718b755 -Pathfinding.NavmeshTile.nodes class_pathfinding_1_1_navmesh_tile.php#ac2ed7e37d9a2b8b3a706719d46134bad -Pathfinding.NavmeshTile.tris class_pathfinding_1_1_navmesh_tile.php#a661a2dd45ef4a81177a8fadb31ea50bb -Pathfinding.NavmeshTile.verts class_pathfinding_1_1_navmesh_tile.php#afa6aa0f1cca708840ec7f6f235c77ed8 -Pathfinding.NavmeshTile.vertsInGraphSpace class_pathfinding_1_1_navmesh_tile.php#acf057071b7f194a6cba1f62bd21e6128 -Pathfinding.NavmeshTile.w class_pathfinding_1_1_navmesh_tile.php#aac374e320caaadeca4874add33b62af2 -Pathfinding.NavmeshTile.x class_pathfinding_1_1_navmesh_tile.php#a6150e0515f7202e2fb518f7206ed97dc -Pathfinding.NavmeshTile.z class_pathfinding_1_1_navmesh_tile.php#a14f94e529dff0b8bfba8e16fbe9755d6 -Pathfinding.NNConstraint.area class_pathfinding_1_1_n_n_constraint.php#a5008f5aaa9ef50b1510e309dce9205d7 -Pathfinding.NNConstraint.constrainArea class_pathfinding_1_1_n_n_constraint.php#ae972a9b3f22978d92d35850288ee666a -Pathfinding.NNConstraint.constrainDistance class_pathfinding_1_1_n_n_constraint.php#aea0c9d05190ca41a290ff4ef197c7d84 -Pathfinding.NNConstraint.constrainTags class_pathfinding_1_1_n_n_constraint.php#ad87e9e78f3514d557bb5b133abde9aaf -Pathfinding.NNConstraint.constrainWalkability class_pathfinding_1_1_n_n_constraint.php#ae3e24284215bb8fe90f9fbb2b643c31a -Pathfinding.NNConstraint.distanceXZ class_pathfinding_1_1_n_n_constraint.php#a498c033ea31891f3dcee3b9419c43b96 -Pathfinding.NNConstraint.graphMask class_pathfinding_1_1_n_n_constraint.php#a63a785ae519f012d295916dd9969170c -Pathfinding.NNConstraint.tags class_pathfinding_1_1_n_n_constraint.php#ae5a306487e101c6a14ebe525b492ffd0 -Pathfinding.NNConstraint.walkable class_pathfinding_1_1_n_n_constraint.php#a0ea3fe499578e27285c246dbf6cb20f7 -Pathfinding.NodeLink.costFactor class_pathfinding_1_1_node_link.php#a28b7c1e300f223dd310bee6a68a69d55 -Pathfinding.NodeLink.deleteConnection class_pathfinding_1_1_node_link.php#ac3872df0c47ef51dbe690b5e60180ba2 -Pathfinding.NodeLink.end class_pathfinding_1_1_node_link.php#a92327b785f1379c9521c8397632eb79f -Pathfinding.NodeLink.oneWay class_pathfinding_1_1_node_link.php#a58423367fa981aaa21278e9a910c06e3 -Pathfinding.NodeLink2.reference class_pathfinding_1_1_node_link2.php#acdb16d2679698ce16b91a2eec59600ef -Pathfinding.NodeLink2.costFactor class_pathfinding_1_1_node_link2.php#a28b7c1e300f223dd310bee6a68a69d55 -Pathfinding.NodeLink2.end class_pathfinding_1_1_node_link2.php#a92327b785f1379c9521c8397632eb79f -Pathfinding.NodeLink2.oneWay class_pathfinding_1_1_node_link2.php#a58423367fa981aaa21278e9a910c06e3 -Pathfinding.NodeLink2.clamped1 class_pathfinding_1_1_node_link2.php#a07db25896550dd754b772ca12e8fdb4f -Pathfinding.NodeLink2.clamped2 class_pathfinding_1_1_node_link2.php#a66e1042ebaa6d58c7a516d39ec7a33db -Pathfinding.NodeLink2.connectedNode1 class_pathfinding_1_1_node_link2.php#a3f4744a1ca0c2f0d0a643bfb66143a41 -Pathfinding.NodeLink2.connectedNode2 class_pathfinding_1_1_node_link2.php#a0cda214a57cb698056e4a10574e5bc1b -Pathfinding.NodeLink2.postScanCalled class_pathfinding_1_1_node_link2.php#aa8c080bed26d6fa4266d13f85d318414 -Pathfinding.NodeLink2.GizmosColor class_pathfinding_1_1_node_link2.php#a977d22efb359dce6c1d8b0922f755327 -Pathfinding.NodeLink2.GizmosColorSelected class_pathfinding_1_1_node_link2.php#acdfdbdf9f15cccf2a86ec6e2361919b1 -Pathfinding.NodeLink3.reference class_pathfinding_1_1_node_link3.php#a52c1544d0af137b5a45a21fed1d08a6b -Pathfinding.NodeLink3.costFactor class_pathfinding_1_1_node_link3.php#a28b7c1e300f223dd310bee6a68a69d55 -Pathfinding.NodeLink3.end class_pathfinding_1_1_node_link3.php#a92327b785f1379c9521c8397632eb79f -Pathfinding.NodeLink3.oneWay class_pathfinding_1_1_node_link3.php#a58423367fa981aaa21278e9a910c06e3 -Pathfinding.NodeLink3.clamped1 class_pathfinding_1_1_node_link3.php#a07db25896550dd754b772ca12e8fdb4f -Pathfinding.NodeLink3.clamped2 class_pathfinding_1_1_node_link3.php#a66e1042ebaa6d58c7a516d39ec7a33db -Pathfinding.NodeLink3.connectedNode1 class_pathfinding_1_1_node_link3.php#a063b72b261913b4320ddcfb7ddf2f0db -Pathfinding.NodeLink3.connectedNode2 class_pathfinding_1_1_node_link3.php#ac694e0e1cb0e651e11e3c60b69cc3886 -Pathfinding.NodeLink3.endNode class_pathfinding_1_1_node_link3.php#ac4179344b455f64d7dd4967f176dff7c -Pathfinding.NodeLink3.postScanCalled class_pathfinding_1_1_node_link3.php#aa8c080bed26d6fa4266d13f85d318414 -Pathfinding.NodeLink3.startNode class_pathfinding_1_1_node_link3.php#a2fe652b68f1a62e9b1783583920a2f18 -Pathfinding.NodeLink3.GizmosColor class_pathfinding_1_1_node_link3.php#a977d22efb359dce6c1d8b0922f755327 -Pathfinding.NodeLink3.GizmosColorSelected class_pathfinding_1_1_node_link3.php#acdfdbdf9f15cccf2a86ec6e2361919b1 -Pathfinding.NodeLink3Node.link class_pathfinding_1_1_node_link3_node.php#a074f635ce3c1d2da09a70f8d9c856245 -Pathfinding.NodeLink3Node.portalA class_pathfinding_1_1_node_link3_node.php#a35ab84bd26cb8dffa2fef60f2e78b632 -Pathfinding.NodeLink3Node.portalB class_pathfinding_1_1_node_link3_node.php#aeecd9230307b1003aab60a4e272a1eb0 -Pathfinding.Examples.ObjectPlacer.direct class_pathfinding_1_1_examples_1_1_object_placer.php#aba2b16ce617b94f9cdaa52215d9091d9 -Pathfinding.Examples.ObjectPlacer.go class_pathfinding_1_1_examples_1_1_object_placer.php#aab7cf8386fbb852f60300b76a71d7e6a -Pathfinding.Examples.ObjectPlacer.issueGUOs class_pathfinding_1_1_examples_1_1_object_placer.php#aa2eb1716bd05b7a3eccdcb87e9cd9774 -Pathfinding.Util.ObjectPoolSimple.inPool class_pathfinding_1_1_util_1_1_object_pool_simple.php#a9893ca5d089175264186e8477e07d092 -Pathfinding.Util.ObjectPoolSimple.pool class_pathfinding_1_1_util_1_1_object_pool_simple.php#a4f60777fdbfdcd809ba223e2b9e126cf -Pathfinding.RVO.ObstacleVertex.dir class_pathfinding_1_1_r_v_o_1_1_obstacle_vertex.php#a2370330c92f0e7586a9c99b834902943 -Pathfinding.RVO.ObstacleVertex.height class_pathfinding_1_1_r_v_o_1_1_obstacle_vertex.php#a48083b65ac9a863566dc3e3fff09a5b4 -Pathfinding.RVO.ObstacleVertex.ignore class_pathfinding_1_1_r_v_o_1_1_obstacle_vertex.php#ad60915d5b7c97ed8b59ff830f2f6eee1 -Pathfinding.RVO.ObstacleVertex.layer class_pathfinding_1_1_r_v_o_1_1_obstacle_vertex.php#a4338870e6579f71d5c457d9979986c98 -Pathfinding.RVO.ObstacleVertex.next class_pathfinding_1_1_r_v_o_1_1_obstacle_vertex.php#af9773dea0213d4ec0f9b6a727d8cf2db -Pathfinding.RVO.ObstacleVertex.position class_pathfinding_1_1_r_v_o_1_1_obstacle_vertex.php#acfb76c74e507fea066625f69fbc8a146 -Pathfinding.RVO.ObstacleVertex.prev class_pathfinding_1_1_r_v_o_1_1_obstacle_vertex.php#ae23438e24c1ae0e24d8d6ad61605c589 -Pathfinding.OptimizationHandler.deprecatedBuildTargets class_pathfinding_1_1_optimization_handler.php#a52f8a4bb4125dc9cd071e547367a9dd7 -Pathfinding.Util.ParallelWorkQueue.action class_pathfinding_1_1_util_1_1_parallel_work_queue.php#a4c0af90be673d1624f368cfaaf5d9f74 -Pathfinding.Util.ParallelWorkQueue.threadCount class_pathfinding_1_1_util_1_1_parallel_work_queue.php#ada785feb9ece8aef0a51e549def4ad3c -Pathfinding.Util.ParallelWorkQueue.initialCount class_pathfinding_1_1_util_1_1_parallel_work_queue.php#ab53dc320530e5b1700dce063cd82c71d -Pathfinding.Util.ParallelWorkQueue.innerException class_pathfinding_1_1_util_1_1_parallel_work_queue.php#aec44d1173cb209552b922b7f5917eac6 -Pathfinding.Util.ParallelWorkQueue.queue class_pathfinding_1_1_util_1_1_parallel_work_queue.php#a05bed496ac0c6f4d8ad0c7b73ff8bb48 -Pathfinding.Util.ParallelWorkQueue.waitEvents class_pathfinding_1_1_util_1_1_parallel_work_queue.php#ad1b3fdf7278b8a4c079947b113c12e12 -Pathfinding.Path.completeState class_pathfinding_1_1_path.php#ab77d39bbcf3a66c6949544adb047eaa4 -Pathfinding.Path.currentR class_pathfinding_1_1_path.php#a927fdf14b05fdd95422e8ca4ce3d02ed -Pathfinding.Path.hasBeenReset class_pathfinding_1_1_path.php#a08be4d910d994f5e3fcb39d6b71c8631 -Pathfinding.Path.hTarget class_pathfinding_1_1_path.php#a11c7b93ed5be4c0679e162e16c4be2b5 -Pathfinding.Path.hTargetNode class_pathfinding_1_1_path.php#a31f6b3d127f63d7daaa75561cbc0e022 -Pathfinding.Path.internalTagPenalties class_pathfinding_1_1_path.php#adfee8fa4d1b211252da6fc29424b1678 -Pathfinding.Path.manualTagPenalties class_pathfinding_1_1_path.php#a9d16f5824fc8a85fecc31182e9ab3611 -Pathfinding.Path.pathHandler class_pathfinding_1_1_path.php#a7dcbab6b828dabed9a14ca5874bd7958 -Pathfinding.Path.callback class_pathfinding_1_1_path.php#a1283a0bbb6c7864c345cb12e1cf1dcaa -Pathfinding.Path.enabledTags class_pathfinding_1_1_path.php#a764d3ed2e9a2b25171ed02c6b4f6e165 -Pathfinding.Path.heuristic class_pathfinding_1_1_path.php#a075542dfca7754bc1e390b6bb13e5e92 -Pathfinding.Path.heuristicScale class_pathfinding_1_1_path.php#aee92349c20768e49169e32671e74a820 -Pathfinding.Path.immediateCallback class_pathfinding_1_1_path.php#a3a4d5d270f61f2caa0abc7268e754a46 -Pathfinding.Path.nnConstraint class_pathfinding_1_1_path.php#af6ea73fa8f1c34669d3b2d1854758808 -Pathfinding.Path.path class_pathfinding_1_1_path.php#ac76dd31632dd24f062d1949d77af84d2 -Pathfinding.Path.traversalProvider class_pathfinding_1_1_path.php#a1dfcd31a21b1bc0d11074f34e5c793d8 -Pathfinding.Path.vectorPath class_pathfinding_1_1_path.php#a606d877ec5788bbbf53311a2dff80ffd -Pathfinding.Path.claimed class_pathfinding_1_1_path.php#a471bf76367ecf93380e398ff2fd45890 -Pathfinding.Path.releasedNotSilent class_pathfinding_1_1_path.php#ac902f9013c67302efd39a0a752e69332 -Pathfinding.Path.stateLock class_pathfinding_1_1_path.php#aad097dd342f89e028e33e38aa64a2ba9 -Pathfinding.Path.duration class_pathfinding_1_1_path.php#a66625d8d6c0894b4828b43f826a09b8f -Pathfinding.Path.next class_pathfinding_1_1_path.php#a8184493e27bfcdffd5f32e6dde4c0364 -Pathfinding.Path.searchedNodes class_pathfinding_1_1_path.php#af8e7a9c8893e8da14adfc4b4751297cc -Pathfinding.Path.ZeroTagPenalties class_pathfinding_1_1_path.php#a564a23473fdb3d5b76efac3fec71c29b -Pathfinding.PathEndingCondition.path class_pathfinding_1_1_path_ending_condition.php#aea4bb978a006652d3ff42b927337913d -Pathfinding.PathHandler.pathID class_pathfinding_1_1_path_handler.php#a7f58d0f5c9ee7555995152b8a249ee90 -Pathfinding.PathHandler.DebugStringBuilder class_pathfinding_1_1_path_handler.php#aa78f89a6d91a7177e5abf8982efac45c -Pathfinding.PathHandler.heap class_pathfinding_1_1_path_handler.php#a0a4f29440fc51dee4d05e19acd5a29a3 -Pathfinding.PathHandler.nodes class_pathfinding_1_1_path_handler.php#aa8360d7098759f277af14675cca4f64b -Pathfinding.PathHandler.threadID class_pathfinding_1_1_path_handler.php#a4303906f9e5418ceac581fd4c2f69cbe -Pathfinding.PathHandler.totalThreadCount class_pathfinding_1_1_path_handler.php#ab746415bba33cf8b455becc9c2357ecb -Pathfinding.Util.PathInterpolator.currentDistance class_pathfinding_1_1_util_1_1_path_interpolator.php#adcc03f736360efdf44bcedd6d65e9df4 -Pathfinding.Util.PathInterpolator.currentSegmentLength class_pathfinding_1_1_util_1_1_path_interpolator.php#a2945ec9ded02bf5c6e955a619135ad64 -Pathfinding.Util.PathInterpolator.distanceToSegmentStart class_pathfinding_1_1_util_1_1_path_interpolator.php#a30fa3d44dfe7e6bafbd051c88e924d49 -Pathfinding.Util.PathInterpolator.path class_pathfinding_1_1_util_1_1_path_interpolator.php#ad9cdd1b8cabbd043ef961fd429775909 -Pathfinding.Util.PathInterpolator.totalDistance class_pathfinding_1_1_util_1_1_path_interpolator.php#ad30d237a639dfb3d33e72789d04076ad -Pathfinding.PathModifier.seeker class_pathfinding_1_1_path_modifier.php#a2cc99ba55c7911c446051a8d9c7afdbb -Pathfinding.PathNode.heapIndex class_pathfinding_1_1_path_node.php#a20d97c37826f69b0ff725f26d7834e89 -Pathfinding.PathNode.node class_pathfinding_1_1_path_node.php#ad38a0e14c26a92de3abc582d51413e1b -Pathfinding.PathNode.parent class_pathfinding_1_1_path_node.php#a162c974d3727ab3a8ab046358e714095 -Pathfinding.PathNode.pathID class_pathfinding_1_1_path_node.php#a7f58d0f5c9ee7555995152b8a249ee90 -Pathfinding.PathNode.CostMask class_pathfinding_1_1_path_node.php#a57c0142182b5352067ef3964f799bcd9 -Pathfinding.PathNode.Flag1Mask class_pathfinding_1_1_path_node.php#a52a3722e83182b89ebf3eb67f43d8964 -Pathfinding.PathNode.Flag1Offset class_pathfinding_1_1_path_node.php#a49551df55045e33bf15a8f707937f069 -Pathfinding.PathNode.Flag2Mask class_pathfinding_1_1_path_node.php#ad17f8ebc69c76a1dc712af0c5bc29f57 -Pathfinding.PathNode.Flag2Offset class_pathfinding_1_1_path_node.php#a2773faa7c5021d6146496f5aa803517a -Pathfinding.PathNode.flags class_pathfinding_1_1_path_node.php#a660f9db871d26052904976a8bfe8432d -Pathfinding.PathNode.g class_pathfinding_1_1_path_node.php#a507f46d64a589eaa3bf729789889283c -Pathfinding.PathNode.h class_pathfinding_1_1_path_node.php#a0cf902ed91cf35330b639ab2ec1038dc -Pathfinding.PathPool.pool class_pathfinding_1_1_path_pool.php#a893b99cdb8fbee2b2284f2f82d8be4b0 -Pathfinding.PathPool.totalCreated class_pathfinding_1_1_path_pool.php#a02c5176102aea83d94b3ba1a54726379 -Pathfinding.PathProcessor.queue class_pathfinding_1_1_path_processor.php#afaaf98cede065250ae0227709f11fff8 -Pathfinding.PathProcessor.astar class_pathfinding_1_1_path_processor.php#abad30d7567baa44751f3a848a0bfaa8b -Pathfinding.PathProcessor.locks class_pathfinding_1_1_path_processor.php#aee608154f7cfa0db5ed0b61bf81d2467 -Pathfinding.PathProcessor.nextLockID class_pathfinding_1_1_path_processor.php#af3105aff0470a36b31675f765f3805d8 -Pathfinding.PathProcessor.nextNodeIndex class_pathfinding_1_1_path_processor.php#a45788583358cc53f53a12fd506193f53 -Pathfinding.PathProcessor.nodeIndexPool class_pathfinding_1_1_path_processor.php#a4164fdd04ea8c418a1c1d789a199d91a -Pathfinding.PathProcessor.pathHandlers class_pathfinding_1_1_path_processor.php#a57b024bb38919a5209306b4462397ead -Pathfinding.PathProcessor.returnQueue class_pathfinding_1_1_path_processor.php#a1a1185da0065ebc26682e81b241e8464 -Pathfinding.PathProcessor.threadCoroutine class_pathfinding_1_1_path_processor.php#a26d555509e07d7d17c5a79da06aaa050 -Pathfinding.PathProcessor.threads class_pathfinding_1_1_path_processor.php#ac2fed054fead57387ed619cc0572cf1d -Pathfinding.PathReturnQueue.pathReturnQueue class_pathfinding_1_1_path_return_queue.php#a04643569f65f94d16f10c4c311c6ecdb -Pathfinding.PathReturnQueue.pathsClaimedSilentlyBy class_pathfinding_1_1_path_return_queue.php#ab1314d9404d73b95446085c3424a4a82 -Pathfinding.Examples.PathTypesDemo.activeDemo class_pathfinding_1_1_examples_1_1_path_types_demo.php#a96efc6d1b3ba63c0b1e2059bbc1667f8 -Pathfinding.Examples.PathTypesDemo.aimStrength class_pathfinding_1_1_examples_1_1_path_types_demo.php#a25d3f5310c16bf938f5a58c993af3411 -Pathfinding.Examples.PathTypesDemo.end class_pathfinding_1_1_examples_1_1_path_types_demo.php#a92327b785f1379c9521c8397632eb79f -Pathfinding.Examples.PathTypesDemo.lineMat class_pathfinding_1_1_examples_1_1_path_types_demo.php#aa5b86e2fc705ea52865813897c117f8d -Pathfinding.Examples.PathTypesDemo.lineWidth class_pathfinding_1_1_examples_1_1_path_types_demo.php#a83f1b225ddabe2ed9dae6e6894a0dd5d -Pathfinding.Examples.PathTypesDemo.pathOffset class_pathfinding_1_1_examples_1_1_path_types_demo.php#ab001563eb3aa22d87efcec10d77d1310 -Pathfinding.Examples.PathTypesDemo.searchLength class_pathfinding_1_1_examples_1_1_path_types_demo.php#a250637f250f33ce04aae3258899f615f -Pathfinding.Examples.PathTypesDemo.spread class_pathfinding_1_1_examples_1_1_path_types_demo.php#a9fcb2da8648b09e9271722def1ad799a -Pathfinding.Examples.PathTypesDemo.squareMat class_pathfinding_1_1_examples_1_1_path_types_demo.php#a525a7692c7db1b11851ca66d8e7d0c77 -Pathfinding.Examples.PathTypesDemo.start class_pathfinding_1_1_examples_1_1_path_types_demo.php#a5d82163cf1181b330020eec1f7bf798c -Pathfinding.Examples.PathTypesDemo.lastFloodPath class_pathfinding_1_1_examples_1_1_path_types_demo.php#ac5b0431c1b386bc09348de3de1eb2914 -Pathfinding.Examples.PathTypesDemo.lastPath class_pathfinding_1_1_examples_1_1_path_types_demo.php#a0132d00627e33f683cdbb333791998b4 -Pathfinding.Examples.PathTypesDemo.lastRender class_pathfinding_1_1_examples_1_1_path_types_demo.php#a2c130db8d68ed65d5dd32f891b1bbda5 -Pathfinding.Examples.PathTypesDemo.multipoints class_pathfinding_1_1_examples_1_1_path_types_demo.php#aa18f1e6bd292c1d64f1401da188168c7 -Pathfinding.PathUtilities.BFSMap class_pathfinding_1_1_path_utilities.php#a5c1e95b312a149f97fbe3c57810344d3 -Pathfinding.PathUtilities.BFSQueue class_pathfinding_1_1_path_utilities.php#ab07174b23ff7c9db8a15afdf01a8899f -Pathfinding.Patrol.delay class_pathfinding_1_1_patrol.php#abdc33cf25e725134a9b48e79c7031bcf -Pathfinding.Patrol.targets class_pathfinding_1_1_patrol.php#aace5509cfbd7900eef712de30d4629bb -Pathfinding.Patrol.agent class_pathfinding_1_1_patrol.php#acdee96d44e536513fd67c811d1275b9f -Pathfinding.Patrol.index class_pathfinding_1_1_patrol.php#a750b5d744c39a06bfb13e6eb010e35d0 -Pathfinding.Patrol.switchTime class_pathfinding_1_1_patrol.php#a1686063a467a692c402974ac92a64b67 -Pathfinding.PointGraph.limits class_pathfinding_1_1_point_graph.php#ab81e66f7e550a9f4ee76f5e240f64891 -Pathfinding.PointGraph.mask class_pathfinding_1_1_point_graph.php#a427e7d78bb1a767d205d60ef36cdf39c -Pathfinding.PointGraph.maxDistance class_pathfinding_1_1_point_graph.php#af22920f041b5db58118ffb07b37e9a25 -Pathfinding.PointGraph.nodes class_pathfinding_1_1_point_graph.php#a820d63af486859121a5eca7654803108 -Pathfinding.PointGraph.optimizeForSparseGraph class_pathfinding_1_1_point_graph.php#a541297c6db66fb6fe20946dd080fadcf -Pathfinding.PointGraph.raycast class_pathfinding_1_1_point_graph.php#ab0c137fe9a580a2863ee89514b635cd0 -Pathfinding.PointGraph.recursive class_pathfinding_1_1_point_graph.php#a4dfde4fec9731901f89801f08296457f -Pathfinding.PointGraph.root class_pathfinding_1_1_point_graph.php#ad6c76e656de413e2772c563a64899e11 -Pathfinding.PointGraph.searchTag class_pathfinding_1_1_point_graph.php#a5375ad4d549aa327ac61bfa839c6b3c7 -Pathfinding.PointGraph.thickRaycast class_pathfinding_1_1_point_graph.php#a264d5f661a491686d8841cd329815849 -Pathfinding.PointGraph.thickRaycastRadius class_pathfinding_1_1_point_graph.php#a7b422a6984a8c66f6cbd41b73c25bd7d -Pathfinding.PointGraph.use2DPhysics class_pathfinding_1_1_point_graph.php#a4d39445c06d4fa2fc07df9e0242aa165 -Pathfinding.PointGraph.lookupTree class_pathfinding_1_1_point_graph.php#a7e01afc434611c64ffe6f65377c6ae54 -Pathfinding.PointKDTree.LeafArraySize class_pathfinding_1_1_point_k_d_tree.php#a1ed9776ffa6536c2505301d89b9d24f4 -Pathfinding.PointKDTree.LeafSize class_pathfinding_1_1_point_k_d_tree.php#a288eed20a8b543b259fa0ace5f727db0 -Pathfinding.PointKDTree.arrayCache class_pathfinding_1_1_point_k_d_tree.php#a406d1ef8072220bbe4a5fc85ac0f7a76 -Pathfinding.PointKDTree.largeList class_pathfinding_1_1_point_k_d_tree.php#a37ec8eead1f38d0614260da68d546b82 -Pathfinding.PointKDTree.numNodes class_pathfinding_1_1_point_k_d_tree.php#aa253071e8bc5ba6c124e70c2aa373017 -Pathfinding.PointKDTree.tree class_pathfinding_1_1_point_k_d_tree.php#a82fa4a4cd1a9f8b70103cbb3beb47df6 -Pathfinding.PointKDTree.comparers class_pathfinding_1_1_point_k_d_tree.php#a736614d2b766e67572f175df05259c7f -Pathfinding.PointNode.connections class_pathfinding_1_1_point_node.php#a6866e54610b798b23ab5dbce1ef228d7 -Pathfinding.PointNode.gameObject class_pathfinding_1_1_point_node.php#ac1e481e1027719ee97b07d1431b142fe -Pathfinding.Polygon.cached_Int3_int_dict class_pathfinding_1_1_polygon.php#a1decd8ae51684dae87c07e0ebbca3592 -Pathfinding.ProceduralGridMover.floodFill class_pathfinding_1_1_procedural_grid_mover.php#a6f1d2b22c1d04d2a9875e313eb025cd4 -Pathfinding.ProceduralGridMover.target class_pathfinding_1_1_procedural_grid_mover.php#a8a24b37582e07ee23646b165d54fa600 -Pathfinding.ProceduralGridMover.updateDistance class_pathfinding_1_1_procedural_grid_mover.php#a5462390d0033c9240bfac7acc0bb13eb -Pathfinding.ProceduralGridMover.buffer class_pathfinding_1_1_procedural_grid_mover.php#a82a379f431871e5ac218aaf2bdd461b9 -Pathfinding.ProceduralGridMover.graph class_pathfinding_1_1_procedural_grid_mover.php#aa9f04efb6ac372ec9b41ceb5d664920a -Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.density class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_prefab.php#af5d1a3cc4fffecd94d9cb9eb0096b071 -Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.perlin class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_prefab.php#ac13ae358a063010d424409bdd4f07deb -Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.perlinOffset class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_prefab.php#a1fbb9e62cab7fd185ab7c7db5fb90826 -Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.perlinPower class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_prefab.php#ab56dcdbcdc1e4af829e85fc8e70d909c -Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.perlinScale class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_prefab.php#a0ce47fb8ebeee83a7048fe2b422aa57a -Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.prefab class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_prefab.php#ad6d3141bf24aaf85fa7573865a1934f6 -Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.random class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_prefab.php#a83479daf247dadcf80407207d46d1acc -Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.singleFixed class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_prefab.php#a21f35c2edd650b4a86696c2bd8a1e26f -Pathfinding.Examples.ProceduralWorld.ProceduralTile.ie class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_tile.php#adbb4e8a65ad005c5e52d7f85b4e2fb24 -Pathfinding.Examples.ProceduralWorld.ProceduralTile.rnd class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_tile.php#aed3135be31c8f1e71499433a3fc6a9e6 -Pathfinding.Examples.ProceduralWorld.ProceduralTile.root class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_tile.php#ad6c76e656de413e2772c563a64899e11 -Pathfinding.Examples.ProceduralWorld.ProceduralTile.world class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_tile.php#a59f72998f89320f4abf19a03fea98331 -Pathfinding.Examples.ProceduralWorld.ProceduralTile.x class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_tile.php#a6150e0515f7202e2fb518f7206ed97dc -Pathfinding.Examples.ProceduralWorld.ProceduralTile.z class_pathfinding_1_1_examples_1_1_procedural_world_1_1_procedural_tile.php#a14f94e529dff0b8bfba8e16fbe9755d6 -Pathfinding.Examples.ProceduralWorld.prefabs class_pathfinding_1_1_examples_1_1_procedural_world.php#abb919d3a72098093ff1b9210c019b88b -Pathfinding.Examples.ProceduralWorld.range class_pathfinding_1_1_examples_1_1_procedural_world.php#a037e8e370380046bec287bdc96942091 -Pathfinding.Examples.ProceduralWorld.staticBatching class_pathfinding_1_1_examples_1_1_procedural_world.php#ac1752d3f852c8f38cd4ce3d86f28db34 -Pathfinding.Examples.ProceduralWorld.subTiles class_pathfinding_1_1_examples_1_1_procedural_world.php#a5ed124692928337d0409b6efc216988d -Pathfinding.Examples.ProceduralWorld.target class_pathfinding_1_1_examples_1_1_procedural_world.php#a8a24b37582e07ee23646b165d54fa600 -Pathfinding.Examples.ProceduralWorld.tileSize class_pathfinding_1_1_examples_1_1_procedural_world.php#a5ee62d7b17f2be69cecf5665004cae6b -Pathfinding.Examples.ProceduralWorld.tileGenerationQueue class_pathfinding_1_1_examples_1_1_procedural_world.php#a0b87cb0f5827df5ace759f426fd03400 -Pathfinding.Examples.ProceduralWorld.tiles class_pathfinding_1_1_examples_1_1_procedural_world.php#a5cbdecf620e741ea7c032a8b0499b537 -Pathfinding.Profile.control class_pathfinding_1_1_profile.php#a38a5fff93fa70faa75b8fa0bc27d8550 -Pathfinding.Profile.counter class_pathfinding_1_1_profile.php#a617a47c70795bcff659815ad0efd2266 -Pathfinding.Profile.dontCountFirst class_pathfinding_1_1_profile.php#adde4e5f9e3485b0e5650025fe4c18699 -Pathfinding.Profile.mem class_pathfinding_1_1_profile.php#ad328dd49cb778328e089bcac1800010a -Pathfinding.Profile.PROFILE_MEM class_pathfinding_1_1_profile.php#a650b54a6feff12dffc792f7083d43912 -Pathfinding.Profile.smem class_pathfinding_1_1_profile.php#a67be8a3ddacbc5199db21b2d0ee1c53a -Pathfinding.Profile.watch class_pathfinding_1_1_profile.php#a319c0966928703b3e66dc09276477e5e -Pathfinding.Profile.name class_pathfinding_1_1_profile.php#a87d1e0d4ee90cf07650d73b28707dc50 -Pathfinding.AstarProfiler.ProfilePoint.tmpBytes class_pathfinding_1_1_astar_profiler_1_1_profile_point.php#ab34c1912a503b2d61fe16256a505d24c -Pathfinding.AstarProfiler.ProfilePoint.totalBytes class_pathfinding_1_1_astar_profiler_1_1_profile_point.php#a1f2d4bead755d142efaa0382f5f9ecbe -Pathfinding.AstarProfiler.ProfilePoint.totalCalls class_pathfinding_1_1_astar_profiler_1_1_profile_point.php#a8c4ca6f2d558ed8247697c76ed1cbc94 -Pathfinding.AstarProfiler.ProfilePoint.watch class_pathfinding_1_1_astar_profiler_1_1_profile_point.php#a29a71d99e7e773ed78fb1266b0884443 -Pathfinding.RadiusModifier.detail class_pathfinding_1_1_radius_modifier.php#a3fd57798fe9427faf0975a65a9c99dd9 -Pathfinding.RadiusModifier.radius class_pathfinding_1_1_radius_modifier.php#a5050a760c11da521cd4aee6336f6529f -Pathfinding.RadiusModifier.a1 class_pathfinding_1_1_radius_modifier.php#a25fe862a7d21b207808208412147960c -Pathfinding.RadiusModifier.a2 class_pathfinding_1_1_radius_modifier.php#a0464e803832d636bb4da62dac0dfa430 -Pathfinding.RadiusModifier.dir class_pathfinding_1_1_radius_modifier.php#ae51eb27cf12d2e2b01c81219603bce48 -Pathfinding.RadiusModifier.radi class_pathfinding_1_1_radius_modifier.php#a3bc3d4f1df0131fa8fbda6c7cf8378ac -Pathfinding.RandomPath.aim class_pathfinding_1_1_random_path.php#a57b6877855bbd8474ad8f6767b080f86 -Pathfinding.RandomPath.aimStrength class_pathfinding_1_1_random_path.php#a25d3f5310c16bf938f5a58c993af3411 -Pathfinding.RandomPath.searchLength class_pathfinding_1_1_random_path.php#a250637f250f33ce04aae3258899f615f -Pathfinding.RandomPath.spread class_pathfinding_1_1_random_path.php#a9fcb2da8648b09e9271722def1ad799a -Pathfinding.RandomPath.chosenNodeR class_pathfinding_1_1_random_path.php#a8ed9cde40cd6ebcff44bef6e42b4b969 -Pathfinding.RandomPath.maxGScore class_pathfinding_1_1_random_path.php#a235223a372e44cfb718dca27914b47ff -Pathfinding.RandomPath.maxGScoreNodeR class_pathfinding_1_1_random_path.php#a682d5875f2940b99e028cacc7992f784 -Pathfinding.RandomPath.nodesEvaluatedRep class_pathfinding_1_1_random_path.php#a2c0722345e136d01dbf623cb5eacd30a -Pathfinding.RandomPath.rnd class_pathfinding_1_1_random_path.php#a87e18ab9e2d5e7f3bdb6cbdd12fde5a4 -Pathfinding.Voxels.RasterizationMesh.area class_pathfinding_1_1_voxels_1_1_rasterization_mesh.php#a5008f5aaa9ef50b1510e309dce9205d7 -Pathfinding.Voxels.RasterizationMesh.bounds class_pathfinding_1_1_voxels_1_1_rasterization_mesh.php#a024318f4225ee6bedb20b7f865205d34 -Pathfinding.Voxels.RasterizationMesh.matrix class_pathfinding_1_1_voxels_1_1_rasterization_mesh.php#a0fe016efbd0e96eb5b62f08da732b9f6 -Pathfinding.Voxels.RasterizationMesh.numTriangles class_pathfinding_1_1_voxels_1_1_rasterization_mesh.php#acd88dab8c9a35200dbac2cd2b4bb7292 -Pathfinding.Voxels.RasterizationMesh.numVertices class_pathfinding_1_1_voxels_1_1_rasterization_mesh.php#a29cac0aff7e6d15e55e9a8285799fe87 -Pathfinding.Voxels.RasterizationMesh.original class_pathfinding_1_1_voxels_1_1_rasterization_mesh.php#a17fd53eddf2ac9e1cf315d737dfefb7e -Pathfinding.Voxels.RasterizationMesh.pool class_pathfinding_1_1_voxels_1_1_rasterization_mesh.php#ae10b6b227c568e12c8ff2d9f4b4f41f4 -Pathfinding.Voxels.RasterizationMesh.triangles class_pathfinding_1_1_voxels_1_1_rasterization_mesh.php#afbf5fcf25017d8e3cceb063b6cc5e5e8 -Pathfinding.Voxels.RasterizationMesh.vertices class_pathfinding_1_1_voxels_1_1_rasterization_mesh.php#ac2e0fbef9223747f19ec43dc5f1d00e1 -Pathfinding.RaycastModifier.mask class_pathfinding_1_1_raycast_modifier.php#a427e7d78bb1a767d205d60ef36cdf39c -Pathfinding.RaycastModifier.quality class_pathfinding_1_1_raycast_modifier.php#a5a6a0622932327a01261bd87aee2167c -Pathfinding.RaycastModifier.raycastOffset class_pathfinding_1_1_raycast_modifier.php#a3c47919396d8e18e23de48e648911d5d -Pathfinding.RaycastModifier.thickRaycast class_pathfinding_1_1_raycast_modifier.php#a264d5f661a491686d8841cd329815849 -Pathfinding.RaycastModifier.thickRaycastRadius class_pathfinding_1_1_raycast_modifier.php#a7b422a6984a8c66f6cbd41b73c25bd7d -Pathfinding.RaycastModifier.use2DPhysics class_pathfinding_1_1_raycast_modifier.php#a4d39445c06d4fa2fc07df9e0242aa165 -Pathfinding.RaycastModifier.useGraphRaycasting class_pathfinding_1_1_raycast_modifier.php#a5db8354acde30d29cd963b418a930aac -Pathfinding.RaycastModifier.useRaycasting class_pathfinding_1_1_raycast_modifier.php#a943dd0ecf6a48ed2f7e36a94fd86c6ba -Pathfinding.RaycastModifier.buffer class_pathfinding_1_1_raycast_modifier.php#a3622905ba839b1ffdc8adc9cace6f355 -Pathfinding.RaycastModifier.DPCosts class_pathfinding_1_1_raycast_modifier.php#ade8409d4d0742f260f5fe73fdc96404a -Pathfinding.RaycastModifier.DPParents class_pathfinding_1_1_raycast_modifier.php#aa323289f28cb44978a44c422621aaf65 -Pathfinding.RaycastModifier.iterationsByQuality class_pathfinding_1_1_raycast_modifier.php#aebe4b99c40152eddfecbcbfa429b8164 -Pathfinding.RecastBBTree.root class_pathfinding_1_1_recast_b_b_tree.php#a8fd3e3b10000f2b9181a584af76ffed5 -Pathfinding.RecastBBTreeBox.c1 class_pathfinding_1_1_recast_b_b_tree_box.php#a8d895b1749b9909e1fdb4681f39fddf8 -Pathfinding.RecastBBTreeBox.c2 class_pathfinding_1_1_recast_b_b_tree_box.php#afc5aad52d4f5b15a257fba8e30d6fcff -Pathfinding.RecastBBTreeBox.mesh class_pathfinding_1_1_recast_b_b_tree_box.php#a0d553d57550b06ef6c3a704ddbc15672 -Pathfinding.RecastBBTreeBox.rect class_pathfinding_1_1_recast_b_b_tree_box.php#a2a955ddc316d002f566598f340eb2af9 -Pathfinding.RecastGraph.BorderVertexMask class_pathfinding_1_1_recast_graph.php#a5e4c674eba853eaa95e0dbff33d4bacc -Pathfinding.RecastGraph.BorderVertexOffset class_pathfinding_1_1_recast_graph.php#a34a8c256ed70b7893743822338062631 -Pathfinding.RecastGraph.cellSize class_pathfinding_1_1_recast_graph.php#a648adbc9ff17c47a4a0132d21f8893a5 -Pathfinding.RecastGraph.characterRadius class_pathfinding_1_1_recast_graph.php#a29475ecca6c653d31aad7517043d6fac -Pathfinding.RecastGraph.colliderRasterizeDetail class_pathfinding_1_1_recast_graph.php#a20beabb86c7cfca9626b7d4734d61985 -Pathfinding.RecastGraph.contourMaxError class_pathfinding_1_1_recast_graph.php#a071419560fb5485eddbc73207b9c06c7 -Pathfinding.RecastGraph.editorTileSize class_pathfinding_1_1_recast_graph.php#a878f3fb426b9c4c46a75aa2c6a26815b -Pathfinding.RecastGraph.forcedBoundsCenter class_pathfinding_1_1_recast_graph.php#ac2526d6cf6b8c42a04117ed20d315781 -Pathfinding.RecastGraph.mask class_pathfinding_1_1_recast_graph.php#a427e7d78bb1a767d205d60ef36cdf39c -Pathfinding.RecastGraph.maxEdgeLength class_pathfinding_1_1_recast_graph.php#a443cbf48b32ad4ee2bc5f6130fb9d71c -Pathfinding.RecastGraph.maxSlope class_pathfinding_1_1_recast_graph.php#a1b3ccfcd6d92aafbc9274eaf0e86bff5 -Pathfinding.RecastGraph.minRegionSize class_pathfinding_1_1_recast_graph.php#aa78dab447c9c1fb7ab8131fe780a245f -Pathfinding.RecastGraph.rasterizeColliders class_pathfinding_1_1_recast_graph.php#a0cef459aa55d79296dad08f27d21b6d6 -Pathfinding.RecastGraph.rasterizeMeshes class_pathfinding_1_1_recast_graph.php#a3b502b27d14b78e9e2d59671a95a564a -Pathfinding.RecastGraph.rasterizeTerrain class_pathfinding_1_1_recast_graph.php#a7be241de0cf4c64009d8de6a072e6846 -Pathfinding.RecastGraph.rasterizeTrees class_pathfinding_1_1_recast_graph.php#afc814f81cdfe10da87c620ecd467a89d -Pathfinding.RecastGraph.relevantGraphSurfaceMode class_pathfinding_1_1_recast_graph.php#a6915c7a3bc45a0a4201e8d4919eda9f1 -Pathfinding.RecastGraph.rotation class_pathfinding_1_1_recast_graph.php#aa20f4df5769ec2f2f32b43a05c7dc44c -Pathfinding.RecastGraph.scanEmptyGraph class_pathfinding_1_1_recast_graph.php#a75602e6fbb044ec9e73dc42dacf7f422 -Pathfinding.RecastGraph.tagMask class_pathfinding_1_1_recast_graph.php#a495717a33eb4aff7a4e2d491ee143d48 -Pathfinding.RecastGraph.terrainSampleSize class_pathfinding_1_1_recast_graph.php#acfeb79b5a730b5d909fb213cf8fc9edd -Pathfinding.RecastGraph.tileSizeX class_pathfinding_1_1_recast_graph.php#ae9dfb87a65298f41ba6a9f81cdd2fb4b -Pathfinding.RecastGraph.tileSizeZ class_pathfinding_1_1_recast_graph.php#a2728794dab679dcc8296c55a3bc7ab02 -Pathfinding.RecastGraph.useTiles class_pathfinding_1_1_recast_graph.php#ae767cf05e0923ef7311e002b29bf4740 -Pathfinding.RecastGraph.walkableClimb class_pathfinding_1_1_recast_graph.php#a788c6eff96f12dce2455d1d705e69f76 -Pathfinding.RecastGraph.walkableHeight class_pathfinding_1_1_recast_graph.php#a34d7465b956b21320ce589e06c632286 -Pathfinding.RecastGraph.globalVox class_pathfinding_1_1_recast_graph.php#a2c767f16b578397ebf5806c442f1e9dc -Pathfinding.RecastGraph.stagingTiles class_pathfinding_1_1_recast_graph.php#a17e9428cbde1eebe0b119b1dbfd73122 -Pathfinding.RecastGraphEditor.tagMaskFoldout class_pathfinding_1_1_recast_graph_editor.php#a0a40491cab00fde5f2d2dd3700285275 -Pathfinding.Recast.RecastMeshGatherer.bounds class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer.php#aed82650136385bdafde91640006b4f10 -Pathfinding.Recast.RecastMeshGatherer.capsuleCache class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer.php#afb28019d9fdad265e31919aafc3c3f60 -Pathfinding.Recast.RecastMeshGatherer.colliderRasterizeDetail class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer.php#acc39cdc981cde85796700fa6ed9b42ee -Pathfinding.Recast.RecastMeshGatherer.mask class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer.php#ab4f5225f16051d377f756e8f908caa07 -Pathfinding.Recast.RecastMeshGatherer.tagMask class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer.php#a53bba28fde98ed39628c4b74728f4abd -Pathfinding.Recast.RecastMeshGatherer.terrainSampleSize class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer.php#a85b1c5030ec8f815fe33e613d7cb504f -Pathfinding.Recast.RecastMeshGatherer.BoxColliderTris class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer.php#ac91dbfd68ad95c978810f7509fd4b64d -Pathfinding.Recast.RecastMeshGatherer.BoxColliderVerts class_pathfinding_1_1_recast_1_1_recast_mesh_gatherer.php#a3595b11c1e9abfe941547cb0ea2caa43 -Pathfinding.RecastMeshObj.dynamicMeshObjs class_pathfinding_1_1_recast_mesh_obj.php#ac9523d380317b7384fd8a0ab969d5c70 -Pathfinding.RecastMeshObj.tree class_pathfinding_1_1_recast_mesh_obj.php#a932527596fedab2076fac6505b384e61 -Pathfinding.RecastMeshObj.area class_pathfinding_1_1_recast_mesh_obj.php#a5008f5aaa9ef50b1510e309dce9205d7 -Pathfinding.RecastMeshObj.bounds class_pathfinding_1_1_recast_mesh_obj.php#a024318f4225ee6bedb20b7f865205d34 -Pathfinding.RecastMeshObj.dynamic class_pathfinding_1_1_recast_mesh_obj.php#a8fcad9320dc8957d766ebf5a5293450e -Pathfinding.RecastMeshObj._dynamic class_pathfinding_1_1_recast_mesh_obj.php#ab3b8ad2c84019a6648361464c80b9fbb -Pathfinding.RecastMeshObj.registered class_pathfinding_1_1_recast_mesh_obj.php#a32f2643fcbe23cdff8e2da2214c6404a -Pathfinding.RecastMeshObjEditor.areaProp class_pathfinding_1_1_recast_mesh_obj_editor.php#a3db47255c63c4ff64c2d1fd20e0b57ac -Pathfinding.RecastMeshObjEditor.dynamicProp class_pathfinding_1_1_recast_mesh_obj_editor.php#a818305fdb17dc109fd824b70d8e9c4fe -Pathfinding.RecastTileUpdateHandler.anyDirtyTiles class_pathfinding_1_1_recast_tile_update_handler.php#aceeff0b42a0cbf06a4fdf1ea9777383f -Pathfinding.RecastTileUpdateHandler.dirtyTiles class_pathfinding_1_1_recast_tile_update_handler.php#a40cbd234daf36fd79cf4020ffbe0c666 -Pathfinding.RecastTileUpdateHandler.earliestDirty class_pathfinding_1_1_recast_tile_update_handler.php#a28421625f7ee338a9646ce777ce6b384 -Pathfinding.RecastTileUpdateHandler.graph class_pathfinding_1_1_recast_tile_update_handler.php#a0d00de21a459d2b5b737a45d42c917fd -Pathfinding.RecastTileUpdateHandler.maxThrottlingDelay class_pathfinding_1_1_recast_tile_update_handler.php#a8f143ec85b4b5b0fc9243574796879f7 -Pathfinding.RelevantGraphSurface.root class_pathfinding_1_1_relevant_graph_surface.php#a484907efdb7418ec7b1f6c12bc591749 -Pathfinding.RelevantGraphSurface.maxRange class_pathfinding_1_1_relevant_graph_surface.php#a2480d51e0cbf660947250cc46cd8bcc2 -Pathfinding.RelevantGraphSurface.next class_pathfinding_1_1_relevant_graph_surface.php#a560fcbaae8d28d187afac5d3594be65b -Pathfinding.RelevantGraphSurface.position class_pathfinding_1_1_relevant_graph_surface.php#acfb76c74e507fea066625f69fbc8a146 -Pathfinding.RelevantGraphSurface.prev class_pathfinding_1_1_relevant_graph_surface.php#a61ae703f95c22a445eeb22691fc89fab -Pathfinding.Util.RetainedGizmos.cachedMeshes class_pathfinding_1_1_util_1_1_retained_gizmos.php#a6b7d2aad658470b3e1e17cf14647782c -Pathfinding.Util.RetainedGizmos.existingHashes class_pathfinding_1_1_util_1_1_retained_gizmos.php#a45eca2ec10d403f95f781ea900680352 -Pathfinding.Util.RetainedGizmos.meshes class_pathfinding_1_1_util_1_1_retained_gizmos.php#a8305cd37d948273f4d0111c7dfc10b1f -Pathfinding.Util.RetainedGizmos.usedHashes class_pathfinding_1_1_util_1_1_retained_gizmos.php#a9abf583cc502eb8e63ecc8c13016808d -Pathfinding.Util.RetainedGizmos.lineMaterial class_pathfinding_1_1_util_1_1_retained_gizmos.php#aaa08094ba11ede9f1979e5156c8ab636 -Pathfinding.Util.RetainedGizmos.surfaceMaterial class_pathfinding_1_1_util_1_1_retained_gizmos.php#a2af83ea5a4c566440f348fa45e63e2f8 -Pathfinding.RichAI.acceleration class_pathfinding_1_1_rich_a_i.php#a97712bccaedef08f6d8c525bdda2f7ef -Pathfinding.RichAI.endReachedDistance class_pathfinding_1_1_rich_a_i.php#a63c4a3553ed94104f2e984d54cf7dfdb -Pathfinding.RichAI.funnelSimplification class_pathfinding_1_1_rich_a_i.php#a4f6367764c6f371a655390e73d5cfac5 -Pathfinding.RichAI.onTraverseOffMeshLink class_pathfinding_1_1_rich_a_i.php#a406352a6742cd9aed3c52528efd46204 -Pathfinding.RichAI.rotationSpeed class_pathfinding_1_1_rich_a_i.php#a36389ec100eb0f432833a0512e25d4a6 -Pathfinding.RichAI.slowdownTime class_pathfinding_1_1_rich_a_i.php#aecbcabc833f8e639f18abf003580e8f3 -Pathfinding.RichAI.slowWhenNotFacingTarget class_pathfinding_1_1_rich_a_i.php#ac9e8f32656bc67bf5d8dff4a82661932 -Pathfinding.RichAI.wallDist class_pathfinding_1_1_rich_a_i.php#a8ba69c16be8228f284f78876d20d2717 -Pathfinding.RichAI.wallForce class_pathfinding_1_1_rich_a_i.php#a5dbca342fc45ab5581927cdf37f792fa -Pathfinding.RichAI.delayUpdatePath class_pathfinding_1_1_rich_a_i.php#a2b28b4abc55811ce8bb78ef10f478e02 -Pathfinding.RichAI.distanceToSteeringTarget class_pathfinding_1_1_rich_a_i.php#a6e0e1e430cb464bf8deff2304c58945e -Pathfinding.RichAI.lastCorner class_pathfinding_1_1_rich_a_i.php#af92990336503d3bef3df05737c248c2e -Pathfinding.RichAI.nextCorners class_pathfinding_1_1_rich_a_i.php#a56a7234db14075a2e59ef432de5929ad -Pathfinding.RichAI.richPath class_pathfinding_1_1_rich_a_i.php#ad591efb57cbe27f7e3c864a5819e55d4 -Pathfinding.RichAI.wallBuffer class_pathfinding_1_1_rich_a_i.php#a780d9dbb783f0ee1a3a6c19af07435a0 -Pathfinding.RichAI.GizmoColorPath class_pathfinding_1_1_rich_a_i.php#a23d4f78ce0141f007749db69f4f1504a -Pathfinding.RichAI.animCompatibility class_pathfinding_1_1_rich_a_i.php#a41baa2e05cfa308ee937a46df0ccaa5f -Pathfinding.RichFunnel.checkForDestroyedNodesCounter class_pathfinding_1_1_rich_funnel.php#a7fe0de22fed60f854f74eb732cbcb9ef -Pathfinding.RichFunnel.currentNode class_pathfinding_1_1_rich_funnel.php#a54b2f7a59e0763596c134873ce522477 -Pathfinding.RichFunnel.currentPosition class_pathfinding_1_1_rich_funnel.php#a68ee8694a165cda8ba883128a7f62cb2 -Pathfinding.RichFunnel.graph class_pathfinding_1_1_rich_funnel.php#adcc25dabc06c3cbda7e5c2738718b755 -Pathfinding.RichFunnel.left class_pathfinding_1_1_rich_funnel.php#af020db886182bceda71a86c647d2c649 -Pathfinding.RichFunnel.nodes class_pathfinding_1_1_rich_funnel.php#ab339d7c8316f5fd2807a10c3a1cbe0fd -Pathfinding.RichFunnel.path class_pathfinding_1_1_rich_funnel.php#a296ff741e1fc6c03497fb75ab8df8872 -Pathfinding.RichFunnel.right class_pathfinding_1_1_rich_funnel.php#adf6774ce99b4b820eb6e487daf68bef2 -Pathfinding.RichFunnel.triBuffer class_pathfinding_1_1_rich_funnel.php#abe54217d5cc2e38ec08ddd792d979ebd -Pathfinding.RichFunnel.exactEnd class_pathfinding_1_1_rich_funnel.php#a38cb0d345f69df54a0bd024666c67c58 -Pathfinding.RichFunnel.exactStart class_pathfinding_1_1_rich_funnel.php#a9dc00cc635c1318fbd2b4793e4620542 -Pathfinding.RichFunnel.funnelSimplification class_pathfinding_1_1_rich_funnel.php#a4f6367764c6f371a655390e73d5cfac5 -Pathfinding.RichFunnel.navmeshClampDict class_pathfinding_1_1_rich_funnel.php#aa036d81acbbf42c980d00230cf195631 -Pathfinding.RichFunnel.navmeshClampList class_pathfinding_1_1_rich_funnel.php#a929b40a1e6ac797e39c2f0a0c8b7eec4 -Pathfinding.RichFunnel.navmeshClampQueue class_pathfinding_1_1_rich_funnel.php#a7f6137e53713049bfb4afeb69b8e2938 -Pathfinding.RichPath.currentPart class_pathfinding_1_1_rich_path.php#ae45342f783acf16d3a422dc9564138d3 -Pathfinding.RichPath.parts class_pathfinding_1_1_rich_path.php#ac9f9ad600ead230bb834930bac80b838 -Pathfinding.RichPath.seeker class_pathfinding_1_1_rich_path.php#a2cc99ba55c7911c446051a8d9c7afdbb -Pathfinding.RichPath.transform class_pathfinding_1_1_rich_path.php#a0c6b47ed4c93491cd67001a42b4d8918 -Pathfinding.RichSpecial.first class_pathfinding_1_1_rich_special.php#a4b907cbcd5fca8c7ffecf2659f78cb85 -Pathfinding.RichSpecial.nodeLink class_pathfinding_1_1_rich_special.php#a9be86660c0a134674cbbf82890640019 -Pathfinding.RichSpecial.reverse class_pathfinding_1_1_rich_special.php#a455cbdac659b075dec33e2da705aaa20 -Pathfinding.RichSpecial.second class_pathfinding_1_1_rich_special.php#af16b596e770b1afdeca61e31fcc91141 -Pathfinding.Util.GridLookup.Root.next class_pathfinding_1_1_util_1_1_grid_lookup_1_1_root.php#ab411ba12449eb0c9b2abcfd87ca936c1 -Pathfinding.Util.GridLookup.Root.obj class_pathfinding_1_1_util_1_1_grid_lookup_1_1_root.php#a456f81687ab23bfa518d25165d688aa4 -Pathfinding.Util.GridLookup.Root.flag class_pathfinding_1_1_util_1_1_grid_lookup_1_1_root.php#a8b3ab54ed3e81c69863d65e4e6c424a0 -Pathfinding.Util.GridLookup.Root.items class_pathfinding_1_1_util_1_1_grid_lookup_1_1_root.php#a246d8f9c92eb288cc8e51ea0437b5196 -Pathfinding.Util.GridLookup.Root.prev class_pathfinding_1_1_util_1_1_grid_lookup_1_1_root.php#ad7b7f3de721d253ebeeb5b4f6d6e4229 -Pathfinding.Util.GridLookup.Root.previousBounds class_pathfinding_1_1_util_1_1_grid_lookup_1_1_root.php#adeb0a48fbab9c2fe5c217ddd3b9c3015 -Pathfinding.Examples.RVOAgentPlacer.agents class_pathfinding_1_1_examples_1_1_r_v_o_agent_placer.php#a0b8d95250c3211adb5d1574728478ccc -Pathfinding.Examples.RVOAgentPlacer.goalOffset class_pathfinding_1_1_examples_1_1_r_v_o_agent_placer.php#a1f1a559f124f6a8a29b9492035851c3b -Pathfinding.Examples.RVOAgentPlacer.mask class_pathfinding_1_1_examples_1_1_r_v_o_agent_placer.php#a427e7d78bb1a767d205d60ef36cdf39c -Pathfinding.Examples.RVOAgentPlacer.prefab class_pathfinding_1_1_examples_1_1_r_v_o_agent_placer.php#ad6d3141bf24aaf85fa7573865a1934f6 -Pathfinding.Examples.RVOAgentPlacer.repathRate class_pathfinding_1_1_examples_1_1_r_v_o_agent_placer.php#a19f304392630a404236b0df6896bca75 -Pathfinding.Examples.RVOAgentPlacer.ringSize class_pathfinding_1_1_examples_1_1_r_v_o_agent_placer.php#a70a0472d5a2686ba0767b6dcd9ded65c -Pathfinding.Examples.RVOAgentPlacer.rad2Deg class_pathfinding_1_1_examples_1_1_r_v_o_agent_placer.php#a1afd74c1b3a69010a437fdc30c9eb551 -Pathfinding.RVO.RVOController.agentTimeHorizon class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#aae87304c6923138c031ff9918dd3a997 -Pathfinding.RVO.RVOController.center class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#ac4dbc52a5b4df83645a34fcaebd36523 -Pathfinding.RVO.RVOController.collidesWith class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#a16d7780623f31c8671b911426a455509 -Pathfinding.RVO.RVOController.debug class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#a398527b3e9e358c345c5047b16871957 -Pathfinding.RVO.RVOController.height class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#a48083b65ac9a863566dc3e3fff09a5b4 -Pathfinding.RVO.RVOController.layer class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#a4338870e6579f71d5c457d9979986c98 -Pathfinding.RVO.RVOController.locked class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#a18a0f1e6c3d21c252b14ea6ae162e2ff -Pathfinding.RVO.RVOController.lockWhenNotMoving class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#adbe892c4e69684195e59e94e26e81955 -Pathfinding.RVO.RVOController.maxNeighbours class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#afc4894bb6cdea8cdd3fb808617a6783a -Pathfinding.RVO.RVOController.obstacleTimeHorizon class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#aaae09db88e3bf152d9ad44de274b7a5c -Pathfinding.RVO.RVOController.priority class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#ab4ad87b08386d7796fdf419a5b97ac99 -Pathfinding.RVO.RVOController.radius class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#a5050a760c11da521cd4aee6336f6529f -Pathfinding.RVO.RVOController.wallAvoidFalloff class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#a22fc59dabeaac4f7871b3e2febf74e40 -Pathfinding.RVO.RVOController.wallAvoidForce class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#a5af21745e7218f039c24188d13082ede -Pathfinding.RVO.RVOController.ai class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#aefe9b5dad4b144f8fe19b0f1da2a0adc -Pathfinding.RVO.RVOController.tr class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#a79a17507a0e6ad3b0345e0397a4a038f -Pathfinding.RVO.RVOController.GizmoColor class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php#aefb8168acb75f1973913a7f240f07d0b -Pathfinding.Examples.RVOExampleAgent.groundMask class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#afe87c68088b94d186ce119183b56eb2a -Pathfinding.Examples.RVOExampleAgent.maxSpeed class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#a3c105180f93a78cf3fb0903df278cf3f -Pathfinding.Examples.RVOExampleAgent.moveNextDist class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#af818134d833d5897d4348f33db0a5fcf -Pathfinding.Examples.RVOExampleAgent.repathRate class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#a19f304392630a404236b0df6896bca75 -Pathfinding.Examples.RVOExampleAgent.slowdownDistance class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#ad4085752f25fa164f6c1635acaf7274e -Pathfinding.Examples.RVOExampleAgent.canSearchAgain class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#a1c875f5c4bee119b38ce33fcbed55697 -Pathfinding.Examples.RVOExampleAgent.controller class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#a9e04c8b0eeb945d701acfe602b6600ff -Pathfinding.Examples.RVOExampleAgent.nextRepath class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#a9a9981da1612ab5479b8b3685cab1c0c -Pathfinding.Examples.RVOExampleAgent.path class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#aea4bb978a006652d3ff42b927337913d -Pathfinding.Examples.RVOExampleAgent.rends class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#afb174e4bc0a7e3c4b1e7fd1e8cb5e442 -Pathfinding.Examples.RVOExampleAgent.seeker class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#a2cc99ba55c7911c446051a8d9c7afdbb -Pathfinding.Examples.RVOExampleAgent.target class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#adddf24b586733a0e184dda7aaca58eea -Pathfinding.Examples.RVOExampleAgent.vectorPath class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#a606d877ec5788bbbf53311a2dff80ffd -Pathfinding.Examples.RVOExampleAgent.wp class_pathfinding_1_1_examples_1_1_r_v_o_example_agent.php#af203f5ddbac4a47afed1a07b97e7e477 -Pathfinding.RVO.RVONavmesh.wallHeight class_pathfinding_1_1_r_v_o_1_1_r_v_o_navmesh.php#ae9d8481a1d11d48d462f78ab140bed39 -Pathfinding.RVO.RVONavmesh.lastSim class_pathfinding_1_1_r_v_o_1_1_r_v_o_navmesh.php#a528680a2147ae5f0f0cd3148f453d0e7 -Pathfinding.RVO.RVONavmesh.obstacles class_pathfinding_1_1_r_v_o_1_1_r_v_o_navmesh.php#a0923f7e5427715958e8421747bde6142 -Pathfinding.RVO.RVOObstacle.layer class_pathfinding_1_1_r_v_o_1_1_r_v_o_obstacle.php#a4338870e6579f71d5c457d9979986c98 -Pathfinding.RVO.RVOObstacle.obstacleMode class_pathfinding_1_1_r_v_o_1_1_r_v_o_obstacle.php#accf6b4b41c52c247740485d2822a31d2 -Pathfinding.RVO.RVOObstacle.sim class_pathfinding_1_1_r_v_o_1_1_r_v_o_obstacle.php#add5f6cfafe4f43c8da15040c62eb4282 -Pathfinding.RVO.RVOObstacle._obstacleMode class_pathfinding_1_1_r_v_o_1_1_r_v_o_obstacle.php#a93b417f564a308bab89cc9dc55cb9f35 -Pathfinding.RVO.RVOObstacle.addedObstacles class_pathfinding_1_1_r_v_o_1_1_r_v_o_obstacle.php#ac24b9438fee6ae72eea8d5104084580c -Pathfinding.RVO.RVOObstacle.gizmoDrawing class_pathfinding_1_1_r_v_o_1_1_r_v_o_obstacle.php#ab1424181a47a77566d6e110b58b0d9b3 -Pathfinding.RVO.RVOObstacle.gizmoVerts class_pathfinding_1_1_r_v_o_1_1_r_v_o_obstacle.php#a1fd843e942b4a6179676e4a9e243d1d8 -Pathfinding.RVO.RVOObstacle.prevUpdateMatrix class_pathfinding_1_1_r_v_o_1_1_r_v_o_obstacle.php#ade886b377b761d5323f87d414ea87927 -Pathfinding.RVO.RVOObstacle.sourceObstacles class_pathfinding_1_1_r_v_o_1_1_r_v_o_obstacle.php#a26c82c1a134c3d0e3d0c221406870011 -Pathfinding.RVO.RVOQuadtree.bounds class_pathfinding_1_1_r_v_o_1_1_r_v_o_quadtree.php#ad2c89b26edc32bf859fcd68c3e813dfa -Pathfinding.RVO.RVOQuadtree.filledNodes class_pathfinding_1_1_r_v_o_1_1_r_v_o_quadtree.php#a6162c31ff6bd67d778bbe29edd1e3bb2 -Pathfinding.RVO.RVOQuadtree.LeafSize class_pathfinding_1_1_r_v_o_1_1_r_v_o_quadtree.php#a288eed20a8b543b259fa0ace5f727db0 -Pathfinding.RVO.RVOQuadtree.maxRadius class_pathfinding_1_1_r_v_o_1_1_r_v_o_quadtree.php#a0ee7a190e2cf2a6da0e8afcc251e2cd6 -Pathfinding.RVO.RVOQuadtree.nodes class_pathfinding_1_1_r_v_o_1_1_r_v_o_quadtree.php#a0d99eea71577fa4549c2bd6e32151150 -Pathfinding.RVO.RVOSimulator.desiredSimulationFPS class_pathfinding_1_1_r_v_o_1_1_r_v_o_simulator.php#aa296bb825df5226368bad88540ec9260 -Pathfinding.RVO.RVOSimulator.doubleBuffering class_pathfinding_1_1_r_v_o_1_1_r_v_o_simulator.php#adc771316bbe23d8efae1bf56fd54058d -Pathfinding.RVO.RVOSimulator.drawObstacles class_pathfinding_1_1_r_v_o_1_1_r_v_o_simulator.php#aea16cfe1ee9cddff0db72379298baeab -Pathfinding.RVO.RVOSimulator.movementPlane class_pathfinding_1_1_r_v_o_1_1_r_v_o_simulator.php#a262681338f061dd5bb9d334184d9bfbd -Pathfinding.RVO.RVOSimulator.symmetryBreakingBias class_pathfinding_1_1_r_v_o_1_1_r_v_o_simulator.php#aa326b0710006358bad660c83be066eed -Pathfinding.RVO.RVOSimulator.workerThreads class_pathfinding_1_1_r_v_o_1_1_r_v_o_simulator.php#a33572976da97cb5c57a5460c9014ccad -Pathfinding.RVO.RVOSimulator.simulator class_pathfinding_1_1_r_v_o_1_1_r_v_o_simulator.php#a23919aaa4707ef1b2f6ec52c18fd96a9 -Pathfinding.RVO.RVOSquareObstacle.center class_pathfinding_1_1_r_v_o_1_1_r_v_o_square_obstacle.php#abb5a6f19c1748a564433c091109705c7 -Pathfinding.RVO.RVOSquareObstacle.height class_pathfinding_1_1_r_v_o_1_1_r_v_o_square_obstacle.php#a48083b65ac9a863566dc3e3fff09a5b4 -Pathfinding.RVO.RVOSquareObstacle.size class_pathfinding_1_1_r_v_o_1_1_r_v_o_square_obstacle.php#aef1d073726fc4b857570fbae3230b8dd -Pathfinding.Seeker.detailedGizmos class_pathfinding_1_1_seeker.php#a6d955e835676eeaaf740aba5bce9ea20 -Pathfinding.Seeker.drawGizmos class_pathfinding_1_1_seeker.php#ae9c11225f455a44cd7086edfb44f1dda -Pathfinding.Seeker.graphMask class_pathfinding_1_1_seeker.php#a63a785ae519f012d295916dd9969170c -Pathfinding.Seeker.pathCallback class_pathfinding_1_1_seeker.php#a383261cc8819e862d886b3e2da32d858 -Pathfinding.Seeker.postProcessPath class_pathfinding_1_1_seeker.php#ac186b21b87d4b471ac2c41e2a12c074f -Pathfinding.Seeker.preProcessPath class_pathfinding_1_1_seeker.php#adfd4b1ece4a7616d35afb84a118c5ef4 -Pathfinding.Seeker.startEndModifier class_pathfinding_1_1_seeker.php#a1f96173d92cee30b9eb602fc27dc49bb -Pathfinding.Seeker.tagPenalties class_pathfinding_1_1_seeker.php#ab2deda12dc8cad2e4263b8d051ca92f9 -Pathfinding.Seeker.traversableTags class_pathfinding_1_1_seeker.php#afe7655131e00d505190c11661dca2595 -Pathfinding.Seeker.lastCompletedNodePath class_pathfinding_1_1_seeker.php#a2a3a3eb9902cb288fabbb1f3090ebf04 -Pathfinding.Seeker.lastCompletedVectorPath class_pathfinding_1_1_seeker.php#a00b26172e06225bd44f7612d60a64e4e -Pathfinding.Seeker.modifiers class_pathfinding_1_1_seeker.php#a55c0bc643ba19c2dcbd42b453ec1d228 -Pathfinding.Seeker.onPartialPathDelegate class_pathfinding_1_1_seeker.php#afdfbff4503337b24cc2a005047dd11a1 -Pathfinding.Seeker.onPathDelegate class_pathfinding_1_1_seeker.php#ad9769280310baf46a19ebdc4fff8c08a -Pathfinding.Seeker.prevPath class_pathfinding_1_1_seeker.php#a3c77cdf6e06fc1162ac9c21861f52969 -Pathfinding.Seeker.tmpPathCallback class_pathfinding_1_1_seeker.php#a181e0f9b53d60faf0e13bc41634d8bc3 -Pathfinding.Seeker.lastPathID class_pathfinding_1_1_seeker.php#a45b81576f1c3de4e745d855d7bbba188 -Pathfinding.Seeker.path class_pathfinding_1_1_seeker.php#aea4bb978a006652d3ff42b927337913d -Pathfinding.SeekerEditor.scripts class_pathfinding_1_1_seeker_editor.php#af76d74ebd6d92e431391d9f05406166d -Pathfinding.SeekerEditor.tagPenaltiesOpen class_pathfinding_1_1_seeker_editor.php#a8494393847e92dd506e68e37c4457b7e -Pathfinding.SeekerEditor.exactnessLabels class_pathfinding_1_1_seeker_editor.php#a451b760043656aac9f98e2d2a525945e -Pathfinding.SeekerEditor.graphLabels class_pathfinding_1_1_seeker_editor.php#a563b7819be07638b64b8fa0240b2111f -Pathfinding.Serialization.SerializeSettings.editorSettings class_pathfinding_1_1_serialization_1_1_serialize_settings.php#ae29f63db1c318d6a9254aade4d448573 -Pathfinding.Serialization.SerializeSettings.nodes class_pathfinding_1_1_serialization_1_1_serialize_settings.php#adc562a34662e9e15ae85b8d7700080c0 -Pathfinding.Serialization.SerializeSettings.prettyPrint class_pathfinding_1_1_serialization_1_1_serialize_settings.php#a769fe825232d88f6aa785c79fe7eb316 -Pathfinding.SimpleSmoothModifier.bezierTangentLength class_pathfinding_1_1_simple_smooth_modifier.php#a73d0fce889a3d79f226b208fb0e0453c -Pathfinding.SimpleSmoothModifier.factor class_pathfinding_1_1_simple_smooth_modifier.php#a323c112c11500270be91b7cb353826bd -Pathfinding.SimpleSmoothModifier.iterations class_pathfinding_1_1_simple_smooth_modifier.php#a1d10e252e778731e59f0f71afd7e727e -Pathfinding.SimpleSmoothModifier.maxSegmentLength class_pathfinding_1_1_simple_smooth_modifier.php#a37144e0d96324f65a77c836ed3d0265a -Pathfinding.SimpleSmoothModifier.offset class_pathfinding_1_1_simple_smooth_modifier.php#a3e60b3c561be982d7c8e23f14c01fd5b -Pathfinding.SimpleSmoothModifier.smoothType class_pathfinding_1_1_simple_smooth_modifier.php#acbe858640b2915f374ba329cd015d636 -Pathfinding.SimpleSmoothModifier.strength class_pathfinding_1_1_simple_smooth_modifier.php#a2c1c8f9331368f38bfc3eaee260b59a6 -Pathfinding.SimpleSmoothModifier.subdivisions class_pathfinding_1_1_simple_smooth_modifier.php#a81524b053be5dc3b6d0a187aea6c0ac4 -Pathfinding.SimpleSmoothModifier.uniformLength class_pathfinding_1_1_simple_smooth_modifier.php#a51081f69b5201d301b573c328dc3ab2d -Pathfinding.RVO.Simulator.agents class_pathfinding_1_1_r_v_o_1_1_simulator.php#afee597c35b365be997cd3849dd212685 -Pathfinding.RVO.Simulator.coroutineWorkerContext class_pathfinding_1_1_r_v_o_1_1_simulator.php#a002eaf681e4f629b59a827c0940c43e4 -Pathfinding.RVO.Simulator.deltaTime class_pathfinding_1_1_r_v_o_1_1_simulator.php#a1a61318ed6aa02b4ff346e7eb8f68891 -Pathfinding.RVO.Simulator.desiredDeltaTime class_pathfinding_1_1_r_v_o_1_1_simulator.php#a98694177a30cd4e1c1597ca7602de282 -Pathfinding.RVO.Simulator.doCleanObstacles class_pathfinding_1_1_r_v_o_1_1_simulator.php#a2698646c8e8d90dc49f365414b7985a8 -Pathfinding.RVO.Simulator.doubleBuffering class_pathfinding_1_1_r_v_o_1_1_simulator.php#a96b80a83b21dea6438fd5d7d72298163 -Pathfinding.RVO.Simulator.doUpdateObstacles class_pathfinding_1_1_r_v_o_1_1_simulator.php#a4c773b660c3989e70df6685778f02f06 -Pathfinding.RVO.Simulator.lastStep class_pathfinding_1_1_r_v_o_1_1_simulator.php#a17c7ea4a4bc7c296531f5b834ae9f7bf -Pathfinding.RVO.Simulator.workers class_pathfinding_1_1_r_v_o_1_1_simulator.php#a7801986d82c1cd3b743dea2cb336140a -Pathfinding.RVO.Simulator.movementPlane class_pathfinding_1_1_r_v_o_1_1_simulator.php#ac42035bcb056bb35bda696c4b7179b4d -Pathfinding.RVO.Simulator.obstacles class_pathfinding_1_1_r_v_o_1_1_simulator.php#aa913b435c2cdde6b9871be474e7f91b1 -Pathfinding.RVO.Simulator.symmetryBreakingBias class_pathfinding_1_1_r_v_o_1_1_simulator.php#aa326b0710006358bad660c83be066eed -Pathfinding.SingleNodeBlocker.manager class_pathfinding_1_1_single_node_blocker.php#ae6003c322ca2cdf887fdc4b4cd37ee32 -Pathfinding.Util.StackPool.pool class_pathfinding_1_1_util_1_1_stack_pool.php#a7f65538538ac787818a45d74f24ed81e -Pathfinding.StartEndModifier.addPoints class_pathfinding_1_1_start_end_modifier.php#a340a7b949dee6e720659158f8399ce0b -Pathfinding.StartEndModifier.adjustStartPoint class_pathfinding_1_1_start_end_modifier.php#a001f12496a5e7aa0e34759a13fba17cb -Pathfinding.StartEndModifier.exactEndPoint class_pathfinding_1_1_start_end_modifier.php#a54be0d402bdec3bd6771e0e5bd262509 -Pathfinding.StartEndModifier.exactStartPoint class_pathfinding_1_1_start_end_modifier.php#a3b84892b329e3bdb5bd797af175c9704 -Pathfinding.StartEndModifier.mask class_pathfinding_1_1_start_end_modifier.php#a427e7d78bb1a767d205d60ef36cdf39c -Pathfinding.StartEndModifier.useGraphRaycasting class_pathfinding_1_1_start_end_modifier.php#a5db8354acde30d29cd963b418a930aac -Pathfinding.StartEndModifier.useRaycasting class_pathfinding_1_1_start_end_modifier.php#a943dd0ecf6a48ed2f7e36a94fd86c6ba -Pathfinding.StartEndModifier.connectionBuffer class_pathfinding_1_1_start_end_modifier.php#ab9ee1513917bfaca363c12a01bcdbd3d -Pathfinding.StartEndModifier.connectionBufferAddDelegate class_pathfinding_1_1_start_end_modifier.php#a1523564e2136d552c9ab0490355bc586 -Pathfinding.TargetMover.mask class_pathfinding_1_1_target_mover.php#a427e7d78bb1a767d205d60ef36cdf39c -Pathfinding.TargetMover.onlyOnDoubleClick class_pathfinding_1_1_target_mover.php#ae044ddd67fbce65af8c3f28aa973fc7c -Pathfinding.TargetMover.target class_pathfinding_1_1_target_mover.php#a8a24b37582e07ee23646b165d54fa600 -Pathfinding.TargetMover.use2D class_pathfinding_1_1_target_mover.php#a49ba648379789fb002460095e1c468a6 -Pathfinding.TargetMover.ais class_pathfinding_1_1_target_mover.php#a258384a2b562495f51cc5aebb9e77a0c -Pathfinding.TargetMover.cam class_pathfinding_1_1_target_mover.php#a3b23650c3f80b53cee3a2c471797c732 -Pathfinding.GridGraph.TextureData.channels class_pathfinding_1_1_grid_graph_1_1_texture_data.php#a06cbd24c43fc4de9d86b703da20efdd6 -Pathfinding.GridGraph.TextureData.enabled class_pathfinding_1_1_grid_graph_1_1_texture_data.php#a8740ba80e30dd75e71d09fa1dcf04f3d -Pathfinding.GridGraph.TextureData.factors class_pathfinding_1_1_grid_graph_1_1_texture_data.php#a2b02914c2efd730667a5e1a003485a18 -Pathfinding.GridGraph.TextureData.source class_pathfinding_1_1_grid_graph_1_1_texture_data.php#acdf46f02aad8698305aba74017c34eef -Pathfinding.GridGraph.TextureData.data class_pathfinding_1_1_grid_graph_1_1_texture_data.php#ac739c635828e1817862e972f9549e072 -Pathfinding.ThreadControlQueue.block class_pathfinding_1_1_thread_control_queue.php#aad19b4364ed1ee24b6f81b49583573dd -Pathfinding.ThreadControlQueue.blocked class_pathfinding_1_1_thread_control_queue.php#adf1dca7698b030895e9d81fc14cd9fd8 -Pathfinding.ThreadControlQueue.blockedReceivers class_pathfinding_1_1_thread_control_queue.php#a09b793dde958ece100c03ad47c21a51c -Pathfinding.ThreadControlQueue.head class_pathfinding_1_1_thread_control_queue.php#a2d33912acc757b02cd97bdbc22be2f23 -Pathfinding.ThreadControlQueue.lockObj class_pathfinding_1_1_thread_control_queue.php#a1c1088f6b97d66c811fc93496c586e9c -Pathfinding.ThreadControlQueue.numReceivers class_pathfinding_1_1_thread_control_queue.php#a34a5b7d0c7c5c6fa71f4be5d095dca14 -Pathfinding.ThreadControlQueue.starving class_pathfinding_1_1_thread_control_queue.php#a9ce6bd188b72687b00874253f596d6b2 -Pathfinding.ThreadControlQueue.tail class_pathfinding_1_1_thread_control_queue.php#aa3bfa92489dc4cd161caaea9fbfdef5f -Pathfinding.ThreadControlQueue.terminate class_pathfinding_1_1_thread_control_queue.php#a74995b2493f23c9103413e37da5cdc38 -Pathfinding.Util.TileHandler.cuts class_pathfinding_1_1_util_1_1_tile_handler.php#a43e0108597091756bea122daa3dd3053 -Pathfinding.Util.TileHandler.graph class_pathfinding_1_1_util_1_1_tile_handler.php#a36f7ad371ffb099d01f0c60f8970f2f9 -Pathfinding.Util.TileHandler.activeTileOffsets class_pathfinding_1_1_util_1_1_tile_handler.php#ac85ce8ded5fa48367e2337f193da2d86 -Pathfinding.Util.TileHandler.activeTileRotations class_pathfinding_1_1_util_1_1_tile_handler.php#a15aec13eb5b7735cc01dc7e828d74237 -Pathfinding.Util.TileHandler.activeTileTypes class_pathfinding_1_1_util_1_1_tile_handler.php#ac5f13b5a89d03ae25b9105d8c2f5ce81 -Pathfinding.Util.TileHandler.cached_Int2_int_dict class_pathfinding_1_1_util_1_1_tile_handler.php#adeca4f6eff215d3d1aaef2e0e7fe8f78 -Pathfinding.Util.TileHandler.clipper class_pathfinding_1_1_util_1_1_tile_handler.php#a3fdaf2fa4c163730cace57f58465d0a0 -Pathfinding.Util.TileHandler.isBatching class_pathfinding_1_1_util_1_1_tile_handler.php#abfafd6e9acd7b0afe29b3e9a92584a2e -Pathfinding.Util.TileHandler.reloadedInBatch class_pathfinding_1_1_util_1_1_tile_handler.php#a28e781613b8821a7a478a1d57f728140 -Pathfinding.Util.TileHandler.simpleClipper class_pathfinding_1_1_util_1_1_tile_handler.php#ab0a1527667e2b2b9a8007f81027bc5f3 -Pathfinding.Util.TileHandler.tileXCount class_pathfinding_1_1_util_1_1_tile_handler.php#af1d7feaecb16fa622f30a189174de94b -Pathfinding.Util.TileHandler.tileZCount class_pathfinding_1_1_util_1_1_tile_handler.php#a39c8c3dce9642850c6cd4cbea1a3e767 -Pathfinding.TileHandlerHelper.forcedReloadRects class_pathfinding_1_1_tile_handler_helper.php#a648d572a70ebd30810757aeb12faafc1 -Pathfinding.TileHandlerHelper.handler class_pathfinding_1_1_tile_handler_helper.php#a814f7206954d9f3d8a34a6b69407fa9f -Pathfinding.TileHandlerHelper.lastUpdateTime class_pathfinding_1_1_tile_handler_helper.php#aa6c17707e55016be2e0f9803447836e5 -Pathfinding.TileHandlerHelper.updateInterval class_pathfinding_1_1_tile_handler_helper.php#a6c4f1e55a5f898fd0b384a6a7193e7e4 -Pathfinding.Util.TileHandler.TileType.depth class_pathfinding_1_1_util_1_1_tile_handler_1_1_tile_type.php#acb5ba97551079e0b072c62c21d784ac5 -Pathfinding.Util.TileHandler.TileType.lastRotation class_pathfinding_1_1_util_1_1_tile_handler_1_1_tile_type.php#a604b7f24336ff30515df7a292f7f2b8a -Pathfinding.Util.TileHandler.TileType.lastYOffset class_pathfinding_1_1_util_1_1_tile_handler_1_1_tile_type.php#a4aa4aa5eb2b31945fef2dac9c36ac6bc -Pathfinding.Util.TileHandler.TileType.offset class_pathfinding_1_1_util_1_1_tile_handler_1_1_tile_type.php#aa9d3cfb77e73ecfef1f471693aab92d1 -Pathfinding.Util.TileHandler.TileType.tris class_pathfinding_1_1_util_1_1_tile_handler_1_1_tile_type.php#a661a2dd45ef4a81177a8fadb31ea50bb -Pathfinding.Util.TileHandler.TileType.verts class_pathfinding_1_1_util_1_1_tile_handler_1_1_tile_type.php#afa6aa0f1cca708840ec7f6f235c77ed8 -Pathfinding.Util.TileHandler.TileType.width class_pathfinding_1_1_util_1_1_tile_handler_1_1_tile_type.php#a2474a5474cbff19523a51eb1de01cda4 -Pathfinding.Util.TileHandler.TileType.Rotations class_pathfinding_1_1_util_1_1_tile_handler_1_1_tile_type.php#a239ea22f5db71b448a4d789906a22fc0 -Pathfinding.Serialization.TinyJsonDeserializer.builder class_pathfinding_1_1_serialization_1_1_tiny_json_deserializer.php#ae699dd91bd03644fbeacd0fb598d39aa -Pathfinding.Serialization.TinyJsonDeserializer.reader class_pathfinding_1_1_serialization_1_1_tiny_json_deserializer.php#a1c6be575ba651674e04c5d554c4fa405 -Pathfinding.Serialization.TinyJsonDeserializer.numberFormat class_pathfinding_1_1_serialization_1_1_tiny_json_deserializer.php#aa07be58523ad7473c513ae307d8c762b -Pathfinding.Serialization.TinyJsonSerializer.output class_pathfinding_1_1_serialization_1_1_tiny_json_serializer.php#aafb9bb6a30eeb183eb651dee20920586 -Pathfinding.Serialization.TinyJsonSerializer.serializers class_pathfinding_1_1_serialization_1_1_tiny_json_serializer.php#ac2ea2aee3ed5f9059eb609514675b873 -Pathfinding.Serialization.TinyJsonSerializer.invariantCulture class_pathfinding_1_1_serialization_1_1_tiny_json_serializer.php#aa90ff2edcb22b2618a48ad92998e82ba -Pathfinding.BlockManager.TraversalProvider.blockManager class_pathfinding_1_1_block_manager_1_1_traversal_provider.php#a0b860aa69a6a18d6a7f964475a1b2ca5 -Pathfinding.BlockManager.TraversalProvider.selector class_pathfinding_1_1_block_manager_1_1_traversal_provider.php#a5806204dd77fa15297104c71a9d85115 -Pathfinding.TriangleMeshNode.v0 class_pathfinding_1_1_triangle_mesh_node.php#a462be00f4455bf96a670f0e305dc051f -Pathfinding.TriangleMeshNode.v1 class_pathfinding_1_1_triangle_mesh_node.php#ac3f9ff4294615df8b7e9684b7d6fddc7 -Pathfinding.TriangleMeshNode.v2 class_pathfinding_1_1_triangle_mesh_node.php#aa517e2fff4a8c9cba11391ca12f91803 -Pathfinding.TriangleMeshNode._navmeshHolders class_pathfinding_1_1_triangle_mesh_node.php#a8b4ba9cdbcba0c18a7fb86154ba1aeeb -Pathfinding.TriangleMeshNode.lockObject class_pathfinding_1_1_triangle_mesh_node.php#a46f21822e43dd7f46f71851e4cc65d24 -Pathfinding.Examples.TurnBasedAI.blocker class_pathfinding_1_1_examples_1_1_turn_based_a_i.php#a9d83e41baf416366b25fc89584517ff3 -Pathfinding.Examples.TurnBasedAI.blockManager class_pathfinding_1_1_examples_1_1_turn_based_a_i.php#afeb4797022d2f412735ffe1d69c03a67 -Pathfinding.Examples.TurnBasedAI.movementPoints class_pathfinding_1_1_examples_1_1_turn_based_a_i.php#a1cd2f4153f84a0f1338c4767078f7f82 -Pathfinding.Examples.TurnBasedAI.targetNode class_pathfinding_1_1_examples_1_1_turn_based_a_i.php#af5a21f532ab11df046b957f450cdd0bb -Pathfinding.Examples.TurnBasedAI.traversalProvider class_pathfinding_1_1_examples_1_1_turn_based_a_i.php#a7e893b1503cc722a7c90a3d411f56b95 -Pathfinding.Examples.TurnBasedDoor.animator class_pathfinding_1_1_examples_1_1_turn_based_door.php#aa66c4a3f5d581fb71693cfed0eb2dcb6 -Pathfinding.Examples.TurnBasedDoor.blocker class_pathfinding_1_1_examples_1_1_turn_based_door.php#a9d83e41baf416366b25fc89584517ff3 -Pathfinding.Examples.TurnBasedDoor.open class_pathfinding_1_1_examples_1_1_turn_based_door.php#a8c7e45250b1eb6821dd59fb2a9a016d7 -Pathfinding.Examples.TurnBasedManager.eventSystem class_pathfinding_1_1_examples_1_1_turn_based_manager.php#a6be60694ed94dc17bccdd4e2025289f3 -Pathfinding.Examples.TurnBasedManager.possibleMoves class_pathfinding_1_1_examples_1_1_turn_based_manager.php#af4b5af63f1e948f7776fdce5041a38e8 -Pathfinding.Examples.TurnBasedManager.selected class_pathfinding_1_1_examples_1_1_turn_based_manager.php#ac96d00fec60d07495c517229a41a1657 -Pathfinding.Examples.TurnBasedManager.layerMask class_pathfinding_1_1_examples_1_1_turn_based_manager.php#af716a261a715560dd3f450f431beab11 -Pathfinding.Examples.TurnBasedManager.movementSpeed class_pathfinding_1_1_examples_1_1_turn_based_manager.php#a631e83154e218047a2889c328a40d351 -Pathfinding.Examples.TurnBasedManager.nodePrefab class_pathfinding_1_1_examples_1_1_turn_based_manager.php#a17195d63c653b0aa8d07e06dbd9c41dd -Pathfinding.Examples.TurnBasedManager.state class_pathfinding_1_1_examples_1_1_turn_based_manager.php#a876b486d3a5241a126bd5751c5f70f79 -Pathfinding.AdvancedSmooth.TurnConstructor.constantBias class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#a9ecfd73751fc845dbe0f11b466b58b66 -Pathfinding.AdvancedSmooth.TurnConstructor.factorBias class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#a2caa5b439cdb74cad9d3f6cb65537eb9 -Pathfinding.AdvancedSmooth.TurnConstructor.ThreeSixtyRadians class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#a1afc6aef9da746e63946c3e46ba4b1c6 -Pathfinding.AdvancedSmooth.TurnConstructor.changedPreviousTangent class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#a3377f6089b2ab13b96dfe74c5a579401 -Pathfinding.AdvancedSmooth.TurnConstructor.normal class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#ac195757f149b518d7f5436aa9c5c293d -Pathfinding.AdvancedSmooth.TurnConstructor.prev class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#a135afe84e9a0cbbcfe875a327084ef2e -Pathfinding.AdvancedSmooth.TurnConstructor.t1 class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#afcfee436c59001a14ddae49e468da303 -Pathfinding.AdvancedSmooth.TurnConstructor.turningRadius class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#a29ba3f4110245ccad5b233fb4f4c0c5f -Pathfinding.AdvancedSmooth.TurnConstructor.current class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#acef3c3255e999694a30be3b4fe757fd9 -Pathfinding.AdvancedSmooth.TurnConstructor.next class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#a8ef318dcea29d93be7252787d6bee46c -Pathfinding.AdvancedSmooth.TurnConstructor.prevNormal class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#a0eef4d1eaba8830b3935e7186f4e426c -Pathfinding.AdvancedSmooth.TurnConstructor.t2 class_pathfinding_1_1_advanced_smooth_1_1_turn_constructor.php#a9931802f567f1b929ca525996e776bf5 -Pathfinding.UniqueComponentAttribute.tag class_pathfinding_1_1_unique_component_attribute.php#a99b3fd4b163e8005d4ab6bd23a812103 -Pathfinding.UnityReferenceHelper.guid class_pathfinding_1_1_unity_reference_helper.php#a29a064833d998adc3aaf62bf96d5633d -Pathfinding.Util.APIUpgrader.UpgradeItem.column class_pathfinding_1_1_util_1_1_a_p_i_upgrader_1_1_upgrade_item.php#a60dae4c6e78188cd718b696e4f08fc71 -Pathfinding.Util.APIUpgrader.UpgradeItem.file class_pathfinding_1_1_util_1_1_a_p_i_upgrader_1_1_upgrade_item.php#ab2c5ab3c7a17f0969cdd40146339903a -Pathfinding.Util.APIUpgrader.UpgradeItem.line class_pathfinding_1_1_util_1_1_a_p_i_upgrader_1_1_upgrade_item.php#a41ebd28ef1d7c6ade45642cb6acc1039 -Pathfinding.Util.APIUpgrader.UpgradeItem.original class_pathfinding_1_1_util_1_1_a_p_i_upgrader_1_1_upgrade_item.php#ac853827d77f6773a3750bf41e71d08c4 -Pathfinding.Util.APIUpgrader.UpgradeItem.replacement class_pathfinding_1_1_util_1_1_a_p_i_upgrader_1_1_upgrade_item.php#a33abe5e8677acd627bc128bd64e76568 -Pathfinding.Util.APIUpgrader.UpgradeItem.time class_pathfinding_1_1_util_1_1_a_p_i_upgrader_1_1_upgrade_item.php#a8b8dfe2335a5bf90695960dc6a1c5d3b -Pathfinding.VersionedMonoBehaviour.version class_pathfinding_1_1_versioned_mono_behaviour.php#aad880fc4455c253781e8968f2239d56f -Pathfinding.RVO.Sampled.Agent.VOBuffer.buffer class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent_1_1_v_o_buffer.php#a882dd48ae9946328510d69d6ae5f3c66 -Pathfinding.RVO.Sampled.Agent.VOBuffer.length class_pathfinding_1_1_r_v_o_1_1_sampled_1_1_agent_1_1_v_o_buffer.php#a9f59b34b1f25fe00023291b678246bcc -Pathfinding.Voxels.VoxelArea.areaTypes class_pathfinding_1_1_voxels_1_1_voxel_area.php#aaa99c7053c3a1271f6051fe9cf6ff479 -Pathfinding.Voxels.VoxelArea.AvgSpanLayerCountEstimate class_pathfinding_1_1_voxels_1_1_voxel_area.php#a0422c7cda9dae1e0be71a2b7a36c84ac -Pathfinding.Voxels.VoxelArea.compactCells class_pathfinding_1_1_voxels_1_1_voxel_area.php#aa82610411e6fc7e957ded8676092e3a8 -Pathfinding.Voxels.VoxelArea.compactSpanCount class_pathfinding_1_1_voxels_1_1_voxel_area.php#ae3d11323e8a41bd9e8880443432233d0 -Pathfinding.Voxels.VoxelArea.compactSpans class_pathfinding_1_1_voxels_1_1_voxel_area.php#ab910beb34902b7e434a39f164716e1ba -Pathfinding.Voxels.VoxelArea.depth class_pathfinding_1_1_voxels_1_1_voxel_area.php#a368a04f75e2dc14157b6101cd768f4aa -Pathfinding.Voxels.VoxelArea.DirectionX class_pathfinding_1_1_voxels_1_1_voxel_area.php#a427ab9a760f26dcc5ad4d520cd475542 -Pathfinding.Voxels.VoxelArea.DirectionZ class_pathfinding_1_1_voxels_1_1_voxel_area.php#a411bf364ce99fc85a92a4bdc559b6f83 -Pathfinding.Voxels.VoxelArea.dist class_pathfinding_1_1_voxels_1_1_voxel_area.php#ac07f7d8aa78820e47f34cf22a0ffada2 -Pathfinding.Voxels.VoxelArea.InvalidSpanValue class_pathfinding_1_1_voxels_1_1_voxel_area.php#ae4651b2ad6f91c5cf3ae14a4aeebfb3d -Pathfinding.Voxels.VoxelArea.linkedSpans class_pathfinding_1_1_voxels_1_1_voxel_area.php#a38e6de889580e437e0f50d1496acd43f -Pathfinding.Voxels.VoxelArea.maxDistance class_pathfinding_1_1_voxels_1_1_voxel_area.php#a1dc890cd20bed8f13c5605667235dca9 -Pathfinding.Voxels.VoxelArea.MaxHeight class_pathfinding_1_1_voxels_1_1_voxel_area.php#a99e134b3a65bdd427371e1fc0b017ee5 -Pathfinding.Voxels.VoxelArea.MaxHeightInt class_pathfinding_1_1_voxels_1_1_voxel_area.php#a846870c18356e9dc3e25e73639c7d9f6 -Pathfinding.Voxels.VoxelArea.maxRegions class_pathfinding_1_1_voxels_1_1_voxel_area.php#a5e0a4c8cce7c57d9ff22693e1cdf9142 -Pathfinding.Voxels.VoxelArea.tmpUShortArr class_pathfinding_1_1_voxels_1_1_voxel_area.php#ade871b0f402ec7956b880c458c36ec71 -Pathfinding.Voxels.VoxelArea.VectorDirection class_pathfinding_1_1_voxels_1_1_voxel_area.php#af39ddd143103e6072486af7eaefa291e -Pathfinding.Voxels.VoxelArea.width class_pathfinding_1_1_voxels_1_1_voxel_area.php#a51712e5598c085334b47ef53d2c64004 -Pathfinding.Voxels.VoxelArea.linkedSpanCount class_pathfinding_1_1_voxels_1_1_voxel_area.php#a3ea7bccf2c8e539a56bcddb0c43a1643 -Pathfinding.Voxels.VoxelArea.removedStack class_pathfinding_1_1_voxels_1_1_voxel_area.php#a50fca36919d3d33f34826fa5e8a8f99c -Pathfinding.Voxels.VoxelArea.removedStackCount class_pathfinding_1_1_voxels_1_1_voxel_area.php#a0d05c945767928897e44e8d371379fa2 -Pathfinding.Voxels.VoxelContourSet.bounds class_pathfinding_1_1_voxels_1_1_voxel_contour_set.php#a024318f4225ee6bedb20b7f865205d34 -Pathfinding.Voxels.VoxelContourSet.conts class_pathfinding_1_1_voxels_1_1_voxel_contour_set.php#aa67bcd5b80f687fcdc39a9755b51223b -Pathfinding.Voxels.Voxelize.NotConnected class_pathfinding_1_1_voxels_1_1_voxelize.php#a5416b17852cea5bff53df87d1fd10e7a -Pathfinding.Voxels.Voxelize.RC_CONTOUR_TESS_WALL_EDGES class_pathfinding_1_1_voxels_1_1_voxelize.php#a34097599e1298f544ab6eb79fb01e872 -Pathfinding.Voxels.Voxelize.RC_CONTOUR_TESS_AREA_EDGES class_pathfinding_1_1_voxels_1_1_voxelize.php#af87795657651a9c74e233eca49fc2c7c -Pathfinding.Voxels.Voxelize.RC_CONTOUR_TESS_TILE_EDGES class_pathfinding_1_1_voxels_1_1_voxelize.php#a7e5584f1b97ffba68515e48b50d3a991 -Pathfinding.Voxels.Voxelize.MaxLayers class_pathfinding_1_1_voxels_1_1_voxelize.php#a83a44b8dfbf27d9c9e944556c694d4cb -Pathfinding.Voxels.Voxelize.MaxRegions class_pathfinding_1_1_voxels_1_1_voxelize.php#a96091a65d82d49470baa8af51e674a6b -Pathfinding.Voxels.Voxelize.UnwalkableArea class_pathfinding_1_1_voxels_1_1_voxelize.php#af4d0482424a9d534daa30feecd92f84d -Pathfinding.Voxels.Voxelize.BorderReg class_pathfinding_1_1_voxels_1_1_voxelize.php#a9c178d1387c626771dd30b0df7a3a515 -Pathfinding.Voxels.Voxelize.RC_BORDER_VERTEX class_pathfinding_1_1_voxels_1_1_voxelize.php#a8b57de86c98abbad39cce7df7c0aa1f8 -Pathfinding.Voxels.Voxelize.RC_AREA_BORDER class_pathfinding_1_1_voxels_1_1_voxelize.php#a55bb146cbd1c0ec0e06ca8e90dd5b7bc -Pathfinding.Voxels.Voxelize.VERTEX_BUCKET_COUNT class_pathfinding_1_1_voxels_1_1_voxelize.php#a3a4e01616a89d8ef01154d9dd46e0ccc -Pathfinding.Voxels.Voxelize.ContourRegMask class_pathfinding_1_1_voxels_1_1_voxelize.php#a615e3ca83be6a917c87b5c06be5cc5ed -Pathfinding.Voxels.Voxelize.borderSize class_pathfinding_1_1_voxels_1_1_voxelize.php#acc427385dd28416f812523874f4d6502 -Pathfinding.Voxels.Voxelize.cellHeight class_pathfinding_1_1_voxels_1_1_voxelize.php#aca28e99bc21b1c1f5454b5de6d37eb19 -Pathfinding.Voxels.Voxelize.cellSize class_pathfinding_1_1_voxels_1_1_voxelize.php#abf2228f0810e71423c4c6aa000061344 -Pathfinding.Voxels.Voxelize.countourSet class_pathfinding_1_1_voxels_1_1_voxelize.php#a689719de0e560e18228733a651b8aeb0 -Pathfinding.Voxels.Voxelize.depth class_pathfinding_1_1_voxels_1_1_voxelize.php#acb5ba97551079e0b072c62c21d784ac5 -Pathfinding.Voxels.Voxelize.forcedBounds class_pathfinding_1_1_voxels_1_1_voxelize.php#a7f4bf668336616a9fc89ad448055dbea -Pathfinding.Voxels.Voxelize.inputMeshes class_pathfinding_1_1_voxels_1_1_voxelize.php#abf6acefd71f4e39214e33721c9d8d3a9 -Pathfinding.Voxels.Voxelize.maxEdgeLength class_pathfinding_1_1_voxels_1_1_voxelize.php#a443cbf48b32ad4ee2bc5f6130fb9d71c -Pathfinding.Voxels.Voxelize.maxSlope class_pathfinding_1_1_voxels_1_1_voxelize.php#a1b3ccfcd6d92aafbc9274eaf0e86bff5 -Pathfinding.Voxels.Voxelize.minRegionSize class_pathfinding_1_1_voxels_1_1_voxelize.php#a6bdae839d98493b8835f6ceb624367a7 -Pathfinding.Voxels.Voxelize.relevantGraphSurfaceMode class_pathfinding_1_1_voxels_1_1_voxelize.php#ab6f7b320cbbecaf6b60585117935e423 -Pathfinding.Voxels.Voxelize.voxelArea class_pathfinding_1_1_voxels_1_1_voxelize.php#ae0a638c137887c222080a49a011ac1ab -Pathfinding.Voxels.Voxelize.voxelWalkableClimb class_pathfinding_1_1_voxels_1_1_voxelize.php#a45c739cea23b0f86b166d93593fef175 -Pathfinding.Voxels.Voxelize.voxelWalkableHeight class_pathfinding_1_1_voxels_1_1_voxelize.php#abfedf070e38bbee741ccde433d8dbf31 -Pathfinding.Voxels.Voxelize.width class_pathfinding_1_1_voxels_1_1_voxelize.php#a2474a5474cbff19523a51eb1de01cda4 -Pathfinding.Voxels.Voxelize.cellScale class_pathfinding_1_1_voxels_1_1_voxelize.php#a3d94106ed241ab51f4ccdc739d6b6842 -Pathfinding.Voxels.Voxelize.clipper class_pathfinding_1_1_voxels_1_1_voxelize.php#a098aefcd240bb55bf153dcbba72e5a7e -Pathfinding.Voxels.Voxelize.transform class_pathfinding_1_1_voxels_1_1_voxelize.php#aa0b81baf4aaf5c187bde99324d5c57b0 -Pathfinding.Voxels.Voxelize.voxelOffset class_pathfinding_1_1_voxels_1_1_voxelize.php#adbaf97566943d978f8ddb12e4b4f0a40 -Pathfinding.Voxels.VoxelSpan.area class_pathfinding_1_1_voxels_1_1_voxel_span.php#a5008f5aaa9ef50b1510e309dce9205d7 -Pathfinding.Voxels.VoxelSpan.bottom class_pathfinding_1_1_voxels_1_1_voxel_span.php#abe10f07b1822a5c3dfe48705e5b88891 -Pathfinding.Voxels.VoxelSpan.next class_pathfinding_1_1_voxels_1_1_voxel_span.php#af25359e1397946e36b994dd496ac11eb -Pathfinding.Voxels.VoxelSpan.top class_pathfinding_1_1_voxels_1_1_voxel_span.php#ada1df9e07f83dee9bce080113289c789 -Pathfinding.RVO.Simulator.Worker.start class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker.php#a37722a150250e2a5a98e5e0d11e53449 -Pathfinding.RVO.Simulator.Worker.context class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker.php#a101061b7f068b0cd07e2ea2231065627 -Pathfinding.RVO.Simulator.Worker.end class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker.php#abce9f5dc9c83f2639b72024fdee5d388 -Pathfinding.RVO.Simulator.Worker.runFlag class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker.php#ace5753e1060c90e2bed04980893a9935 -Pathfinding.RVO.Simulator.Worker.simulator class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker.php#a0040575e4ab535813c2d0478c4623734 -Pathfinding.RVO.Simulator.Worker.task class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker.php#a427ef99d8b77e4cac03718a0a769f806 -Pathfinding.RVO.Simulator.Worker.terminate class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker.php#a74995b2493f23c9103413e37da5cdc38 -Pathfinding.RVO.Simulator.Worker.waitFlag class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker.php#a3bfe91a6cddf826b97b6edf52e19ea75 -Pathfinding.RVO.Simulator.WorkerContext.bestPos class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker_context.php#a5044c9315cab9414c01e6e761122c0b4 -Pathfinding.RVO.Simulator.WorkerContext.bestScores class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker_context.php#a67114a2a16fb788545c01ea33cc67fec -Pathfinding.RVO.Simulator.WorkerContext.bestSizes class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker_context.php#a611c73fd9519c007b511c4f98feb6724 -Pathfinding.RVO.Simulator.WorkerContext.KeepCount class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker_context.php#a36cb8a8b78f088f3e05667d7f9a91a63 -Pathfinding.RVO.Simulator.WorkerContext.samplePos class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker_context.php#a63c7d003402911665562db797fbc859e -Pathfinding.RVO.Simulator.WorkerContext.sampleSize class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker_context.php#abb1b2862a8986bf7e5081e94e760d122 -Pathfinding.RVO.Simulator.WorkerContext.vos class_pathfinding_1_1_r_v_o_1_1_simulator_1_1_worker_context.php#a0bdcad63471097092071b88f34c3a86e -Pathfinding.WorkItemProcessor.astar class_pathfinding_1_1_work_item_processor.php#abad30d7567baa44751f3a848a0bfaa8b -Pathfinding.WorkItemProcessor.queuedWorkItemFloodFill class_pathfinding_1_1_work_item_processor.php#a2d53f0ece024b4ba1013150fc18a6c16 -Pathfinding.WorkItemProcessor.workItems class_pathfinding_1_1_work_item_processor.php#ab11f1d97f99c3bf69d966626ceee11fc -Pathfinding.XPath.endingCondition class_pathfinding_1_1_x_path.php#a774fd05dcd911513c2a1d72a2f28a709 diff --git a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/tooltips.tsv.meta b/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/tooltips.tsv.meta deleted file mode 100644 index 9511f8435412873e19e9b12f6ebe8e541efe6c24..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/EditorAssets/tooltips.tsv.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 692b218e1079f47ff880a11ef4c5a365 -timeCreated: 1502303175 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors.meta b/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors.meta deleted file mode 100644 index 2243840f1a70a4a7af533ab58635c6ca65bb9f99..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: c5fd22bd5eed4e74f88812c3d79f433c -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/GraphEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/GraphEditor.cs deleted file mode 100644 index 0a4b140d5650f7258e649576e528d3ce33591a43..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/GraphEditor.cs +++ /dev/null @@ -1,142 +0,0 @@ -using PF; -using UnityEditor; -using UnityEngine; - -namespace Pathfinding { - public class GraphEditor : GraphEditorBase { - public AstarPathEditor editor; - - /** Stores if the graph is visible or not in the inspector */ - public FadeArea fadeArea; - - /** Stores if the graph info box is visible or not in the inspector */ - public FadeArea infoFadeArea; - - /** Called by editor scripts to rescan the graphs e.g when the user moved a graph. - * Will only scan graphs if not playing and time to scan last graph was less than some constant (to avoid lag with large graphs) */ - public bool AutoScan () { - if (!Application.isPlaying && AstarPath.active != null && AstarPath.active.lastScanTime < 0.11F) { - AstarPath.active.Scan(); - return true; - } - return false; - } - - public virtual void OnEnable () { - } - - public static Object ObjectField (string label, Object obj, System.Type objType, bool allowSceneObjects) { - return ObjectField(new GUIContent(label), obj, objType, allowSceneObjects); - } - - public static Object ObjectField (GUIContent label, Object obj, System.Type objType, bool allowSceneObjects) { - obj = EditorGUILayout.ObjectField(label, obj, objType, allowSceneObjects); - - if (obj != null) { - if (allowSceneObjects && !EditorUtility.IsPersistent(obj)) { - // Object is in the scene - var com = obj as Component; - var go = obj as GameObject; - if (com != null) { - go = com.gameObject; - } - if (go != null && go.GetComponent() == null) { - if (FixLabel("Object's GameObject must have a UnityReferenceHelper component attached")) { - go.AddComponent(); - } - } - } else if (EditorUtility.IsPersistent(obj)) { - string path = AssetDatabase.GetAssetPath(obj).Replace("\\", "/"); - var rg = new System.Text.RegularExpressions.Regex(@"Resources/.*$"); - - if (!rg.IsMatch(path)) { - if (FixLabel("Object must be in the 'Resources' folder")) { - if (!System.IO.Directory.Exists(Application.dataPath+"/Resources")) { - System.IO.Directory.CreateDirectory(Application.dataPath+"/Resources"); - AssetDatabase.Refresh(); - } - - string ext = System.IO.Path.GetExtension(path); - string error = AssetDatabase.MoveAsset(path, "Assets/Resources/"+obj.name+ext); - - if (error == "") { - path = AssetDatabase.GetAssetPath(obj); - } else { - Debug.LogError("Couldn't move asset - "+error); - } - } - } - - if (!AssetDatabase.IsMainAsset(obj) && obj.name != AssetDatabase.LoadMainAssetAtPath(path).name) { - if (FixLabel("Due to technical reasons, the main asset must\nhave the same name as the referenced asset")) { - string error = AssetDatabase.RenameAsset(path, obj.name); - if (error != "") { - Debug.LogError("Couldn't rename asset - "+error); - } - } - } - } - } - - return obj; - } - - /** Draws common graph settings */ - public void OnBaseInspectorGUI (NavGraph target) { - int penalty = EditorGUILayout.IntField(new GUIContent("Initial Penalty", "Initial Penalty for nodes in this graph. Set during Scan."), (int)target.initialPenalty); - - if (penalty < 0) penalty = 0; - target.initialPenalty = (uint)penalty; - } - - /** Override to implement graph inspectors */ - public virtual void OnInspectorGUI (NavGraph target) { - } - - /** Override to implement scene GUI drawing for the graph */ - public virtual void OnSceneGUI (NavGraph target) { - } - - /** Draws a thin separator line */ - public static void Separator () { - GUIStyle separator = AstarPathEditor.astarSkin.FindStyle("PixelBox3Separator") ?? new GUIStyle(); - - Rect r = GUILayoutUtility.GetRect(new GUIContent(), separator); - - if (Event.current.type == EventType.Repaint) { - separator.Draw(r, false, false, false, false); - } - } - - /** Draws a small help box with a 'Fix' button to the right. \returns Boolean - Returns true if the button was clicked */ - public static bool FixLabel (string label, string buttonLabel = "Fix", int buttonWidth = 40) { - GUILayout.BeginHorizontal(); - GUILayout.Space(14*EditorGUI.indentLevel); - GUILayout.BeginHorizontal(AstarPathEditor.helpBox); - GUILayout.Label(label, EditorGUIUtility.isProSkin ? EditorStyles.whiteMiniLabel : EditorStyles.miniLabel, GUILayout.ExpandWidth(true)); - var returnValue = GUILayout.Button(buttonLabel, EditorStyles.miniButton, GUILayout.Width(buttonWidth)); - GUILayout.EndHorizontal(); - GUILayout.EndHorizontal(); - return returnValue; - } - - /** Draws a toggle with a bold label to the right. Does not enable or disable GUI */ - public bool ToggleGroup (string label, bool value) { - return ToggleGroup(new GUIContent(label), value); - } - - /** Draws a toggle with a bold label to the right. Does not enable or disable GUI */ - public static bool ToggleGroup (GUIContent label, bool value) { - GUILayout.BeginHorizontal(); - GUILayout.Space(13*EditorGUI.indentLevel); - value = GUILayout.Toggle(value, "", GUILayout.Width(10)); - GUIStyle boxHeader = AstarPathEditor.astarSkin.FindStyle("CollisionHeader"); - if (GUILayout.Button(label, boxHeader, GUILayout.Width(100))) { - value = !value; - } - - GUILayout.EndHorizontal(); - return value; - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/GraphEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/GraphEditor.cs.meta deleted file mode 100644 index 35c29f6c9510cc2587436634a06549361330d73f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/GraphEditor.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b0bbfd9d85ec946b2a05cdeaab0d6f5f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/RecastGraphEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/RecastGraphEditor.cs deleted file mode 100644 index 4e833ac849605d792df78e0249cac164b53acf79..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/RecastGraphEditor.cs +++ /dev/null @@ -1,266 +0,0 @@ -using PF; -using UnityEngine; -using UnityEditor; -using Mathf = UnityEngine.Mathf; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - /** - * Editor for the RecastGraph. - * \astarpro - */ - [CustomGraphEditor(typeof(RecastGraph), "Recast Graph")] - public class RecastGraphEditor : GraphEditor { - public static bool tagMaskFoldout; - - public enum UseTiles { - UseTiles = 0, - DontUseTiles = 1 - } - - public override void OnInspectorGUI (NavGraph target) { - var graph = target as RecastGraph; - - bool preEnabled = GUI.enabled; - - System.Int64 estWidth = Mathf.RoundToInt(Mathf.Ceil(graph.forcedBoundsSize.x / graph.cellSize)); - System.Int64 estDepth = Mathf.RoundToInt(Mathf.Ceil(graph.forcedBoundsSize.z / graph.cellSize)); - - // Show a warning if the number of voxels is too large - if (estWidth*estDepth >= 1024*1024 || estDepth >= 1024*1024 || estWidth >= 1024*1024) { - GUIStyle helpBox = GUI.skin.FindStyle("HelpBox") ?? GUI.skin.FindStyle("Box"); - - Color preColor = GUI.color; - if (estWidth*estDepth >= 2048*2048 || estDepth >= 2048*2048 || estWidth >= 2048*2048) { - GUI.color = Color.red; - } else { - GUI.color = Color.yellow; - } - - GUILayout.Label("Warning : Might take some time to calculate", helpBox); - GUI.color = preColor; - } - - GUI.enabled = false; - EditorGUILayout.LabelField(new GUIContent("Width (voxels)", "Based on the cell size and the bounding box"), new GUIContent(estWidth.ToString())); - - EditorGUILayout.LabelField(new GUIContent("Depth (voxels)", "Based on the cell size and the bounding box"), new GUIContent(estDepth.ToString())); - GUI.enabled = preEnabled; - - graph.cellSize = EditorGUILayout.FloatField(new GUIContent("Cell Size", "Size of one voxel in world units"), graph.cellSize); - if (graph.cellSize < 0.001F) graph.cellSize = 0.001F; - - graph.useTiles = (UseTiles)EditorGUILayout.EnumPopup("Use Tiles", graph.useTiles ? UseTiles.UseTiles : UseTiles.DontUseTiles) == UseTiles.UseTiles; - - if (graph.useTiles) { - EditorGUI.indentLevel++; - graph.editorTileSize = EditorGUILayout.IntField(new GUIContent("Tile Size", "Size in voxels of a single tile.\n" + - "This is the width of the tile.\n" + - "\n" + - "A large tile size can be faster to initially scan (but beware of out of memory issues if you try with a too large tile size in a large world)\n" + - "smaller tile sizes are (much) faster to update.\n" + - "\n" + - "Different tile sizes can affect the quality of paths. It is often good to split up huge open areas into several tiles for\n" + - "better quality paths, but too small tiles can lead to effects looking like invisible obstacles."), graph.editorTileSize); - EditorGUI.indentLevel--; - } - - graph.minRegionSize = EditorGUILayout.FloatField(new GUIContent("Min Region Size", "Small regions will be removed. In square world units"), graph.minRegionSize); - - graph.walkableHeight = EditorGUILayout.FloatField(new GUIContent("Walkable Height", "Minimum distance to the roof for an area to be walkable"), graph.walkableHeight); - graph.walkableHeight = Mathf.Max(graph.walkableHeight, 0); - - graph.walkableClimb = EditorGUILayout.FloatField(new GUIContent("Walkable Climb", "How high can the character climb"), graph.walkableClimb); - - // A walkableClimb higher than this can cause issues when generating the navmesh since then it can in some cases - // Both be valid for a character to walk under an obstacle and climb up on top of it (and that cannot be handled with a navmesh without links) - if (graph.walkableClimb >= graph.walkableHeight) { - graph.walkableClimb = graph.walkableHeight; - EditorGUILayout.HelpBox("Walkable climb should be less than walkable height. Clamping to " + graph.walkableHeight+".", MessageType.Warning); - } else if (graph.walkableClimb < 0) { - graph.walkableClimb = 0; - } - - graph.characterRadius = EditorGUILayout.FloatField(new GUIContent("Character Radius", "Radius of the character. It's good to add some margin.\nIn world units."), graph.characterRadius); - graph.characterRadius = Mathf.Max(graph.characterRadius, 0); - - if (graph.characterRadius < graph.cellSize * 2) { - EditorGUILayout.HelpBox("For best navmesh quality, it is recommended to keep the character radius at least 2 times as large as the cell size. Smaller cell sizes will give you higher quality navmeshes, but it will take more time to scan the graph.", MessageType.Warning); - } - - graph.maxSlope = EditorGUILayout.Slider(new GUIContent("Max Slope", "Approximate maximum slope"), graph.maxSlope, 0F, 90F); - graph.maxEdgeLength = EditorGUILayout.FloatField(new GUIContent("Max Border Edge Length", "Maximum length of one border edge in the completed navmesh before it is split. A lower value can often yield better quality graphs, but don't use so low values so that you get a lot of thin triangles."), graph.maxEdgeLength); - graph.maxEdgeLength = graph.maxEdgeLength < graph.cellSize ? graph.cellSize : graph.maxEdgeLength; - - graph.contourMaxError = EditorGUILayout.FloatField(new GUIContent("Max Edge Error", "Amount of simplification to apply to edges.\nIn world units."), graph.contourMaxError); - - graph.rasterizeTerrain = EditorGUILayout.Toggle(new GUIContent("Rasterize Terrain", "Should a rasterized terrain be included"), graph.rasterizeTerrain); - if (graph.rasterizeTerrain) { - EditorGUI.indentLevel++; - graph.rasterizeTrees = EditorGUILayout.Toggle(new GUIContent("Rasterize Trees", "Rasterize tree colliders on terrains. " + - "If the tree prefab has a collider, that collider will be rasterized. " + - "Otherwise a simple box collider will be used and the script will " + - "try to adjust it to the tree's scale, it might not do a very good job though so " + - "an attached collider is preferable."), graph.rasterizeTrees); - if (graph.rasterizeTrees) { - EditorGUI.indentLevel++; - graph.colliderRasterizeDetail = EditorGUILayout.FloatField(new GUIContent("Collider Detail", "Controls the detail of the generated collider meshes. "+ - "Increasing does not necessarily yield better navmeshes, but lowering will speed up scan.\n"+ - "Spheres and capsule colliders will be converted to meshes in order to be able to rasterize them, a higher value will increase the number of triangles in those meshes."), graph.colliderRasterizeDetail); - EditorGUI.indentLevel--; - } - - graph.terrainSampleSize = EditorGUILayout.IntField(new GUIContent("Terrain Sample Size", "Size of terrain samples. A lower value is better, but slower"), graph.terrainSampleSize); - graph.terrainSampleSize = graph.terrainSampleSize < 1 ? 1 : graph.terrainSampleSize;//Clamp to at least 1 - EditorGUI.indentLevel--; - } - - graph.rasterizeMeshes = EditorGUILayout.Toggle(new GUIContent("Rasterize Meshes", "Should meshes be rasterized and used for building the navmesh"), graph.rasterizeMeshes); - graph.rasterizeColliders = EditorGUILayout.Toggle(new GUIContent("Rasterize Colliders", "Should colliders be rasterized and used for building the navmesh"), graph.rasterizeColliders); - if (graph.rasterizeColliders) { - EditorGUI.indentLevel++; - graph.colliderRasterizeDetail = EditorGUILayout.FloatField(new GUIContent("Collider Detail", "Controls the detail of the generated collider meshes. "+ - "Increasing does not necessarily yield better navmeshes, but lowering will speed up scan.\n"+ - "Spheres and capsule colliders will be converted to meshes in order to be able to rasterize them, a higher value will increase the number of triangles in those meshes."), graph.colliderRasterizeDetail); - EditorGUI.indentLevel--; - } - - if (graph.rasterizeMeshes && graph.rasterizeColliders) { - EditorGUILayout.HelpBox("You are rasterizing both meshes and colliders, this might just be duplicating the work that is done if the colliders and meshes are similar in shape. You can use the RecastMeshObj component" + - " to always include some specific objects regardless of what the above settings are set to.", MessageType.Info); - } - - Separator(); - - graph.forcedBoundsCenter = EditorGUILayout.Vector3Field("Center", graph.forcedBoundsCenter); - graph.forcedBoundsSize = EditorGUILayout.Vector3Field("Size", graph.forcedBoundsSize); - // Make sure the bounding box is not infinitely thin along any axis - graph.forcedBoundsSize = Vector3.Max(graph.forcedBoundsSize, Vector3.one * 0.001f); - graph.rotation = EditorGUILayout.Vector3Field("Rotation", graph.rotation); - - if (GUILayout.Button(new GUIContent("Snap bounds to scene", "Will snap the bounds of the graph to exactly contain all meshes that the bounds currently touches"))) { - graph.SnapForceBoundsToScene(); - GUI.changed = true; - } - - Separator(); - - EditorGUILayout.HelpBox("Objects contained in any of these masks will be rasterized", MessageType.None); - graph.mask = EditorGUILayoutx.LayerMaskField("Layer Mask", graph.mask); - tagMaskFoldout = EditorGUILayoutx.UnityTagMaskList(new GUIContent("Tag Mask"), tagMaskFoldout, graph.tagMask); - - Separator(); - - GUILayout.BeginHorizontal(); - GUILayout.Space(18); - graph.showMeshSurface = GUILayout.Toggle(graph.showMeshSurface, new GUIContent("Show surface", "Toggles gizmos for drawing the surface of the mesh"), EditorStyles.miniButtonLeft); - graph.showMeshOutline = GUILayout.Toggle(graph.showMeshOutline, new GUIContent("Show outline", "Toggles gizmos for drawing an outline of the nodes"), EditorStyles.miniButtonMid); - graph.showNodeConnections = GUILayout.Toggle(graph.showNodeConnections, new GUIContent("Show connections", "Toggles gizmos for drawing node connections"), EditorStyles.miniButtonRight); - GUILayout.EndHorizontal(); - - - Separator(); - GUILayout.Label(new GUIContent("Advanced"), EditorStyles.boldLabel); - - if (GUILayout.Button("Export to .obj file")) { - ExportToFile(graph); - } - - graph.relevantGraphSurfaceMode = (RecastGraph.RelevantGraphSurfaceMode)EditorGUILayout.EnumPopup(new GUIContent("Relevant Graph Surface Mode", - "Require every region to have a RelevantGraphSurface component inside it.\n" + - "A RelevantGraphSurface component placed in the scene specifies that\n" + - "the navmesh region it is inside should be included in the navmesh.\n\n" + - "If this is set to OnlyForCompletelyInsideTile\n" + - "a navmesh region is included in the navmesh if it\n" + - "has a RelevantGraphSurface inside it, or if it\n" + - "is adjacent to a tile border. This can leave some small regions\n" + - "which you didn't want to have included because they are adjacent\n" + - "to tile borders, but it removes the need to place a component\n" + - "in every single tile, which can be tedious (see below).\n\n" + - "If this is set to RequireForAll\n" + - "a navmesh region is included only if it has a RelevantGraphSurface\n" + - "inside it. Note that even though the navmesh\n" + - "looks continous between tiles, the tiles are computed individually\n" + - "and therefore you need a RelevantGraphSurface component for each\n" + - "region and for each tile."), - graph.relevantGraphSurfaceMode); - - graph.nearestSearchOnlyXZ = EditorGUILayout.Toggle(new GUIContent("Nearest node queries in XZ space", - "Recomended for single-layered environments.\nFaster but can be inacurate esp. in multilayered contexts."), graph.nearestSearchOnlyXZ); - - if (graph.nearestSearchOnlyXZ && (Mathf.Abs(graph.rotation.x) > 1 || Mathf.Abs(graph.rotation.z) > 1)) { - EditorGUILayout.HelpBox("Nearest node queries in XZ space is not recommended for rotated graphs since XZ space no longer corresponds to the ground plane", MessageType.Warning); - } - } - - /** Exports the INavmesh graph to a .obj file */ - public static void ExportToFile (RecastGraph target) { - //INavmesh graph = (INavmesh)target; - if (target == null) return; - - NavmeshTile[] tiles = target.GetTiles(); - - if (tiles == null) { - if (EditorUtility.DisplayDialog("Scan graph before exporting?", "The graph does not contain any mesh data. Do you want to scan it?", "Ok", "Cancel")) { - AstarPathEditor.MenuScan(); - tiles = target.GetTiles(); - if (tiles == null) return; - } else { - return; - } - } - - string path = EditorUtility.SaveFilePanel("Export .obj", "", "navmesh.obj", "obj"); - if (path == "") return; - - //Generate .obj - var sb = new System.Text.StringBuilder(); - - string name = System.IO.Path.GetFileNameWithoutExtension(path); - - sb.Append("g ").Append(name).AppendLine(); - - //Vertices start from 1 - int vCount = 1; - - //Define single texture coordinate to zero - sb.Append("vt 0 0\n"); - - for (int t = 0; t < tiles.Length; t++) { - NavmeshTile tile = tiles[t]; - - if (tile == null) continue; - - Int3[] vertices = tile.verts; - - //Write vertices - for (int i = 0; i < vertices.Length; i++) { - var v = (Vector3)vertices[i]; - sb.Append(string.Format("v {0} {1} {2}\n", -v.x, v.y, v.z)); - } - - //Write triangles - TriangleMeshNode[] nodes = tile.nodes; - for (int i = 0; i < nodes.Length; i++) { - TriangleMeshNode node = nodes[i]; - if (node == null) { - Debug.LogError("Node was null or no TriangleMeshNode. Critical error. Graph type " + target.GetType().Name); - return; - } - if (node.GetVertexArrayIndex(0) < 0 || node.GetVertexArrayIndex(0) >= vertices.Length) throw new System.Exception("ERR"); - - sb.Append(string.Format("f {0}/1 {1}/1 {2}/1\n", (node.GetVertexArrayIndex(0) + vCount), (node.GetVertexArrayIndex(1) + vCount), (node.GetVertexArrayIndex(2) + vCount))); - } - - vCount += vertices.Length; - } - - string obj = sb.ToString(); - - using (var sw = new System.IO.StreamWriter(path)) - { - sw.Write(obj); - } - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/RecastGraphEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/RecastGraphEditor.cs.meta deleted file mode 100644 index ed531b479af3ed3d53e99325a97e4c6c73c4dd60..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/GraphEditors/RecastGraphEditor.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 1e335b837bf0e437f865b313cd5ac11c -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/GraphUpdateSceneEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/GraphUpdateSceneEditor.cs deleted file mode 100644 index ecb799b89d5805ce95e08f24d71c0581e277d0e1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/GraphUpdateSceneEditor.cs +++ /dev/null @@ -1,324 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; -using PF; -using Mathf = UnityEngine.Mathf; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Quaternion = UnityEngine.Quaternion; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - /** Editor for GraphUpdateScene */ - [CustomEditor(typeof(GraphUpdateScene))] - [CanEditMultipleObjects] - public class GraphUpdateSceneEditor : EditorBase { - int selectedPoint = -1; - - const float pointGizmosRadius = 0.09F; - static Color PointColor = new Color(1, 0.36F, 0, 0.6F); - static Color PointSelectedColor = new Color(1, 0.24F, 0, 1.0F); - - GraphUpdateScene[] scripts; - - protected override void Inspector () { - // Find all properties - var points = FindProperty("points"); - var legacyMode = FindProperty("legacyMode"); - - // Get a list of inspected components - scripts = new GraphUpdateScene[targets.Length]; - targets.CopyTo(scripts, 0); - - EditorGUI.BeginChangeCheck(); - - // Make sure no point arrays are null - for (int i = 0; i < scripts.Length; i++) { - scripts[i].points = scripts[i].points ?? new Vector3[0]; - } - - if (!points.hasMultipleDifferentValues && points.arraySize == 0) { - if (scripts[0].GetComponent() != null) { - EditorGUILayout.HelpBox("Using polygon collider shape", MessageType.Info); - } else if (scripts[0].GetComponent() != null || scripts[0].GetComponent() != null) { - EditorGUILayout.HelpBox("No points, using collider.bounds", MessageType.Info); - } else if (scripts[0].GetComponent() != null) { - EditorGUILayout.HelpBox("No points, using renderer.bounds", MessageType.Info); - } else { - EditorGUILayout.HelpBox("No points and no collider or renderer attached, will not affect anything\nPoints can be added using the transform tool and holding shift", MessageType.Warning); - } - } - - DrawPointsField(); - - EditorGUI.indentLevel = 0; - - DrawPhysicsField(); - - PropertyField("updateErosion", null, "Recalculate erosion for grid graphs.\nSee online documentation for more info"); - - DrawConvexField(); - - // Minimum bounds height is not applied when using the bounds from a collider or renderer - if (points.hasMultipleDifferentValues || points.arraySize > 0) { - PropertyField("minBoundsHeight"); - Clamp("minBoundsHeight", 0.1f); - } - PropertyField("applyOnStart"); - PropertyField("applyOnScan"); - - DrawWalkableField(); - DrawPenaltyField(); - DrawTagField(); - - EditorGUILayout.Separator(); - - if (legacyMode.hasMultipleDifferentValues || legacyMode.boolValue) { - EditorGUILayout.HelpBox("Legacy mode is enabled because you have upgraded from an earlier version of the A* Pathfinding Project. " + - "Disabling legacy mode is recommended but you may have to tweak the point locations or object rotation in some cases", MessageType.Warning); - if (GUILayout.Button("Disable Legacy Mode")) { - for (int i = 0; i < scripts.Length; i++) { - Undo.RecordObject(scripts[i], "Disable Legacy Mode"); - scripts[i].DisableLegacyMode(); - } - } - } - - if (scripts.Length == 1 && scripts[0].points.Length >= 3) { - var size = scripts[0].GetBounds().size; - if (Mathf.Min(Mathf.Min(Mathf.Abs(size.x), Mathf.Abs(size.y)), Mathf.Abs(size.z)) < 0.05f) { - EditorGUILayout.HelpBox("The bounding box is very thin. Your shape might be oriented incorrectly. The shape will be projected down on the XZ plane in local space. Rotate this object " + - "so that the local XZ plane corresponds to the plane in which you want to create your shape. For example if you want to create your shape in the XY plane then " + - "this object should have the rotation (-90,0,0). You will need to recreate your shape after rotating this object.", MessageType.Warning); - } - } - - if (GUILayout.Button("Clear all points")) { - for (int i = 0; i < scripts.Length; i++) { - Undo.RecordObject(scripts[i], "Clear points"); - scripts[i].points = new Vector3[0]; - scripts[i].RecalcConvex(); - } - } - - if (EditorGUI.EndChangeCheck()) { - for (int i = 0; i < scripts.Length; i++) { - EditorUtility.SetDirty(scripts[i]); - } - - // Repaint the scene view if necessary - if (!Application.isPlaying || EditorApplication.isPaused) SceneView.RepaintAll(); - } - } - - void DrawPointsField () { - EditorGUI.BeginChangeCheck(); - PropertyField("points"); - if (EditorGUI.EndChangeCheck()) { - serializedObject.ApplyModifiedProperties(); - for (int i = 0; i < scripts.Length; i++) { - scripts[i].RecalcConvex(); - } - HandleUtility.Repaint(); - } - } - - void DrawPhysicsField () { - if (PropertyField("updatePhysics", "Update Physics", "Perform similar calculations on the nodes as during scan.\n" + - "Grid Graphs will update the position of the nodes and also check walkability using collision.\nSee online documentation for more info.")) { - EditorGUI.indentLevel++; - PropertyField("resetPenaltyOnPhysics"); - EditorGUI.indentLevel--; - } - } - - void DrawConvexField () { - EditorGUI.BeginChangeCheck(); - PropertyField("convex"); - if (EditorGUI.EndChangeCheck()) { - serializedObject.ApplyModifiedProperties(); - for (int i = 0; i < scripts.Length; i++) { - scripts[i].RecalcConvex(); - } - HandleUtility.Repaint(); - } - } - - void DrawWalkableField () { - if (PropertyField("modifyWalkability")) { - EditorGUI.indentLevel++; - PropertyField("setWalkability", "Walkability Value"); - EditorGUI.indentLevel--; - } - } - - void DrawPenaltyField () { - PropertyField("penaltyDelta", "Penalty Delta"); - - if (!FindProperty("penaltyDelta").hasMultipleDifferentValues && FindProperty("penaltyDelta").intValue < 0) { - EditorGUILayout.HelpBox("Be careful when lowering the penalty. Negative penalties are not supported and will instead underflow and get really high.\n" + - "You can set an initial penalty on graphs (see their settings) and then lower them like this to get regions which are easier to traverse.", MessageType.Warning); - } - } - - void DrawTagField () { - if (PropertyField("modifyTag")) { - var tagValue = FindProperty("setTag"); - EditorGUI.indentLevel++; - EditorGUI.showMixedValue = tagValue.hasMultipleDifferentValues; - EditorGUI.BeginChangeCheck(); - var newTag = EditorGUILayoutx.TagField("Tag Value", tagValue.intValue); - if (EditorGUI.EndChangeCheck()) { - tagValue.intValue = newTag; - } - - if (GUILayout.Button("Tags can be used to restrict which units can walk on what ground. Click here for more info", "HelpBox")) { - Application.OpenURL(AstarUpdateChecker.GetURL("tags")); - } - EditorGUI.indentLevel--; - } - } - - static void SphereCap (int controlID, Vector3 position, Quaternion rotation, float size) { -#if UNITY_5_5_OR_NEWER - Handles.SphereHandleCap(controlID, position, rotation, size, Event.current.type); -#else - Handles.SphereCap(controlID, position, rotation, size); -#endif - } - - public void OnSceneGUI () { - var script = target as GraphUpdateScene; - - // Don't allow editing unless it is the active object - if (Selection.activeGameObject != script.gameObject || script.legacyMode) return; - - // Make sure the points array is not null - if (script.points == null) { - script.points = new Vector3[0]; - EditorUtility.SetDirty(script); - } - - List points = ListPool.Claim(); - points.AddRange(script.points); - - Matrix4x4 invMatrix = script.transform.worldToLocalMatrix; - - Matrix4x4 matrix = script.transform.localToWorldMatrix; - for (int i = 0; i < points.Count; i++) points[i] = matrix.MultiplyPoint3x4(points[i]); - - - if (Tools.current != Tool.View && Event.current.type == EventType.Layout) { - for (int i = 0; i < script.points.Length; i++) { - HandleUtility.AddControl(-i - 1, HandleUtility.DistanceToLine(points[i], points[i])); - } - } - - if (Tools.current != Tool.View) - HandleUtility.AddDefaultControl(0); - - for (int i = 0; i < points.Count; i++) { - if (i == selectedPoint && Tools.current == Tool.Move) { - Handles.color = PointSelectedColor; - SphereCap(-i-1, points[i], Quaternion.identity, HandleUtility.GetHandleSize(points[i])*pointGizmosRadius*2); - - Vector3 pre = points[i]; - Vector3 post = Handles.PositionHandle(points[i], Quaternion.identity); - if (pre != post) { - Undo.RecordObject(script, "Moved Point"); - script.points[i] = invMatrix.MultiplyPoint3x4(post); - } - } else { - Handles.color = PointColor; - SphereCap(-i-1, points[i], Quaternion.identity, HandleUtility.GetHandleSize(points[i])*pointGizmosRadius); - } - } - - if (Event.current.type == EventType.MouseDown) { - int pre = selectedPoint; - selectedPoint = -(HandleUtility.nearestControl+1); - if (pre != selectedPoint) GUI.changed = true; - } - - if (Event.current.shift && Tools.current == Tool.Move) { - HandleUtility.Repaint(); - - if (((int)Event.current.modifiers & (int)EventModifiers.Alt) != 0) { - if (Event.current.type == EventType.MouseDown && selectedPoint >= 0 && selectedPoint < points.Count) { - Undo.RecordObject(script, "Removed Point"); - var arr = new List(script.points); - arr.RemoveAt(selectedPoint); - points.RemoveAt(selectedPoint); - script.points = arr.ToArray(); - GUI.changed = true; - } else if (points.Count > 0) { - var index = -(HandleUtility.nearestControl+1); - if (index >= 0 && index < points.Count) { - Handles.color = Color.red; - SphereCap(0, points[index], Quaternion.identity, HandleUtility.GetHandleSize(points[index])*2f*pointGizmosRadius); - } - } - } else { - // Find the closest segment - int insertionIndex = points.Count; - float minDist = float.PositiveInfinity; - for (int i = 0; i < points.Count; i++) { - float dist = HandleUtility.DistanceToLine(points[i], points[(i+1)%points.Count]); - if (dist < minDist) { - insertionIndex = i + 1; - minDist = dist; - } - } - - var ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); - System.Object hit = HandleUtility.RaySnap(ray); - Vector3 rayhit = Vector3.zero; - bool didHit = false; - if (hit != null) { - rayhit = ((RaycastHit)hit).point; - didHit = true; - } else { - var plane = new Plane(script.transform.up, script.transform.position); - float distance; - plane.Raycast(ray, out distance); - if (distance > 0) { - rayhit = ray.GetPoint(distance); - didHit = true; - } - } - - if (didHit) { - if (Event.current.type == EventType.MouseDown) { - points.Insert(insertionIndex, rayhit); - - Undo.RecordObject(script, "Added Point"); - var arr = new List(script.points); - arr.Insert(insertionIndex, invMatrix.MultiplyPoint3x4(rayhit)); - script.points = arr.ToArray(); - GUI.changed = true; - } else if (points.Count > 0) { - Handles.color = Color.green; - Handles.DrawDottedLine(points[(insertionIndex-1 + points.Count) % points.Count], rayhit, 8); - Handles.DrawDottedLine(points[insertionIndex % points.Count], rayhit, 8); - SphereCap(0, rayhit, Quaternion.identity, HandleUtility.GetHandleSize(rayhit)*pointGizmosRadius); - // Project point down onto a plane - var zeroed = invMatrix.MultiplyPoint3x4(rayhit); - zeroed.y = 0; - Handles.color = new Color(1, 1, 1, 0.5f); - Handles.DrawDottedLine(matrix.MultiplyPoint3x4(zeroed), rayhit, 4); - } - } - } - - if (Event.current.type == EventType.MouseDown) { - Event.current.Use(); - } - } - - // Make sure the convex hull stays up to date - script.RecalcConvex(); - ListPool.Release(ref points); - - if (GUI.changed) HandleUtility.Repaint(); - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/GraphUpdateSceneEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/GraphUpdateSceneEditor.cs.meta deleted file mode 100644 index 944f2724be58256c33c2bfb615c145bd558738db..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/GraphUpdateSceneEditor.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 4c7bf5208cabd4676a4691ce4541bd62 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors.meta b/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors.meta deleted file mode 100644 index 1a3625e718e05546c64d8f1a976894bae57093e0..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 2208a56a0f5f2b648b56cefa1d57d6b7 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/RaycastModifierEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/RaycastModifierEditor.cs deleted file mode 100644 index 58fe26605c568b6cf708b97f6867b3ee0b44f0df..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/RaycastModifierEditor.cs +++ /dev/null @@ -1,32 +0,0 @@ -using UnityEditor; - -namespace Pathfinding { - [CustomEditor(typeof(RaycastModifier))] - [CanEditMultipleObjects] - public class RaycastModifierEditor : EditorBase { - protected override void Inspector () { - PropertyField("quality"); - - if (PropertyField("useRaycasting", "Use Physics Raycasting")) { - EditorGUI.indentLevel++; - - PropertyField("use2DPhysics"); - if (PropertyField("thickRaycast")) { - EditorGUI.indentLevel++; - PropertyField("thickRaycastRadius"); - Clamp("thickRaycastRadius", 0f); - EditorGUI.indentLevel--; - } - - PropertyField("raycastOffset"); - PropertyField("mask", "Layer Mask"); - EditorGUI.indentLevel--; - } - - PropertyField("useGraphRaycasting"); - if (!FindProperty("useGraphRaycasting").boolValue && !FindProperty("useRaycasting").boolValue) { - EditorGUILayout.HelpBox("You should use either raycasting, graph raycasting or both, otherwise this modifier will not do anything", MessageType.Warning); - } - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/RaycastModifierEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/RaycastModifierEditor.cs.meta deleted file mode 100644 index c985a7bd5fe5f16475b91bff9536c04d79c98396..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/RaycastModifierEditor.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ec73ac2d3bd6342faace3242ff3e6f79 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/SmoothModifierEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/SmoothModifierEditor.cs deleted file mode 100644 index 3aab5b25ed60a339f803053aa23d0cf71f20ad6b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/SmoothModifierEditor.cs +++ /dev/null @@ -1,48 +0,0 @@ -using UnityEngine; -using UnityEditor; - -namespace Pathfinding { - [CustomEditor(typeof(SimpleSmoothModifier))] - [CanEditMultipleObjects] - public class SmoothModifierEditor : EditorBase { - protected override void Inspector () { - var smoothType = FindProperty("smoothType"); - - PropertyField("smoothType"); - - if (!smoothType.hasMultipleDifferentValues) { - switch ((SimpleSmoothModifier.SmoothType)smoothType.enumValueIndex) { - case SimpleSmoothModifier.SmoothType.Simple: - if (PropertyField("uniformLength")) { - PropertyField("maxSegmentLength"); - Clamp("maxSegmentLength", 0.005f); - } else { - IntSlider("subdivisions", 0, 6); - } - - PropertyField("iterations"); - ClampInt("iterations", 0); - - PropertyField("strength"); - break; - case SimpleSmoothModifier.SmoothType.OffsetSimple: - PropertyField("iterations"); - ClampInt("iterations", 0); - - PropertyField("offset"); - Clamp("offset", 0); - break; - case SimpleSmoothModifier.SmoothType.Bezier: - IntSlider("subdivisions", 0, 6); - PropertyField("bezierTangentLength"); - break; - case SimpleSmoothModifier.SmoothType.CurvedNonuniform: - PropertyField("maxSegmentLength"); - Clamp("maxSegmentLength", 0.005f); - PropertyField("factor"); - break; - } - } - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/SmoothModifierEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/SmoothModifierEditor.cs.meta deleted file mode 100644 index 57d277a23c348207832e27c9084651b67e7de450..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/ModifierEditors/SmoothModifierEditor.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 1b6748a8c87024ddd9cc5f3c5e19ab60 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools.meta b/Unity/Assets/Editor/AstarPathfindingProject/PackageTools.meta deleted file mode 100644 index 3e549cfdbb79456941b9533b95965e69eb44e13b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: d8cd19a79df7c37438c4f4742703ce46 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorBase.cs b/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorBase.cs deleted file mode 100644 index e6a90e97a8b6fba9ce591dc750f7429ce97c84a1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorBase.cs +++ /dev/null @@ -1,213 +0,0 @@ -using UnityEditor; -using UnityEngine; -using System.Collections.Generic; -using System.Linq; - -namespace Pathfinding { - /** Helper for creating editors */ - [CustomEditor(typeof(VersionedMonoBehaviour), true)] - [CanEditMultipleObjects] - public class EditorBase : Editor { - static System.Collections.Generic.Dictionary cachedTooltips; - static System.Collections.Generic.Dictionary cachedURLs; - Dictionary props = new Dictionary(); - Dictionary localTooltips = new Dictionary(); - - static GUIContent content = new GUIContent(); - static GUIContent showInDocContent = new GUIContent("Show in online documentation", ""); - static GUILayoutOption[] noOptions = new GUILayoutOption[0]; - - static void LoadMeta () { - if (cachedTooltips == null) { - var filePath = EditorResourceHelper.editorAssets + "/tooltips.tsv"; - - try { - cachedURLs = System.IO.File.ReadAllLines(filePath).Select(l => l.Split('\t')).Where(l => l.Length == 2).ToDictionary(l => l[0], l => l[1]); - cachedTooltips = new System.Collections.Generic.Dictionary(); - } catch { - cachedURLs = new System.Collections.Generic.Dictionary(); - cachedTooltips = new System.Collections.Generic.Dictionary(); - } - } - } - - static string FindURL (System.Type type, string path) { - // Find the correct type if the path was not an immediate member of #type - while (true) { - var index = path.IndexOf('.'); - if (index == -1) break; - var fieldName = path.Substring(0, index); - var remaining = path.Substring(index + 1); - var field = type.GetField(fieldName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic); - if (field != null) { - type = field.FieldType; - path = remaining; - } else { - // Could not find the correct field - return null; - } - } - - // Find a documentation entry for the field, fall back to parent classes if necessary - while (type != null) { - var url = FindURL(type.FullName + "." + path); - if (url != null) return url; - type = type.BaseType; - } - return null; - } - - static string FindURL (string path) { - LoadMeta(); - string url; - cachedURLs.TryGetValue(path, out url); - return url; - } - - static string FindTooltip (string path) { - LoadMeta(); - - string tooltip; - cachedTooltips.TryGetValue(path, out tooltip); - return tooltip; - } - - string FindLocalTooltip (string path) { - string result; - - if (!localTooltips.TryGetValue(path, out result)) { - var fullPath = target.GetType().Name + "." + path; - result = localTooltips[path] = FindTooltip(fullPath); - } - return result; - } - - protected virtual void OnEnable () { - foreach (var target in targets) if (target != null) (target as IVersionedMonoBehaviourInternal).OnUpgradeSerializedData(int.MaxValue, true); - } - - public sealed override void OnInspectorGUI () { - EditorGUI.indentLevel = 0; - serializedObject.Update(); - Inspector(); - serializedObject.ApplyModifiedProperties(); - if (targets.Length == 1 && (target as MonoBehaviour).enabled) { - var attr = target.GetType().GetCustomAttributes(typeof(UniqueComponentAttribute), true); - for (int i = 0; i < attr.Length; i++) { - string tag = (attr[i] as UniqueComponentAttribute).tag; - foreach (var other in (target as MonoBehaviour).GetComponents()) { - if (!other.enabled || other == target) continue; - if (other.GetType().GetCustomAttributes(typeof(UniqueComponentAttribute), true).Select(c => (c as UniqueComponentAttribute).tag == tag).Any()) { - EditorGUILayout.HelpBox("This component and " + other.GetType().Name + " cannot be used at the same time", MessageType.Warning); - } - } - } - } - } - - protected virtual void Inspector () { - // Basically the same as DrawDefaultInspector, but with tooltips - bool enterChildren = true; - - for (var prop = serializedObject.GetIterator(); prop.NextVisible(enterChildren); enterChildren = false) { - PropertyField(prop.propertyPath); - } - } - - protected SerializedProperty FindProperty (string name) { - SerializedProperty res; - - if (!props.TryGetValue(name, out res)) res = props[name] = serializedObject.FindProperty(name); - if (res == null) throw new System.ArgumentException(name); - return res; - } - - protected bool PropertyField (string propertyPath, string label = null, string tooltip = null) { - return PropertyField(FindProperty(propertyPath), label, tooltip, propertyPath); - } - - protected bool PropertyField (SerializedProperty prop, string label = null, string tooltip = null) { - return PropertyField(prop, label, tooltip, prop.propertyPath); - } - - bool PropertyField (SerializedProperty prop, string label, string tooltip, string propertyPath) { - content.text = label ?? prop.displayName; - content.tooltip = tooltip ?? FindTooltip(propertyPath); - var contextClick = IsContextClick(); - EditorGUILayout.PropertyField(prop, content, true, noOptions); - // Disable context clicking on arrays (as Unity has its own very useful context menu for the array elements) - if (contextClick && !prop.isArray && Event.current.type == EventType.Used) CaptureContextClick(propertyPath); - return prop.propertyType == SerializedPropertyType.Boolean ? !prop.hasMultipleDifferentValues && prop.boolValue : true; - } - - bool IsContextClick () { - return Event.current.type == EventType.ContextClick; - } - - void CaptureContextClick (string propertyPath) { - var url = FindURL(target.GetType(), propertyPath); - - if (url != null) { - Event.current.Use(); - var menu = new GenericMenu(); - menu.AddItem(showInDocContent, false, () => Application.OpenURL(AstarUpdateChecker.GetURL("documentation") + url)); - menu.ShowAsContext(); - } - } - - protected void Popup (string propertyPath, GUIContent[] options, string label = null) { - var prop = FindProperty(propertyPath); - - content.text = label ?? prop.displayName; - content.tooltip = FindTooltip(propertyPath); - var contextClick = IsContextClick(); - EditorGUI.BeginChangeCheck(); - EditorGUI.showMixedValue = prop.hasMultipleDifferentValues; - int newVal = EditorGUILayout.Popup(content, prop.propertyType == SerializedPropertyType.Enum ? prop.enumValueIndex : prop.intValue, options); - if (EditorGUI.EndChangeCheck()) { - if (prop.propertyType == SerializedPropertyType.Enum) prop.enumValueIndex = newVal; - else prop.intValue = newVal; - } - EditorGUI.showMixedValue = false; - if (contextClick && GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition)) CaptureContextClick(propertyPath); - } - - protected void Mask (string propertyPath, string[] options, string label = null) { - var prop = FindProperty(propertyPath); - - content.text = label ?? prop.displayName; - content.tooltip = FindTooltip(propertyPath); - var contextClick = IsContextClick(); - EditorGUI.BeginChangeCheck(); - EditorGUI.showMixedValue = prop.hasMultipleDifferentValues; - int newVal = EditorGUILayout.MaskField(content, prop.intValue, options); - if (EditorGUI.EndChangeCheck()) { - prop.intValue = newVal; - } - EditorGUI.showMixedValue = false; - if (contextClick && GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition)) CaptureContextClick(propertyPath); - } - - protected void IntSlider (string propertyPath, int left, int right) { - var contextClick = IsContextClick(); - var prop = FindProperty(propertyPath); - - content.text = prop.displayName; - content.tooltip = FindTooltip(propertyPath); - EditorGUILayout.IntSlider(prop, left, right, content, noOptions); - if (contextClick && Event.current.type == EventType.Used) CaptureContextClick(propertyPath); - } - - protected void Clamp (string name, float min, float max = float.PositiveInfinity) { - var prop = FindProperty(name); - - if (!prop.hasMultipleDifferentValues) prop.floatValue = Mathf.Clamp(prop.floatValue, min, max); - } - - protected void ClampInt (string name, int min, int max = int.MaxValue) { - var prop = FindProperty(name); - - if (!prop.hasMultipleDifferentValues) prop.intValue = Mathf.Clamp(prop.intValue, min, max); - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorBase.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorBase.cs.meta deleted file mode 100644 index fe26580a8489235c2861d2145e444385a6c65b25..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorBase.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 58753931a68ae48b3973d0ce32d1a760 -timeCreated: 1495461526 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorGUIx.cs b/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorGUIx.cs deleted file mode 100644 index 7d207a9a7c79c06ad8cc5dab6ede7f748052770d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorGUIx.cs +++ /dev/null @@ -1,244 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using UnityEditor; -using Mathf = UnityEngine.Mathf; - -namespace Pathfinding { - /** Simple GUI utility functions */ - public static class GUIUtilityx { - static Stack colors = new Stack(); - - public static void PushTint (Color tint) { - colors.Push(GUI.color); - GUI.color *= tint; - } - - public static void PopTint () { - GUI.color = colors.Pop(); - } - } - - /** Editor helper for hiding and showing a group of GUI elements. - * Call order in OnInspectorGUI should be: - * - Begin - * - Header/HeaderLabel (optional) - * - BeginFade - * - [your gui elements] (if BeginFade returns true) - * - End - */ - public class FadeArea { - Rect lastRect; - float value; - float lastUpdate; - GUIStyle labelStyle; - GUIStyle areaStyle; - bool visible; - Editor editor; - - /** Is this area open. - * This is not the same as if any contents are visible, use #BeginFade for that. - */ - public bool open; - - public static bool fancyEffects; - const float animationSpeed = 100f; - - public FadeArea (bool open, Editor editor, GUIStyle areaStyle, GUIStyle labelStyle = null) { - this.areaStyle = areaStyle; - this.labelStyle = labelStyle; - this.editor = editor; - visible = this.open = open; - value = open ? 1 : 0; - } - - void Tick () { - if (Event.current.type == EventType.Repaint) { - float deltaTime = Time.realtimeSinceStartup-lastUpdate; - - // Right at the start of a transition the deltaTime will - // not be reliable, so use a very small value instead - // until the next repaint - if (value == 0f || value == 1f) deltaTime = 0.001f; - deltaTime = Mathf.Clamp(deltaTime, 0.00001F, 0.1F); - - // Larger regions fade slightly slower - deltaTime /= Mathf.Sqrt(Mathf.Max(lastRect.height, 100)); - - lastUpdate = Time.realtimeSinceStartup; - - - float targetValue = open ? 1F : 0F; - if (!Mathf.Approximately(targetValue, value)) { - value += deltaTime*animationSpeed*Mathf.Sign(targetValue-value); - value = Mathf.Clamp01(value); - editor.Repaint(); - - if (!fancyEffects) { - value = targetValue; - } - } else { - value = targetValue; - } - } - } - - public void Begin () { - if (areaStyle != null) { - lastRect = EditorGUILayout.BeginVertical(areaStyle); - } else { - lastRect = EditorGUILayout.BeginVertical(); - } - } - - public void HeaderLabel (string label) { - GUILayout.Label(label, labelStyle); - } - - public void Header (string label) { - Header(label, ref open); - } - - public void Header (string label, ref bool open) { - if (GUILayout.Button(label, labelStyle)) { - open = !open; - editor.Repaint(); - } - this.open = open; - } - - /** Hermite spline interpolation */ - static float Hermite (float start, float end, float value) { - return Mathf.Lerp(start, end, value * value * (3.0f - 2.0f * value)); - } - - public bool BeginFade () { - var hermite = Hermite(0, 1, value); - - visible = EditorGUILayout.BeginFadeGroup(hermite); - GUIUtilityx.PushTint(new Color(1, 1, 1, hermite)); - Tick(); - - // Another vertical group is necessary to work around - // a kink of the BeginFadeGroup implementation which - // causes the padding to change when value!=0 && value!=1 - EditorGUILayout.BeginVertical(); - - return visible; - } - - public void End () { - EditorGUILayout.EndVertical(); - - if (visible) { - // Some space that cannot be placed in the GUIStyle unfortunately - GUILayout.Space(4); - - EditorGUILayout.EndFadeGroup(); - } - - EditorGUILayout.EndVertical(); - GUIUtilityx.PopTint(); - } - } - /** Handles fading effects and also some custom GUI functions such as LayerMaskField */ - public static class EditorGUILayoutx { - static Dictionary layerNames = new Dictionary(); - static long lastUpdateTick; - - /** Tag names and an additional 'Edit Tags...' entry. - * Used for SingleTagField - */ - static string[] tagNamesAndEditTagsButton; - - /** Last time tagNamesAndEditTagsButton was updated. - * Uses EditorApplication.timeSinceStartup - */ - static double timeLastUpdatedTagNames; - - public static int TagField (string label, int value) { - // Make sure the tagNamesAndEditTagsButton is relatively up to date - if (tagNamesAndEditTagsButton == null || EditorApplication.timeSinceStartup - timeLastUpdatedTagNames > 1) { - timeLastUpdatedTagNames = EditorApplication.timeSinceStartup; - var tagNames = AstarPath.FindTagNames(); - tagNamesAndEditTagsButton = new string[tagNames.Length+1]; - tagNames.CopyTo(tagNamesAndEditTagsButton, 0); - tagNamesAndEditTagsButton[tagNamesAndEditTagsButton.Length-1] = "Edit Tags..."; - } - - // Tags are between 0 and 31 - value = Mathf.Clamp(value, 0, 31); - - var newValue = EditorGUILayout.IntPopup(label, value, tagNamesAndEditTagsButton, new [] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, -1 }); - - // Last element corresponds to the 'Edit Tags...' entry. Open the tag editor - if (newValue == -1) { - AstarPathEditor.EditTags(); - } else { - value = newValue; - } - - return value; - } - - public static bool UnityTagMaskList (GUIContent label, bool foldout, List tagMask) { - if (tagMask == null) throw new System.ArgumentNullException("tagMask"); - if (EditorGUILayout.Foldout(foldout, label)) { - EditorGUI.indentLevel++; - GUILayout.BeginVertical(); - for (int i = 0; i < tagMask.Count; i++) { - tagMask[i] = EditorGUILayout.TagField(tagMask[i]); - } - GUILayout.BeginHorizontal(); - if (GUILayout.Button("Add Tag")) tagMask.Add("Untagged"); - - EditorGUI.BeginDisabledGroup(tagMask.Count == 0); - if (GUILayout.Button("Remove Last")) tagMask.RemoveAt(tagMask.Count-1); - EditorGUI.EndDisabledGroup(); - - GUILayout.EndHorizontal(); - GUILayout.EndVertical(); - EditorGUI.indentLevel--; - return true; - } - return false; - } - - /** Displays a LayerMask field. - * \param label Label to display - * \param selected Current LayerMask - */ - public static LayerMask LayerMaskField (string label, LayerMask selected) { - if (Event.current.type == EventType.Layout && System.DateTime.UtcNow.Ticks - lastUpdateTick > 10000000L) { - layerNames.Clear(); - lastUpdateTick = System.DateTime.UtcNow.Ticks; - } - - string[] currentLayerNames; - if (!layerNames.TryGetValue(selected.value, out currentLayerNames)) { - var layers = ListPool.Claim(); - - int emptyLayers = 0; - for (int i = 0; i < 32; i++) { - string layerName = LayerMask.LayerToName(i); - - if (layerName != "") { - for (; emptyLayers > 0; emptyLayers--) layers.Add("Layer "+(i-emptyLayers)); - layers.Add(layerName); - } else { - emptyLayers++; - if (((selected.value >> i) & 1) != 0 && selected.value != -1) { - for (; emptyLayers > 0; emptyLayers--) layers.Add("Layer "+(i+1-emptyLayers)); - } - } - } - - currentLayerNames = layerNames[selected.value] = layers.ToArray(); - ListPool.Release(ref layers); - } - - selected.value = EditorGUILayout.MaskField(label, selected.value, currentLayerNames); - return selected; - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorGUIx.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorGUIx.cs.meta deleted file mode 100644 index c27c695c23ecdc50bf741c76d058e25652a2a679..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EditorGUIx.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 2b6b4977544da4af3a4fe9e895fb6888 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EnumFlagDrawer.cs b/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EnumFlagDrawer.cs deleted file mode 100644 index 8e14970f8191a7a99b5c07b5e554e7cd1439444c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EnumFlagDrawer.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Reflection; -using UnityEditor; -using UnityEngine; - -namespace Pathfinding { - [CustomPropertyDrawer(typeof(EnumFlagAttribute))] - public class EnumFlagDrawer : PropertyDrawer { - public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) { - Enum targetEnum = GetBaseProperty(property); - - EditorGUI.BeginProperty(position, label, property); - EditorGUI.BeginChangeCheck(); -#if UNITY_2017_3_OR_NEWER - Enum enumNew = EditorGUI.EnumFlagsField(position, label, targetEnum); -#else - Enum enumNew = EditorGUI.EnumMaskField(position, label, targetEnum); -#endif - if (EditorGUI.EndChangeCheck() || !property.hasMultipleDifferentValues) { - property.intValue = (int)Convert.ChangeType(enumNew, targetEnum.GetType()); - } - EditorGUI.EndProperty(); - } - - static T GetBaseProperty(SerializedProperty prop) { - // Separate the steps it takes to get to this property - string[] separatedPaths = prop.propertyPath.Split('.'); - - // Go down to the root of this serialized property - System.Object reflectionTarget = prop.serializedObject.targetObject as object; - // Walk down the path to get the target object - foreach (var path in separatedPaths) { - FieldInfo fieldInfo = reflectionTarget.GetType().GetField(path, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); - reflectionTarget = fieldInfo.GetValue(reflectionTarget); - } - return (T)reflectionTarget; - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EnumFlagDrawer.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EnumFlagDrawer.cs.meta deleted file mode 100644 index 1d12a749194176c609f9e918dc4e08382302bead..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/EnumFlagDrawer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 616267fcc419f44ea929599afa5c6aa2 -timeCreated: 1500392257 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/OptimizationHandler.cs b/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/OptimizationHandler.cs deleted file mode 100644 index 9bd289faba99023973eb1a1f4b595042722bcd4d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/OptimizationHandler.cs +++ /dev/null @@ -1,139 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using UnityEditor; - -namespace Pathfinding { - /** - * Helper for enabling or disabling compiler directives. - * Used only in the editor. - * \astarpro - */ - public static class OptimizationHandler { - public class DefineDefinition { - public string name; - public string description; - public bool enabled; - public bool consistent; - } - - /** Various build targets that Unity have deprecated. - * There is apparently no way to figute out which these are without hard coding them. - */ - static readonly BuildTargetGroup[] deprecatedBuildTargets = new BuildTargetGroup[] { - BuildTargetGroup.Unknown, -#if UNITY_5_4_OR_NEWER - (BuildTargetGroup)16, /* BlackBerry */ -#endif -#if UNITY_5_5_OR_NEWER - (BuildTargetGroup)5, /* PS3 */ - (BuildTargetGroup)6, /* XBox360 */ - (BuildTargetGroup)15, /* WP8 */ -#endif - }; - - static string GetPackageRootDirectory () { - var paths = Directory.GetDirectories($"./Assets/Model/Module/Pathfinding/", "AstarPathfindingProject", SearchOption.AllDirectories); - - if (paths.Length > 0) { - return paths[0]; - } - - Debug.LogError("Could not find AstarPathfindingProject root folder"); - return Application.dataPath + "/AstarPathfindingProject"; - } - - static Dictionary > GetDefineSymbols () { - var result = new Dictionary >(); - var buildTypes = System.Enum.GetValues(typeof(BuildTargetGroup)) as int[]; - - for (int i = 0; i < buildTypes.Length; i++) { - if (deprecatedBuildTargets.Contains((BuildTargetGroup)buildTypes[i])) continue; - - string defineString = PlayerSettings.GetScriptingDefineSymbolsForGroup((BuildTargetGroup)buildTypes[i]); - if (defineString == null) continue; - - var defines = defineString.Split(';').Select(s => s.Trim()).ToList(); - result[(BuildTargetGroup)buildTypes[i]] = defines; - } - return result; - } - - static void SetDefineSymbols (Dictionary > symbols) { - foreach (var pair in symbols) { - var defineString = string.Join(";", pair.Value.Distinct().ToArray()); - PlayerSettings.SetScriptingDefineSymbolsForGroup(pair.Key, defineString); - } - } - - public static void EnableDefine (string name) { - name = name.Trim(); - var newSymbols = GetDefineSymbols().ToDictionary(pair => pair.Key, pair => { - pair.Value.Add(name); - return pair.Value; - }); - SetDefineSymbols(newSymbols); - } - - public static void DisableDefine (string name) { - name = name.Trim(); - var newSymbols = GetDefineSymbols().ToDictionary(pair => pair.Key, pair => { - pair.Value.Remove(name); - return pair.Value; - }); - SetDefineSymbols(newSymbols); - } - - public static void IsDefineEnabled (string name, out bool enabled, out bool consistent) { - name = name.Trim(); - int foundEnabled = 0; - int foundDisabled = 0; - - foreach (var pair in GetDefineSymbols()) { - if (pair.Value.Contains(name)) { - foundEnabled++; - } else { - foundDisabled++; - } - } - - enabled = foundEnabled > foundDisabled; - consistent = (foundEnabled > 0) != (foundDisabled > 0); - } - - public static List FindDefines () { - var path = GetPackageRootDirectory()+"/defines.csv"; - - if (File.Exists(path)) { - // Read a file consisting of lines with the format - // NAME;Description - // Ignore empty lines and lines which do not contain exactly 1 ';' - var definePairs = File.ReadAllLines(path) - .Select(line => line.Trim()) - .Where(line => line.Length > 0) - .Select(line => line.Split(';')) - .Where(opts => opts.Length == 2); - - return definePairs.Select(opts => { - var def = new DefineDefinition { name = opts[0].Trim(), description = opts[1].Trim() }; - IsDefineEnabled(def.name, out def.enabled, out def.consistent); - return def; - }).ToList(); - } - - Debug.LogError("Could not find file '"+path+"'"); - return new List(); - } - - public static void ApplyDefines (List defines) { - foreach (var define in defines) { - if (define.enabled) { - EnableDefine(define.name); - } else { - DisableDefine(define.name); - } - } - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/OptimizationHandler.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/OptimizationHandler.cs.meta deleted file mode 100644 index 6ece61e8c5b63fbe6ef1453a1b8ed60cd349d1f1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/PackageTools/OptimizationHandler.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ec7eea22fd1c74193aa7d047949503e7 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/RVOControllerEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/RVOControllerEditor.cs deleted file mode 100644 index 735a661621f7e1850fae503e229b1d9bb213f1ab..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/RVOControllerEditor.cs +++ /dev/null @@ -1,58 +0,0 @@ -using UnityEngine; -using UnityEditor; - -namespace Pathfinding.RVO { - [CustomEditor(typeof(RVOController))] - [CanEditMultipleObjects] - public class RVOControllerEditor : EditorBase { - protected override void Inspector () { - EditorGUILayout.Separator(); - EditorGUILayout.LabelField("Shape", EditorStyles.boldLabel); - PropertyField("radius"); - Clamp("radius", 0.01f); - - if ((target as RVOController).movementPlane == MovementPlane.XZ) { - PropertyField("height"); - Clamp("height", 0.01f); - PropertyField("center"); - } - - EditorGUILayout.Separator(); - EditorGUILayout.LabelField("Avoidance", EditorStyles.boldLabel); - PropertyField("agentTimeHorizon"); - PropertyField("obstacleTimeHorizon"); - PropertyField("maxNeighbours"); - PropertyField("layer"); - PropertyField("collidesWith"); - PropertyField("priority"); - EditorGUILayout.Separator(); - EditorGUI.BeginDisabledGroup(PropertyField("lockWhenNotMoving")); - PropertyField("locked"); - EditorGUI.EndDisabledGroup(); - EditorGUILayout.Separator(); - PropertyField("debug"); - - bool maxNeighboursLimit = false; - bool debugAndMultithreading = false; - - for (int i = 0; i < targets.Length; i++) { - var controller = targets[i] as RVOController; - maxNeighboursLimit |= controller.rvoAgent != null && controller.rvoAgent.NeighbourCount >= controller.rvoAgent.MaxNeighbours; - debugAndMultithreading |= controller.simulator != null && controller.simulator.Multithreading && controller.debug; - } - - if (maxNeighboursLimit) { - EditorGUILayout.HelpBox("Limit of how many neighbours to consider (Max Neighbours) has been reached. Some nearby agents may have been ignored. " + - "To ensure all agents are taken into account you can raise the 'Max Neighbours' value at a cost to performance.", MessageType.Warning); - } - - if (debugAndMultithreading) { - EditorGUILayout.HelpBox("Debug mode can only be used when no multithreading is used. Set the 'Worker Threads' field on the RVOSimulator to 'None'", MessageType.Error); - } - - if (RVOSimulator.active == null && !EditorUtility.IsPersistent(target)) { - EditorGUILayout.HelpBox("There is no enabled RVOSimulator component in the scene. A single RVOSimulator component is required for local avoidance.", MessageType.Warning); - } - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/RVOControllerEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/RVOControllerEditor.cs.meta deleted file mode 100644 index 6f96fe85c041cfce336fef27e9c67346b6857d26..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/RVOControllerEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9af3f5ba99e534f21bb7566d10310a0c -timeCreated: 1467044398 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/RVONavmeshEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/RVONavmeshEditor.cs deleted file mode 100644 index 72deec33c85b7722a5d0811dda553530fce520d7..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/RVONavmeshEditor.cs +++ /dev/null @@ -1,11 +0,0 @@ -using UnityEditor; -using Pathfinding.RVO; - -namespace Pathfinding { - [CustomEditor(typeof(RVONavmesh))] - public class RVONavmeshEditor : Editor { - public override void OnInspectorGUI () { - DrawDefaultInspector(); - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/RVONavmeshEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/RVONavmeshEditor.cs.meta deleted file mode 100644 index f8312a00e8d616e3c1589c4f1446e71d11f998b9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/RVONavmeshEditor.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4eff877e8158f41ae99f5cf271cb7646 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/RVOSimulatorEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/RVOSimulatorEditor.cs deleted file mode 100644 index 19bcfa5422a66e8828e658accb34664c1d7bfd21..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/RVOSimulatorEditor.cs +++ /dev/null @@ -1,25 +0,0 @@ -using PF; -using UnityEditor; -using UnityEngine; - -namespace Pathfinding { - [CustomEditor(typeof(Pathfinding.RVO.RVOSimulator))] - public class RVOSimulatorEditor : EditorBase { - protected override void Inspector () { - PropertyField("desiredSimulationFPS"); - ClampInt("desiredSimulationFPS", 1); - - EditorGUI.BeginDisabledGroup(Application.isPlaying); - PropertyField("movementPlane"); - PropertyField("workerThreads"); - if ((ThreadCount)FindProperty("workerThreads").intValue != ThreadCount.None) { - EditorGUI.indentLevel++; - PropertyField("doubleBuffering"); - EditorGUI.indentLevel--; - } - EditorGUI.EndDisabledGroup(); - PropertyField("symmetryBreakingBias"); - PropertyField("drawObstacles"); - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/RVOSimulatorEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/RVOSimulatorEditor.cs.meta deleted file mode 100644 index d6620d43330637fe37e8e2df8fd21b7ba7e11513..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/RVOSimulatorEditor.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5d2e069b218f84e61b4ba29c4c958613 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/RVOSquareObstacleEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/RVOSquareObstacleEditor.cs deleted file mode 100644 index 82c179b64f5d6e10ca0162da208788c09705afbd..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/RVOSquareObstacleEditor.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEditor; -using Pathfinding.RVO; - -namespace Pathfinding { - [CustomEditor(typeof(RVOSquareObstacle))] - [CanEditMultipleObjects] - public class RVOSquareObstacleEditor : Editor { - public override void OnInspectorGUI () { - DrawDefaultInspector(); - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/RVOSquareObstacleEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/RVOSquareObstacleEditor.cs.meta deleted file mode 100644 index 0c70199d779d054d59e9b24fe0ba9c9c8fbda7ea..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/RVOSquareObstacleEditor.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 426beb6f8d635447fadad7ee0a592fe0 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/RecastMeshObjEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/RecastMeshObjEditor.cs deleted file mode 100644 index 63ddb673210a42eba593c4b909f0e53eb58f1290..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/RecastMeshObjEditor.cs +++ /dev/null @@ -1,64 +0,0 @@ -using UnityEngine; -using UnityEditor; - -namespace Pathfinding { - [CustomEditor(typeof(RecastMeshObj))] - [CanEditMultipleObjects] - public class RecastMeshObjEditor : EditorBase { - SerializedProperty areaProp; - SerializedProperty dynamicProp; - - protected override void OnEnable () { - areaProp = serializedObject.FindProperty("area"); - dynamicProp = serializedObject.FindProperty("dynamic"); - } - - protected override void Inspector () { - var customValue = 1; - - for (int i = 0; i < targets.Length; i++) { - var script = targets[i] as RecastMeshObj; - if (script.area > 0) { - customValue = script.area; - } - } - - EditorGUILayout.IntPopup(areaProp, new GUIContent[] { - new GUIContent("Unwalkable Surface"), - new GUIContent("Walkable Surface"), - new GUIContent("Custom Surface Area") - }, new int[] { - -1, - 0, - customValue - }, - new GUIContent("Area Type") - ); - - if (areaProp.intValue < -1) { - areaProp.intValue = 0; - } - - if (!areaProp.hasMultipleDifferentValues && areaProp.intValue >= 1) { - PropertyField(areaProp); - } - - if (!areaProp.hasMultipleDifferentValues) { - if (areaProp.intValue == -1) { - EditorGUILayout.HelpBox("All surfaces on this mesh will be made unwalkable", MessageType.None); - } else if (areaProp.intValue == 0) { - EditorGUILayout.HelpBox("All surfaces on this mesh will be walkable", MessageType.None); - } else if (areaProp.intValue > 0) { - EditorGUILayout.HelpBox("All surfaces on this mesh will be walkable and a " + - "seam will be created between the surfaces on this mesh and the surfaces on other meshes", MessageType.None); - } - } - - PropertyField(dynamicProp, "Dynamic", "Setting this value to false will give better scanning performance, but you will not be able to move the object during runtime"); - - if (!dynamicProp.hasMultipleDifferentValues && !dynamicProp.boolValue) { - EditorGUILayout.HelpBox("This object must not be moved during runtime since 'dynamic' is set to false", MessageType.Info); - } - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/RecastMeshObjEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/RecastMeshObjEditor.cs.meta deleted file mode 100644 index 774e9657774d464764c1af7feaa588d04617d500..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/RecastMeshObjEditor.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7c4297fc55c734c9bad31126dc81e49b -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Editor/AstarPathfindingProject/SeekerEditor.cs b/Unity/Assets/Editor/AstarPathfindingProject/SeekerEditor.cs deleted file mode 100644 index 4655bdfa5feb13d7702a9257507c7caedca1702a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/SeekerEditor.cs +++ /dev/null @@ -1,138 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; - -namespace Pathfinding { - [CustomEditor(typeof(Seeker))] - [CanEditMultipleObjects] - public class SeekerEditor : EditorBase { - static bool tagPenaltiesOpen; - static List scripts = new List(); - - GUIContent[] exactnessLabels = new [] { new GUIContent("Node Center (Snap To Node)"), new GUIContent("Original"), new GUIContent("Interpolate (deprecated)"), new GUIContent("Closest On Node Surface"), new GUIContent("Node Connection") }; - string[] graphLabels = new string[32]; - - protected override void Inspector () { - base.Inspector(); - - scripts.Clear(); - foreach (var script in targets) scripts.Add(script as Seeker); - - Undo.RecordObjects(targets, "Modify settings on Seeker"); - - var startEndModifierProp = FindProperty("startEndModifier"); - startEndModifierProp.isExpanded = EditorGUILayout.Foldout(startEndModifierProp.isExpanded, startEndModifierProp.displayName); - if (startEndModifierProp.isExpanded) { - EditorGUI.indentLevel++; - Popup("startEndModifier.exactStartPoint", exactnessLabels, "Start Point Snapping"); - Popup("startEndModifier.exactEndPoint", exactnessLabels, "End Point Snapping"); - PropertyField("startEndModifier.addPoints", "Add Points"); - - if (FindProperty("startEndModifier.exactStartPoint").enumValueIndex == (int)StartEndModifier.Exactness.Original || FindProperty("startEndModifier.exactEndPoint").enumValueIndex == (int)StartEndModifier.Exactness.Original) { - if (PropertyField("startEndModifier.useRaycasting", "Physics Raycasting")) { - EditorGUI.indentLevel++; - PropertyField("startEndModifier.mask", "Layer Mask"); - EditorGUI.indentLevel--; - EditorGUILayout.HelpBox("Using raycasting to snap the start/end points has largely been superseded by the 'ClosestOnNode' snapping option. It is both faster and usually closer to what you want to achieve.", MessageType.Info); - } - - if (PropertyField("startEndModifier.useGraphRaycasting", "Graph Raycasting")) { - EditorGUILayout.HelpBox("Using raycasting to snap the start/end points has largely been superseded by the 'ClosestOnNode' snapping option. It is both faster and usually closer to what you want to achieve.", MessageType.Info); - } - } - - EditorGUI.indentLevel--; - } - - // Make sure the AstarPath object is initialized and the graphs are loaded, this is required to be able to show graph names in the mask popup - AstarPath.FindAstarPath(); - - for (int i = 0; i < graphLabels.Length; i++) { - if (AstarPath.active == null || AstarPath.active.data.graphs == null || i >= AstarPath.active.data.graphs.Length || AstarPath.active.data.graphs[i] == null) graphLabels[i] = "Graph " + i + (i == 31 ? "+" : ""); - else { - graphLabels[i] = AstarPath.active.data.graphs[i].name + " (graph " + i + ")"; - } - } - - Mask("graphMask", graphLabels, "Traversable Graphs"); - - tagPenaltiesOpen = EditorGUILayout.Foldout(tagPenaltiesOpen, new GUIContent("Tags", "Settings for each tag")); - if (tagPenaltiesOpen) { - string[] tagNames = AstarPath.FindTagNames(); - EditorGUI.indentLevel++; - if (tagNames.Length != 32) { - tagNames = new string[32]; - for (int i = 0; i < tagNames.Length; i++) tagNames[i] = "" + i; - } - - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.BeginVertical(); - EditorGUILayout.LabelField("Tag", EditorStyles.boldLabel, GUILayout.MaxWidth(120)); - for (int i = 0; i < tagNames.Length; i++) { - EditorGUILayout.LabelField(tagNames[i], GUILayout.MaxWidth(120)); - } - - // Make sure the arrays are all of the correct size - for (int i = 0; i < scripts.Count; i++) { - if (scripts[i].tagPenalties == null || scripts[i].tagPenalties.Length != tagNames.Length) scripts[i].tagPenalties = new int[tagNames.Length]; - } - - if (GUILayout.Button("Edit names", EditorStyles.miniButton)) { - AstarPathEditor.EditTags(); - } - EditorGUILayout.EndVertical(); - -#if !ASTAR_NoTagPenalty - EditorGUILayout.BeginVertical(); - EditorGUILayout.LabelField("Penalty", EditorStyles.boldLabel, GUILayout.MaxWidth(100)); - var prop = FindProperty("tagPenalties").FindPropertyRelative("Array"); - prop.Next(true); - for (int i = 0; i < tagNames.Length; i++) { - prop.Next(false); - EditorGUILayout.PropertyField(prop, GUIContent.none, false, GUILayout.MinWidth(100)); - // Penalties should not be negative - if (prop.intValue < 0) prop.intValue = 0; - } - if (GUILayout.Button("Reset all", EditorStyles.miniButton)) { - for (int i = 0; i < tagNames.Length; i++) { - for (int j = 0; j < scripts.Count; j++) { - scripts[j].tagPenalties[i] = 0; - } - } - } - EditorGUILayout.EndVertical(); -#endif - - EditorGUILayout.BeginVertical(); - EditorGUILayout.LabelField("Traversable", EditorStyles.boldLabel, GUILayout.MaxWidth(100)); - for (int i = 0; i < tagNames.Length; i++) { - var anyFalse = false; - var anyTrue = false; - for (int j = 0; j < scripts.Count; j++) { - var prevTraversable = ((scripts[j].traversableTags >> i) & 0x1) != 0; - anyTrue |= prevTraversable; - anyFalse |= !prevTraversable; - } - EditorGUI.BeginChangeCheck(); - EditorGUI.showMixedValue = anyTrue & anyFalse; - var newTraversable = EditorGUILayout.Toggle(anyTrue); - EditorGUI.showMixedValue = false; - if (EditorGUI.EndChangeCheck()) { - for (int j = 0; j < scripts.Count; j++) { - scripts[j].traversableTags = (scripts[j].traversableTags & ~(1 << i)) | ((newTraversable ? 1 : 0) << i); - } - } - } - - if (GUILayout.Button("Set all/none", EditorStyles.miniButton)) { - for (int j = scripts.Count - 1; j >= 0; j--) { - scripts[j].traversableTags = (scripts[0].traversableTags & 0x1) == 0 ? -1 : 0; - } - } - EditorGUILayout.EndVertical(); - - EditorGUILayout.EndHorizontal(); - } - } - } -} diff --git a/Unity/Assets/Editor/AstarPathfindingProject/SeekerEditor.cs.meta b/Unity/Assets/Editor/AstarPathfindingProject/SeekerEditor.cs.meta deleted file mode 100644 index 4d38d9cf60e019f105e754e5cc64c0c54abeccfc..0000000000000000000000000000000000000000 --- a/Unity/Assets/Editor/AstarPathfindingProject/SeekerEditor.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 95febb4c5ed8c46939368f03ecf4b3b0 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/HotfixView/Scene/SceneFactory.cs.meta b/Unity/Assets/Hotfix/Scene/SceneFactory.cs.meta similarity index 83% rename from Unity/Assets/HotfixView/Scene/SceneFactory.cs.meta rename to Unity/Assets/Hotfix/Scene/SceneFactory.cs.meta index 6020b88788a23057848eb22be3344faafb065382..987803b30b2f0e68eee35a4907d10d9da007ab6d 100644 --- a/Unity/Assets/HotfixView/Scene/SceneFactory.cs.meta +++ b/Unity/Assets/Hotfix/Scene/SceneFactory.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a9f01770536b14815929d94669f2daac +guid: 7cbe6b8dba0d1462e8ef45f7674b9794 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels.meta b/Unity/Assets/HotfixView/Module/UI.meta similarity index 77% rename from Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels.meta rename to Unity/Assets/HotfixView/Module/UI.meta index 5f72ea3d01c15b18bd43d12010d47a5b1380e25a..030573c767de2a8b0fca9e622586a4b460a7b74b 100644 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels.meta +++ b/Unity/Assets/HotfixView/Module/UI.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 87b031d5bd1a7af4690d4ba8eb41a061 +guid: 75eb786cd38dd4360856ae840c88118e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Unity/Assets/HotfixView/UI/UILoading/UILoadingFactory.cs.meta b/Unity/Assets/HotfixView/Module/UI/UIComponentSystem.cs.meta similarity index 83% rename from Unity/Assets/HotfixView/UI/UILoading/UILoadingFactory.cs.meta rename to Unity/Assets/HotfixView/Module/UI/UIComponentSystem.cs.meta index 90b4fe7d4c2b99d9d457e3ab91f6437b744e2db7..3e6dc0594efa968b258599b30626f1448f5bbf78 100644 --- a/Unity/Assets/HotfixView/UI/UILoading/UILoadingFactory.cs.meta +++ b/Unity/Assets/HotfixView/Module/UI/UIComponentSystem.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e33bf5d983ac4984eb672c26e92f5b3b +guid: 9aeba88b091004d619b35f5f86b3f4d7 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Unity/Assets/HotfixView/UI/UILobby/UILobbyFactory.cs.meta b/Unity/Assets/HotfixView/Module/UI/UIEventComponentSystem.cs.meta similarity index 83% rename from Unity/Assets/HotfixView/UI/UILobby/UILobbyFactory.cs.meta rename to Unity/Assets/HotfixView/Module/UI/UIEventComponentSystem.cs.meta index 67af47d1ab09d644acb53126eeaf8e9897727a3c..e87c1c8359b3e9465348e216a4f2a30540da01c5 100644 --- a/Unity/Assets/HotfixView/UI/UILobby/UILobbyFactory.cs.meta +++ b/Unity/Assets/HotfixView/Module/UI/UIEventComponentSystem.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 67ca4e4ba3fc2414289ea08371fd8f6e +guid: 2d421e05c4af7412fbdaef6cd3aaec29 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Unity/Assets/HotfixView/UI/UILogin/UILoginFactory.cs.meta b/Unity/Assets/HotfixView/Scene/AfterCreateZoneScene_AddComponent.cs.meta similarity index 83% rename from Unity/Assets/HotfixView/UI/UILogin/UILoginFactory.cs.meta rename to Unity/Assets/HotfixView/Scene/AfterCreateZoneScene_AddComponent.cs.meta index 63d9d89efd21415beb2629f8e21260e2ffb05edd..76cef57e324307b507598a6ab80b5e8087bef8f5 100644 --- a/Unity/Assets/HotfixView/UI/UILogin/UILoginFactory.cs.meta +++ b/Unity/Assets/HotfixView/Scene/AfterCreateZoneScene_AddComponent.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 746fb2e27ae09fd4d836da59f0dc92cc +guid: 503f7b1954f4a485cbcc0c7c309365f1 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Unity/Assets/HotfixView/UI/UILoading/UILoadingEvent.cs.meta b/Unity/Assets/HotfixView/UI/UILoading/UILoadingEvent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..80036a615d26541c57e6d493edb1e4970c9c0757 --- /dev/null +++ b/Unity/Assets/HotfixView/UI/UILoading/UILoadingEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d5c9bc9d2d1b4b05867de024ac6ba3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Assets/HotfixView/UI/UILobby/UILobbyEvent.cs.meta b/Unity/Assets/HotfixView/UI/UILobby/UILobbyEvent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2eb19bad7b2e6e1c9a1ce496f8b7378bdb5880e3 --- /dev/null +++ b/Unity/Assets/HotfixView/UI/UILobby/UILobbyEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9edb3a5eab7744cd68be644c82917e41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Assets/HotfixView/UI/UILogin/UILoginEvent.cs.meta b/Unity/Assets/HotfixView/UI/UILogin/UILoginEvent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e8eccb01033b03388c6ea548e0b0770b86db472b --- /dev/null +++ b/Unity/Assets/HotfixView/UI/UILogin/UILoginEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a182821bdd3e4b51a720ad29f29c543 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject.meta deleted file mode 100644 index 08b05a4d6ae868d6280991c734269e8b23cac29c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: fb5807b97a0a3b64896eab5692779e59 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors.meta deleted file mode 100644 index 4c14894944a0d64486697aed4e9c0cf366a1ded6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 9f3a9deec9ab2014c8ee8dc824630116 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/AIDestinationSetter.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/AIDestinationSetter.cs deleted file mode 100644 index e676a6aa49a1f6b94788ec0206b53169ffa7a222..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/AIDestinationSetter.cs +++ /dev/null @@ -1,38 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Pathfinding { - /** Sets the destination of an AI to the position of a specified object. - * This component should be attached to a GameObject together with a movement script such as AIPath, RichAI or AILerp. - * This component will then make the AI move towards the #target set on this component. - * - * \see #Pathfinding.IAstarAI.destination - * - * \shadowimage{aidestinationsetter.png} - */ - [UniqueComponent(tag = "ai.destination")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_a_i_destination_setter.php")] - public class AIDestinationSetter : VersionedMonoBehaviour { - /** The object that the AI should move to */ - public Transform target; - IAstarAI ai; - - void OnEnable () { - ai = GetComponent(); - // Update the destination right before searching for a path as well. - // This is enough in theory, but this script will also update the destination every - // frame as the destination is used for debugging and may be used for other things by other - // scripts as well. So it makes sense that it is up to date every frame. - if (ai != null) ai.onSearchPath += Update; - } - - void OnDisable () { - if (ai != null) ai.onSearchPath -= Update; - } - - /** Updates the AI's destination every frame */ - void Update () { - if (target != null && ai != null) ai.destination = target.position; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/AIDestinationSetter.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/AIDestinationSetter.cs.meta deleted file mode 100644 index 3c21a458d7c0f406f44e52ea482d36687675cbb3..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/AIDestinationSetter.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c9679e68a0f1144e79c664d9a11ca121 -timeCreated: 1495015523 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/Patrol.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/Patrol.cs deleted file mode 100644 index f88b133c5cdc9b58e3c7d2442b3f11bd020cd436..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/Patrol.cs +++ /dev/null @@ -1,56 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Pathfinding { - /** Simple patrol behavior. - * This will set the destination on the agent so that it moves through the sequence of objects in the #targets array. - * Upon reaching a target it will wait for #delay seconds. - * - * \see #Pathfinding.AIDestinationSetter - * \see #Pathfinding.AIPath - * \see #Pathfinding.RichAI - * \see #Pathfinding.AILerp - */ - [UniqueComponent(tag = "ai.destination")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_patrol.php")] - public class Patrol : VersionedMonoBehaviour { - /** Target points to move to in order */ - public Transform[] targets; - - /** Time in seconds to wait at each target */ - public float delay = 0; - - /** Current target index */ - int index; - - IAstarAI agent; - float switchTime = float.PositiveInfinity; - - protected override void Awake () { - base.Awake(); - agent = GetComponent(); - } - - /** Update is called once per frame */ - void Update () { - if (targets.Length == 0) return; - - bool search = false; - - if (agent.reachedEndOfPath && !agent.pathPending && float.IsPositiveInfinity(switchTime)) { - switchTime = Time.time + delay; - } - - if (Time.time >= switchTime) { - index = index + 1; - search = true; - switchTime = float.PositiveInfinity; - } - - index = index % targets.Length; - agent.destination = targets[index].position; - - if (search) agent.SearchPath(); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/Patrol.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/Patrol.cs.meta deleted file mode 100644 index 62609694f74429f97f49525dca64bc79de773d85..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Behaviors/Patrol.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 22e6c29e32504465faa943c537d8029b -timeCreated: 1495286303 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core.meta deleted file mode 100644 index 95eaa39302d65279083a8c7e42ca17057179d774..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 11899043b35f76145bdd99a61d188977 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI.meta deleted file mode 100644 index a76d9b98e089d6b6b4425b46f58b8bec315333c7..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 7af64ef94526c96489a52956409d4227 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIBase.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIBase.cs deleted file mode 100644 index 9e71721d94cd8f8982e270b02c38a4f9bc8a982c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIBase.cs +++ /dev/null @@ -1,657 +0,0 @@ -using UnityEngine; -using System.Collections; -using PF; -using Mathf = UnityEngine.Mathf; -using Quaternion = UnityEngine.Quaternion; -using Vector2 = UnityEngine.Vector2; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - using Pathfinding.RVO; - using Pathfinding.Util; - - /** Base class for AIPath and RichAI. - * This class holds various methods and fields that are common to both AIPath and RichAI. - * - * \see #Pathfinding.AIPath - * \see #Pathfinding.RichAI - * \see #Pathfinding.IAstarAI (all movement scripts implement this interface) - */ - [RequireComponent(typeof(Seeker))] - public abstract class AIBase : VersionedMonoBehaviour { - /** Determines how often the agent will search for new paths (in seconds). - * The agent will plan a new path to the target every N seconds. - * - * If you have fast moving targets or AIs, you might want to set it to a lower value. - * - * \see #RepeatTrySearchPath - */ - public float repathRate = 0.5f; - - /** \copydoc Pathfinding::IAstarAI::canSearch */ - [UnityEngine.Serialization.FormerlySerializedAs("repeatedlySearchPaths")] - public bool canSearch = true; - - /** \copydoc Pathfinding::IAstarAI::canMove */ - public bool canMove = true; - - /** Max speed in world units per second */ - [UnityEngine.Serialization.FormerlySerializedAs("speed")] - public float maxSpeed = 1; - - /** Gravity to use. - * If set to (NaN,NaN,NaN) then Physics.Gravity (configured in the Unity project settings) will be used. - * If set to (0,0,0) then no gravity will be used and no raycast to check for ground penetration will be performed. - */ - public Vector3 gravity = new Vector3(float.NaN, float.NaN, float.NaN); - - /** Layer mask to use for ground placement. - * Make sure this does not include the layer of any colliders attached to this gameobject. - * - * \see #gravity - * \see https://docs.unity3d.com/Manual/Layers.html - */ - public LayerMask groundMask = -1; - - /** Offset along the Y coordinate for the ground raycast start position. - * Normally the pivot of the character is at the character's feet, but you usually want to fire the raycast - * from the character's center, so this value should be half of the character's height. - * - * A green gizmo line will be drawn upwards from the pivot point of the character to indicate where the raycast will start. - * - * \see #gravity - */ - public float centerOffset = 1; - - /** If true, the forward axis of the character will be along the Y axis instead of the Z axis. - * - * For 3D games you most likely want to leave this the default value which is false. - * For 2D games you most likely want to change this to true as in 2D games you usually - * want the Y axis to be the forwards direction of the character. - * - * \shadowimage{aibase_forward_axis.png} - */ - public bool rotationIn2D = false; - - /** Position of the agent. - * If #updatePosition is true then this value will be synchronized every frame with Transform.position. - */ - protected Vector3 simulatedPosition; - - /** Rotation of the agent. - * If #updateRotation is true then this value will be synchronized every frame with Transform.rotation. - */ - protected Quaternion simulatedRotation; - - /** Position of the agent. - * In world space. - * If #updatePosition is true then this value is idential to transform.position. - * \see #Teleport - * \see #Move - */ - public Vector3 position { get { return updatePosition ? tr.position : simulatedPosition; } } - - /** Rotation of the agent. - * If #updateRotation is true then this value is identical to transform.rotation. - */ - public Quaternion rotation { get { return updateRotation ? tr.rotation : simulatedRotation; } } - - /** Accumulated movement deltas from the #Move method */ - Vector3 accumulatedMovementDelta = Vector3.zero; - - /** Current desired velocity of the agent (does not include local avoidance and physics). - * Lies in the movement plane. - */ - protected Vector2 velocity2D; - - /** Velocity due to gravity. - * Perpendicular to the movement plane. - * - * When the agent is grounded this may not accurately reflect the velocity of the agent. - * It may be non-zero even though the agent is not moving. - */ - protected float verticalVelocity; - - /** Cached Seeker component */ - protected Seeker seeker; - - /** Cached Transform component */ - protected Transform tr; - - /** Cached Rigidbody component */ - protected Rigidbody rigid; - - /** Cached Rigidbody component */ - protected Rigidbody2D rigid2D; - - /** Cached CharacterController component */ - protected CharacterController controller; - - /** Cached RVOController component */ - protected RVOController rvoController; - - /** Plane which this agent is moving in. - * This is used to convert between world space and a movement plane to make it possible to use this script in - * both 2D games and 3D games. - */ - public IMovementPlane movementPlane = GraphTransform.identityTransform; - - /** Determines if the character's position should be coupled to the Transform's position. - * If false then all movement calculations will happen as usual, but the object that this component is attached to will not move - * instead only the #position property will change. - * - * This is useful if you want to control the movement of the character using some other means such - * as for example root motion but still want the AI to move freely. - * \see Combined with calling #MovementUpdate from a separate script instead of it being called automatically one can take a similar approach to what is documented here: https://docs.unity3d.com/Manual/nav-CouplingAnimationAndNavigation.html - * - * \see #canMove which in contrast to this field will disable all movement calculations. - * \see #updateRotation - */ - [System.NonSerialized] - public bool updatePosition = true; - - /** Determines if the character's rotation should be coupled to the Transform's rotation. - * If false then all movement calculations will happen as usual, but the object that this component is attached to will not rotate - * instead only the #rotation property will change. - * - * \see #updatePosition - */ - [System.NonSerialized] - public bool updateRotation = true; - - /** Indicates if gravity is used during this frame */ - protected bool usingGravity { get; private set; } - - /** Delta time used for movement during the last frame */ - protected float lastDeltaTime; - - /** Last frame index when #prevPosition1 was updated */ - protected int prevFrame; - - /** Position of the character at the end of the last frame */ - protected Vector3 prevPosition1; - - /** Position of the character at the end of the frame before the last frame */ - protected Vector3 prevPosition2; - - /** Amount which the character wants or tried to move with during the last frame */ - protected Vector2 lastDeltaPosition; - - /** Only when the previous path has been calculated should the script consider searching for a new path */ - protected bool waitingForPathCalculation = false; - - /** Time when the last path request was started */ - protected float lastRepath = float.NegativeInfinity; - - [UnityEngine.Serialization.FormerlySerializedAs("target")][SerializeField][HideInInspector] - Transform targetCompatibility; - - /** True if the Start method has been executed. - * Used to test if coroutines should be started in OnEnable to prevent calculating paths - * in the awake stage (or rather before start on frame 0). - */ - bool startHasRun = false; - - /** Target to move towards. - * The AI will try to follow/move towards this target. - * It can be a point on the ground where the player has clicked in an RTS for example, or it can be the player object in a zombie game. - * - * \deprecated In 4.1 this will automatically add a \link Pathfinding.AIDestinationSetter AIDestinationSetter\endlink component and set the target on that component. - * Try instead to use the #destination property which does not require a transform to be created as the target or use - * the AIDestinationSetter component directly. - */ - [System.Obsolete("Use the destination property or the AIDestinationSetter component instead")] - public Transform target { - get { - var setter = GetComponent(); - return setter != null ? setter.target : null; - } - set { - targetCompatibility = null; - var setter = GetComponent(); - if (setter == null) setter = gameObject.AddComponent(); - setter.target = value; - destination = value != null ? value.position : new Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - } - } - - /** \copydoc Pathfinding::IAstarAI::destination */ - public Vector3 destination { get; set; } - - /** \copydoc Pathfinding::IAstarAI::velocity */ - public Vector3 velocity { - get { - return lastDeltaTime > 0.000001f ? (prevPosition1 - prevPosition2) / lastDeltaTime : Vector3.zero; - } - } - - /** Velocity that this agent wants to move with. - * Includes gravity and local avoidance if applicable. - */ - public Vector3 desiredVelocity { - get - { - return lastDeltaTime > 0.00001f ? (movementPlane.ToWorld(lastDeltaPosition.ToPFV2() / lastDeltaTime, verticalVelocity)).ToUnityV3() : Vector3.zero; - } - } - - /** \copydoc Pathfinding::IAstarAI::isStopped */ - public bool isStopped { get; set; } - - /** \copydoc Pathfinding::IAstarAI::onSearchPath */ - public System.Action onSearchPath { get; set; } - - /** True if the path should be automatically recalculated as soon as possible */ - protected virtual bool shouldRecalculatePath { - get { - return Time.time - lastRepath >= repathRate && !waitingForPathCalculation && canSearch && !float.IsPositiveInfinity(destination.x); - } - } - - protected AIBase () { - // Note that this needs to be set here in the constructor and not in e.g Awake - // because it is possible that other code runs and sets the destination property - // before the Awake method on this script runs. - destination = new Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - } - - protected virtual void FindComponents () { - tr = transform; - seeker = GetComponent(); - rvoController = GetComponent(); - // Find attached movement components - controller = GetComponent(); - rigid = GetComponent(); - rigid2D = GetComponent(); - } - - /** Called when the component is enabled */ - protected virtual void OnEnable () { - FindComponents(); - // Make sure we receive callbacks when paths are calculated - seeker.pathCallback += OnPathComplete; - Init(); - } - - /** Starts searching for paths. - * If you override this method you should in most cases call base.Start () at the start of it. - * \see #Init - */ - protected virtual void Start () { - startHasRun = true; - Init(); - } - - void Init () { - if (startHasRun) { - // Clamp the agent to the navmesh (which is what the Teleport call will do essentially. Though only some movement scripts require this, like RichAI). - // The Teleport call will also make sure some variables are properly initialized (like #prevPosition1 and #prevPosition2) - Teleport(position, false); - lastRepath = float.NegativeInfinity; - if (shouldRecalculatePath) SearchPath(); - } - } - - /** \copydoc Pathfinding::IAstarAI::Teleport */ - public virtual void Teleport (Vector3 newPosition, bool clearPath = true) { - if (clearPath) CancelCurrentPathRequest(); - prevPosition1 = prevPosition2 = simulatedPosition = newPosition; - if (updatePosition) tr.position = newPosition; - if (rvoController != null) rvoController.Move(Vector3.zero); - if (clearPath) SearchPath(); - } - - protected void CancelCurrentPathRequest () { - waitingForPathCalculation = false; - // Abort calculation of the current path - if (seeker != null) seeker.CancelCurrentPathRequest(); - } - - protected virtual void OnDisable () { - CancelCurrentPathRequest(); - - // Make sure we no longer receive callbacks when paths complete - seeker.pathCallback -= OnPathComplete; - - velocity2D = Vector3.zero; - accumulatedMovementDelta = Vector3.zero; - verticalVelocity = 0f; - lastDeltaTime = 0; - } - - /** Called every frame. - * If no rigidbodies are used then all movement happens here. - */ - protected virtual void Update () { - if (shouldRecalculatePath) SearchPath(); - - // If gravity is used depends on a lot of things. - // For example when a non-kinematic rigidbody is used then the rigidbody will apply the gravity itself - // Note that the gravity can contain NaN's, which is why the comparison uses !(a==b) instead of just a!=b. - usingGravity = !(gravity == Vector3.zero) && (!updatePosition || ((rigid == null || rigid.isKinematic) && (rigid2D == null || rigid2D.isKinematic))); - if (rigid == null && rigid2D == null && canMove) { - Vector3 nextPosition; - Quaternion nextRotation; - MovementUpdate(Time.deltaTime, out nextPosition, out nextRotation); - FinalizeMovement(nextPosition, nextRotation); - } - } - - /** Called every physics update. - * If rigidbodies are used then all movement happens here. - */ - protected virtual void FixedUpdate () { - if (!(rigid == null && rigid2D == null) && canMove) { - Vector3 nextPosition; - Quaternion nextRotation; - MovementUpdate(Time.fixedDeltaTime, out nextPosition, out nextRotation); - FinalizeMovement(nextPosition, nextRotation); - } - } - - /** \copydoc Pathfinding::IAstarAI::MovementUpdate */ - public void MovementUpdate (float deltaTime, out Vector3 nextPosition, out Quaternion nextRotation) { - lastDeltaTime = deltaTime; - MovementUpdateInternal(deltaTime, out nextPosition, out nextRotation); - } - - /** Called during either Update or FixedUpdate depending on if rigidbodies are used for movement or not */ - protected abstract void MovementUpdateInternal (float deltaTime, out Vector3 nextPosition, out Quaternion nextRotation); - - /** Outputs the start point and end point of the next automatic path request. - * This is a separate method to make it easy for subclasses to swap out the endpoints - * of path requests. For example the #LocalSpaceRichAI script which requires the endpoints - * to be transformed to graph space first. - */ - protected virtual void CalculatePathRequestEndpoints (out Vector3 start, out Vector3 end) { - start = GetFeetPosition(); - end = destination; - } - - /** \copydoc Pathfinding::IAstarAI::SearchPath */ - public virtual void SearchPath () { - if (float.IsPositiveInfinity(destination.x)) return; - if (onSearchPath != null) onSearchPath(); - - lastRepath = Time.time; - waitingForPathCalculation = true; - - seeker.CancelCurrentPathRequest(); - - Vector3 start, end; - CalculatePathRequestEndpoints(out start, out end); - - // Alternative way of requesting the path - //ABPath p = ABPath.Construct(start, end, null); - //seeker.StartPath(p); - - // This is where we should search to - // Request a path to be calculated from our current position to the destination - seeker.StartPath(start, end); - } - - /** Position of the base of the character. - * This is used for pathfinding as the character's pivot point is sometimes placed - * at the center of the character instead of near the feet. In a building with multiple floors - * the center of a character may in some scenarios be closer to the navmesh on the floor above - * than to the floor below which could cause an incorrect path to be calculated. - * To solve this the start point of the requested paths is always at the base of the character. - */ - public virtual Vector3 GetFeetPosition () { - if (rvoController != null && rvoController.enabled && rvoController.movementPlane == MovementPlane.XZ) { - return position + (rotation * Vector3.up)*(rvoController.center - rvoController.height*0.5f); - } - - // Use the base of the CharacterController. - // If updatePosition is false then fall back to only using the simulated position - if (controller != null && controller.enabled && updatePosition) { - return tr.TransformPoint(controller.center) - Vector3.up*controller.height*0.5F; - } - - return position; - } - - /** Called when a requested path has been calculated */ - protected abstract void OnPathComplete (Path newPath); - - /** \copydoc Pathfinding::IAstarAI::SetPath */ - public void SetPath (Path path) { - if (path.PipelineState == PathState.Created) { - // Path has not started calculation yet - lastRepath = Time.time; - waitingForPathCalculation = true; - seeker.CancelCurrentPathRequest(); - seeker.StartPath(path); - } else if (path.PipelineState == PathState.Returned) { - // Path has already been calculated - - // We might be calculating another path at the same time, and we don't want that path to override this one. So cancel it. - if (seeker.GetCurrentPath() != path) seeker.CancelCurrentPathRequest(); - else throw new System.ArgumentException("If you calculate the path using seeker.StartPath then this script will pick up the calculated path anyway as it listens for all paths the Seeker finishes calculating. You should not call SetPath in that case."); - - OnPathComplete(path); - } else { - // Path calculation has been started, but it is not yet complete. Cannot really handle this. - throw new System.ArgumentException("You must call the SetPath method with a path that either has been completely calculated or one whose path calculation has not been started at all. It looks like the path calculation for the path you tried to use has been started, but is not yet finished."); - } - } - - /** Accelerates the agent downwards. - * \see #verticalVelocity - * \see #gravity - */ - protected void ApplyGravity (float deltaTime) { - // Apply gravity - if (usingGravity) { - float verticalGravity; - velocity2D += (movementPlane.ToPlane(deltaTime * (float.IsNaN(gravity.x) ? Physics.gravity : gravity), out verticalGravity)).ToUnityV2(); - verticalVelocity += verticalGravity; - } else { - verticalVelocity = 0; - } - } - - /** Calculates how far to move during a single frame */ - protected Vector2 CalculateDeltaToMoveThisFrame (Vector2 position, float distanceToEndOfPath, float deltaTime) { - if (rvoController != null && rvoController.enabled) { - // Use RVOController to get a processed delta position - // such that collisions will be avoided if possible - return movementPlane.ToPlane(rvoController.CalculateMovementDelta(movementPlane.ToWorld(position.ToPFV2(), 0).ToUnityV3(), deltaTime).ToPFV3()).ToUnityV2(); - } - // Direction and distance to move during this frame - return Vector2.ClampMagnitude(velocity2D * deltaTime, distanceToEndOfPath); - } - - /** Simulates rotating the agent towards the specified direction and returns the new rotation. - * \param direction Direction in world space to rotate towards. - * \param maxDegrees Maximum number of degrees to rotate this frame. - * - * Note that this only calculates a new rotation, it does not change the actual rotation of the agent. - * Useful when you are handling movement externally using #FinalizeMovement but you want to use the built-in rotation code. - * - * \see #rotationIn2D - */ - public Quaternion SimulateRotationTowards (Vector3 direction, float maxDegrees) { - return SimulateRotationTowards(movementPlane.ToPlane(direction.ToPFV3()).ToUnityV2(), maxDegrees); - } - - /** Simulates rotating the agent towards the specified direction and returns the new rotation. - * \param direction Direction in the movement plane to rotate towards. - * \param maxDegrees Maximum number of degrees to rotate this frame. - * - * Note that this only calculates a new rotation, it does not change the actual rotation of the agent. - * - * \see #rotationIn2D - * \see #movementPlane - */ - protected Quaternion SimulateRotationTowards (Vector2 direction, float maxDegrees) { - if (direction != Vector2.zero) { - Quaternion targetRotation = Quaternion.LookRotation(movementPlane.ToWorld(direction.ToPFV2(), 0).ToUnityV3(), movementPlane.ToWorld(Vector2.zero.ToPFV2(), 1).ToUnityV3()); - // This causes the character to only rotate around the Z axis - if (rotationIn2D) targetRotation *= Quaternion.Euler(90, 0, 0); - return Quaternion.RotateTowards(simulatedRotation, targetRotation, maxDegrees); - } - return simulatedRotation; - } - - /** \copydoc Pathfinding::IAstarAI::Move */ - public virtual void Move (Vector3 deltaPosition) { - accumulatedMovementDelta += deltaPosition; - } - - /** Moves the agent to a position. - * \param nextPosition New position of the agent. - * \param nextRotation New rotation of the agent. - * - * This is used if you want to override how the agent moves. For example if you are using - * root motion with Mecanim. - * - * This will use a CharacterController, Rigidbody, Rigidbody2D or the Transform component depending on what options - * are available. - * - * The agent will be clamped to the navmesh after the movement (if such information is available, generally this is only done by the RichAI component). - * - * \see #MovementUpdate for some example code. - * \see #controller, #rigid, #rigid2D - */ - public virtual void FinalizeMovement (Vector3 nextPosition, Quaternion nextRotation) { - FinalizeRotation(nextRotation); - FinalizePosition(nextPosition); - } - - void FinalizeRotation (Quaternion nextRotation) { - simulatedRotation = nextRotation; - if (updateRotation) { - if (rigid != null) rigid.MoveRotation(nextRotation); - else if (rigid2D != null) rigid2D.MoveRotation(nextRotation.eulerAngles.z); - else tr.rotation = nextRotation; - } - } - - void FinalizePosition (Vector3 nextPosition) { - // Use a local variable, it is significantly faster - Vector3 currentPosition = simulatedPosition; - bool positionDirty1 = false; - - if (controller != null && controller.enabled && updatePosition) { - // Use CharacterController - // The Transform may not be at #position if it was outside the navmesh and had to be moved to the closest valid position - tr.position = currentPosition; - controller.Move((nextPosition - currentPosition) + accumulatedMovementDelta); - // Grab the position after the movement to be able to take physics into account - // TODO: Add this into the clampedPosition calculation below to make RVO better respond to physics - currentPosition = tr.position; - if (controller.isGrounded) verticalVelocity = 0; - } else { - // Use Transform, Rigidbody, Rigidbody2D or nothing at all (if updatePosition = false) - float lastElevation; - movementPlane.ToPlane(currentPosition, out lastElevation); - currentPosition = nextPosition + accumulatedMovementDelta; - - // Position the character on the ground - if (usingGravity) currentPosition = RaycastPosition(currentPosition, lastElevation); - positionDirty1 = true; - } - - // Clamp the position to the navmesh after movement is done - bool positionDirty2 = false; - currentPosition = ClampToNavmesh(currentPosition, out positionDirty2); - - // Assign the final position to the character if we haven't already set it (mostly for performance, setting the position can be slow) - if ((positionDirty1 || positionDirty2) && updatePosition) { - // Note that rigid.MovePosition may or may not move the character immediately. - // Check the Unity documentation for the special cases. - if (rigid != null) rigid.MovePosition(currentPosition); - else if (rigid2D != null) rigid2D.MovePosition(currentPosition); - else tr.position = currentPosition; - } - - accumulatedMovementDelta = Vector3.zero; - simulatedPosition = currentPosition; - UpdateVelocity(); - } - - protected void UpdateVelocity () { - var currentFrame = Time.frameCount; - - if (currentFrame != prevFrame) prevPosition2 = prevPosition1; - prevPosition1 = position; - prevFrame = currentFrame; - } - - /** Constrains the character's position to lie on the navmesh. - * Not all movement scripts have support for this. - * - * \param position Current position of the character. - * \param positionChanged True if the character's position was modified by this method. - * - * \returns New position of the character that has been clamped to the navmesh. - */ - protected virtual Vector3 ClampToNavmesh (Vector3 position, out bool positionChanged) { - positionChanged = false; - return position; - } - - /** Checks if the character is grounded and prevents ground penetration. - * \param position Position of the character in the world. - * \param lastElevation Elevation coordinate before the agent was moved. This is along the 'up' axis of the #movementPlane. - * - * Sets #verticalVelocity to zero if the character is grounded. - * - * \returns The new position of the character. - */ - protected Vector3 RaycastPosition (Vector3 position, float lastElevation) { - RaycastHit hit; - float elevation; - - movementPlane.ToPlane(position, out elevation); - float rayLength = centerOffset + Mathf.Max(0, lastElevation-elevation); - Vector3 rayOffset = movementPlane.ToWorld(Vector2.zero.ToPFV2(), rayLength).ToUnityV3(); - - if (Physics.Raycast(position + rayOffset, -rayOffset, out hit, rayLength, groundMask, QueryTriggerInteraction.Ignore)) { - // Grounded - // Make the vertical velocity fall off exponentially. This is reasonable from a physical standpoint as characters - // are not completely stiff and touching the ground will not immediately negate all velocity downwards. The AI will - // stop moving completely due to the raycast penetration test but it will still *try* to move downwards. This helps - // significantly when moving down along slopes as if the vertical velocity would be set to zero when the character - // was grounded it would lead to a kind of 'bouncing' behavior (try it, it's hard to explain). Ideally this should - // use a more physically correct formula but this is a good approximation and is much more performant. The constant - // '5' in the expression below determines how quickly it converges but high values can lead to too much noise. - verticalVelocity *= System.Math.Max(0, 1 - 5 * lastDeltaTime); - return hit.point; - } - return position; - } - - protected static readonly Color GizmoColorRaycast = new Color(118.0f/255, 206.0f/255, 112.0f/255); - - protected virtual void OnDrawGizmosSelected () { - // When selected in the Unity inspector it's nice to make the component react instantly if - // any other components are attached/detached or enabled/disabled. - // We don't want to do this normally every frame because that would be expensive. - if (Application.isPlaying) FindComponents(); - } - - protected virtual void OnDrawGizmos () { - if (!Application.isPlaying || !enabled) FindComponents(); - - // Note that the gravity can contain NaN's, which is why the comparison uses !(a==b) instead of just a!=b. - var usingGravity = !(gravity == Vector3.zero) && (!updatePosition || ((rigid == null || rigid.isKinematic) && (rigid2D == null || rigid2D.isKinematic))); - if (usingGravity && (controller == null || !controller.enabled)) { - Gizmos.color = GizmoColorRaycast; - Gizmos.DrawLine(position, position + transform.up*centerOffset); - Gizmos.DrawLine(position - transform.right*0.1f, position + transform.right*0.1f); - Gizmos.DrawLine(position - transform.forward*0.1f, position + transform.forward*0.1f); - } - - if (!float.IsPositiveInfinity(destination.x) && Application.isPlaying) Draw.Gizmos.CircleXZ(destination, 0.2f, Color.blue); - } - - protected override int OnUpgradeSerializedData (int version, bool unityThread) { - #pragma warning disable 618 - if (unityThread && targetCompatibility != null) target = targetCompatibility; - #pragma warning restore 618 - return 1; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIBase.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIBase.cs.meta deleted file mode 100644 index b9f18beae1230c3550ba48b44c60cecadedd5bc2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIBase.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a08f67bbe580e4ddfaebd06363c9cc97 -timeCreated: 1496932372 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 100 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AILerp.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AILerp.cs deleted file mode 100644 index 0111b4773073827e9c106e8e1b80e3206b4fc16e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AILerp.cs +++ /dev/null @@ -1,562 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using PF; -using Mathf = UnityEngine.Mathf; -using Quaternion = UnityEngine.Quaternion; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - using Pathfinding.Util; - - /** Linearly interpolating movement script. - * This movement script will follow the path exactly, it uses linear interpolation to move between the waypoints in the path. - * This is desirable for some types of games. - * It also works in 2D. - * - * \see You can see an example of this script in action in the example scene called \a Example15_2D. - * - * \section rec Configuration - * \subsection rec-snapped Recommended setup for movement along connections - * - * This depends on what type of movement you are aiming for. - * If you are aiming for movement where the unit follows the path exactly and move only along the graph connections on a grid/point graph. - * I recommend that you adjust the StartEndModifier on the Seeker component: set the 'Start Point Snapping' field to 'NodeConnection' and the 'End Point Snapping' field to 'SnapToNode'. - * \shadowimage{ailerp_recommended_snapped.png} - * \shadowimage{ailerp_snapped_movement.png} - * - * \subsection rec-smooth Recommended setup for smooth movement - * If you on the other hand want smoother movement I recommend setting 'Start Point Snapping' and 'End Point Snapping' to 'ClosestOnNode' and to add the Simple Smooth Modifier to the GameObject as well. - * Alternatively you can use the \link Pathfinding.FunnelModifier Funnel Modifier\endlink which works better on navmesh/recast graphs or the \link Pathfinding.RaycastModifier RaycastModifier\endlink. - * - * You should not combine the Simple Smooth Modifier or the Funnel Modifier with the NodeConnection snapping mode. This may lead to very odd behavior. - * - * \shadowimage{ailerp_recommended_smooth.png} - * \shadowimage{ailerp_smooth_movement.png} - * You may also want to tweak the #rotationSpeed. - * - * \ingroup movementscripts - */ - [RequireComponent(typeof(Seeker))] - [AddComponentMenu("Pathfinding/AI/AILerp (2D,3D)")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_a_i_lerp.php")] - public class AILerp : VersionedMonoBehaviour, IAstarAI { - /** Determines how often it will search for new paths. - * If you have fast moving targets or AIs, you might want to set it to a lower value. - * The value is in seconds between path requests. - */ - public float repathRate = 0.5F; - - /** \copydoc Pathfinding::IAstarAI::canSearch */ - public bool canSearch = true; - - /** \copydoc Pathfinding::IAstarAI::canMove */ - public bool canMove = true; - - /** Speed in world units */ - public float speed = 3; - - /** If true, the AI will rotate to face the movement direction */ - public bool enableRotation = true; - - /** If true, rotation will only be done along the Z axis so that the Y axis is the forward direction of the character. - * This is useful for 2D games in which one often want to have the Y axis as the forward direction to get sprites and 2D colliders to work properly. - * \shadowimage{aibase_forward_axis.png} - */ - public bool rotationIn2D = false; - - /** How quickly to rotate */ - public float rotationSpeed = 10; - - /** If true, some interpolation will be done when a new path has been calculated. - * This is used to avoid short distance teleportation. - */ - public bool interpolatePathSwitches = true; - - /** How quickly to interpolate to the new path */ - public float switchPathInterpolationSpeed = 5; - - /** True if the end of the current path has been reached */ - public bool reachedEndOfPath { get; private set; } - - public Vector3 destination { get; set; } - - /** Determines if the character's position should be coupled to the Transform's position. - * If false then all movement calculations will happen as usual, but the object that this component is attached to will not move - * instead only the #position property will change. - * - * \see #canMove which in contrast to this field will disable all movement calculations. - * \see #updateRotation - */ - [System.NonSerialized] - public bool updatePosition = true; - - /** Determines if the character's rotation should be coupled to the Transform's rotation. - * If false then all movement calculations will happen as usual, but the object that this component is attached to will not rotate - * instead only the #rotation property will change. - * - * \see #updatePosition - */ - [System.NonSerialized] - public bool updateRotation = true; - - /** Target to move towards. - * The AI will try to follow/move towards this target. - * It can be a point on the ground where the player has clicked in an RTS for example, or it can be the player object in a zombie game. - * - * \deprecated In 4.0 this will automatically add a \link Pathfinding.AIDestinationSetter AIDestinationSetter\endlink component and set the target on that component. - * Try instead to use the #destination property which does not require a transform to be created as the target or use - * the AIDestinationSetter component directly. - */ - [System.Obsolete("Use the destination property or the AIDestinationSetter component instead")] - public Transform target { - get { - var setter = GetComponent(); - return setter != null ? setter.target : null; - } - set { - targetCompatibility = null; - var setter = GetComponent(); - if (setter == null) setter = gameObject.AddComponent(); - setter.target = value; - destination = value != null ? value.position : new Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - } - } - - /** \copydoc Pathfinding::IAstarAI::position */ - public Vector3 position { get { return updatePosition ? tr.position : simulatedPosition; } } - - /** \copydoc Pathfinding::IAstarAI::rotation */ - public Quaternion rotation { get { return updateRotation ? tr.rotation : simulatedRotation; } } - - #region IAstarAI implementation - - /** \copydoc Pathfinding::IAstarAI::Move */ - void IAstarAI.Move (Vector3 deltaPosition) { - // This script does not know the concept of being away from the path that it is following - // so this call will be ignored (as is also mentioned in the documentation). - } - - /** \copydoc Pathfinding::IAstarAI::maxSpeed */ - float IAstarAI.maxSpeed { get { return speed; } set { speed = value; } } - - /** \copydoc Pathfinding::IAstarAI::canSearch */ - bool IAstarAI.canSearch { get { return canSearch; } set { canSearch = value; } } - - /** \copydoc Pathfinding::IAstarAI::canMove */ - bool IAstarAI.canMove { get { return canMove; } set { canMove = value; } } - - Vector3 IAstarAI.velocity { - get { - return Time.deltaTime > 0.00001f ? (previousPosition1 - previousPosition2) / Time.deltaTime : Vector3.zero; - } - } - - Vector3 IAstarAI.desiredVelocity { - get { - // The AILerp script sets the position every frame. It does not take into account physics - // or other things. So the velocity should always be the same as the desired velocity. - return (this as IAstarAI).velocity; - } - } - - /** \copydoc Pathfinding::IAstarAI::steeringTarget */ - Vector3 IAstarAI.steeringTarget { - get { - // AILerp doesn't use steering at all, so we will just return a point ahead of the agent in the direction it is moving. - return interpolator.valid ? interpolator.position + interpolator.tangent : simulatedPosition; - } - } - #endregion - - public float remainingDistance { - get { - return Mathf.Max(interpolator.remainingDistance, 0); - } - set { - interpolator.remainingDistance = Mathf.Max(value, 0); - } - } - - public bool hasPath { - get { - return interpolator.valid; - } - } - - public bool pathPending { - get { - return !canSearchAgain; - } - } - - /** \copydoc Pathfinding::IAstarAI::isStopped */ - public bool isStopped { get; set; } - - /** \copydoc Pathfinding::IAstarAI::onSearchPath */ - public System.Action onSearchPath { get; set; } - - /** Cached Seeker component */ - protected Seeker seeker; - - /** Cached Transform component */ - protected Transform tr; - - /** Time when the last path request was sent */ - protected float lastRepath = -9999; - - /** Current path which is followed */ - protected ABPath path; - - /** Only when the previous path has been returned should a search for a new path be done */ - protected bool canSearchAgain = true; - - /** When a new path was returned, the AI was moving along this ray. - * Used to smoothly interpolate between the previous movement and the movement along the new path. - * The speed is equal to movement direction. - */ - protected Vector3 previousMovementOrigin; - protected Vector3 previousMovementDirection; - - /** Time since the path was replaced by a new path. - * \see #interpolatePathSwitches - */ - protected float pathSwitchInterpolationTime = 0; - - protected PathInterpolator interpolator = new PathInterpolator(); - - - /** Holds if the Start function has been run. - * Used to test if coroutines should be started in OnEnable to prevent calculating paths - * in the awake stage (or rather before start on frame 0). - */ - bool startHasRun = false; - - Vector3 previousPosition1, previousPosition2, simulatedPosition; - Quaternion simulatedRotation; - - /** Required for serialization backward compatibility */ - [UnityEngine.Serialization.FormerlySerializedAs("target")][SerializeField][HideInInspector] - Transform targetCompatibility; - - protected AILerp () { - // Note that this needs to be set here in the constructor and not in e.g Awake - // because it is possible that other code runs and sets the destination property - // before the Awake method on this script runs. - destination = new Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - } - - /** Initializes reference variables. - * If you override this function you should in most cases call base.Awake () at the start of it. - * */ - protected override void Awake () { - base.Awake(); - //This is a simple optimization, cache the transform component lookup - tr = transform; - - seeker = GetComponent(); - - // Tell the StartEndModifier to ask for our exact position when post processing the path This - // is important if we are using prediction and requesting a path from some point slightly ahead - // of us since then the start point in the path request may be far from our position when the - // path has been calculated. This is also good because if a long path is requested, it may take - // a few frames for it to be calculated so we could have moved some distance during that time - seeker.startEndModifier.adjustStartPoint = () => simulatedPosition; - } - - /** Starts searching for paths. - * If you override this function you should in most cases call base.Start () at the start of it. - * \see #Init - * \see #RepeatTrySearchPath - */ - protected virtual void Start () { - startHasRun = true; - Init(); - } - - /** Called when the component is enabled */ - protected virtual void OnEnable () { - // Make sure we receive callbacks when paths complete - seeker.pathCallback += OnPathComplete; - Init(); - } - - void Init () { - if (startHasRun) { - // The Teleport call will make sure some variables are properly initialized (like #prevPosition1 and #prevPosition2) - Teleport(position, false); - lastRepath = float.NegativeInfinity; - if (shouldRecalculatePath) SearchPath(); - } - } - - public void OnDisable () { - // Abort any calculations in progress - if (seeker != null) seeker.CancelCurrentPathRequest(); - canSearchAgain = true; - - // Release current path so that it can be pooled - if (path != null) path.Release(this); - path = null; - interpolator.SetPath(null); - - // Make sure we no longer receive callbacks when paths complete - seeker.pathCallback -= OnPathComplete; - } - - public void Teleport (Vector3 position, bool clearPath = true) { - if (clearPath) interpolator.SetPath(null); - simulatedPosition = previousPosition1 = previousPosition2 = position; - if (updatePosition) tr.position = position; - reachedEndOfPath = false; - if (clearPath) SearchPath(); - } - - /** True if the path should be automatically recalculated as soon as possible */ - protected virtual bool shouldRecalculatePath { - get { - return Time.time - lastRepath >= repathRate && canSearchAgain && canSearch && !float.IsPositiveInfinity(destination.x); - } - } - - /** Requests a path to the target. - * \deprecated Use #SearchPath instead. - */ - [System.Obsolete("Use SearchPath instead")] - public virtual void ForceSearchPath () { - SearchPath(); - } - - /** Requests a path to the target. - */ - public virtual void SearchPath () { - if (float.IsPositiveInfinity(destination.x)) return; - if (onSearchPath != null) onSearchPath(); - - lastRepath = Time.time; - - // This is where the path should start to search from - var currentPosition = GetFeetPosition(); - - // If we are following a path, start searching from the node we will - // reach next this can prevent odd turns right at the start of the path - /*if (interpolator.valid) { - var prevDist = interpolator.distance; - // Move to the end of the current segment - interpolator.MoveToSegment(interpolator.segmentIndex, 1); - currentPosition = interpolator.position; - // Move back to the original position - interpolator.distance = prevDist; - }*/ - - canSearchAgain = false; - - // Alternative way of creating a path request - //ABPath p = ABPath.Construct(currentPosition, targetPoint, null); - //seeker.StartPath(p); - - // Create a new path request - // The OnPathComplete method will later be called with the result - seeker.StartPath(currentPosition, destination); - } - - /** The end of the path has been reached. - * If you want custom logic for when the AI has reached it's destination - * add it here. - * You can also create a new script which inherits from this one - * and override the function in that script. - */ - public virtual void OnTargetReached () { - } - - /** Called when a requested path has finished calculation. - * A path is first requested by #SearchPath, it is then calculated, probably in the same or the next frame. - * Finally it is returned to the seeker which forwards it to this function. - */ - protected virtual void OnPathComplete (Path _p) { - ABPath p = _p as ABPath; - - if (p == null) throw new System.Exception("This function only handles ABPaths, do not use special path types"); - - canSearchAgain = true; - - // Increase the reference count on the path. - // This is used for path pooling - p.Claim(this); - - // Path couldn't be calculated of some reason. - // More info in p.errorLog (debug string) - if (p.error) { - p.Release(this); - return; - } - - if (interpolatePathSwitches) { - ConfigurePathSwitchInterpolation(); - } - - - // Replace the old path - var oldPath = path; - path = p; - reachedEndOfPath = false; - - // Just for the rest of the code to work, if there - // is only one waypoint in the path add another one - if (path.vectorPath != null && path.vectorPath.Count == 1) { - path.vectorPath.Insert(0, GetFeetPosition()); - } - - // Reset some variables - ConfigureNewPath(); - - // Release the previous path - // This is used for path pooling. - // This is done after the interpolator has been configured in the ConfigureNewPath method - // as this method would otherwise invalidate the interpolator - // since the vectorPath list (which the interpolator uses) will be pooled. - if (oldPath != null) oldPath.Release(this); - - if (interpolator.remainingDistance < 0.0001f && !reachedEndOfPath) { - reachedEndOfPath = true; - OnTargetReached(); - } - } - - /** \copydoc Pathfinding::IAstarAI::SetPath */ - public void SetPath (Path path) { - if (path.PipelineState == PathState.Created) { - // Path has not started calculation yet - lastRepath = Time.time; - canSearchAgain = false; - seeker.CancelCurrentPathRequest(); - seeker.StartPath(path); - } else if (path.PipelineState == PathState.Returned) { - // Path has already been calculated - - // We might be calculating another path at the same time, and we don't want that path to override this one. So cancel it. - if (seeker.GetCurrentPath() != path) seeker.CancelCurrentPathRequest(); - else throw new System.ArgumentException("If you calculate the path using seeker.StartPath then this script will pick up the calculated path anyway as it listens for all paths the Seeker finishes calculating. You should not call SetPath in that case."); - - OnPathComplete(path); - } else { - // Path calculation has been started, but it is not yet complete. Cannot really handle this. - throw new System.ArgumentException("You must call the SetPath method with a path that either has been completely calculated or one whose path calculation has not been started at all. It looks like the path calculation for the path you tried to use has been started, but is not yet finished."); - } - } - - protected virtual void ConfigurePathSwitchInterpolation () { - bool reachedEndOfPreviousPath = interpolator.valid && interpolator.remainingDistance < 0.0001f; - - if (interpolator.valid && !reachedEndOfPreviousPath) { - previousMovementOrigin = interpolator.position; - previousMovementDirection = interpolator.tangent.normalized * interpolator.remainingDistance; - pathSwitchInterpolationTime = 0; - } else { - previousMovementOrigin = Vector3.zero; - previousMovementDirection = Vector3.zero; - pathSwitchInterpolationTime = float.PositiveInfinity; - } - } - - public virtual Vector3 GetFeetPosition () { - return position; - } - - /** Finds the closest point on the current path and configures the #interpolator */ - protected virtual void ConfigureNewPath () { - var hadValidPath = interpolator.valid; - var prevTangent = hadValidPath ? interpolator.tangent : Vector3.zero; - - interpolator.SetPath(path.vectorPath); - interpolator.MoveToClosestPoint(GetFeetPosition()); - - if (interpolatePathSwitches && switchPathInterpolationSpeed > 0.01f && hadValidPath) { - var correctionFactor = Mathf.Max(-Vector3.Dot(prevTangent.normalized, interpolator.tangent.normalized), 0); - interpolator.distance -= speed*correctionFactor*(1f/switchPathInterpolationSpeed); - } - } - - protected virtual void Update () { - if (shouldRecalculatePath) SearchPath(); - if (canMove) { - Vector3 nextPosition; - Quaternion nextRotation; - MovementUpdate(Time.deltaTime, out nextPosition, out nextRotation); - FinalizeMovement(nextPosition, nextRotation); - } - } - - /** \copydoc Pathfinding::IAstarAI::MovementUpdate */ - public void MovementUpdate (float deltaTime, out Vector3 nextPosition, out Quaternion nextRotation) { - if (updatePosition) simulatedPosition = tr.position; - if (updateRotation) simulatedRotation = tr.rotation; - - Vector3 direction; - - nextPosition = CalculateNextPosition(out direction, isStopped ? 0f : deltaTime); - - if (enableRotation) nextRotation = SimulateRotationTowards(direction, deltaTime); - else nextRotation = simulatedRotation; - } - - /** \copydoc Pathfinding::IAstarAI::FinalizeMovement */ - public void FinalizeMovement (Vector3 nextPosition, Quaternion nextRotation) { - previousPosition2 = previousPosition1; - previousPosition1 = simulatedPosition = nextPosition; - simulatedRotation = nextRotation; - if (updatePosition) tr.position = nextPosition; - if (updateRotation) tr.rotation = nextRotation; - } - - Quaternion SimulateRotationTowards (Vector3 direction, float deltaTime) { - // Rotate unless we are really close to the target - if (direction != Vector3.zero) { - Quaternion targetRotation = Quaternion.LookRotation(direction, rotationIn2D ? Vector3.back : Vector3.up); - // This causes the character to only rotate around the Z axis - if (rotationIn2D) targetRotation *= Quaternion.Euler(90, 0, 0); - return Quaternion.Slerp(simulatedRotation, targetRotation, deltaTime * rotationSpeed); - } - return simulatedRotation; - } - - /** Calculate the AI's next position (one frame in the future). - * \param direction The tangent of the segment the AI is currently traversing. Not normalized. - */ - protected virtual Vector3 CalculateNextPosition (out Vector3 direction, float deltaTime) { - if (!interpolator.valid) { - direction = Vector3.zero; - return simulatedPosition; - } - - interpolator.distance += deltaTime * speed; - - if (interpolator.remainingDistance < 0.0001f && !reachedEndOfPath) { - reachedEndOfPath = true; - OnTargetReached(); - } - - direction = interpolator.tangent; - pathSwitchInterpolationTime += deltaTime; - var alpha = switchPathInterpolationSpeed * pathSwitchInterpolationTime; - if (interpolatePathSwitches && alpha < 1f) { - // Find the approximate position we would be at if we - // would have continued to follow the previous path - Vector3 positionAlongPreviousPath = previousMovementOrigin + Vector3.ClampMagnitude(previousMovementDirection, speed * pathSwitchInterpolationTime); - - // Interpolate between the position on the current path and the position - // we would have had if we would have continued along the previous path. - return Vector3.Lerp(positionAlongPreviousPath, interpolator.position, alpha); - } else { - return interpolator.position; - } - } - - protected override int OnUpgradeSerializedData (int version, bool unityThread) { - #pragma warning disable 618 - if (unityThread && targetCompatibility != null) target = targetCompatibility; - #pragma warning restore 618 - return 2; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AILerp.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AILerp.cs.meta deleted file mode 100644 index 17cce14675824c7fd4f23f84df1c0a23cf8121ff..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AILerp.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 847a14d4dc9cc43679ab34fc78e0182f -timeCreated: 1454879612 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIPath.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIPath.cs deleted file mode 100644 index 199d9048151a8c8aa175d62c09f308ad3ba20781..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIPath.cs +++ /dev/null @@ -1,468 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using PF; -using Mathf = UnityEngine.Mathf; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Quaternion = UnityEngine.Quaternion; -using Vector2 = UnityEngine.Vector2; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - using Pathfinding.RVO; - using Pathfinding.Util; - - /** AI for following paths. - * This AI is the default movement script which comes with the A* Pathfinding Project. - * It is in no way required by the rest of the system, so feel free to write your own. But I hope this script will make it easier - * to set up movement for the characters in your game. - * This script works well for many types of units, but if you need the highest performance (for example if you are moving hundreds of characters) you - * may want to customize this script or write a custom movement script to be able to optimize it specifically for your game. - * - * This script will try to move to a given #destination. At \link repathRate regular intervals\endlink, the path to the destination will be recalculated. - * If you want to make the AI to follow a particular object you can attach the \link Pathfinding.AIDestinationSetter AIDestinationSetter\endlink component. - * Take a look at the \ref getstarted tutorial for more instructions on how to configure this script. - * - * Here is a video of this script being used move an agent around (technically it uses the #Pathfinding.Examples.MineBotAI script that inherits from this one but adds a bit of animation support for the example scenes): - * \video{wandering_ai.mp4} - * - * \section variables Quick overview of the variables - * In the inspector in Unity, you will see a bunch of variables. You can view detailed information further down, but here's a quick overview. - * - * The #repathRate determines how often it will search for new paths, if you have fast moving targets, you might want to set it to a lower value. - * The #destination field is where the AI will try to move, it can be a point on the ground where the player has clicked in an RTS for example. - * Or it can be the player object in a zombie game. - * The #maxSpeed is self-explanatory, as is #rotationSpeed. however #slowdownDistance might require some explanation: - * It is the approximate distance from the target where the AI will start to slow down. Setting it to a large value will make the AI slow down very gradually. - * #pickNextWaypointDist determines the distance to the point the AI will move to (see image below). - * - * Below is an image illustrating several variables that are exposed by this class (#pickNextWaypointDist, #steeringTarget, #desiredVelocity) - * \shadowimage{aipath_variables.png} - * - * This script has many movement fallbacks. - * If it finds an RVOController attached to the same GameObject as this component, it will use that. If it finds a character controller it will also use that. - * If it finds a rigidbody it will use that. Lastly it will fall back to simply modifying Transform.position which is guaranteed to always work and is also the most performant option. - * - * \section how-aipath-works How it works - * In this section I'm going to go over how this script is structured and how information flows. - * This is useful if you want to make changes to this script or if you just want to understand how it works a bit more deeply. - * However you do not need to read this section if you are just going to use the script as-is. - * - * This script inherits from the #AIBase class. The movement happens either in Unity's standard #Update or #FixedUpdate method. - * They are both defined in the AIBase class. Which one is actually used depends on if a rigidbody is used for movement or not. - * Rigidbody movement has to be done inside the FixedUpdate method while otherwise it is better to do it in Update. - * - * From there a call is made to the #MovementUpdate method (which in turn calls #MovementUpdateInternal). - * This method contains the main bulk of the code and calculates how the AI *wants* to move. However it doesn't do any movement itself. - * Instead it returns the position and rotation it wants the AI to move to have at the end of the frame. - * The #Update (or #FixedUpdate) method then passes these values to the #FinalizeMovement method which is responsible for actually moving the character. - * That method also handles things like making sure the AI doesn't fall through the ground using raycasting. - * - * The AI recalculates its path regularly. This happens in the Update method which checks #shouldRecalculatePath and if that returns true it will call #SearchPath. - * The #SearchPath method will prepare a path request and send it to the \link Pathfinding.Seeker Seeker\endlink component which should be attached to the same GameObject as this script. - * Since this script will when waking up register to the \link Pathfinding.Seeker.pathCallback Seeker.pathCallback\endlink delegate this script will be notified every time a new path is calculated by the #OnPathComplete method being called. - * It may take one or sometimes multiple frames for the path to be calculated, but finally the #OnPathComplete method will be called and the current path that the AI is following will be replaced. - */ - [AddComponentMenu("Pathfinding/AI/AIPath (2D,3D)")] - public partial class AIPath : AIBase, IAstarAI { - /** How quickly the agent accelerates. - * Positive values represent an acceleration in world units per second squared. - * Negative values are interpreted as an inverse time of how long it should take for the agent to reach its max speed. - * For example if it should take roughly 0.4 seconds for the agent to reach its max speed then this field should be set to -1/0.4 = -2.5. - * For a negative value the final acceleration will be: -acceleration*maxSpeed. - * This behaviour exists mostly for compatibility reasons. - * - * In the Unity inspector there are two modes: Default and Custom. In the Default mode this field is set to -2.5 which means that it takes about 0.4 seconds for the agent to reach its top speed. - * In the Custom mode you can set the acceleration to any positive value. - */ - public float maxAcceleration = -2.5f; - - /** Rotation speed in degrees per second. - * Rotation is calculated using Quaternion.RotateTowards. This variable represents the rotation speed in degrees per second. - * The higher it is, the faster the character will be able to rotate. - */ - [UnityEngine.Serialization.FormerlySerializedAs("turningSpeed")] - public float rotationSpeed = 360; - - /** Distance from the end of the path where the AI will start to slow down */ - public float slowdownDistance = 0.6F; - - /** How far the AI looks ahead along the path to determine the point it moves to. - * In world units. - * If you enable the #alwaysDrawGizmos toggle this value will be visualized in the scene view as a blue circle around the agent. - * \shadowimage{aipath_variables.png} - * - * Here are a few example videos showing some typical outcomes with good values as well as how it looks when this value is too low and too high. - * - * - * - * - * - * - *
\video_wide{aipath/picknext/video_02_default.mp4}\xmlonly Too low
\endxmlonly A too low value and a too low acceleration will result in the agent overshooting a lot and not managing to follow the path well.
\video_wide{aipath/picknext/video_02_100.mp4}\xmlonly Ok
\endxmlonly A low value but a high acceleration works decently to make the AI follow the path more closely. Note that the \link Pathfinding.AILerp AILerp\endlink component is better suited if you want the agent to follow the path without any deviations.
\video_wide{aipath/picknext/video_07_default.mp4}\xmlonly Ok
\endxmlonly A reasonable value in this example.
\video_wide{aipath/picknext/video_10_default.mp4}\xmlonly Ok
\endxmlonly A reasonable value in this example, but the path is followed slightly more loosely than in the previous video.
\video_wide{aipath/picknext/video_20_default.mp4}\xmlonly Too high
\endxmlonly A too high value will make the agent follow the path too loosely and may cause it to try to move through obstacles.
- */ - public float pickNextWaypointDist = 2; - - /** Distance to the end point to consider the end of path to be reached. - * When the end is within this distance then #OnTargetReached will be called and #reachedEndOfPath will return true. - */ - public float endReachedDistance = 0.2F; - - /** Draws detailed gizmos constantly in the scene view instead of only when the agent is selected and settings are being modified */ - public bool alwaysDrawGizmos; - - /** Slow down when not facing the target direction. - * Incurs at a small performance overhead. - */ - public bool slowWhenNotFacingTarget = true; - - /** What to do when within #endReachedDistance units from the destination. - * The character can either stop immediately when it comes within that distance, which is useful for e.g archers - * or other ranged units that want to fire on a target. Or the character can continue to try to reach the exact - * destination point and come to a full stop there. This is useful if you want the character to reach the exact - * point that you specified. - * - * \note #reachedEndOfPath will become true when the character is within #endReachedDistance units from the destination - * regardless of what this field is set to. - */ - public CloseToDestinationMode whenCloseToDestination = CloseToDestinationMode.Stop; - - /** Ensure that the character is always on the traversable surface of the navmesh. - * When this option is enabled a \link AstarPath.GetNearest GetNearest\endlink query will be done every frame to find the closest node that the agent can walk on - * and if the agent is not inside that node, then the agent will be moved to it. - * - * This is especially useful together with local avoidance in order to avoid agents pushing each other into walls. - * \see \ref local-avoidance for more info about this. - * - * This option also integrates with local avoidance so that if the agent is say forced into a wall by other agents the local avoidance - * system will be informed about that wall and can take that into account. - * - * Enabling this has some performance impact depending on the graph type (pretty fast for grid graphs, slightly slower for navmesh/recast graphs). - * If you are using a navmesh/recast graph you may want to switch to the \link Pathfinding.RichAI RichAI\endlink movement script which is specifically written for navmesh/recast graphs and - * does this kind of clamping out of the box. In many cases it can also follow the path more smoothly around sharp bends in the path. - * - * It is not recommended that you use this option together with the funnel modifier on grid graphs because the funnel modifier will make the path - * go very close to the border of the graph and this script has a tendency to try to cut corners a bit. This may cause it to try to go slightly outside the - * traversable surface near corners and that will look bad if this option is enabled. - * - * \warning This option makes no sense to use on point graphs because point graphs do not have a surface. - * Enabling this option when using a point graph will lead to the agent being snapped to the closest node every frame which is likely not what you want. - * - * Below you can see an image where several agents using local avoidance were ordered to go to the same point in a corner. - * When not constraining the agents to the graph they are easily pushed inside obstacles. - * \shadowimage{constrained_inside.png} - */ - public bool constrainInsideGraph = false; - - /** Current path which is followed */ - protected Path path; - - /** Helper which calculates points along the current path */ - protected PathInterpolator interpolator = new PathInterpolator(); - - #region IAstarAI implementation - - /** \copydoc Pathfinding::IAstarAI::Teleport */ - public override void Teleport (Vector3 newPosition, bool clearPath = true) { - if (clearPath) interpolator.SetPath(null); - reachedEndOfPath = false; - base.Teleport(newPosition, clearPath); - } - - /** \copydoc Pathfinding::IAstarAI::remainingDistance */ - public float remainingDistance { - get { - return interpolator.valid ? interpolator.remainingDistance + movementPlane.ToPlane(interpolator.position - position).magnitude : float.PositiveInfinity; - } - } - - /** \copydoc Pathfinding::IAstarAI::reachedEndOfPath */ - public bool reachedEndOfPath { get; protected set; } - - /** \copydoc Pathfinding::IAstarAI::hasPath */ - public bool hasPath { - get { - return interpolator.valid; - } - } - - /** \copydoc Pathfinding::IAstarAI::pathPending */ - public bool pathPending { - get { - return waitingForPathCalculation; - } - } - - /** \copydoc Pathfinding::IAstarAI::steeringTarget */ - public Vector3 steeringTarget { - get { - return interpolator.valid ? interpolator.position : position; - } - } - - /** \copydoc Pathfinding::IAstarAI::maxSpeed */ - float IAstarAI.maxSpeed { get { return maxSpeed; } set { maxSpeed = value; } } - - /** \copydoc Pathfinding::IAstarAI::canSearch */ - bool IAstarAI.canSearch { get { return canSearch; } set { canSearch = value; } } - - /** \copydoc Pathfinding::IAstarAI::canMove */ - bool IAstarAI.canMove { get { return canMove; } set { canMove = value; } } - - #endregion - - protected override void OnDisable () { - base.OnDisable(); - - // Release current path so that it can be pooled - if (path != null) path.Release(this); - path = null; - interpolator.SetPath(null); - } - - /** The end of the path has been reached. - * If you want custom logic for when the AI has reached it's destination add it here. You can - * also create a new script which inherits from this one and override the function in that script. - * - * This method will be called again if a new path is calculated as the destination may have changed. - * So when the agent is close to the destination this method will typically be called every #repathRate seconds. - */ - public virtual void OnTargetReached () { - } - - /** Called when a requested path has been calculated. - * A path is first requested by #UpdatePath, it is then calculated, probably in the same or the next frame. - * Finally it is returned to the seeker which forwards it to this function. - */ - protected override void OnPathComplete (Path newPath) { - ABPath p = newPath as ABPath; - - if (p == null) throw new System.Exception("This function only handles ABPaths, do not use special path types"); - - waitingForPathCalculation = false; - - // Increase the reference count on the new path. - // This is used for object pooling to reduce allocations. - p.Claim(this); - - // Path couldn't be calculated of some reason. - // More info in p.errorLog (debug string) - if (p.error) { - p.Release(this); - return; - } - - // Release the previous path. - if (path != null) path.Release(this); - - // Replace the old path - path = p; - - // Make sure the path contains at least 2 points - if (path.vectorPath.Count == 1) path.vectorPath.Add(path.vectorPath[0]); - interpolator.SetPath(path.vectorPath); - - var graph = UnityHelper.GetGraph(path.path[0]) as ITransformedGraph; - movementPlane = graph != null ? graph.transform : (rotationIn2D ? new GraphTransform(Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 270, 90), Vector3.one)) : GraphTransform.identityTransform); - - // Reset some variables - reachedEndOfPath = false; - - // Simulate movement from the point where the path was requested - // to where we are right now. This reduces the risk that the agent - // gets confused because the first point in the path is far away - // from the current position (possibly behind it which could cause - // the agent to turn around, and that looks pretty bad). - interpolator.MoveToLocallyClosestPoint((GetFeetPosition() + p.originalStartPoint.ToUnityV3()) * 0.5f); - interpolator.MoveToLocallyClosestPoint(GetFeetPosition()); - - // Update which point we are moving towards. - // Note that we need to do this here because otherwise the remainingDistance field might be incorrect for 1 frame. - // (due to interpolator.remainingDistance being incorrect). - interpolator.MoveToCircleIntersection2D(position, pickNextWaypointDist, movementPlane); - - var distanceToEnd = remainingDistance; - if (distanceToEnd <= endReachedDistance) { - reachedEndOfPath = true; - OnTargetReached(); - } - } - - /** Called during either Update or FixedUpdate depending on if rigidbodies are used for movement or not */ - protected override void MovementUpdateInternal (float deltaTime, out Vector3 nextPosition, out Quaternion nextRotation) { - float currentAcceleration = maxAcceleration; - - // If negative, calculate the acceleration from the max speed - if (currentAcceleration < 0) currentAcceleration *= -maxSpeed; - - if (updatePosition) { - // Get our current position. We read from transform.position as few times as possible as it is relatively slow - // (at least compared to a local variable) - simulatedPosition = tr.position; - } - if (updateRotation) simulatedRotation = tr.rotation; - - var currentPosition = simulatedPosition; - - // Update which point we are moving towards - interpolator.MoveToCircleIntersection2D(currentPosition, pickNextWaypointDist, movementPlane); - var dir = movementPlane.ToPlane(steeringTarget - currentPosition); - - // Calculate the distance to the end of the path - float distanceToEnd = dir.magnitude + Mathf.Max(0, interpolator.remainingDistance); - - // Check if we have reached the target - var prevTargetReached = reachedEndOfPath; - reachedEndOfPath = distanceToEnd <= endReachedDistance && interpolator.valid; - if (!prevTargetReached && reachedEndOfPath) OnTargetReached(); - float slowdown; - - // Normalized direction of where the agent is looking - var forwards = movementPlane.ToPlane(simulatedRotation * (rotationIn2D ? Vector3.up : Vector3.forward)); - - // Check if we have a valid path to follow and some other script has not stopped the character - if (interpolator.valid && !isStopped) { - // How fast to move depending on the distance to the destination. - // Move slower as the character gets closer to the destination. - // This is always a value between 0 and 1. - slowdown = distanceToEnd < slowdownDistance ? Mathf.Sqrt(distanceToEnd / slowdownDistance) : 1; - - if (reachedEndOfPath && whenCloseToDestination == CloseToDestinationMode.Stop) { - // Slow down as quickly as possible - velocity2D -= Vector2.ClampMagnitude(velocity2D, currentAcceleration * deltaTime); - } else { - velocity2D += MovementUtilities.CalculateAccelerationToReachPoint(dir.ToUnityV2(), dir.normalized*maxSpeed, velocity2D, currentAcceleration, rotationSpeed, maxSpeed, forwards) * deltaTime; - } - } else { - slowdown = 1; - // Slow down as quickly as possible - velocity2D -= Vector2.ClampMagnitude(velocity2D, currentAcceleration * deltaTime); - } - - velocity2D = MovementUtilities.ClampVelocity(velocity2D, maxSpeed, slowdown, slowWhenNotFacingTarget, forwards.ToUnityV2()); - - ApplyGravity(deltaTime); - - if (rvoController != null && rvoController.enabled) { - // Send a message to the RVOController that we want to move - // with this velocity. In the next simulation step, this - // velocity will be processed and it will be fed back to the - // rvo controller and finally it will be used by this script - // when calling the CalculateMovementDelta method below - - // Make sure that we don't move further than to the end point - // of the path. If the RVO simulation FPS is low and we did - // not do this, the agent might overshoot the target a lot. - var rvoTarget = currentPosition.ToPFV3() + movementPlane.ToWorld(Vector2.ClampMagnitude(velocity2D, distanceToEnd), 0f); - rvoController.SetTarget(rvoTarget, velocity2D.magnitude, maxSpeed); - } - - // Set how much the agent wants to move during this frame - var delta2D = lastDeltaPosition = CalculateDeltaToMoveThisFrame(movementPlane.ToPlane(currentPosition), distanceToEnd, deltaTime); - nextPosition = currentPosition + movementPlane.ToWorld(delta2D.ToPFV2(), verticalVelocity * lastDeltaTime).ToUnityV3(); - CalculateNextRotation(slowdown, out nextRotation); - } - - protected virtual void CalculateNextRotation (float slowdown, out Quaternion nextRotation) { - if (lastDeltaTime > 0.00001f) { - Vector2 desiredRotationDirection; - if (rvoController != null && rvoController.enabled) { - // When using local avoidance, use the actual velocity we are moving with if that velocity - // is high enough, otherwise fall back to the velocity that we want to move with (velocity2D). - // The local avoidance velocity can be very jittery when the character is close to standing still - // as it constantly makes small corrections. We do not want the rotation of the character to be jittery. - var actualVelocity = lastDeltaPosition/lastDeltaTime; - desiredRotationDirection = Vector2.Lerp(velocity2D, actualVelocity, 4 * actualVelocity.magnitude / (maxSpeed + 0.0001f)); - } else { - desiredRotationDirection = velocity2D; - } - - // Rotate towards the direction we are moving in. - // Don't rotate when we are very close to the target. - var currentRotationSpeed = rotationSpeed * Mathf.Max(0, (slowdown - 0.3f) / 0.7f); - nextRotation = SimulateRotationTowards(desiredRotationDirection, currentRotationSpeed * lastDeltaTime); - } else { - // TODO: simulatedRotation - nextRotation = rotation; - } - } - - static NNConstraint cachedNNConstraint = NNConstraint.Default; - protected override Vector3 ClampToNavmesh (Vector3 position, out bool positionChanged) { - if (constrainInsideGraph) { - cachedNNConstraint.tags = seeker.traversableTags; - cachedNNConstraint.graphMask = seeker.graphMask; - cachedNNConstraint.distanceXZ = true; - var clampedPosition = PathFindHelper.GetNearest(position, cachedNNConstraint).position; - - // We cannot simply check for equality because some precision may be lost - // if any coordinate transformations are used. - var difference = movementPlane.ToPlane(clampedPosition - position.ToPFV3()); - float sqrDifference = difference.sqrMagnitude; - if (sqrDifference > 0.001f*0.001f) { - // The agent was outside the navmesh. Remove that component of the velocity - // so that the velocity only goes along the direction of the wall, not into it - velocity2D -= difference.ToUnityV2() * Vector2.Dot(difference.ToUnityV2(), velocity2D) / sqrDifference; - - // Make sure the RVO system knows that there was a collision here - // Otherwise other agents may think this agent continued - // to move forwards and avoidance quality may suffer - if (rvoController != null && rvoController.enabled) { - rvoController.SetCollisionNormal(difference.ToUnityV2()); - } - positionChanged = true; - // Return the new position, but ignore any changes in the y coordinate from the ClampToNavmesh method as the y coordinates in the navmesh are rarely very accurate - return position + movementPlane.ToWorld(difference).ToUnityV3(); - } - } - - positionChanged = false; - return position; - } - - #if UNITY_EDITOR - [System.NonSerialized] - int gizmoHash = 0; - - [System.NonSerialized] - float lastChangedTime = float.NegativeInfinity; - - protected static readonly Color GizmoColor = new Color(46.0f/255, 104.0f/255, 201.0f/255); - - protected override void OnDrawGizmos () { - base.OnDrawGizmos(); - if (alwaysDrawGizmos) OnDrawGizmosInternal(); - } - - protected override void OnDrawGizmosSelected () { - base.OnDrawGizmosSelected(); - if (!alwaysDrawGizmos) OnDrawGizmosInternal(); - } - - void OnDrawGizmosInternal () { - var newGizmoHash = pickNextWaypointDist.GetHashCode() ^ slowdownDistance.GetHashCode() ^ endReachedDistance.GetHashCode(); - - if (newGizmoHash != gizmoHash && gizmoHash != 0) lastChangedTime = Time.realtimeSinceStartup; - gizmoHash = newGizmoHash; - float alpha = alwaysDrawGizmos ? 1 : Mathf.SmoothStep(1, 0, (Time.realtimeSinceStartup - lastChangedTime - 5f)/0.5f) * (UnityEditor.Selection.gameObjects.Length == 1 ? 1 : 0); - - if (alpha > 0) { - // Make sure the scene view is repainted while the gizmos are visible - if (!alwaysDrawGizmos) UnityEditor.SceneView.RepaintAll(); - Draw.Gizmos.Line(position, steeringTarget, GizmoColor * new Color(1, 1, 1, alpha)); - Gizmos.matrix = Matrix4x4.TRS(position, transform.rotation * (rotationIn2D ? Quaternion.Euler(-90, 0, 0) : Quaternion.identity), Vector3.one); - Draw.Gizmos.CircleXZ(Vector3.zero, pickNextWaypointDist, GizmoColor * new Color(1, 1, 1, alpha)); - Draw.Gizmos.CircleXZ(Vector3.zero, slowdownDistance, Color.Lerp(GizmoColor, Color.red, 0.5f) * new Color(1, 1, 1, alpha)); - Draw.Gizmos.CircleXZ(Vector3.zero, endReachedDistance, Color.Lerp(GizmoColor, Color.red, 0.8f) * new Color(1, 1, 1, alpha)); - } - } - #endif - - protected override int OnUpgradeSerializedData (int version, bool unityThread) { - base.OnUpgradeSerializedData(version, unityThread); - // Approximately convert from a damping value to a degrees per second value. - if (version < 1) rotationSpeed *= 90; - return 2; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIPath.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIPath.cs.meta deleted file mode 100644 index 587b08aaaa1b06a00885235a6d6dbc94ec7ad911..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/AIPath.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f6eb1402c17e84a9282a7f0f62eb584f -timeCreated: 1491225739 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/IAstarAI.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/IAstarAI.cs deleted file mode 100644 index d0445ec7f7177014fbe622c4d9192e76d20c0cf9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/IAstarAI.cs +++ /dev/null @@ -1,231 +0,0 @@ -using PF; -using Quaternion = UnityEngine.Quaternion; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - /** Common interface for all movement scripts in the A* Pathfinding Project. - * \see #Pathfinding.AIPath - * \see #Pathfinding.RichAI - * \see #Pathfinding.AILerp - */ - public interface IAstarAI { - /** Position of the agent. - * In world space. - * \see #rotation - */ - Vector3 position { get; } - - /** Rotation of the agent. - * In world space. - * \see #position - */ - Quaternion rotation { get; } - - /** Max speed in world units per second */ - float maxSpeed { get; set; } - - /** Actual velocity that the agent is moving with. - * In world units per second. - * - * \see #desiredVelocity - */ - Vector3 velocity { get; } - - /** Velocity that this agent wants to move with. - * Includes gravity and local avoidance if applicable. - * In world units per second. - * - * \see #velocity - */ - Vector3 desiredVelocity { get; } - - /** Remaining distance along the current path to the end of the path. - * For the RichAI movement script this may not always be precisely known, especially when - * far away from the destination. In those cases an approximate distance will be returned. - * - * If the agent does not currently have a path, then positive infinity will be returned. - * - * \see #reachedEndOfPath - */ - float remainingDistance { get; } - - /** True if the agent has reached the end of the current path. - * This is the approximate distance the AI has to move to reach the end of the path it is currently traversing. - * - * Note that setting the #destination does not immediately update the path, nor is there any guarantee that the - * AI will actually be able to reach the destination that you set. The AI will try to get as close as possible. - * - * It is very hard to provide a method for detecting if the AI has reached the #destination that works across all different games - * because the destination may not even lie on the navmesh and how that is handled differs from game to game (see also the code snippet in the docs for #destination). - * - * \see #remainingDistance - */ - bool reachedEndOfPath { get; } - - /** Position in the world that this agent should move to. - * - * If no destination has been set yet, then (+infinity, +infinity, +infinity) will be returned. - * - * Note that setting this property does not immediately cause the agent to recalculate its path. - * So it may take some time before the agent starts to move towards this point. - * Most movement scripts have a \a repathRate field which indicates how often the agent looks - * for a new path. You can also call the #SearchPath method to immediately - * start to search for a new path. Paths are calculated asynchronously so when an agent starts to - * search for path it may take a few frames (usually 1 or 2) until the result is available. - * During this time the #pathPending property will return true. - * - * If you are setting a destination and then want to know when the agent has reached that destination - * then you should check both #pathPending and #reachedEndOfPath: - * \snippet MiscSnippets.cs IAstarAI.destination - */ - Vector3 destination { get; set; } - - /** Enables or disables recalculating the path at regular intervals. - * Setting this to false does not stop any active path requests from being calculated or stop it from continuing to follow the current path. - * - * Note that this only disables automatic path recalculations. If you call the #SearchPath() method a path will still be calculated. - * - * \see #canMove - * \see #isStopped - */ - bool canSearch { get; set; } - - /** Enables or disables movement completely. - * If you want the agent to stand still, but still react to local avoidance and use gravity: use #isStopped instead. - * - * This is also useful if you want to have full control over when the movement calculations run. - * Take a look at #MovementUpdate - * - * \see #canSearch - * \see #isStopped - */ - bool canMove { get; set; } - - /** True if this agent currently has a path that it follows */ - bool hasPath { get; } - - /** True if a path is currently being calculated */ - bool pathPending { get; } - - /** Gets or sets if the agent should stop moving. - * If this is set to true the agent will immediately start to slow down as quickly as it can to come to a full stop. - * The agent will still react to local avoidance and gravity (if applicable), but it will not try to move in any particular direction. - * - * The current path of the agent will not be cleared, so when this is set - * to false again the agent will continue moving along the previous path. - * - * This is a purely user-controlled parameter, so for example it is not set automatically when the agent stops - * moving because it has reached the target. Use #reachedEndOfPath for that. - * - * If this property is set to true while the agent is traversing an off-mesh link (RichAI script only), then the agent will - * continue traversing the link and stop once it has completed it. - * - * \note This is not the same as the #canMove setting which some movement scripts have. The #canMove setting - * disables movement calculations completely (which among other things makes it not be affected by local avoidance or gravity). - * For the AILerp movement script which doesn't use gravity or local avoidance anyway changing this property is very similar to - * changing #canMove. - * - * The #steeringTarget property will continue to indicate the point which the agent would move towards if it would not be stopped. - */ - bool isStopped { get; set; } - - /** Point on the path which the agent is currently moving towards. - * This is usually a point a small distance ahead of the agent - * or the end of the path. - * - * If the agent does not have a path at the moment, then the agent's current position will be returned. - */ - Vector3 steeringTarget { get; } - - /** Called when the agent recalculates its path. - * This is called both for automatic path recalculations (see #canSearch) and manual ones (see #SearchPath). - * - * \see Take a look at the #Pathfinding.AIDestinationSetter source code for an example of how it can be used. - */ - System.Action onSearchPath { get; set; } - - /** Recalculate the current path. - * You can for example use this if you want very quick reaction times when you have changed the #destination - * so that the agent does not have to wait until the next automatic path recalculation (see #canSearch). - * - * If there is an ongoing path calculation, it will be canceled, so make sure you leave time for the paths to get calculated before calling this function again. - * A canceled path will show up in the log with the message "Canceled by script" (see #Seeker.CancelCurrentPathRequest()). - * - * If no #destination has been set yet then nothing will be done. - * - * \note The path result may not become available until after a few frames. - * During the calculation time the #pathPending property will return true. - * - * \see #pathPending - */ - void SearchPath (); - - /** Make the AI follow the specified path. - * In case the path has not been calculated, the script will call seeker.StartPath to calculate it. - * This means the AI may not actually start to follow the path until in a few frames when the path has been calculated. - * The #pathPending field will as usual return true while the path is being calculated. - * - * In case the path has already been calculated it will immediately replace the current path the AI is following. - * This is useful if you want to replace how the AI calculates its paths. - * Note that if you calculate the path using seeker.StartPath then this script will already pick it up because it is listening for - * all paths that the Seeker finishes calculating. In that case you do not need to call this function. - * - * You can disable the automatic path recalculation by setting the #canSearch field to false. - * - * \snippet MiscSnippets.cs IAstarAI.SetPath - */ - void SetPath (Path path); - - /** Instantly move the agent to a new position. - * This will trigger a path recalculation (if \a clearPath is true, which is the default) so if you want to teleport the agent and change its #destination - * it is recommended that you set the #destination before calling this method. - * - * The current path will be cleared by default. - * - * \see Works similarly to Unity's NavmeshAgent.Warp. - * \see #SearchPath - */ - void Teleport (Vector3 newPosition, bool clearPath = true); - - /** Move the agent. - * \param deltaPosition Direction and distance to move the agent in world space. - * - * This is intended for external movement forces such as those applied by wind, conveyor belts, knockbacks etc. - * - * Some movement scripts may ignore this completely (notably the AILerp script) if it does not have - * any concept of being moved externally. - * - * The agent will not be moved immediately when calling this method. Instead this offset will be stored and then - * applied the next time the agent runs its movement calculations (which is usually later this frame or the next frame). - * If you want to move the agent immediately then call: - * \code - * ai.Move(someVector); - * ai.FinalizeMovement(ai.position, ai.rotation); - * \endcode - */ - void Move (Vector3 deltaPosition); - - /** Calculate how the character wants to move during this frame. - * \param deltaTime time to simulate movement for. Usually set to Time.deltaTime. - * \param nextPosition the position that the agent wants to move to during this frame. - * \param nextRotation the rotation that the agent wants to rotate to during this frame. - * - * Note that this does not actually move the character. You need to call #FinalizeMovement for that. - * This is called automatically unless #canMove is false. - * - * To handle movement yourself you can disable #canMove and call this method manually. - * This code will replicate the normal behavior of the component: - * \snippet MiscSnippets.cs IAstarAI.MovementUpdate - */ - void MovementUpdate (float deltaTime, out Vector3 nextPosition, out Quaternion nextRotation); - - /** Move the agent. - * To be called as the last step when you are handling movement manually. - * - * The movement will be clamped to the navmesh if applicable (this is done for the RichAI movement script). - * - * \see #MovementUpdate for a code example. - */ - void FinalizeMovement (Vector3 nextPosition, Quaternion nextRotation); - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/IAstarAI.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/IAstarAI.cs.meta deleted file mode 100644 index b7106e337a46d813106f0adf615ca26edfbe9f10..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/IAstarAI.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b7438f3f6b9404f05ab7f584f92aa7d5 -timeCreated: 1495013922 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/NavmeshController.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/NavmeshController.cs deleted file mode 100644 index 3b6ed49c74ccff8fee0f5d1af1bce26a0a037e33..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/NavmeshController.cs +++ /dev/null @@ -1,4 +0,0 @@ - -// This file has been removed from the project. Since UnityPackages cannot -// delete files, only replace them, this message is left here to prevent old -// files from causing compiler errors diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/NavmeshController.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/NavmeshController.cs.meta deleted file mode 100644 index 379b815f58eb40201d22c78704525a054c0354be..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/NavmeshController.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 20549335d45df4a329ece093b865221b -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/Seeker.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/Seeker.cs deleted file mode 100644 index be8752d66498304f1ac6d9f2b0a255a09691b184..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/Seeker.cs +++ /dev/null @@ -1,474 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Vector3 = UnityEngine.Vector3; -#if UNITY_5_5_OR_NEWER -using UnityEngine.Profiling; -#endif - -namespace Pathfinding { - /** Handles path calls for a single unit. - * \ingroup relevant - * This is a component which is meant to be attached to a single unit (AI, Robot, Player, whatever) to handle its pathfinding calls. - * It also handles post-processing of paths using modifiers. - * - * \shadowimage{seeker_inspector.png} - * - * \see \ref calling-pathfinding - * \see \ref modifiers - */ - [AddComponentMenu("Pathfinding/Seeker")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_seeker.php")] - public class Seeker : VersionedMonoBehaviour { - /** Enables drawing of the last calculated path using Gizmos. - * The path will show up in green. - * - * \see OnDrawGizmos - */ - public bool drawGizmos = true; - - /** Enables drawing of the non-postprocessed path using Gizmos. - * The path will show up in orange. - * - * Requires that #drawGizmos is true. - * - * This will show the path before any post processing such as smoothing is applied. - * - * \see drawGizmos - * \see OnDrawGizmos - */ - public bool detailedGizmos; - - /** Path modifier which tweaks the start and end points of a path */ - [HideInInspector] - public StartEndModifier startEndModifier = new StartEndModifier(); - - /** The tags which the Seeker can traverse. - * - * \note This field is a bitmask. - * \see \ref bitmasks - */ - [HideInInspector] - public int traversableTags = -1; - - /** Penalties for each tag. - * Tag 0 which is the default tag, will have added a penalty of tagPenalties[0]. - * These should only be positive values since the A* algorithm cannot handle negative penalties. - * - * \note This array should always have a length of 32 otherwise the system will ignore it. - * - * \see Pathfinding.Path.tagPenalties - */ - [HideInInspector] - public int[] tagPenalties = new int[32]; - - /** Graphs that this Seeker can use. - * This field determines which graphs will be considered when searching for the start and end nodes of a path. - * It is useful in numerous situations, for example if you want to make one graph for small units and one graph for large units. - * - * This is a bitmask so if you for example want to make the agent only use graph index 3 then you can set this to: - * \code seeker.graphMask = 1 << 3; \endcode - * - * \see \ref bitmasks - * - * Note that this field only stores which graph indices that are allowed. This means that if the graphs change their ordering - * then this mask may no longer be correct. - * - * If you know the name of the graph you can set the mask like this: - * \snippet MiscSnippets.cs Masks.FromGraphName - * - * Some overloads of the #StartPath methods take a graphMask parameter. If those overloads are used then they - * will override the graph mask for that path request. - * - * \shadowimage{multiple_agents/seeker.png} - * - * \see \ref multiple-agent-types - */ - [HideInInspector] - public int graphMask = -1; - - /** Callback for when a path is completed. - * Movement scripts should register to this delegate.\n - * A temporary callback can also be set when calling StartPath, but that delegate will only be called for that path - */ - public OnPathDelegate pathCallback; - - /** Called before pathfinding is started */ - public OnPathDelegate preProcessPath; - - /** Called after a path has been calculated, right before modifiers are executed. - */ - public OnPathDelegate postProcessPath; - - /** Used for drawing gizmos */ - [System.NonSerialized] - List lastCompletedVectorPath; - - /** Used for drawing gizmos */ - [System.NonSerialized] - List lastCompletedNodePath; - - /** The current path */ - [System.NonSerialized] - protected Path path; - - /** Previous path. Used to draw gizmos */ - [System.NonSerialized] - private Path prevPath; - - /** Cached delegate to avoid allocating one every time a path is started */ - private readonly OnPathDelegate onPathDelegate; - /** Cached delegate to avoid allocating one every time a path is started */ - private readonly OnPathDelegate onPartialPathDelegate; - - /** Temporary callback only called for the current path. This value is set by the StartPath functions */ - private OnPathDelegate tmpPathCallback; - - /** The path ID of the last path queried */ - protected uint lastPathID; - - /** Internal list of all modifiers */ - readonly List modifiers = new List(); - - public enum ModifierPass { - PreProcess, - // An obsolete item occupied index 1 previously - PostProcess = 2, - } - - public Seeker () { - onPathDelegate = OnPathComplete; - onPartialPathDelegate = OnPartialPathComplete; - } - - /** Initializes a few variables */ - protected override void Awake () { - base.Awake(); - startEndModifier.Awake(this); - } - - /** Path that is currently being calculated or was last calculated. - * You should rarely have to use this. Instead get the path when the path callback is called. - * - * \see pathCallback - */ - public Path GetCurrentPath () { - return path; - } - - /** Stop calculating the current path request. - * If this Seeker is currently calculating a path it will be canceled. - * The callback (usually to a method named OnPathComplete) will soon be called - * with a path that has the 'error' field set to true. - * - * This does not stop the character from moving, it just aborts - * the path calculation. - * - * \param pool If true then the path will be pooled when the pathfinding system is done with it. - */ - public void CancelCurrentPathRequest (bool pool = true) { - if (!IsDone()) { - path.FailWithError("Canceled by script (Seeker.CancelCurrentPathRequest)"); - if (pool) { - // Make sure the path has had its reference count incremented and decremented once. - // If this is not done the system will think no pooling is used at all and will not pool the path. - // The particular object that is used as the parameter (in this case 'path') doesn't matter at all - // it just has to be *some* object. - path.Claim(path); - path.Release(path); - } - } - } - - /** Cleans up some variables. - * Releases any eventually claimed paths. - * Calls OnDestroy on the #startEndModifier. - * - * \see ReleaseClaimedPath - * \see startEndModifier - */ - public void OnDestroy () { - ReleaseClaimedPath(); - startEndModifier.OnDestroy(this); - } - - /** Releases the path used for gizmos (if any). - * The seeker keeps the latest path claimed so it can draw gizmos. - * In some cases this might not be desireable and you want it released. - * In that case, you can call this method to release it (not that path gizmos will then not be drawn). - * - * If you didn't understand anything from the description above, you probably don't need to use this method. - * - * \see \ref pooling - */ - public void ReleaseClaimedPath () { - if (prevPath != null) { - prevPath.Release(this, true); - prevPath = null; - } - } - - /** Called by modifiers to register themselves */ - public void RegisterModifier (IPathModifier modifier) { - modifiers.Add(modifier); - - // Sort the modifiers based on their specified order - modifiers.Sort((a, b) => a.Order.CompareTo(b.Order)); - } - - /** Called by modifiers when they are disabled or destroyed */ - public void DeregisterModifier (IPathModifier modifier) { - modifiers.Remove(modifier); - } - - /** Post Processes the path. - * This will run any modifiers attached to this GameObject on the path. - * This is identical to calling RunModifiers(ModifierPass.PostProcess, path) - * \see RunModifiers - * \since Added in 3.2 - */ - public void PostProcess (Path path) { - RunModifiers(ModifierPass.PostProcess, path); - } - - /** Runs modifiers on a path */ - public void RunModifiers (ModifierPass pass, Path path) { - if (pass == ModifierPass.PreProcess) { - if (preProcessPath != null) preProcessPath(path); - for (int i = 0; i < modifiers.Count; i++) modifiers[i].PreProcess(path); - } else if (pass == ModifierPass.PostProcess) { - Profiler.BeginSample("Running Path Modifiers"); - // Call delegates if they exist - if (postProcessPath != null) postProcessPath(path); - // Loop through all modifiers and apply post processing - for (int i = 0; i < modifiers.Count; i++) modifiers[i].Apply(path); - Profiler.EndSample(); - } - } - - /** Is the current path done calculating. - * Returns true if the current #path has been returned or if the #path is null. - * - * \note Do not confuse this with Pathfinding.Path.IsDone. They usually return the same value, but not always - * since the path might be completely calculated, but it has not yet been processed by the Seeker. - * - * \since Added in 3.0.8 - * \version Behaviour changed in 3.2 - */ - public bool IsDone () { - return path == null || path.PipelineState >= PathState.Returned; - } - - /** Called when a path has completed. - * This should have been implemented as optional parameter values, but that didn't seem to work very well with delegates (the values weren't the default ones) - * \see OnPathComplete(Path,bool,bool) - */ - void OnPathComplete (Path path) { - OnPathComplete(path, true, true); - } - - /** Called when a path has completed. - * Will post process it and return it by calling #tmpPathCallback and #pathCallback - */ - void OnPathComplete (Path p, bool runModifiers, bool sendCallbacks) { - if (p != null && p != path && sendCallbacks) { - return; - } - - if (this == null || p == null || p != path) - return; - if (!path.error && runModifiers) { - // This will send the path for post processing to modifiers attached to this Seeker - RunModifiers(ModifierPass.PostProcess, path); - } - - if (sendCallbacks) { - p.Claim(this); - - lastCompletedNodePath = p.path; - lastCompletedVectorPath = p.vectorPath; - - // This will send the path to the callback (if any) specified when calling StartPath - if (tmpPathCallback != null) { - tmpPathCallback(p); - } - - // This will send the path to any script which has registered to the callback - if (pathCallback != null) { - pathCallback(p); - } - - // Recycle the previous path to reduce the load on the GC - if (prevPath != null) { - prevPath.Release(this, true); - } - - prevPath = p; - - // If not drawing gizmos, then storing prevPath is quite unecessary - // So clear it and set prevPath to null - if (!drawGizmos) ReleaseClaimedPath(); - } - } - - /** Called for each path in a MultiTargetPath. - * Only post processes the path, does not return it. - * \astarpro */ - void OnPartialPathComplete (Path p) { - OnPathComplete(p, true, false); - } - - /** Called once for a MultiTargetPath. Only returns the path, does not post process. - * \astarpro */ - void OnMultiPathComplete (Path p) { - OnPathComplete(p, false, true); - } - - /** Call this function to start calculating a path. - * Since this method does not take a callback parameter, you should set the #pathCallback field before calling this method. - * - * \param start The start point of the path - * \param end The end point of the path - */ - public Path StartPath (Vector3 start, Vector3 end) { - return StartPath(start, end, null); - } - - /** Call this function to start calculating a path. - * - * \param start The start point of the path - * \param end The end point of the path - * \param callback The function to call when the path has been calculated - * - * \a callback will be called when the path has completed. - * \a Callback will not be called if the path is canceled (e.g when a new path is requested before the previous one has completed) */ - public Path StartPath (Vector3 start, Vector3 end, OnPathDelegate callback) { - return StartPath(ABPath.Construct(start, end, null), callback); - } - - /** Call this function to start calculating a path. - * - * \param start The start point of the path - * \param end The end point of the path - * \param callback The function to call when the path has been calculated - * \param graphMask Mask used to specify which graphs should be searched for close nodes. See #Pathfinding.NNConstraint.graphMask. This will override #graphMask for this path request. - * - * \a callback will be called when the path has completed. - * \a Callback will not be called if the path is canceled (e.g when a new path is requested before the previous one has completed) */ - public Path StartPath (Vector3 start, Vector3 end, OnPathDelegate callback, int graphMask) { - return StartPath(ABPath.Construct(start, end, null), callback, graphMask); - } - - /** Call this function to start calculating a path. - * - * \param p The path to start calculating - * \param callback The function to call when the path has been calculated - * - * The \a callback will be called when the path has been calculated (which may be several frames into the future). - * The \a callback will not be called if a new path request is started before this path request has been calculated. - * - * \version Since 3.8.3 this method works properly if a MultiTargetPath is used. - * It now behaves identically to the StartMultiTargetPath(MultiTargetPath) method. - * - * \version Since 4.1.x this method will no longer overwrite the graphMask on the path unless it is explicitly passed as a parameter (see other overloads of this method). - */ - public Path StartPath (Path p, OnPathDelegate callback = null) { - // Set the graph mask only if the user has not changed it from the default value. - // This is not perfect as the user may have wanted it to be precisely -1 - // however it is the best detection that I can do. - // The non-default check is primarily for compatibility reasons to avoid breaking peoples existing code. - // The StartPath overloads with an explicit graphMask field should be used instead to set the graphMask. - if (p.nnConstraint.graphMask == -1) p.nnConstraint.graphMask = graphMask; - StartPathInternal(p, callback); - return p; - } - - /** Call this function to start calculating a path. - * - * \param p The path to start calculating - * \param callback The function to call when the path has been calculated - * \param graphMask Mask used to specify which graphs should be searched for close nodes. See #Pathfinding.NNConstraint.graphMask. This will override #graphMask for this path request. - * - * The \a callback will be called when the path has been calculated (which may be several frames into the future). - * The \a callback will not be called if a new path request is started before this path request has been calculated. - * - * \version Since 3.8.3 this method works properly if a MultiTargetPath is used. - * It now behaves identically to the StartMultiTargetPath(MultiTargetPath) method. - */ - public Path StartPath (Path p, OnPathDelegate callback, int graphMask) { - p.nnConstraint.graphMask = graphMask; - StartPathInternal(p, callback); - return p; - } - - /** Internal method to start a path and mark it as the currently active path */ - void StartPathInternal (Path p, OnPathDelegate callback) { - var mtp = p as MultiTargetPath; - - if (mtp != null) { - // TODO: Allocation, cache - var callbacks = new OnPathDelegate[mtp.targetPoints.Length]; - - for (int i = 0; i < callbacks.Length; i++) { - callbacks[i] = onPartialPathDelegate; - } - - mtp.callbacks = callbacks; - p.callback += OnMultiPathComplete; - } else { - p.callback += onPathDelegate; - } - - p.enabledTags = traversableTags; - p.tagPenalties = tagPenalties; - - // Cancel a previously requested path is it has not been processed yet and also make sure that it has not been recycled and used somewhere else - if (path != null && path.PipelineState <= PathState.Processing && path.CompleteState != PathCompleteState.Error && lastPathID == path.pathID) { - path.FailWithError("Canceled path because a new one was requested.\n"+ - "This happens when a new path is requested from the seeker when one was already being calculated.\n" + - "For example if a unit got a new order, you might request a new path directly instead of waiting for the now" + - " invalid path to be calculated. Which is probably what you want.\n" + - "If you are getting this a lot, you might want to consider how you are scheduling path requests."); - // No callback will be sent for the canceled path - } - - // Set p as the active path - path = p; - tmpPathCallback = callback; - - // Save the path id so we can make sure that if we cancel a path (see above) it should not have been recycled yet. - lastPathID = path.pathID; - - // Pre process the path - RunModifiers(ModifierPass.PreProcess, path); - - // Send the request to the pathfinder - AstarPath.StartPath(path); - } - - /** Draws gizmos for the Seeker */ - public void OnDrawGizmos () { - if (lastCompletedNodePath == null || !drawGizmos) { - return; - } - - if (detailedGizmos) { - Gizmos.color = new Color(0.7F, 0.5F, 0.1F, 0.5F); - - if (lastCompletedNodePath != null) { - for (int i = 0; i < lastCompletedNodePath.Count-1; i++) { - Gizmos.DrawLine((Vector3)lastCompletedNodePath[i].position, (Vector3)lastCompletedNodePath[i+1].position); - } - } - } - - Gizmos.color = new Color(0, 1F, 0, 1F); - - if (lastCompletedVectorPath != null) { - for (int i = 0; i < lastCompletedVectorPath.Count-1; i++) { - Gizmos.DrawLine(lastCompletedVectorPath[i], lastCompletedVectorPath[i+1]); - } - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/Seeker.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/Seeker.cs.meta deleted file mode 100644 index 5605e82b1f37a098f2b3d284abc9cdf6b1bbd5d8..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/Seeker.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 373b52eb9bf8c40f785bb6947a1aee66 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/TurnBasedAI.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/TurnBasedAI.cs deleted file mode 100644 index c3f83818f76094de7e01c6a5a562f48a1eea5f3d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/TurnBasedAI.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; - -namespace Pathfinding.Examples { - /** Helper script in the example scene 'Turn Based' */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_examples_1_1_turn_based_a_i.php")] - public class TurnBasedAI : VersionedMonoBehaviour { - public int movementPoints = 2; - public BlockManager blockManager; - public SingleNodeBlocker blocker; - public GraphNode targetNode; - public BlockManager.TraversalProvider traversalProvider; - - void Start () { - blocker.BlockAtCurrentPosition(); - } - - protected override void Awake () { - base.Awake(); - // Set the traversal provider to block all nodes that are blocked by a SingleNodeBlocker - // except the SingleNodeBlocker owned by this AI (we don't want to be blocked by ourself) - traversalProvider = new BlockManager.TraversalProvider(blockManager, BlockManager.BlockMode.AllExceptSelector, new List() { blocker }); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/TurnBasedAI.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/TurnBasedAI.cs.meta deleted file mode 100644 index 4fa72103133ce82fed396acbca81ed0c7e2a2d29..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AI/TurnBasedAI.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8f95b80c439d6408b9afac9d013922e4 -timeCreated: 1453035991 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarData.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarData.cs deleted file mode 100644 index 524d67663a0fdb3b88afe2ed7449e8d190b425c4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarData.cs +++ /dev/null @@ -1,527 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using PF; - -#if UNITY_WINRT && !UNITY_EDITOR -//using MarkerMetro.Unity.WinLegacy.IO; -//using MarkerMetro.Unity.WinLegacy.Reflection; -#endif - -namespace Pathfinding { - [System.Serializable] - /** Stores the navigation graphs for the A* Pathfinding System. - * \ingroup relevant - * - * An instance of this class is assigned to AstarPath.data, from it you can access all graphs loaded through the #graphs variable.\n - * This class also handles a lot of the high level serialization. - */ - public class AstarData { - - #region Fields - - /** Shortcut to the first RecastGraph. - * Updated at scanning time. - * \astarpro - */ - public RecastGraph recastGraph { get; private set; } - - /** All supported graph types. - * Populated through reflection search - */ - public System.Type[] graphTypes { get; private set; } - -#if ASTAR_FAST_NO_EXCEPTIONS || UNITY_WINRT || UNITY_WEBGL - /** Graph types to use when building with Fast But No Exceptions for iPhone. - * If you add any custom graph types, you need to add them to this hard-coded list. - */ - public static readonly System.Type[] DefaultGraphTypes = new System.Type[] { -#if !ASTAR_NO_GRID_GRAPH - typeof(GridGraph), -#endif -#if !ASTAR_NO_POINT_GRAPH - typeof(PointGraph), -#endif - typeof(NavMeshGraph), - typeof(RecastGraph), - typeof(LayerGridGraph) - }; -#endif - - /** All graphs this instance holds. - * This will be filled only after deserialization has completed. - * May contain null entries if graph have been removed. - */ - [System.NonSerialized] - public NavGraph[] graphs = new NavGraph[0]; - - //Serialization Settings - - /** Serialized data for all graphs and settings. - * Stored as a base64 encoded string because otherwise Unity's Undo system would sometimes corrupt the byte data (because it only stores deltas). - * - * This can be accessed as a byte array from the #data property. - * - * \since 3.6.1 - */ - [SerializeField] - string dataString; - - /** Data from versions from before 3.6.1. - * Used for handling upgrades - * \since 3.6.1 - */ - [SerializeField] - [UnityEngine.Serialization.FormerlySerializedAs("data")] - private byte[] upgradeData; - - /** Serialized data for all graphs and settings */ - private byte[] data { - get { - // Handle upgrading from earlier versions than 3.6.1 - if (upgradeData != null && upgradeData.Length > 0) { - data = upgradeData; - upgradeData = null; - } - return dataString != null ? System.Convert.FromBase64String(dataString) : null; - } - set { - dataString = value != null ? System.Convert.ToBase64String(value) : null; - } - } - - /** Serialized data for cached startup. - * If set, on start the graphs will be deserialized from this file. - */ - public TextAsset file_cachedStartup; - - /** Serialized data for cached startup. - * - * \deprecated Deprecated since 3.6, AstarData.file_cachedStartup is now used instead - */ - public byte[] data_cachedStartup; - - /** Should graph-data be cached. - * Caching the startup means saving the whole graphs - not only the settings - to a file (#file_cachedStartup) which can - * be loaded when the game starts. This is usually much faster than scanning the graphs when the game starts. This is configured from the editor under the "Save & Load" tab. - * - * \see \ref save-load-graphs - */ - [SerializeField] - public bool cacheStartup; - - //End Serialization Settings - - List graphStructureLocked = new List(); - - #endregion - - public byte[] GetData () { - return data; - } - - public void SetData (byte[] data) { - this.data = data; - } - - /** Loads the graphs from memory, will load cached graphs if any exists */ - public void Awake () { - graphs = new NavGraph[0]; - - if (cacheStartup && file_cachedStartup != null) { - LoadFromCache(); - } else { - DeserializeGraphs(); - } - } - - /** Prevent the graph structure from changing during the time this lock is held. - * This prevents graphs from being added or removed and also prevents graphs from being serialized or deserialized. - * This is used when e.g an async scan is happening to ensure that for example a graph that is being scanned is not destroyed. - * - * Each call to this method *must* be paired with exactly one call to #UnlockGraphStructure. - * The calls may be nested. - */ - internal void LockGraphStructure (bool allowAddingGraphs = false) { - graphStructureLocked.Add(allowAddingGraphs); - } - - /** Allows the graph structure to change again. - * \see #LockGraphStructure - */ - internal void UnlockGraphStructure () { - if (graphStructureLocked.Count == 0) throw new System.InvalidOperationException(); - graphStructureLocked.RemoveAt(graphStructureLocked.Count - 1); - } - - PathProcessor.GraphUpdateLock AssertSafe (bool onlyAddingGraph = false) { - if (graphStructureLocked.Count > 0) { - bool allowAdding = true; - for (int i = 0; i < graphStructureLocked.Count; i++) allowAdding &= graphStructureLocked[i]; - if (!(onlyAddingGraph && allowAdding)) throw new System.InvalidOperationException("Graphs cannot be added, removed or serialized while the graph structure is locked. This is the case when a graph is currently being scanned and when executing graph updates and work items.\nHowever as a special case, graphs can be added inside work items."); - } - - // Pause the pathfinding threads - var graphLock = AstarPath.active.PausePathfinding(); - if (!AstarPath.active.IsInsideWorkItem) { - // Make sure all graph updates and other callbacks are done - // Only do this if this code is not being called from a work item itself as that would cause a recursive wait that could never complete. - // There are some valid cases when this can happen. For example it may be necessary to add a new graph inside a work item. - AstarPath.active.FlushWorkItems(); - - // Paths that are already calculated and waiting to be returned to the Seeker component need to be - // processed immediately as their results usually depend on graphs that currently exist. If this was - // not done then after destroying a graph one could get a path result with destroyed nodes in it. - AstarPath.active.pathReturnQueue.ReturnPaths(false); - } - return graphLock; - } - - /** Updates shortcuts to the first graph of different types. - * Hard coding references to some graph types is not really a good thing imo. I want to keep it dynamic and flexible. - * But these references ease the use of the system, so I decided to keep them. - */ - public void UpdateShortcuts () { - recastGraph = (RecastGraph)FindGraphOfType(typeof(RecastGraph)); - } - - /** Load from data from #file_cachedStartup */ - public void LoadFromCache () { - var graphLock = AssertSafe(); - - if (file_cachedStartup != null) { - var bytes = file_cachedStartup.bytes; - DeserializeGraphs(bytes); - - GraphModifier.TriggerEvent(GraphModifier.EventType.PostCacheLoad); - } else { - Debug.LogError("Can't load from cache since the cache is empty"); - } - graphLock.Release(); - } - - #region Serialization - - /** Serializes all graphs settings to a byte array. - * \see DeserializeGraphs(byte[]) - */ - public byte[] SerializeGraphs () { - return SerializeGraphs(SerializeSettings.Settings); - } - - /** Serializes all graphs settings and optionally node data to a byte array. - * \see DeserializeGraphs(byte[]) - * \see Pathfinding.Serialization.SerializeSettings - */ - public byte[] SerializeGraphs (SerializeSettings settings) { - uint checksum; - - return SerializeGraphs(settings, out checksum); - } - - /** Main serializer function. - * Serializes all graphs to a byte array - * A similar function exists in the AstarPathEditor.cs script to save additional info */ - public byte[] SerializeGraphs (SerializeSettings settings, out uint checksum) { - var graphLock = AssertSafe(); - var sr = new AstarSerializer(settings); - - sr.OpenSerialize(); - sr.SerializeGraphs(graphs); - sr.SerializeExtraInfo(); - byte[] bytes = sr.CloseSerialize(); - checksum = sr.GetChecksum(); - #if ASTARDEBUG - Debug.Log("Got a whole bunch of data, "+bytes.Length+" bytes"); - #endif - graphLock.Release(); - return bytes; - } - - /** Deserializes graphs from #data */ - public void DeserializeGraphs () { - if (data != null) { - DeserializeGraphs(data); - } - } - - /** Destroys all graphs and sets graphs to null */ - void ClearGraphs () { - if (graphs == null) return; - for (int i = 0; i < graphs.Length; i++) { - if (graphs[i] != null) { - ((IGraphInternals)graphs[i]).OnDestroy(); - } - } - graphs = null; - UpdateShortcuts(); - } - - public void OnDestroy () { - ClearGraphs(); - } - - /** Deserializes graphs from the specified byte array. - * An error will be logged if deserialization fails. - */ - public void DeserializeGraphs (byte[] bytes) { - var graphLock = AssertSafe(); - - ClearGraphs(); - DeserializeGraphsAdditive(bytes); - graphLock.Release(); - } - - /** Deserializes graphs from the specified byte array additively. - * An error will be logged if deserialization fails. - * This function will add loaded graphs to the current ones. - */ - public void DeserializeGraphsAdditive (byte[] bytes) { - var graphLock = AssertSafe(); - - try { - if (bytes != null) { - var sr = new AstarSerializer(); - - if (sr.OpenDeserialize(bytes)) { - DeserializeGraphsPartAdditive(sr); - sr.CloseDeserialize(); - } else { - Debug.Log("Invalid data file (cannot read zip).\nThe data is either corrupt or it was saved using a 3.0.x or earlier version of the system"); - } - } else { - throw new System.ArgumentNullException("bytes"); - } - AstarPath.active.VerifyIntegrity(); - } catch (System.Exception e) { - Debug.LogError("Caught exception while deserializing data.\n"+e); - graphs = new NavGraph[0]; - } - - UpdateShortcuts(); - graphLock.Release(); - } - - /** Helper function for deserializing graphs */ - void DeserializeGraphsPartAdditive (AstarSerializer sr) { - if (graphs == null) graphs = new NavGraph[0]; - - var gr = new List(graphs); - - // Set an offset so that the deserializer will load - // the graphs with the correct graph indexes - sr.SetGraphIndexOffset(gr.Count); - - gr.AddRange(sr.DeserializeGraphs()); - graphs = gr.ToArray(); - - sr.DeserializeEditorSettingsCompatibility(); - sr.DeserializeExtraInfo(); - - //Assign correct graph indices. - for (int i = 0; i < graphs.Length; i++) { - if (graphs[i] == null) continue; - graphs[i].GetNodes(node => node.GraphIndex = (uint)i); - } - - for (int i = 0; i < graphs.Length; i++) { - for (int j = i+1; j < graphs.Length; j++) { - if (graphs[i] != null && graphs[j] != null && graphs[i].guid == graphs[j].guid) { - Debug.LogWarning("Guid Conflict when importing graphs additively. Imported graph will get a new Guid.\nThis message is (relatively) harmless."); - graphs[i].guid = Guid.NewGuid(); - break; - } - } - } - - sr.PostDeserialization(); - } - - #endregion - - /** Find all graph types supported in this build. - * Using reflection, the assembly is searched for types which inherit from NavGraph. */ - public void FindGraphTypes () { -#if !ASTAR_FAST_NO_EXCEPTIONS && !UNITY_WINRT && !UNITY_WEBGL - var assembly = WindowsStoreCompatibility.GetTypeInfo(typeof(AstarPath)).Assembly; - System.Type[] types = assembly.GetTypes(); - var graphList = new List(); - - foreach (System.Type type in types) { -#if NETFX_CORE && !UNITY_EDITOR - System.Type baseType = type.GetTypeInfo().BaseType; -#else - System.Type baseType = type.BaseType; -#endif - while (baseType != null) { - if (System.Type.Equals(baseType, typeof(NavGraph))) { - graphList.Add(type); - - break; - } - -#if NETFX_CORE && !UNITY_EDITOR - baseType = baseType.GetTypeInfo().BaseType; -#else - baseType = baseType.BaseType; -#endif - } - } - - graphTypes = graphList.ToArray(); - -#if ASTARDEBUG - Debug.Log("Found "+graphTypes.Length+" graph types"); -#endif -#else - graphTypes = DefaultGraphTypes; -#endif - } - - #region GraphCreation - - /** Creates a new graph instance of type \a type - * \see #CreateGraph(string) - */ - internal NavGraph CreateGraph (System.Type type) { - var graph = System.Activator.CreateInstance(type) as NavGraph; - - return graph; - } - - /** Adds a graph of type \a type to the #graphs array */ - public NavGraph AddGraph (System.Type type) { - NavGraph graph = null; - - for (int i = 0; i < graphTypes.Length; i++) { - if (System.Type.Equals(graphTypes[i], type)) { - graph = CreateGraph(graphTypes[i]); - } - } - - if (graph == null) { - Debug.LogError("No NavGraph of type '"+type+"' could be found, "+graphTypes.Length+" graph types are avaliable"); - return null; - } - - AddGraph(graph); - - return graph; - } - - /** Adds the specified graph to the #graphs array */ - void AddGraph (NavGraph graph) { - // Make sure to not interfere with pathfinding - var graphLock = AssertSafe(true); - - // Try to fill in an empty position - bool foundEmpty = false; - - for (int i = 0; i < graphs.Length; i++) { - if (graphs[i] == null) { - graphs[i] = graph; - graph.graphIndex = (uint)i; - foundEmpty = true; - break; - } - } - - if (!foundEmpty) { - if (graphs != null && graphs.Length >= GraphNode.MaxGraphIndex) { - throw new System.Exception("Graph Count Limit Reached. You cannot have more than " + GraphNode.MaxGraphIndex + " graphs."); - } - - // Add a new entry to the list - var graphList = new List(graphs ?? new NavGraph[0]); - graphList.Add(graph); - graphs = graphList.ToArray(); - graph.graphIndex = (uint)(graphs.Length-1); - } - - UpdateShortcuts(); - graphLock.Release(); - } - - /** Removes the specified graph from the #graphs array and Destroys it in a safe manner. - * To avoid changing graph indices for the other graphs, the graph is simply nulled in the array instead - * of actually removing it from the array. - * The empty position will be reused if a new graph is added. - * - * \returns True if the graph was sucessfully removed (i.e it did exist in the #graphs array). False otherwise. - * - * \version Changed in 3.2.5 to call SafeOnDestroy before removing - * and nulling it in the array instead of removing the element completely in the #graphs array. - */ - public bool RemoveGraph (NavGraph graph) { - // Make sure the pathfinding threads are stopped - // If we don't wait until pathfinding that is potentially running on - // this graph right now we could end up with NullReferenceExceptions - var graphLock = AssertSafe(); - - ((IGraphInternals)graph).OnDestroy(); - - int i = System.Array.IndexOf(graphs, graph); - if (i != -1) graphs[i] = null; - - UpdateShortcuts(); - graphLock.Release(); - return i != -1; - } - - #endregion - - #region GraphUtility - - /** Returns the first graph which satisfies the predicate. Returns null if no graph was found. */ - public NavGraph FindGraph (System.Func predicate) { - if (graphs != null) { - for (int i = 0; i < graphs.Length; i++) { - if (graphs[i] != null && predicate(graphs[i])) { - return graphs[i]; - } - } - } - return null; - } - - /** Returns the first graph of type \a type found in the #graphs array. Returns null if no graph was found. */ - public NavGraph FindGraphOfType (System.Type type) { - return FindGraph(graph => System.Type.Equals(graph.GetType(), type)); - } - - /** Returns the first graph which inherits from the type \a type. Returns null if no graph was found. */ - public NavGraph FindGraphWhichInheritsFrom (System.Type type) { - return FindGraph(graph => WindowsStoreCompatibility.GetTypeInfo(type).IsAssignableFrom(WindowsStoreCompatibility.GetTypeInfo(graph.GetType()))); - } - - /** Loop through this function to get all graphs of type 'type' - * \code - * foreach (GridGraph graph in AstarPath.data.FindGraphsOfType (typeof(GridGraph))) { - * //Do something with the graph - * } - * \endcode - * \see AstarPath.RegisterSafeNodeUpdate */ - public IEnumerable FindGraphsOfType (System.Type type) { - if (graphs == null) yield break; - for (int i = 0; i < graphs.Length; i++) { - if (graphs[i] != null && System.Type.Equals(graphs[i].GetType(), type)) { - yield return graphs[i]; - } - } - } - - /** Gets the index of the NavGraph in the #graphs array */ - public int GetGraphIndex (NavGraph graph) { - if (graph == null) throw new System.ArgumentNullException("graph"); - - var index = -1; - if (graphs != null) { - index = System.Array.IndexOf(graphs, graph); - if (index == -1) Debug.LogError("Graph doesn't exist"); - } - return index; - } - - #endregion - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarData.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarData.cs.meta deleted file mode 100644 index eb5a46f2f490910967532b533635006a36ef9889..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarData.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 38d211caa07cb44ef886481aa1cf755c -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarPath.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarPath.cs deleted file mode 100644 index 2271aa8e44e5d90718f7ecb0692e337b5161ef8a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarPath.cs +++ /dev/null @@ -1,1610 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using Pathfinding; -using PF; -using Mathf = UnityEngine.Mathf; -#if UNITY_5_5_OR_NEWER -using UnityEngine.Profiling; -#endif - -#if NETFX_CORE -using Thread = Pathfinding.WindowsStore.Thread; -#else -using Thread = System.Threading.Thread; -#endif - -[ExecuteInEditMode] -[AddComponentMenu("Pathfinding/Pathfinder")] -/** - * Core component for the A* %Pathfinding System. - * This class handles all of the pathfinding system, calculates all paths and stores the info.\n - * This class is a singleton class, meaning there should only exist at most one active instance of it in the scene.\n - * It might be a bit hard to use directly, usually interfacing with the pathfinding system is done through the \link Pathfinding.Seeker Seeker\endlink class. - * - * \nosubgrouping - * \ingroup relevant - */ -[HelpURL("http://arongranberg.com/astar/docs/class_astar_path.php")] -public class AstarPath : VersionedMonoBehaviour { - /** The version number for the A* %Pathfinding Project */ - public static readonly System.Version Version = new System.Version(4, 1, 16); - - /** Information about where the package was downloaded */ - public enum AstarDistribution { WebsiteDownload, AssetStore }; - - /** Used by the editor to guide the user to the correct place to download updates */ - public static readonly AstarDistribution Distribution = AstarDistribution.AssetStore; - - /** Which branch of the A* %Pathfinding Project is this release. - * Used when checking for updates so that - * users of the development versions can get notifications of development - * updates. - */ - public static readonly string Branch = "master_Pro"; - - /** Holds all graph data */ - [UnityEngine.Serialization.FormerlySerializedAs("astarData")] - public AstarData data; - - /** Returns the active AstarPath object in the scene. - * \note This is only set if the AstarPath object has been initialized (which happens in Awake). - */ -#if UNITY_4_6 || UNITY_4_3 - public static new AstarPath active; -#else - public static AstarPath active; -#endif - - /** Shortcut to Pathfinding.AstarData.graphs */ - public NavGraph[] graphs { - get { - if (data == null) - data = new AstarData(); - return data.graphs; - } - } - - #region InspectorDebug - /** @name Inspector - Debug - * @{ */ - - /** Toggle for showing the gizmo debugging for the graphs in the scene view (editor only). */ - public bool showNavGraphs = true; - - /** Toggle to show unwalkable nodes. - * - * \note Only relevant in the editor - * - * \see #unwalkableNodeDebugSize - */ - public bool showUnwalkableNodes = true; - - /** The mode to use for drawing nodes in the sceneview. - * - * \note Only relevant in the editor - * - * \see Pathfinding.GraphDebugMode - */ - public GraphDebugMode debugMode; - - /** Low value to use for certain #debugMode modes. - * For example if #debugMode is set to G, this value will determine when the node will be completely red. - * - * \note Only relevant in the editor - * - * \see #debugRoof - * \see #debugMode - */ - public float debugFloor = 0; - - /** High value to use for certain #debugMode modes. - * For example if #debugMode is set to G, this value will determine when the node will be completely green. - * - * For the penalty debug mode, the nodes will be colored green when they have a penalty less than #debugFloor and red - * when their penalty is greater or equal to this value and something between red and green otherwise. - * - * \note Only relevant in the editor - * - * \see #debugFloor - * \see #debugMode - */ - public float debugRoof = 20000; - - /** If set, the #debugFloor and #debugRoof values will not be automatically recalculated. - * - * \note Only relevant in the editor - */ - public bool manualDebugFloorRoof = false; - - - /** If enabled, nodes will draw a line to their 'parent'. - * This will show the search tree for the latest path. - * - * \note Only relevant in the editor - * - * \todo Add a showOnlyLastPath flag to indicate whether to draw every node or only the ones visited by the latest path. - */ - public bool showSearchTree = false; - - /** Size of the red cubes shown in place of unwalkable nodes. - * - * \note Only relevant in the editor. Does not apply to grid graphs. - * \see #showUnwalkableNodes - */ - public float unwalkableNodeDebugSize = 0.3F; - - /** The amount of debugging messages. - * Use less debugging to improve performance (a bit) or just to get rid of the Console spamming. - * Use more debugging (heavy) if you want more information about what the pathfinding scripts are doing. - * The InGame option will display the latest path log using in-game GUI. - * - * \shadowimage{path_logging.png} - */ - public PathLog logPathResults = PathLog.Normal; - - /** @} */ - #endregion - - #region InspectorSettings - /** @name Inspector - Settings - * @{ */ - - /** Maximum distance to search for nodes. - * When searching for the nearest node to a point, this is the limit (in world units) for how far away it is allowed to be. - * - * This is relevant if you try to request a path to a point that cannot be reached and it thus has to search for - * the closest node to that point which can be reached (which might be far away). If it cannot find a node within this distance - * then the path will fail. - * - * \shadowimage{max_nearest_node_distance.png} - * - * \see Pathfinding.NNConstraint.constrainDistance - */ - public float maxNearestNodeDistance = 100; - - /** Max Nearest Node Distance Squared. - * \see #maxNearestNodeDistance */ - public float maxNearestNodeDistanceSqr { - get { return maxNearestNodeDistance*maxNearestNodeDistance; } - } - - /** If true, all graphs will be scanned during Awake. - * This does not include loading from the cache. - * If you disable this, you will have to call \link Scan AstarPath.active.Scan() \endlink yourself to enable pathfinding. - * Alternatively you could load a saved graph from a file. - * - * \see #Scan - * \see #ScanAsync - */ - public bool scanOnStartup = true; - - /** Do a full GetNearest search for all graphs. - * Additional searches will normally only be done on the graph which in the first fast search seemed to have the closest node. - * With this setting on, additional searches will be done on all graphs since the first check is not always completely accurate.\n - * More technically: GetNearestForce on all graphs will be called if true, otherwise only on the one graph which's GetNearest search returned the best node.\n - * Usually faster when disabled, but higher quality searches when enabled. - * When using a a navmesh or recast graph, for best quality, this setting should be combined with the Pathfinding.NavMeshGraph.accurateNearestNode setting set to true. - * \note For the PointGraph this setting doesn't matter much as it has only one search mode. - */ - public bool fullGetNearestSearch = false; - - /** Prioritize graphs. - * Graphs will be prioritized based on their order in the inspector. - * The first graph which has a node closer than #prioritizeGraphsLimit will be chosen instead of searching all graphs. - */ - public bool prioritizeGraphs = false; - - /** Distance limit for #prioritizeGraphs. - * \see #prioritizeGraphs - */ - public float prioritizeGraphsLimit = 1F; - - /** Reference to the color settings for this AstarPath object. - * Color settings include for example which color the nodes should be in, in the sceneview. */ - public AstarColor colorSettings; - - /** Stored tag names. - * \see AstarPath.FindTagNames - * \see AstarPath.GetTagNames - */ - [SerializeField] - protected string[] tagNames = null; - - /** The distance function to use as a heuristic. - * The heuristic, often referred to as just 'H' is the estimated cost from a node to the target. - * Different heuristics affect how the path picks which one to follow from multiple possible with the same length - * \see #Pathfinding.Heuristic for more details and descriptions of the different modes. - * \see Wikipedia: Admissible heuristic - * \see Wikipedia: A* search algorithm - * \see Wikipedia: Dijkstra's Algorithm - */ - public Heuristic heuristic = Heuristic.Euclidean; - - /** The scale of the heuristic. - * If a value lower than 1 is used, the pathfinder will search more nodes (slower). - * If 0 is used, the pathfinding algorithm will be reduced to dijkstra's algorithm. This is equivalent to setting #heuristic to None. - * If a value larger than 1 is used the pathfinding will (usually) be faster because it expands fewer nodes, but the paths may no longer be the optimal (i.e the shortest possible paths). - * - * Usually you should leave this to the default value of 1. - * - * \see https://en.wikipedia.org/wiki/Admissible_heuristic - * \see https://en.wikipedia.org/wiki/A*_search_algorithm - * \see https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm - */ - public float heuristicScale = 1F; - - /** Number of pathfinding threads to use. - * Multithreading puts pathfinding in another thread, this is great for performance on 2+ core computers since the framerate will barely be affected by the pathfinding at all. - * - None indicates that the pathfinding is run in the Unity thread as a coroutine - * - Automatic will try to adjust the number of threads to the number of cores and memory on the computer. - * Less than 512mb of memory or a single core computer will make it revert to using no multithreading. - * - * It is recommended that you use one of the "Auto" settings that are available. - * The reason is that even if your computer might be beefy and have 8 cores. - * Other computers might only be quad core or dual core in which case they will not benefit from more than - * 1 or 3 threads respectively (you usually want to leave one core for the unity thread). - * If you use more threads than the number of cores on the computer it is mostly just wasting memory, it will not run any faster. - * The extra memory usage is not trivially small. Each thread needs to keep a small amount of data for each node in all the graphs. - * It is not the full graph data but it is proportional to the number of nodes. - * The automatic settings will inspect the machine it is running on and use that to determine the number of threads so that no memory is wasted. - * - * The exception is if you only have one (or maybe two characters) active at time. Then you should probably just go with one thread always since it is very unlikely - * that you will need the extra throughput given by more threads. Keep in mind that more threads primarily increases throughput by calculating different paths on different - * threads, it will not calculate individual paths any faster. - * - * Note that if you are modifying the pathfinding core scripts or if you are directly modifying graph data without using any of the - * safe wrappers (like #AddWorkItem) multithreading can cause strange errors and pathfinding stopping to work if you are not careful. - * For basic usage (not modding the pathfinding core) it should be safe. - * - * \note WebGL does not support threads at all (since javascript is single-threaded) so no threads will be used on that platform. - * - * \see CalculateThreadCount - * - * \astarpro - */ - public ThreadCount threadCount = ThreadCount.One; - - /** Max number of milliseconds to spend each frame for pathfinding. - * At least 500 nodes will be searched each frame (if there are that many to search). - * When using multithreading this value is irrelevant. - */ - public float maxFrameTime = 1F; - - /** Defines the minimum amount of nodes in an area. - * If an area has less than this amount of nodes, the area will be flood filled again with the area ID GraphNode.MaxAreaIndex-1, - * it shouldn't affect pathfinding in any significant way.\n - * If you want to be able to separate areas from one another for some reason (for example to do a fast check to see if a path is at all possible) - * you should set this variable to 0. - * - * \version Since version 3.6, this variable should in most cases be set to 0 since the max number of area indices available has been greatly increased. - * \deprecated This is handled automatically now - */ - [System.Obsolete("Minimum area size is mostly obsolete since the limit has been raised significantly, and the edge cases are handled automatically")] - public int minAreaSize = 0; - - /** Throttle graph updates and batch them to improve performance. - * If toggled, graph updates will batched and executed less often (specified by #graphUpdateBatchingInterval). - * - * This can have a positive impact on pathfinding throughput since the pathfinding threads do not need - * to be stopped as often, and it reduces the overhead per graph update. - * All graph updates are still applied however, they are just batched together so that more of them are - * applied at the same time. - * - * However do not use this if you want minimal latency between a graph update being requested - * and it being applied. - * - * This only applies to graph updates requested using the #UpdateGraphs method. Not those requested - * using #RegisterSafeUpdate or #AddWorkItem. - * - * \see \ref graph-updates - */ - public bool batchGraphUpdates = false; - - /** Minimum number of seconds between each batch of graph updates. - * If #batchGraphUpdates is true, this defines the minimum number of seconds between each batch of graph updates. - * - * This can have a positive impact on pathfinding throughput since the pathfinding threads do not need - * to be stopped as often, and it reduces the overhead per graph update. - * All graph updates are still applied however, they are just batched together so that more of them are - * applied at the same time. - * - * Do not use this if you want minimal latency between a graph update being requested - * and it being applied. - * - * This only applies to graph updates requested using the #UpdateGraphs method. Not those requested - * using #RegisterSafeUpdate or #AddWorkItem. - * - * \see \ref graph-updates - */ - public float graphUpdateBatchingInterval = 0.2F; - - - /** @} */ - #endregion - - #region DebugVariables - /** @name Debug Members - * @{ */ - -#if ProfileAstar - /** How many paths has been computed this run. From application start.\n - * Debugging variable - */ - public static int PathsCompleted = 0; - - public static System.Int64 TotalSearchedNodes = 0; - public static System.Int64 TotalSearchTime = 0; -#endif - - /** The time it took for the last call to Scan() to complete. - * Used to prevent automatically rescanning the graphs too often (editor only) - */ - public float lastScanTime { get; private set; } - - /** The path to debug using gizmos. - * This is the path handler used to calculate the last path. - * It is used in the editor to draw debug information using gizmos. - */ - [System.NonSerialized] - public PathHandler debugPathData; - - /** The path ID to debug using gizmos */ - [System.NonSerialized] - public ushort debugPathID; - - /** Debug string from the last completed path. - * Will be updated if #logPathResults == PathLog.InGame - */ - string inGameDebugPath; - - /* @} */ - #endregion - - #region StatusVariables - - /** Backing field for #isScanning. - * Cannot use an auto-property because they cannot be marked with System.NonSerialized. - */ - [System.NonSerialized] - bool isScanningBacking; - - /** Set while any graphs are being scanned. - * It will be true up until the FloodFill is done. - * - * \note Not to be confused with graph updates. - * - * Used to better support Graph Update Objects called for example in OnPostScan - * - * \see IsAnyGraphUpdateQueued - * \see IsAnyGraphUpdateInProgress - */ - public bool isScanning { get { return isScanningBacking; } private set { isScanningBacking = value; } } - - /** Number of parallel pathfinders. - * Returns the number of concurrent processes which can calculate paths at once. - * When using multithreading, this will be the number of threads, if not using multithreading it is always 1 (since only 1 coroutine is used). - * \see IsUsingMultithreading - */ - //public int NumParallelThreads { - // get { - // return pathProcessor.NumThreads; - // } - //} - - - /** Returns if any graph updates are waiting to be applied. - * \deprecated Use IsAnyGraphUpdateQueued instead - */ - [System.Obsolete("Fixed grammar, use IsAnyGraphUpdateQueued instead")] - public bool IsAnyGraphUpdatesQueued { get { return IsAnyGraphUpdateQueued; } } - - /** Returns if any graph updates are waiting to be applied. - * \note This is false while the updates are being performed. - * \note This does *not* includes other types of work items such as navmesh cutting or anything added by #RegisterSafeUpdate or #AddWorkItem. - */ - public bool IsAnyGraphUpdateQueued { get { return graphUpdates.IsAnyGraphUpdateQueued; } } - - /** Returns if any graph updates are being calculated right now. - * \note This does *not* includes other types of work items such as navmesh cutting or anything added by #RegisterSafeUpdate or #AddWorkItem. - * - * \see IsAnyWorkItemInProgress - */ - public bool IsAnyGraphUpdateInProgress { get { return graphUpdates.IsAnyGraphUpdateInProgress; } } - - /** Returns if any work items are in progress right now. - * \note This includes pretty much all types of graph updates. - * Such as normal graph updates, navmesh cutting and anything added by #RegisterSafeUpdate or #AddWorkItem. - */ - public bool IsAnyWorkItemInProgress { get { return workItems.workItemsInProgress; } } - - /** Returns if this code is currently being exectuted inside a work item. - * \note This includes pretty much all types of graph updates. - * Such as normal graph updates, navmesh cutting and anything added by #RegisterSafeUpdate or #AddWorkItem. - * - * In contrast to #IsAnyWorkItemInProgress this is only true when work item code is being executed, it is not - * true in-between the updates to a work item that takes several frames to complete. - */ - internal bool IsInsideWorkItem { get { return workItems.workItemsInProgressRightNow; } } - - #endregion - - #region Callbacks - - /** \deprecated */ - //[System.ObsoleteAttribute] - //public System.Action OnGraphsWillBeUpdated; -// - ///** \deprecated */ - //[System.ObsoleteAttribute] - //public System.Action OnGraphsWillBeUpdated2; - - /* @} */ - #endregion - - #region MemoryStructures - - /** Processes graph updates */ - readonly GraphUpdateProcessor graphUpdates; - - /** Processes work items */ - readonly WorkItemProcessor workItems; - - /** Holds all paths waiting to be calculated and calculates them */ - public PathProcessor pathProcessor; - - bool graphUpdateRoutineRunning = false; - - /** Makes sure QueueGraphUpdates will not queue multiple graph update orders */ - bool graphUpdatesWorkItemAdded = false; - - /** Time the last graph update was done. - * Used to group together frequent graph updates to batches - */ - float lastGraphUpdate = -9999F; - - /** Held if any work items are currently queued */ - PathProcessor.GraphUpdateLock workItemLock; - - /** Holds all completed paths waiting to be returned to where they were requested */ - internal readonly PathReturnQueue pathReturnQueue; - - /** Holds settings for heuristic optimization. - * \see heuristic-opt - * - * \astarpro - */ - public EuclideanEmbedding euclideanEmbedding = new EuclideanEmbedding(); - - #endregion - - /** Shows or hides graph inspectors. - * Used internally by the editor - */ - public bool showGraphs = false; - - private AstarPath () { - pathReturnQueue = new PathReturnQueue(this); - - // Make sure that the pathProcessor is never null - pathProcessor = new PathProcessor(pathReturnQueue, 1, false); - - workItems = new WorkItemProcessor(); - graphUpdates = new GraphUpdateProcessor(); - - // Forward graphUpdates.OnGraphsUpdated to AstarPath.OnGraphsUpdated - graphUpdates.OnGraphsUpdated += () => { - if (UnityHelper.OnGraphsUpdated != null) { - UnityHelper.OnGraphsUpdated(this); - } - }; - } - - /** Returns tag names. - * Makes sure that the tag names array is not null and of length 32. - * If it is null or not of length 32, it creates a new array and fills it with 0,1,2,3,4 etc... - * \see AstarPath.FindTagNames - */ - public string[] GetTagNames () { - if (tagNames == null || tagNames.Length != 32) { - tagNames = new string[32]; - for (int i = 0; i < tagNames.Length; i++) { - tagNames[i] = ""+i; - } - tagNames[0] = "Basic Ground"; - } - return tagNames; - } - - /** Used outside of play mode to initialize the AstarPath object even if it has not been selected in the inspector yet. - * This will set the #active property and deserialize all graphs. - * - * This is useful if you want to do changes to the graphs in the editor outside of play mode, but cannot be sure that the graphs have been deserialized yet. - * In play mode this method does nothing. - */ - public static void FindAstarPath () { - if (Application.isPlaying) return; - if (active == null) active = GameObject.FindObjectOfType(); - if (active != null && (active.data.graphs == null || active.data.graphs.Length == 0)) active.data.DeserializeGraphs(); - } - - /** Tries to find an AstarPath object and return tag names. - * If an AstarPath object cannot be found, it returns an array of length 1 with an error message. - * \see AstarPath.GetTagNames - */ - public static string[] FindTagNames () { - FindAstarPath(); - return active != null ? active.GetTagNames() : new string[1] { "There is no AstarPath component in the scene" }; - } - - void RecalculateDebugLimits () { - debugFloor = float.PositiveInfinity; - debugRoof = float.NegativeInfinity; - - bool ignoreSearchTree = !showSearchTree || debugPathData == null; - for (int i = 0; i < graphs.Length; i++) { - if (graphs[i] != null && graphs[i].drawGizmos) { - graphs[i].GetNodes(node => { - if (ignoreSearchTree || Pathfinding.Util.GraphGizmoHelper.InSearchTree(node, debugPathData, debugPathID)) { - if (debugMode == GraphDebugMode.Penalty) { - debugFloor = Mathf.Min(debugFloor, node.Penalty); - debugRoof = Mathf.Max(debugRoof, node.Penalty); - } else if (debugPathData != null) { - var rnode = debugPathData.GetPathNode(node); - switch (debugMode) { - case GraphDebugMode.F: - debugFloor = Mathf.Min(debugFloor, rnode.F); - debugRoof = Mathf.Max(debugRoof, rnode.F); - break; - case GraphDebugMode.G: - debugFloor = Mathf.Min(debugFloor, rnode.G); - debugRoof = Mathf.Max(debugRoof, rnode.G); - break; - case GraphDebugMode.H: - debugFloor = Mathf.Min(debugFloor, rnode.H); - debugRoof = Mathf.Max(debugRoof, rnode.H); - break; - } - } - } - }); - } - } - - if (float.IsInfinity(debugFloor)) { - debugFloor = 0; - debugRoof = 1; - } - - // Make sure they are not identical, that will cause the color interpolation to fail - if (debugRoof-debugFloor < 1) debugRoof += 1; - } - - Pathfinding.Util.RetainedGizmos gizmos = new Pathfinding.Util.RetainedGizmos(); - - /** Calls OnDrawGizmos on graph generators */ - private void OnDrawGizmos () { - // Make sure the singleton pattern holds - // Might not hold if the Awake method - // has not been called yet - if (active == null) active = this; - - if (active != this || graphs == null) { - return; - } - - // In Unity one can select objects in the scene view by simply clicking on them with the mouse. - // Graph gizmos interfere with this however. If we would draw a mesh here the user would - // not be able to select whatever was behind it because the gizmos would block them. - // (presumably Unity cannot associate the gizmos with the AstarPath component because we are using - // Graphics.DrawMeshNow to draw most gizmos). It turns out that when scene picking happens - // then Event.current.type will be 'mouseUp'. We will therefore ignore all events which are - // not repaint events to make sure that the gizmos do not interfere with any kind of scene picking. - // This will not have any visual impact as only repaint events will result in any changes on the screen. - // From testing it seems the only events that can happen during OnDrawGizmos are the mouseUp and repaint events. - if (Event.current.type != EventType.Repaint) return; - - AstarProfiler.StartProfile("OnDrawGizmos"); - - if (workItems.workItemsInProgress || isScanning) { - // If updating graphs, graph info might not be valid right now - // so just draw the same thing as last frame - gizmos.DrawExisting(); - } else { - if (showNavGraphs && !manualDebugFloorRoof) { - RecalculateDebugLimits(); - } - - Profiler.BeginSample("Graph.OnDrawGizmos"); - // Loop through all graphs and draw their gizmos - for (int i = 0; i < graphs.Length; i++) { - if (graphs[i] != null && graphs[i].drawGizmos) - ((NavmeshBase)(graphs[i])).OnDrawGizmos(gizmos, showNavGraphs); - } - Profiler.EndSample(); - - if (showNavGraphs) { - euclideanEmbedding.OnDrawGizmos(); - } - } - - gizmos.FinalizeDraw(); - - AstarProfiler.EndProfile("OnDrawGizmos"); - } - -#if !ASTAR_NO_GUI - /** Draws the InGame debugging (if enabled), also shows the fps if 'L' is pressed down. - * \see #logPathResults PathLog - */ - private void OnGUI () { - if (logPathResults == PathLog.InGame && inGameDebugPath != "") { - GUI.Label(new Rect(5, 5, 400, 600), inGameDebugPath); - } - } -#endif - - /** Prints path results to the log. What it prints can be controled using #logPathResults. - * \see #logPathResults - * \see PathLog - * \see Pathfinding.Path.DebugString - */ - private void LogPathResults (Path path) - { - return; - if (logPathResults != PathLog.None && (path.error || logPathResults != PathLog.OnlyErrors)) { - string debug = path.DebugString(logPathResults); - - if (logPathResults == PathLog.InGame) { - inGameDebugPath = debug; - } else if (path.error) { - Debug.LogWarning(debug); - } else { - Debug.Log(debug); - } - } - } - - /** - * Checks if any work items need to be executed - * then runs pathfinding for a while (if not using multithreading because - * then the calculation happens in other threads) - * and then returns any calculated paths to the - * scripts that requested them. - * - * \see PerformBlockingActions - * \see PathProcessor.TickNonMultithreaded - * \see PathReturnQueue.ReturnPaths - */ - private void Update () { - // This class uses the [ExecuteInEditMode] attribute - // So Update is called even when not playing - // Don't do anything when not in play mode - if (!Application.isPlaying) return; - - // Execute blocking actions such as graph updates - // when not scanning - if (!isScanning) { - PerformBlockingActions(); - } - - // Calculates paths when not using multithreading - pathProcessor.TickNonMultithreaded(); - - // Return calculated paths - pathReturnQueue.ReturnPaths(true); - } - - private void PerformBlockingActions (bool force = false) { - if (workItemLock.Held) { - // Return all paths before starting blocking actions - // since these might change the graph and make returned paths invalid (at least the nodes) - pathReturnQueue.ReturnPaths(false); - - if (workItems.ProcessWorkItems(force)) { - // At this stage there are no more work items, resume pathfinding threads - workItemLock.Release(); - } - } - } - - /** Call during work items to queue a flood fill. - * \deprecated This method has been moved. Use the method on the context object that can be sent with work item delegates instead - * \snippet MiscSnippets.cs AstarPath.AddWorkItem1 - * - * \see #Pathfinding.IWorkItemContext - */ - [System.Obsolete("This method has been moved. Use the method on the context object that can be sent with work item delegates instead")] - public void QueueWorkItemFloodFill () { - throw new System.Exception("This method has been moved. Use the method on the context object that can be sent with work item delegates instead"); - } - - /** If a WorkItem needs to have a valid flood fill during execution, call this method to ensure there are no pending flood fills. - * \deprecated This method has been moved. Use the method on the context object that can be sent with work item delegates instead - * \snippet MiscSnippets.cs AstarPath.AddWorkItem1 - * - * \see #Pathfinding.IWorkItemContext - */ - [System.Obsolete("This method has been moved. Use the method on the context object that can be sent with work item delegates instead")] - public void EnsureValidFloodFill () { - throw new System.Exception("This method has been moved. Use the method on the context object that can be sent with work item delegates instead"); - } - - /** Add a work item to be processed when pathfinding is paused. - * Convenience method that is equivalent to - * \code - * AddWorkItem(new AstarWorkItem(callback)); - * \endcode - * - * \see #AddWorkItem(AstarWorkItem) - */ - public void AddWorkItem (System.Action callback) { - AddWorkItem(new AstarWorkItem(callback)); - } - - /** Add a work item to be processed when pathfinding is paused. - * Convenience method that is equivalent to - * \code - * AddWorkItem(new AstarWorkItem(callback)); - * \endcode - * - * \see #AddWorkItem(AstarWorkItem) - */ - //public void AddWorkItem (System.Action callback) { - // AddWorkItem(new AstarWorkItem(callback)); - //} - - /** Add a work item to be processed when pathfinding is paused. - * - * The work item will be executed when it is safe to update nodes. This is defined as between the path searches. - * When using more threads than one, calling this often might decrease pathfinding performance due to a lot of idling in the threads. - * Not performance as in it will use much CPU power, but performance as in the number of paths per second will probably go down - * (though your framerate might actually increase a tiny bit). - * - * You should only call this function from the main unity thread (i.e normal game code). - * - * \snippet MiscSnippets.cs AstarPath.AddWorkItem1 - * - * \snippet MiscSnippets.cs AstarPath.AddWorkItem2 - * - * \see #FlushWorkItems - */ - public void AddWorkItem (AstarWorkItem item) { - workItems.AddWorkItem(item); - - // Make sure pathfinding is stopped and work items are processed - if (!workItemLock.Held) { - workItemLock = PausePathfindingSoon(); - } - -#if UNITY_EDITOR - // If not playing, execute instantly - if (!Application.isPlaying) { - FlushWorkItems(); - } -#endif - } - - #region GraphUpdateMethods - - /** Waits a moment with updating graphs. - * If batchGraphUpdates is set, we want to keep some space between them to let pathfinding threads running and then calculate all queued calls at once - */ - IEnumerator DelayedGraphUpdate () { - graphUpdateRoutineRunning = true; - - yield return new WaitForSeconds(graphUpdateBatchingInterval-(Time.realtimeSinceStartup-lastGraphUpdate)); - graphUpdateRoutineRunning = false; - } - - /** Forces graph updates to complete in a single frame. - * This will force the pathfinding threads to finish calculating the path they are currently calculating (if any) and then pause. - * When all threads have paused, graph updates will be performed. - * \warning Using this very often (many times per second) can reduce your fps due to a lot of threads waiting for one another. - * But you probably wont have to worry about that. - * - * \note This is almost identical to #FlushWorkItems, but added for more descriptive name. - * This function will also override any time limit delays for graph updates. - * This is because graph updates are implemented using work items. - * So calling this function will also execute any other work items (if any are queued). - * - * Will not do anything if there are no graph updates queued (not even execute other work items). - */ - public void FlushGraphUpdates () { - if (IsAnyGraphUpdateQueued) { - FlushWorkItems(); - } - } - - #endregion - - /** Forces work items to complete in a single frame. - * This will force all work items to run immidiately. - * This will force the pathfinding threads to finish calculating the path they are currently calculating (if any) and then pause. - * When all threads have paused, work items will be executed (which can be e.g graph updates). - * - * \warning Using this very often (many times per second) can reduce your fps due to a lot of threads waiting for one another. - * But you probably wont have to worry about that - * - * \note This is almost (note almost) identical to #FlushGraphUpdates, but added for more descriptive name. - * - * Will not do anything if there are no queued work items waiting to run. - * - */ - public void FlushWorkItems () { - var graphLock = PausePathfinding(); - - PerformBlockingActions(true); - graphLock.Release(); - } - - /** Make sure work items are executed. - * - * \param unblockOnComplete If true, pathfinding will be allowed to start running immediately after completing all work items. - * \param block If true, work items that usually take more than one frame to complete will be forced to complete during this call. - * If false, then after this call there might still be work left to do. - * - * \see AddWorkItem - * - * \deprecated Use #FlushWorkItems() instead. - */ - //[System.Obsolete("Use FlushWorkItems() instead")] - //public void FlushWorkItems (bool unblockOnComplete, bool block) { - // var graphLock = PausePathfinding(); -// - // // Run tasks - // PerformBlockingActions(block); - // graphLock.Release(); - //} - - /** Forces thread safe callbacks to run. - * \deprecated Use #FlushWorkItems instead - */ - //[System.Obsolete("Use FlushWorkItems instead")] - //public void FlushThreadSafeCallbacks () { - // FlushWorkItems(); - //} - - /** Calculates number of threads to use. - * If \a count is not Automatic, simply returns \a count casted to an int. - * \returns An int specifying how many threads to use, 0 means a coroutine should be used for pathfinding instead of a separate thread. - * - * If \a count is set to Automatic it will return a value based on the number of processors and memory for the current system. - * If memory is <= 512MB or logical cores are <= 1, it will return 0. If memory is <= 1024 it will clamp threads to max 2. - * Otherwise it will return the number of logical cores clamped to 6. - * - * When running on WebGL this method always returns 0 - */ - public static int CalculateThreadCount (ThreadCount count) { -#if UNITY_WEBGL - return 0; -#else - if (count == ThreadCount.AutomaticLowLoad || count == ThreadCount.AutomaticHighLoad) { -#if ASTARDEBUG - Debug.Log(SystemInfo.systemMemorySize + " " + SystemInfo.processorCount + " " + SystemInfo.processorType); -#endif - - int logicalCores = Mathf.Max(1, SystemInfo.processorCount); - int memory = SystemInfo.systemMemorySize; - - if (memory <= 0) { - Debug.LogError("Machine reporting that is has <= 0 bytes of RAM. This is definitely not true, assuming 1 GiB"); - memory = 1024; - } - - if (logicalCores <= 1) return 0; - - if (memory <= 512) return 0; - - if (count == ThreadCount.AutomaticHighLoad) { - if (memory <= 1024) logicalCores = System.Math.Min(logicalCores, 2); - } else { - //Always run at at most processorCount-1 threads (one core reserved for unity thread). - // Many computers use hyperthreading, so dividing by two is used to remove the hyperthreading cores, pathfinding - // doesn't scale well past the number of physical cores anyway - logicalCores /= 2; - logicalCores = Mathf.Max(1, logicalCores); - - if (memory <= 1024) logicalCores = System.Math.Min(logicalCores, 2); - - logicalCores = System.Math.Min(logicalCores, 6); - } - - return logicalCores; - } else { - int val = (int)count; - return val; - } -#endif - } - - /** Sets up all needed variables and scans the graphs. - * Calls Initialize, starts the ReturnPaths coroutine and scans all graphs. - * Also starts threads if using multithreading - * \see #OnAwakeSettings - */ - protected override void Awake () { - base.Awake(); - // Very important to set this. Ensures the singleton pattern holds - active = this; - - if (FindObjectsOfType(typeof(AstarPath)).Length > 1) { - Debug.LogError("You should NOT have more than one AstarPath component in the scene at any time.\n" + - "This can cause serious errors since the AstarPath component builds around a singleton pattern."); - } - - // Disable GUILayout to gain some performance, it is not used in the OnGUI call - useGUILayout = false; - - // This class uses the [ExecuteInEditMode] attribute - // So Awake is called even when not playing - // Don't do anything when not in play mode - if (!Application.isPlaying) return; - - if (PathFindHelper.OnAwakeSettings != null) { - PathFindHelper.OnAwakeSettings(); - } - - // To make sure all graph modifiers have been enabled before scan (to avoid script execution order issues) - GraphModifier.FindAllModifiers(); - RelevantGraphSurface.FindAllGraphSurfaces(); - - InitializePathProcessor(); - InitializeProfiler(); - ConfigureReferencesInternal(); - InitializeAstarData(); - - // Flush work items, possibly added in InitializeAstarData to load graph data - FlushWorkItems(); - - euclideanEmbedding.dirty = true; - - if (scanOnStartup && (!data.cacheStartup || data.file_cachedStartup == null)) { - Scan(); - } - } - - /** Initializes the #pathProcessor field */ - void InitializePathProcessor () { - int numThreads = CalculateThreadCount(threadCount); - - // Outside of play mode everything is synchronous, so no threads are used. - if (!Application.isPlaying) numThreads = 0; - - - int numProcessors = Mathf.Max(numThreads, 1); - bool multithreaded = numThreads > 0; - pathProcessor = new PathProcessor(pathReturnQueue, numProcessors, multithreaded); - - pathProcessor.OnPathPreSearch += path => { - var tmp = PathFindHelper.OnPathPreSearch; - if (tmp != null) tmp(path); - }; - - pathProcessor.OnPathPostSearch += path => { - LogPathResults(path); - var tmp = PathFindHelper.OnPathPostSearch; - if (tmp != null) tmp(path); - }; - - // Sent every time the path queue is unblocked - //pathProcessor.OnQueueUnblocked += () => { - // if (euclideanEmbedding.dirty) { - // euclideanEmbedding.RecalculateCosts(); - // } - //}; - } - - /** Does simple error checking */ - internal void VerifyIntegrity () { - if (active != this) { - throw new System.Exception("Singleton pattern broken. Make sure you only have one AstarPath object in the scene"); - } - - if (data == null) { - throw new System.NullReferenceException("data is null... A* not set up correctly?"); - } - - if (data.graphs == null) { - data.graphs = new NavGraph[0]; - data.UpdateShortcuts(); - } - } - - /** \cond internal */ - /** Internal method to make sure #active is set to this object and that #data is not null. - * Also calls OnEnable for the #colorSettings and initializes data.userConnections if it wasn't initialized before - * - * \warning This is mostly for use internally by the system. - */ - public void ConfigureReferencesInternal () { - active = this; - data = data ?? new AstarData(); - colorSettings = colorSettings ?? new AstarColor(); - colorSettings.OnEnable(); - } - /** \endcond */ - - /** Calls AstarProfiler.InitializeFastProfile */ - void InitializeProfiler () { - AstarProfiler.InitializeFastProfile(new string[14] { - "Prepare", //0 - "Initialize", //1 - "CalculateStep", //2 - "Trace", //3 - "Open", //4 - "UpdateAllG", //5 - "Add", //6 - "Remove", //7 - "PreProcessing", //8 - "Callback", //9 - "Overhead", //10 - "Log", //11 - "ReturnPaths", //12 - "PostPathCallback" //13 - }); - } - - /** Initializes the AstarData class. - * Searches for graph types, calls Awake on #data and on all graphs - * - * \see AstarData.FindGraphTypes - */ - void InitializeAstarData () { - data.FindGraphTypes(); - data.Awake(); - data.UpdateShortcuts(); - } - - /** Cleans up meshes to avoid memory leaks */ - void OnDisable () { - gizmos.ClearCache(); - } - - /** Clears up variables and other stuff, destroys graphs. - * Note that when destroying an AstarPath object, all static variables such as callbacks will be cleared. - */ - void OnDestroy () { - // This class uses the [ExecuteInEditMode] attribute - // So OnDestroy is called even when not playing - // Don't do anything when not in play mode - if (!Application.isPlaying) return; - - if (logPathResults == PathLog.Heavy) - Debug.Log("+++ AstarPath Component Destroyed - Cleaning Up Pathfinding Data +++"); - - if (active != this) return; - - // Block until the pathfinding threads have - // completed their current path calculation - PausePathfinding(); - - euclideanEmbedding.dirty = false; - FlushWorkItems(); - - if (logPathResults == PathLog.Heavy) - Debug.Log("Processing Possible Work Items"); - - // Stop the graph update thread (if it is running) - graphUpdates.DisableMultithreading(); - - // Try to join pathfinding threads - pathProcessor.JoinThreads(); - - if (logPathResults == PathLog.Heavy) - Debug.Log("Returning Paths"); - - - // Return all paths - pathReturnQueue.ReturnPaths(false); - - if (logPathResults == PathLog.Heavy) - Debug.Log("Destroying Graphs"); - - - // Clean up graph data - data.OnDestroy(); - - if (logPathResults == PathLog.Heavy) - Debug.Log("Cleaning up variables"); - - // Clear variables up, static variables are good to clean up, otherwise the next scene might get weird data - - // Clear all callbacks - PathFindHelper.Close(); - UnityHelper.Close(); - - active = null; - } - - #region ScanMethods - - /** Floodfills starting from the specified node */ - public void FloodFill (GraphNode seed) { - graphUpdates.FloodFill(seed); - } - - /** Floodfills starting from 'seed' using the specified area */ - public void FloodFill (GraphNode seed, uint area) { - graphUpdates.FloodFill(seed, area); - } - - /** Floodfills all graphs and updates areas for every node. - * The different colored areas that you see in the scene view when looking at graphs - * are called just 'areas', this method calculates which nodes are in what areas. - * \see Pathfinding.Node.area - */ - [ContextMenu("Flood Fill Graphs")] - public void FloodFill () { - Profiler.BeginSample("Recalculate Connected Components"); - graphUpdates.FloodFill(); - workItems.OnFloodFill(); - Profiler.EndSample(); - } - - - /** Internal method to destroy a given node. - * This is to be called after the node has been disconnected from the graph so that it cannot be reached from any other nodes. - * It should only be called during graph updates, that is when the pathfinding threads are either not running or paused. - * - * \warning This method should not be called by user code. It is used internally by the system. - */ - internal void DestroyNode (GraphNode node) { - pathProcessor.DestroyNode(node); - } - - /** Blocks until all pathfinding threads are paused and blocked. - * \deprecated Use #PausePathfinding instead. Make sure to call Release on the returned lock. - */ - [System.Obsolete("Use PausePathfinding instead. Make sure to call Release on the returned lock.", true)] - public void BlockUntilPathQueueBlocked () { - } - - /** Blocks until all pathfinding threads are paused and blocked. - * - * \snippet MiscSnippets.cs AstarPath.PausePathfinding - * - * \returns A lock object. You need to call \link Pathfinding.PathProcessor.GraphUpdateLock.Release Release\endlink on that object to allow pathfinding to resume. - * \note In most cases this should not be called from user code. Use the #AddWorkItem method instead. - * - * \see #AddWorkItem - */ - public PathProcessor.GraphUpdateLock PausePathfinding () { - return pathProcessor.PausePathfinding(true); - } - - /** Blocks the path queue so that e.g work items can be performed */ - PathProcessor.GraphUpdateLock PausePathfindingSoon () { - return pathProcessor.PausePathfinding(false); - } - - /** Scans a particular graph. - * Calling this method will recalculate the specified graph. - * This method is pretty slow (depending on graph type and graph complexity of course), so it is advisable to use - * smaller graph updates whenever possible. - * - * \snippet MiscSnippets.cs AstarPath.Scan1 - * - * \see \ref graph-updates - * \see ScanAsync - */ - public void Scan (NavGraph graphToScan) { - if (graphToScan == null) throw new System.ArgumentNullException(); - Scan(new NavGraph[] { graphToScan }); - } - - /** Scans all specified graphs. - * \param graphsToScan The graphs to scan. If this parameter is null then all graphs will be scanned - * - * Calling this method will recalculate all specified graphs or all graphs if the \a graphsToScan parameter is null. - * This method is pretty slow (depending on graph type and graph complexity of course), so it is advisable to use - * smaller graph updates whenever possible. - * - * \snippet MiscSnippets.cs AstarPath.Scan1 - * - * \see \ref graph-updates - * \see ScanAsync - */ - public void Scan (NavGraph[] graphsToScan = null) { - var prevProgress = new Progress(); - - Profiler.BeginSample("Scan"); - Profiler.BeginSample("Init"); - foreach (var p in ScanAsync(graphsToScan)) { - if (prevProgress.description != p.description) { -#if !NETFX_CORE && UNITY_EDITOR - Profiler.EndSample(); - Profiler.BeginSample(p.description); - // Log progress to the console - System.Console.WriteLine(p.description); - prevProgress = p; -#endif - } - } - Profiler.EndSample(); - Profiler.EndSample(); - } - - /** Scans all graphs. - * \deprecated Use #Scan or #ScanAsync instead - * - * \see Scan - */ - [System.Obsolete("ScanLoop is now named ScanAsync and is an IEnumerable. Use foreach to iterate over the progress insead")] - public void ScanLoop (OnScanStatus statusCallback) { - foreach (var p in ScanAsync()) { - statusCallback(p); - } - } - - /** Scans a particular graph asynchronously. This is a IEnumerable, you can loop through it to get the progress - * \snippet MiscSnippets.cs AstarPath.ScanAsync1 - * You can scan graphs asyncronously by yielding when you loop through the progress. - * Note that this does not guarantee a good framerate, but it will allow you - * to at least show a progress bar during scanning. - * \snippet MiscSnippets.cs AstarPath.ScanAsync2 - * - * \see Scan - * - * \astarpro - */ - public IEnumerable ScanAsync (NavGraph graphToScan) { - if (graphToScan == null) throw new System.ArgumentNullException(); - return ScanAsync(new NavGraph[] { graphToScan }); - } - - /** Scans all specified graphs asynchronously. This is a IEnumerable, you can loop through it to get the progress - * \param graphsToScan The graphs to scan. If this parameter is null then all graphs will be scanned - * - * \snippet MiscSnippets.cs AstarPath.ScanAsync1 - * You can scan graphs asyncronously by yielding when you loop through the progress. - * Note that this does not guarantee a good framerate, but it will allow you - * to at least show a progress bar during scanning. - * \snippet MiscSnippets.cs AstarPath.ScanAsync2 - * - * \see Scan - * - * \astarpro - */ - public IEnumerable ScanAsync (NavGraph[] graphsToScan = null) { - if (graphsToScan == null) graphsToScan = graphs; - - if (graphsToScan == null) { - yield break; - } - - if (isScanning) throw new System.InvalidOperationException("Another async scan is already running"); - - isScanning = true; - - VerifyIntegrity(); - - var graphUpdateLock = PausePathfinding(); - - // Make sure all paths that are in the queue to be returned - // are returned immediately - // Some modifiers (e.g the funnel modifier) rely on - // the nodes being valid when the path is returned - pathReturnQueue.ReturnPaths(false); - - if (!Application.isPlaying) { - data.FindGraphTypes(); - GraphModifier.FindAllModifiers(); - } - - - yield return new Progress(0.05F, "Pre processing graphs"); - - - if (UnityHelper.OnPreScan != null) { - UnityHelper.OnPreScan(this); - } - - GraphModifier.TriggerEvent(GraphModifier.EventType.PreScan); - - data.LockGraphStructure(); - - var watch = System.Diagnostics.Stopwatch.StartNew(); - - // Destroy previous nodes - for (int i = 0; i < graphsToScan.Length; i++) { - if (graphsToScan[i] != null) { - ((IGraphInternals)graphsToScan[i]).DestroyAllNodes(); - } - } - - // Loop through all graphs and scan them one by one - for (int i = 0; i < graphsToScan.Length; i++) { - // Skip null graphs - if (graphsToScan[i] == null) continue; - - // Just used for progress information - // This graph will advance the progress bar from minp to maxp - float minp = Mathf.Lerp(0.1F, 0.8F, (float)(i)/(graphsToScan.Length)); - float maxp = Mathf.Lerp(0.1F, 0.8F, (float)(i+0.95F)/(graphsToScan.Length)); - - var progressDescriptionPrefix = "Scanning graph " + (i+1) + " of " + graphsToScan.Length + " - "; - - // Like a foreach loop but it gets a little complicated because of the exception - // handling (it is not possible to yield inside try-except clause). - var coroutine = ScanGraph(graphsToScan[i]).GetEnumerator(); - while (true) { - try { - if (!coroutine.MoveNext()) break; - } catch { - isScanning = false; - data.UnlockGraphStructure(); - graphUpdateLock.Release(); - throw; - } - yield return coroutine.Current.MapTo(minp, maxp, progressDescriptionPrefix); - } - } - - data.UnlockGraphStructure(); - yield return new Progress(0.8F, "Post processing graphs"); - - if (UnityHelper.OnPostScan != null) { - UnityHelper.OnPostScan(this); - } - GraphModifier.TriggerEvent(GraphModifier.EventType.PostScan); - - FlushWorkItems(); - - yield return new Progress(0.9F, "Computing areas"); - - FloodFill(); - - yield return new Progress(0.95F, "Late post processing"); - - // Signal that we have stopped scanning here - // Note that no yields can happen after this point - // since then other parts of the system can start to interfere - isScanning = false; - - if (UnityHelper.OnLatePostScan != null) { - UnityHelper.OnLatePostScan(this); - } - GraphModifier.TriggerEvent(GraphModifier.EventType.LatePostScan); - - euclideanEmbedding.dirty = true; - euclideanEmbedding.RecalculatePivots(); - - // Perform any blocking actions - FlushWorkItems(); - // Resume pathfinding threads - graphUpdateLock.Release(); - - watch.Stop(); - lastScanTime = (float)watch.Elapsed.TotalSeconds; - - System.GC.Collect(); - - if (logPathResults != PathLog.None && logPathResults != PathLog.OnlyErrors) { - Debug.Log("Scanning - Process took "+(lastScanTime*1000).ToString("0")+" ms to complete"); - } - } - - IEnumerable ScanGraph (NavGraph graph) { - if (UnityHelper.OnGraphPreScan != null) { - yield return new Progress(0, "Pre processing"); - UnityHelper.OnGraphPreScan(graph); - } - - yield return new Progress(0, ""); - - foreach (var p in this.ScanInternal(graph)) { - yield return p.MapTo(0, 0.95f); - } - - yield return new Progress(0.95f, "Assigning graph indices"); - - // Assign the graph index to every node in the graph - graph.GetNodes(node => node.GraphIndex = (uint)graph.graphIndex); - - if (UnityHelper.OnGraphPostScan != null) { - yield return new Progress(0.99f, "Post processing"); - UnityHelper.OnGraphPostScan(graph); - } - } - - protected IEnumerable ScanInternal (NavGraph graph) { - TriangleMeshNode.SetNavmeshHolder(AstarPath.active.data.GetGraphIndex(graph), (RecastGraph)graph); - - if (!Application.isPlaying) { - RelevantGraphSurface.FindAllGraphSurfaces(); - } - - RelevantGraphSurface.UpdateAllPositions(); - - - foreach (var progress in ((RecastGraph)graph).ScanAllTiles()) { - yield return progress; - } - - -#if DEBUG_REPLAY - DebugReplay.WriteToFile(); -#endif - } - - #endregion - - private static int waitForPathDepth = 0; - - /** Wait for the specified path to be calculated. - * Normally it takes a few frames for a path to get calculated and returned. - * - * \deprecated This method has been renamed to #BlockUntilCalculated. - */ - //[System.Obsolete("This method has been renamed to BlockUntilCalculated")] - //public static void WaitForPath (Path path) { - // BlockUntilCalculated(path); - //} - - /** Blocks until the path has been calculated. - * \param path The path to wait for. The path must be started, otherwise an exception will be thrown. - * - * Normally it takes a few frames for a path to be calculated and returned. - * This function will ensure that the path will be calculated when this function returns - * and that the callback for that path has been called. - * - * If requesting a lot of paths in one go and waiting for the last one to complete, - * it will calculate most of the paths in the queue (only most if using multithreading, all if not using multithreading). - * - * Use this function only if you really need to. - * There is a point to spreading path calculations out over several frames. - * It smoothes out the framerate and makes sure requesting a large - * number of paths at the same time does not cause lag. - * - * \note Graph updates and other callbacks might get called during the execution of this function. - * - * When the pathfinder is shutting down. I.e in OnDestroy, this function will not do anything. - * - * \throws Exception if pathfinding is not initialized properly for this scene (most likely no AstarPath object exists) - * or if the path has not been started yet. - * Also throws an exception if critical errors occur such as when the pathfinding threads have crashed (which should not happen in normal cases). - * This prevents an infinite loop while waiting for the path. - * - * \see Pathfinding.Path.WaitForPath - * \see Pathfinding.Path.BlockUntilCalculated - */ - public static void BlockUntilCalculated (Path path) { - if (active == null) - throw new System.Exception("Pathfinding is not correctly initialized in this scene (yet?). " + - "AstarPath.active is null.\nDo not call this function in Awake"); - - if (path == null) throw new System.ArgumentNullException("Path must not be null"); - - if (path.PipelineState == PathState.Created) { - throw new System.Exception("The specified path has not been started yet."); - } - - waitForPathDepth++; - - if (waitForPathDepth == 5) { - Debug.LogError("You are calling the BlockUntilCalculated function recursively (maybe from a path callback). Please don't do this."); - } - - if (path.PipelineState < PathState.ReturnQueue) { - if (PathFindHelper.IsUsingMultithreading) { - while (path.PipelineState < PathState.ReturnQueue) { - - // Wait for threads to calculate paths - Thread.Sleep(1); - active.PerformBlockingActions(true); - } - } else { - while (path.PipelineState < PathState.ReturnQueue) { - if (active.pathProcessor.queue.IsEmpty && path.PipelineState != PathState.Processing) { - waitForPathDepth--; - throw new System.Exception("Critical error. Path Queue is empty but the path state is '" + path.PipelineState + "'"); - } - - // Calculate some paths - active.pathProcessor.TickNonMultithreaded(); - active.PerformBlockingActions(true); - } - } - } - - active.pathReturnQueue.ReturnPaths(false); - waitForPathDepth--; - } - - /** Will send a callback when it is safe to update nodes. This is defined as between the path searches. - * This callback will only be sent once and is nulled directly after the callback has been sent. - * When using more threads than one, calling this often might decrease pathfinding performance due to a lot of idling in the threads. - * Not performance as in it will use much CPU power, - * but performance as in the number of paths per second will probably go down (though your framerate might actually increase a tiny bit) - * - * You should only call this function from the main unity thread (i.e normal game code). - * - * \note The threadSafe parameter has been deprecated - * \deprecated - */ - //[System.Obsolete("The threadSafe parameter has been deprecated")] - //public static void RegisterSafeUpdate (System.Action callback, bool threadSafe) { - // RegisterSafeUpdate(callback); - //} - - /** Will send a callback when it is safe to update nodes. This is defined as between the path searches. - * This callback will only be sent once and is nulled directly after the callback has been sent. - * When using more threads than one, calling this often might decrease pathfinding performance due to a lot of idling in the threads. - * Not performance as in it will use much CPU power, - * but performance as in the number of paths per second will probably go down (though your framerate might actually increase a tiny bit) - * - * You should only call this function from the main unity thread (i.e normal game code). - * - * \version Since version 4.0 this is equivalent to AddWorkItem(new AstarWorkItem(callback)). Previously the - * callbacks added using this method would not be ordered with respect to other work items, so they could be - * executed before other work items or after them. - * - * \deprecated Use #AddWorkItem(System.Action) instead. Note the slight change in behavior (mentioned above). - */ - //[System.Obsolete("Use AddWorkItem(System.Action) instead. Note the slight change in behavior (mentioned in the documentation).")] - //public static void RegisterSafeUpdate (System.Action callback) { - // active.AddWorkItem(new AstarWorkItem(callback)); - //} - - /** Adds the path to a queue so that it will be calculated as soon as possible. - * The callback specified when constructing the path will be called when the path has been calculated. - * Usually you should use the Seeker component instead of calling this function directly. - * - * \param path The path that should be enqueued. - * \param pushToFront If true, the path will be pushed to the front of the queue, bypassing all waiting paths and making it the next path to be calculated. - * This can be useful if you have a path which you want to prioritize over all others. Be careful to not overuse it though. - * If too many paths are put in the front of the queue often, this can lead to normal paths having to wait a very long time before being calculated. - */ - public static void StartPath (Path path, bool pushToFront = false) { - // Copy to local variable to avoid multithreading issues - var astar = active; - - if (System.Object.ReferenceEquals(astar, null)) { - Debug.LogError("There is no AstarPath object in the scene or it has not been initialized yet"); - return; - } - - if (path.PipelineState != PathState.Created) { - throw new System.Exception("The path has an invalid state. Expected " + PathState.Created + " found " + path.PipelineState + "\n" + - "Make sure you are not requesting the same path twice"); - } - - if (astar.graphs == null || astar.graphs.Length == 0) { - Debug.LogError("There are no graphs in the scene"); - path.FailWithError("There are no graphs in the scene"); - Debug.LogError(path.errorLog); - return; - } - - path.Claim(astar); - - // Will increment p.state to PathState.PathQueue - ((IPathInternals)path).AdvanceState(PathState.PathQueue); - if (pushToFront) { - astar.pathProcessor.queue.PushFront(path); - } else - { - if (!astar.pathProcessor.queue.IsEmpty) - { - astar.pathProcessor.queue.Pop(); - } - - astar.pathProcessor.queue.Push(path); - } - - // Outside of play mode, all path requests are synchronous - if (!Application.isPlaying) { - BlockUntilCalculated(path); - } - } - - /** Terminates pathfinding threads when the application quits */ - void OnApplicationQuit () { - OnDestroy(); - - // Abort threads if they are still running (likely because of some bug in that case) - // to make sure that the application can shut down properly - pathProcessor.AbortThreads(); - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarPath.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarPath.cs.meta deleted file mode 100644 index acb5827a697b7deb970b75150bfea8c605fe3388..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/AstarPath.cs.meta +++ /dev/null @@ -1,17 +0,0 @@ -fileFormatVersion: 2 -guid: 78396926cbbfc4ac3b48fc5fc34a87d1 -labels: -- Pathfinder -timeCreated: 1473972492 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: - - gizmoSurfaceMaterial: {fileID: 2100000, guid: 5ce51318bbfb1466188b929a68a6bd3a, - type: 2} - - gizmoLineMaterial: {fileID: 2100000, guid: 91035448860ba4e708919485c73f7edc, type: 2} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateScene.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateScene.cs deleted file mode 100644 index 4005e7849fc3094607bc50a562486676c831d1c4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateScene.cs +++ /dev/null @@ -1,384 +0,0 @@ -using PF; -using UnityEngine; -using Mathf = UnityEngine.Mathf; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Quaternion = UnityEngine.Quaternion; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - [AddComponentMenu("Pathfinding/GraphUpdateScene")] - /** Helper class for easily updating graphs. - * - * The GraphUpdateScene component is really easy to use. Create a new empty GameObject and add the component to it, it can be found in Components-->Pathfinding-->GraphUpdateScene.\n - * When you have added the component, you should see something like the image below. - * \shadowimage{graphUpdateScene.png} - * The region which the component will affect is defined by creating a polygon in the scene. - * If you make sure you have the Position tool enabled (top-left corner of the Unity window) you can shift+click in the scene view to add more points to the polygon. - * You can remove points using shift+alt+click. - * By clicking on the points you can bring up a positioning tool. You can also open the "points" array in the inspector to set each point's coordinates manually. - * \shadowimage{graphUpdateScenePoly.png} - * In the inspector there are a number of variables. The first one is named "Convex", it sets if the convex hull of the points should be calculated or if the polygon should be used as-is. - * Using the convex hull is faster when applying the changes to the graph, but with a non-convex polygon you can specify more complicated areas.\n - * The next two variables, called "Apply On Start" and "Apply On Scan" determine when to apply the changes. If the object is in the scene from the beginning, both can be left on, it doesn't - * matter since the graph is also scanned at start. However if you instantiate it later in the game, you can make it apply it's setting directly, or wait until the next scan (if any). - * If the graph is rescanned, all GraphUpdateScene components which have the Apply On Scan variable toggled will apply their settings again to the graph since rescanning clears all previous changes.\n - * You can also make it apply it's changes using scripting. - * \code GetComponent().Apply (); \endcode - * The above code will make it apply its changes to the graph (assuming a GraphUpdateScene component is attached to the same GameObject). - * - * Next there is "Modify Walkability" and "Set Walkability" (which appears when "Modify Walkability" is toggled). - * If Modify Walkability is set, then all nodes inside the area will either be set to walkable or unwalkable depending on the value of the "Set Walkability" variable. - * - * Penalty can also be applied to the nodes. A higher penalty (aka weight) makes the nodes harder to traverse so it will try to avoid those areas. - * - * The tagging variables can be read more about on this page: \ref tags "Working with tags". - * - * \note The Y (up) axis of the transform that this component is attached to should be in the same direction as the up direction of the graph. - * So if you for example have a grid in the XY plane then the transform should have the rotation (-90,0,0). - */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_graph_update_scene.php")] - public class GraphUpdateScene : GraphModifier { - /** Points which define the region to update */ - public Vector3[] points; - - /** Private cached convex hull of the #points */ - private Vector3[] convexPoints; - - /** Use the convex hull of the points instead of the original polygon. - * - * \see https://en.wikipedia.org/wiki/Convex_hull - */ - public bool convex = true; - - /** Minumum height of the bounds of the resulting Graph Update Object. - * Useful when all points are laid out on a plane but you still need a bounds with a height greater than zero since a - * zero height graph update object would usually result in no nodes being updated. - */ - public float minBoundsHeight = 1; - - /** Penalty to add to nodes. - * Usually you need quite large values, at least 1000-10000. A higher penalty means that agents will try to avoid those nodes more. - * - * Be careful when setting negative values since if a node gets a negative penalty it will underflow and instead get - * really large. In most cases a warning will be logged if that happens. - * - * \see \ref tags for another way of applying penalties. - */ - public int penaltyDelta; - - /** If true, then all affected nodes will be made walkable or unwalkable according to #setWalkability */ - public bool modifyWalkability; - - /** Nodes will be made walkable or unwalkable according to this value if #modifyWalkability is true */ - public bool setWalkability; - - /** Apply this graph update object on start */ - public bool applyOnStart = true; - - /** Apply this graph update object whenever a graph is rescanned */ - public bool applyOnScan = true; - - /** Update node's walkability and connectivity using physics functions. - * For grid graphs, this will update the node's position and walkability exactly like when doing a scan of the graph. - * If enabled for grid graphs, #modifyWalkability will be ignored. - * - * For Point Graphs, this will recalculate all connections which passes through the bounds of the resulting Graph Update Object - * using raycasts (if enabled). - * - */ - public bool updatePhysics; - - /** \copydoc Pathfinding::GraphUpdateObject::resetPenaltyOnPhysics */ - public bool resetPenaltyOnPhysics = true; - - /** \copydoc Pathfinding::GraphUpdateObject::updateErosion */ - public bool updateErosion = true; - - /** Should the tags of the nodes be modified. - * If enabled, set all nodes' tags to #setTag - */ - public bool modifyTag; - - /** If #modifyTag is enabled, set all nodes' tags to this value */ - public int setTag; - - /** Emulates behavior from before version 4.0 */ - [HideInInspector] - public bool legacyMode = false; - - /** Private cached inversion of #setTag. - * Used for InvertSettings() */ - private int setTagInvert; - - /** Has apply been called yet. - * Used to prevent applying twice when both applyOnScan and applyOnStart are enabled */ - private bool firstApplied; - - [SerializeField] - private int serializedVersion = 0; - - /** Use world space for coordinates. - * If true, the shape will not follow when moving around the transform. - * - * \see #ToggleUseWorldSpace - */ - [SerializeField] - [UnityEngine.Serialization.FormerlySerializedAs("useWorldSpace")] - private bool legacyUseWorldSpace; - - /** Do some stuff at start */ - public void Start () { - if (!Application.isPlaying) return; - - // If firstApplied is true, that means the graph was scanned during Awake. - // So we shouldn't apply it again because then we would end up applying it two times - if (!firstApplied && applyOnStart) { - Apply(); - } - } - - public override void OnPostScan () { - if (applyOnScan) Apply(); - } - - /** Inverts all invertable settings for this GUS. - * Namely: penalty delta, walkability, tags. - * - * Penalty delta will be changed to negative penalty delta.\n - * #setWalkability will be inverted.\n - * #setTag will be stored in a private variable, and the new value will be 0. When calling this function again, the saved - * value will be the new value. - * - * Calling this function an even number of times without changing any settings in between will be identical to no change in settings. - */ - public virtual void InvertSettings () { - setWalkability = !setWalkability; - penaltyDelta = -penaltyDelta; - if (setTagInvert == 0) { - setTagInvert = setTag; - setTag = 0; - } else { - setTag = setTagInvert; - setTagInvert = 0; - } - } - - /** Recalculate convex hull. - * Will not do anything if #convex is disabled. - */ - public void RecalcConvex () { - convexPoints = convex ? Polygon.ConvexHullXZ(points) : null; - } - - /** Switches between using world space and using local space. - * \deprecated World space can no longer be used as it does not work well with rotated graphs. Use transform.InverseTransformPoint to transform points to local space. - */ - [System.ObsoleteAttribute("World space can no longer be used as it does not work well with rotated graphs. Use transform.InverseTransformPoint to transform points to local space.", true)] - void ToggleUseWorldSpace () { - } - - /** Lock all points to a specific Y value. - * \deprecated The Y coordinate is no longer important. Use the position of the object instead. - */ - [System.ObsoleteAttribute("The Y coordinate is no longer important. Use the position of the object instead", true)] - public void LockToY () { - } - - /** Calculates the bounds for this component. - * This is a relatively expensive operation, it needs to go through all points and - * run matrix multiplications. - */ - public Bounds GetBounds () { - if (points == null || points.Length == 0) { - Bounds bounds; - var coll = GetComponent(); - var coll2D = GetComponent(); - var rend = GetComponent(); - - if (coll != null) bounds = coll.bounds; - else if (coll2D != null) { - bounds = coll2D.bounds; - bounds.size = new Vector3(bounds.size.x, bounds.size.y, Mathf.Max(bounds.size.z, 1f)); - } else if (rend != null) { - bounds = rend.bounds; - } else { - return new Bounds(Vector3.zero, Vector3.zero); - } - - if (legacyMode && bounds.size.y < minBoundsHeight) bounds.size = new Vector3(bounds.size.x, minBoundsHeight, bounds.size.z); - return bounds; - } else { - return GraphUpdateShape.GetBounds(convex ? convexPoints : points, legacyMode && legacyUseWorldSpace ? Matrix4x4.identity : transform.localToWorldMatrix, minBoundsHeight); - } - } - - /** Updates graphs with a created GUO. - * Creates a Pathfinding.GraphUpdateObject with a Pathfinding.GraphUpdateShape - * representing the polygon of this object and update all graphs using AstarPath.UpdateGraphs. - * This will not update graphs immediately. See AstarPath.UpdateGraph for more info. - */ - public void Apply () { - if (AstarPath.active == null) { - Debug.LogError("There is no AstarPath object in the scene", this); - return; - } - - GraphUpdateObject guo; - - if (points == null || points.Length == 0) { - var polygonCollider = GetComponent(); - if (polygonCollider != null) { - var points2D = polygonCollider.points; - Vector3[] pts = new Vector3[points2D.Length]; - for (int i = 0; i < pts.Length; i++) { - var p = points2D[i] + polygonCollider.offset; - pts[i] = new Vector3(p.x, 0, p.y); - } - - var mat = transform.localToWorldMatrix * Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 0, 0), Vector3.one); - var shape = new GraphUpdateShape(points, convex, mat, minBoundsHeight); - guo = new GraphUpdateObject(GetBounds()); - guo.shape = shape; - } else { - var bounds = GetBounds(); - if (bounds.center == Vector3.zero && bounds.size == Vector3.zero) { - Debug.LogError("Cannot apply GraphUpdateScene, no points defined and no renderer or collider attached", this); - return; - } - - guo = new GraphUpdateObject(bounds); - } - } else { - GraphUpdateShape shape; - if (legacyMode && !legacyUseWorldSpace) { - // Used for compatibility with older versions - var worldPoints = new Vector3[points.Length]; - for (int i = 0; i < points.Length; i++) worldPoints[i] = transform.TransformPoint(points[i]); - shape = new GraphUpdateShape(worldPoints, convex, Matrix4x4.identity, minBoundsHeight); - } else { - shape = new GraphUpdateShape(points, convex, legacyMode && legacyUseWorldSpace ? Matrix4x4.identity : transform.localToWorldMatrix, minBoundsHeight); - } - var bounds = shape.GetBounds(); - guo = new GraphUpdateObject(bounds); - guo.shape = shape; - } - - firstApplied = true; - - guo.modifyWalkability = modifyWalkability; - guo.setWalkability = setWalkability; - guo.addPenalty = penaltyDelta; - guo.updatePhysics = updatePhysics; - guo.updateErosion = updateErosion; - guo.resetPenaltyOnPhysics = resetPenaltyOnPhysics; - - guo.modifyTag = modifyTag; - guo.setTag = setTag; - } - - /** Draws some gizmos */ - void OnDrawGizmos () { - OnDrawGizmos(false); - } - - /** Draws some gizmos */ - void OnDrawGizmosSelected () { - OnDrawGizmos(true); - } - - /** Draws some gizmos */ - void OnDrawGizmos (bool selected) { - Color c = selected ? new Color(227/255f, 61/255f, 22/255f, 1.0f) : new Color(227/255f, 61/255f, 22/255f, 0.9f); - - if (selected) { - Gizmos.color = Color.Lerp(c, new Color(1, 1, 1, 0.2f), 0.9f); - - Bounds b = GetBounds(); - Gizmos.DrawCube(b.center, b.size); - Gizmos.DrawWireCube(b.center, b.size); - } - - if (points == null) return; - - if (convex) c.a *= 0.5f; - - Gizmos.color = c; - - Matrix4x4 matrix = legacyMode && legacyUseWorldSpace ? Matrix4x4.identity : transform.localToWorldMatrix; - - if (convex) { - c.r -= 0.1f; - c.g -= 0.2f; - c.b -= 0.1f; - - Gizmos.color = c; - } - - if (selected || !convex) { - for (int i = 0; i < points.Length; i++) { - Gizmos.DrawLine(matrix.MultiplyPoint3x4(points[i]), matrix.MultiplyPoint3x4(points[(i+1)%points.Length])); - } - } - - if (convex) { - if (convexPoints == null) RecalcConvex(); - - Gizmos.color = selected ? new Color(227/255f, 61/255f, 22/255f, 1.0f) : new Color(227/255f, 61/255f, 22/255f, 0.9f); - - for (int i = 0; i < convexPoints.Length; i++) { - Gizmos.DrawLine(matrix.MultiplyPoint3x4(convexPoints[i]), matrix.MultiplyPoint3x4(convexPoints[(i+1)%convexPoints.Length])); - } - } - - // Draw the full 3D shape - var pts = convex ? convexPoints : points; - if (selected && pts != null && pts.Length > 0) { - Gizmos.color = new Color(1, 1, 1, 0.2f); - float miny = pts[0].y, maxy = pts[0].y; - for (int i = 0; i < pts.Length; i++) { - miny = Mathf.Min(miny, pts[i].y); - maxy = Mathf.Max(maxy, pts[i].y); - } - var extraHeight = Mathf.Max(minBoundsHeight - (maxy - miny), 0) * 0.5f; - miny -= extraHeight; - maxy += extraHeight; - - for (int i = 0; i < pts.Length; i++) { - var next = (i+1) % pts.Length; - var p1 = matrix.MultiplyPoint3x4(pts[i] + Vector3.up*(miny - pts[i].y)); - var p2 = matrix.MultiplyPoint3x4(pts[i] + Vector3.up*(maxy - pts[i].y)); - var p1n = matrix.MultiplyPoint3x4(pts[next] + Vector3.up*(miny - pts[next].y)); - var p2n = matrix.MultiplyPoint3x4(pts[next] + Vector3.up*(maxy - pts[next].y)); - Gizmos.DrawLine(p1, p2); - Gizmos.DrawLine(p1, p1n); - Gizmos.DrawLine(p2, p2n); - } - } - } - - /** Disables legacy mode if it is enabled. - * Legacy mode is automatically enabled for components when upgrading from an earlier version than 3.8.6. - */ - public void DisableLegacyMode () { - if (legacyMode) { - legacyMode = false; - if (legacyUseWorldSpace) { - legacyUseWorldSpace = false; - for (int i = 0; i < points.Length; i++) { - points[i] = transform.InverseTransformPoint(points[i]); - } - RecalcConvex(); - } - } - } - - protected override void Awake () { - if (serializedVersion == 0) { - // Use the old behavior if some points are already set - if (points != null && points.Length > 0) legacyMode = true; - serializedVersion = 1; - } - base.Awake(); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateScene.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateScene.cs.meta deleted file mode 100644 index fae937e3449a0e405655ab23106a44c7a2c36ee2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateScene.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: efee954c69f0d421086729bb8df1137f -timeCreated: 1490044676 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: -221 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateShape.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateShape.cs deleted file mode 100644 index 5a8f7fcfd71bd80576f0e28735227bbf3da650e2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateShape.cs +++ /dev/null @@ -1,141 +0,0 @@ -using PF; -using UnityEngine; -using Mathf = UnityEngine.Mathf; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - /** Defines a shape for a Pathfinding.GraphUpdateObject. - * The shape consists of a number of points which it can either calculate the convex hull of or use as a polygon directly. - * - * A shape is essentially a 2D shape however it can be rotated arbitrarily. - * When a matrix and a list of points is specified in the constructor the matrix decides what direction - * is the 'up' direction. When checking if a point is contained in the shape, the point will be projected down - * on a plane where the 'up' direction is the normal and then it will check if the shape contains the point. - * - * \see Pathfinding.GraphUpdateObject.shape - */ - public class GraphUpdateShape { - Vector3[] _points; - Vector3[] _convexPoints; - bool _convex; - Vector3 right = Vector3.right; - Vector3 forward = Vector3.forward; - Vector3 up = Vector3.up; - Vector3 origin; - public float minimumHeight; - - /** Gets or sets the points of the polygon in the shape. - * These points should be specified in clockwise order. - * Will automatically calculate the convex hull if #convex is set to true */ - public Vector3[] points { - get { - return _points; - } - set { - _points = value; - if (convex) CalculateConvexHull(); - } - } - - /** Sets if the convex hull of the points should be calculated. - * Convex hulls are faster but non-convex hulls can be used to specify more complicated shapes. - */ - public bool convex { - get { - return _convex; - } - set { - if (_convex != value && value) { - CalculateConvexHull(); - } - _convex = value; - } - } - - public GraphUpdateShape () { - } - - /** Construct a shape. - * \param points Contour of the shape in local space with respect to the matrix (i.e the shape should be in the XZ plane, the Y coordinate will only affect the bounds) - * \param convex If true, the convex hull of the points will be calculated. \see #convex - * \param matrix local to world space matrix for the points. The matrix determines the up direction of the shape. - * \param minimumHeight If the points would be in the XZ plane only, the shape would not have a height and then it might not - * include any points inside it (as testing for inclusion is done in 3D space when updating graphs). This ensures - * that the shape has at least the minimum height (in the up direction that the matrix specifies). - */ - public GraphUpdateShape (Vector3[] points, bool convex, Matrix4x4 matrix, float minimumHeight) { - this.convex = convex; - this.points = points; - origin = matrix.MultiplyPoint3x4(Vector3.zero); - right = matrix.MultiplyPoint3x4(Vector3.right) - origin; - up = matrix.MultiplyPoint3x4(Vector3.up) - origin; - forward = matrix.MultiplyPoint3x4(Vector3.forward) - origin; - this.minimumHeight = minimumHeight; - } - - void CalculateConvexHull () { - _convexPoints = points != null ? Polygon.ConvexHullXZ(points) : null; - } - - /** World space bounding box of this shape */ - public Bounds GetBounds () { - return GetBounds(convex ? _convexPoints : points, right, up, forward, origin, minimumHeight); - } - - public static Bounds GetBounds (Vector3[] points, Matrix4x4 matrix, float minimumHeight) { - var origin = matrix.MultiplyPoint3x4(Vector3.zero); - var right = matrix.MultiplyPoint3x4(Vector3.right) - origin; - var up = matrix.MultiplyPoint3x4(Vector3.up) - origin; - var forward = matrix.MultiplyPoint3x4(Vector3.forward) - origin; - - return GetBounds(points, right, up, forward, origin, minimumHeight); - } - - static Bounds GetBounds (Vector3[] points, Vector3 right, Vector3 up, Vector3 forward, Vector3 origin, float minimumHeight) { - if (points == null || points.Length == 0) return new Bounds(); - float miny = points[0].y, maxy = points[0].y; - for (int i = 0; i < points.Length; i++) { - miny = Mathf.Min(miny, points[i].y); - maxy = Mathf.Max(maxy, points[i].y); - } - var extraHeight = Mathf.Max(minimumHeight - (maxy - miny), 0) * 0.5f; - miny -= extraHeight; - maxy += extraHeight; - - Vector3 min = right * points[0].x + up * points[0].y + forward * points[0].z; - Vector3 max = min; - for (int i = 0; i < points.Length; i++) { - var p = right * points[i].x + forward * points[i].z; - var p1 = p + up * miny; - var p2 = p + up * maxy; - min = Vector3.Min(min, p1); - min = Vector3.Min(min, p2); - max = Vector3.Max(max, p1); - max = Vector3.Max(max, p2); - } - return new Bounds((min+max)*0.5F + origin, max-min); - } - - public bool Contains (GraphNode node) { - return Contains((Vector3)node.position); - } - - public bool Contains (Vector3 point) { - // Transform to local space (shape in the XZ plane) - point -= origin; - var localSpacePoint = new Vector3(Vector3.Dot(point, right)/right.sqrMagnitude, 0, Vector3.Dot(point, forward)/forward.sqrMagnitude); - - if (convex) { - if (_convexPoints == null) return false; - - for (int i = 0, j = _convexPoints.Length-1; i < _convexPoints.Length; j = i, i++) { - if (VectorMath.RightOrColinearXZ(_convexPoints[i], _convexPoints[j], localSpacePoint)) return false; - } - return true; - } else { - return _points != null && Polygon.ContainsPointXZ (_points, localSpacePoint); - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateShape.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateShape.cs.meta deleted file mode 100644 index 7df21dd0e64575a0375d285f8f6ceba984edf849..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/GraphUpdateShape.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 1c31d3b0be14344e98aa458dc66c3a94 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc.meta deleted file mode 100644 index 3c79729d922e8b9c7eecaaa08f706a5e2cca9042..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 3140071909376b842adbb81609a1249d -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/AstarDebugger.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/AstarDebugger.cs deleted file mode 100644 index fad2937da76cff2340b11541af9ce4d5142f8486..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/AstarDebugger.cs +++ /dev/null @@ -1,347 +0,0 @@ -//#define ProfileAstar - -using UnityEngine; -using System.Text; -using PF; -using Mathf = UnityEngine.Mathf; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Quaternion = UnityEngine.Quaternion; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - [AddComponentMenu("Pathfinding/Pathfinding Debugger")] - [ExecuteInEditMode] - /** Debugger for the A* Pathfinding Project. - * This class can be used to profile different parts of the pathfinding system - * and the whole game as well to some extent. - * - * Clarification of the labels shown when enabled. - * All memory related things profiles the whole game not just the A* Pathfinding System.\n - * - Currently allocated: memory the GC (garbage collector) says the application has allocated right now. - * - Peak allocated: maximum measured value of the above. - * - Last collect peak: the last peak of 'currently allocated'. - * - Allocation rate: how much the 'currently allocated' value increases per second. This value is not as reliable as you can think - * it is often very random probably depending on how the GC thinks this application is using memory. - * - Collection frequency: how often the GC is called. Again, the GC might decide it is better with many small collections - * or with a few large collections. So you cannot really trust this variable much. - * - Last collect fps: FPS during the last garbage collection, the GC will lower the fps a lot. - * - * - FPS: current FPS (not updated every frame for readability) - * - Lowest FPS (last x): As the label says, the lowest fps of the last x frames. - * - * - Size: Size of the path pool. - * - Total created: Number of paths of that type which has been created. Pooled paths are not counted twice. - * If this value just keeps on growing and growing without an apparent stop, you are are either not pooling any paths - * or you have missed to pool some path somewhere in your code. - * - * \see pooling - * - * \todo Add field showing how many graph updates are being done right now - */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_astar_debugger.php")] - public class AstarDebugger : VersionedMonoBehaviour { - public int yOffset = 5; - - public bool show = true; - public bool showInEditor = false; - - public bool showFPS = false; - public bool showPathProfile = false; - public bool showMemProfile = false; - public bool showGraph = false; - - public int graphBufferSize = 200; - - /** Font to use. - * A monospaced font is the best - */ - public Font font = null; - public int fontSize = 12; - - StringBuilder text = new StringBuilder(); - string cachedText; - float lastUpdate = -999; - - private GraphPoint[] graph; - - struct GraphPoint { - public float fps, memory; - public bool collectEvent; - } - - private float delayedDeltaTime = 1; - private float lastCollect = 0; - private float lastCollectNum = 0; - private float delta = 0; - private float lastDeltaTime = 0; - private int allocRate = 0; - private int lastAllocMemory = 0; - private float lastAllocSet = -9999; - private int allocMem = 0; - private int collectAlloc = 0; - private int peakAlloc = 0; - - private int fpsDropCounterSize = 200; - private float[] fpsDrops; - - private Rect boxRect; - - private GUIStyle style; - - private Camera cam; - - float graphWidth = 100; - float graphHeight = 100; - float graphOffset = 50; - - public void Start () { - useGUILayout = false; - - fpsDrops = new float[fpsDropCounterSize]; - - cam = GetComponent(); - if (cam == null) { - cam = Camera.main; - } - - graph = new GraphPoint[graphBufferSize]; - - if (Time.unscaledDeltaTime > 0) { - for (int i = 0; i < fpsDrops.Length; i++) { - fpsDrops[i] = 1F / Time.unscaledDeltaTime; - } - } - } - - int maxVecPool = 0; - int maxNodePool = 0; - - PathTypeDebug[] debugTypes = new PathTypeDebug[] { - new PathTypeDebug("ABPath", () => PathPool.GetSize(typeof(ABPath)), () => PathPool.GetTotalCreated(typeof(ABPath))) - , - new PathTypeDebug("MultiTargetPath", () => PathPool.GetSize(typeof(MultiTargetPath)), () => PathPool.GetTotalCreated(typeof(MultiTargetPath))), - new PathTypeDebug("RandomPath", () => PathPool.GetSize(typeof(RandomPath)), () => PathPool.GetTotalCreated(typeof(RandomPath))), - new PathTypeDebug("FleePath", () => PathPool.GetSize(typeof(FleePath)), () => PathPool.GetTotalCreated(typeof(FleePath))), - new PathTypeDebug("ConstantPath", () => PathPool.GetSize(typeof(ConstantPath)), () => PathPool.GetTotalCreated(typeof(ConstantPath))), - new PathTypeDebug("FloodPath", () => PathPool.GetSize(typeof(FloodPath)), () => PathPool.GetTotalCreated(typeof(FloodPath))), - new PathTypeDebug("FloodPathTracer", () => PathPool.GetSize(typeof(FloodPathTracer)), () => PathPool.GetTotalCreated(typeof(FloodPathTracer))) - }; - - struct PathTypeDebug { - string name; - System.Func getSize; - System.Func getTotalCreated; - public PathTypeDebug (string name, System.Func getSize, System.Func getTotalCreated) { - this.name = name; - this.getSize = getSize; - this.getTotalCreated = getTotalCreated; - } - - public void Print (StringBuilder text) { - int totCreated = getTotalCreated(); - - if (totCreated > 0) { - text.Append("\n").Append((" " + name).PadRight(25)).Append(getSize()).Append("/").Append(totCreated); - } - } - } - - public void LateUpdate () { - if (!show || (!Application.isPlaying && !showInEditor)) return; - - if (Time.unscaledDeltaTime <= 0.0001f) - return; - - int collCount = System.GC.CollectionCount(0); - - if (lastCollectNum != collCount) { - lastCollectNum = collCount; - delta = Time.realtimeSinceStartup-lastCollect; - lastCollect = Time.realtimeSinceStartup; - lastDeltaTime = Time.unscaledDeltaTime; - collectAlloc = allocMem; - } - - allocMem = (int)System.GC.GetTotalMemory(false); - - bool collectEvent = allocMem < peakAlloc; - peakAlloc = !collectEvent ? allocMem : peakAlloc; - - if (Time.realtimeSinceStartup - lastAllocSet > 0.3F || !Application.isPlaying) { - int diff = allocMem - lastAllocMemory; - lastAllocMemory = allocMem; - lastAllocSet = Time.realtimeSinceStartup; - delayedDeltaTime = Time.unscaledDeltaTime; - - if (diff >= 0) { - allocRate = diff; - } - } - - if (Application.isPlaying) { - fpsDrops[Time.frameCount % fpsDrops.Length] = Time.unscaledDeltaTime > 0.00001f ? 1F / Time.unscaledDeltaTime : 0; - int graphIndex = Time.frameCount % graph.Length; - graph[graphIndex].fps = Time.unscaledDeltaTime < 0.00001f ? 1F / Time.unscaledDeltaTime : 0; - graph[graphIndex].collectEvent = collectEvent; - graph[graphIndex].memory = allocMem; - } - - if (Application.isPlaying && cam != null && showGraph) { - graphWidth = cam.pixelWidth*0.8f; - - - float minMem = float.PositiveInfinity, maxMem = 0, minFPS = float.PositiveInfinity, maxFPS = 0; - for (int i = 0; i < graph.Length; i++) { - minMem = Mathf.Min(graph[i].memory, minMem); - maxMem = Mathf.Max(graph[i].memory, maxMem); - minFPS = Mathf.Min(graph[i].fps, minFPS); - maxFPS = Mathf.Max(graph[i].fps, maxFPS); - } - - int currentGraphIndex = Time.frameCount % graph.Length; - - Matrix4x4 m = Matrix4x4.TRS(new Vector3((cam.pixelWidth - graphWidth)/2f, graphOffset, 1), Quaternion.identity, new Vector3(graphWidth, graphHeight, 1)); - - for (int i = 0; i < graph.Length-1; i++) { - if (i == currentGraphIndex) continue; - - DrawGraphLine(i, m, i/(float)graph.Length, (i+1)/(float)graph.Length, Mathf.InverseLerp(minMem, maxMem, graph[i].memory), Mathf.InverseLerp(minMem, maxMem, graph[i+1].memory), Color.blue); - DrawGraphLine(i, m, i/(float)graph.Length, (i+1)/(float)graph.Length, Mathf.InverseLerp(minFPS, maxFPS, graph[i].fps), Mathf.InverseLerp(minFPS, maxFPS, graph[i+1].fps), Color.green); - } - } - } - - void DrawGraphLine (int index, Matrix4x4 m, float x1, float x2, float y1, float y2, Color color) { - Debug.DrawLine(cam.ScreenToWorldPoint(m.MultiplyPoint3x4(new Vector3(x1, y1))), cam.ScreenToWorldPoint(m.MultiplyPoint3x4(new Vector3(x2, y2))), color); - } - - public void OnGUI () { - if (!show || (!Application.isPlaying && !showInEditor)) return; - - if (style == null) { - style = new GUIStyle(); - style.normal.textColor = Color.white; - style.padding = new RectOffset(5, 5, 5, 5); - } - - if (Time.realtimeSinceStartup - lastUpdate > 0.5f || cachedText == null || !Application.isPlaying) { - lastUpdate = Time.realtimeSinceStartup; - - boxRect = new Rect(5, yOffset, 310, 40); - - text.Length = 0; - text.AppendLine("A* Pathfinding Project Debugger"); - text.Append("A* Version: ").Append(AstarPath.Version.ToString()); - - if (showMemProfile) { - boxRect.height += 200; - - text.AppendLine(); - text.AppendLine(); - text.Append("Currently allocated".PadRight(25)); - text.Append((allocMem/1000000F).ToString("0.0 MB")); - text.AppendLine(); - - text.Append("Peak allocated".PadRight(25)); - text.Append((peakAlloc/1000000F).ToString("0.0 MB")).AppendLine(); - - text.Append("Last collect peak".PadRight(25)); - text.Append((collectAlloc/1000000F).ToString("0.0 MB")).AppendLine(); - - - text.Append("Allocation rate".PadRight(25)); - text.Append((allocRate/1000000F).ToString("0.0 MB")).AppendLine(); - - text.Append("Collection frequency".PadRight(25)); - text.Append(delta.ToString("0.00")); - text.Append("s\n"); - - text.Append("Last collect fps".PadRight(25)); - text.Append((1F/lastDeltaTime).ToString("0.0 fps")); - text.Append(" ("); - text.Append(lastDeltaTime.ToString("0.000 s")); - text.Append(")"); - } - - if (showFPS) { - text.AppendLine(); - text.AppendLine(); - var delayedFPS = delayedDeltaTime > 0.00001f ? 1F/delayedDeltaTime : 0; - text.Append("FPS".PadRight(25)).Append(delayedFPS.ToString("0.0 fps")); - - - float minFps = Mathf.Infinity; - - for (int i = 0; i < fpsDrops.Length; i++) if (fpsDrops[i] < minFps) minFps = fpsDrops[i]; - - text.AppendLine(); - text.Append(("Lowest fps (last " + fpsDrops.Length + ")").PadRight(25)).Append(minFps.ToString("0.0")); - } - - if (showPathProfile) { - AstarPath astar = AstarPath.active; - - text.AppendLine(); - - if (astar == null) { - text.Append("\nNo AstarPath Object In The Scene"); - } else { - #if ProfileAstar - double searchSpeed = (double)AstarPath.TotalSearchedNodes*10000 / (double)AstarPath.TotalSearchTime; - text.Append("\nSearch Speed (nodes/ms) ").Append(searchSpeed.ToString("0")).Append(" ("+AstarPath.TotalSearchedNodes+" / ").Append(((double)AstarPath.TotalSearchTime/10000F).ToString("0")+")"); - #endif - - if (ListPool.GetSize() > maxVecPool) maxVecPool = ListPool.GetSize(); - if (ListPool.GetSize() > maxNodePool) maxNodePool = ListPool.GetSize(); - - text.Append("\nPool Sizes (size/total created)"); - - for (int i = 0; i < debugTypes.Length; i++) { - debugTypes[i].Print(text); - } - } - } - - cachedText = text.ToString(); - } - - - if (font != null) { - style.font = font; - style.fontSize = fontSize; - } - - boxRect.height = style.CalcHeight(new GUIContent(cachedText), boxRect.width); - - GUI.Box(boxRect, ""); - GUI.Label(boxRect, cachedText, style); - - if (showGraph) { - float minMem = float.PositiveInfinity, maxMem = 0, minFPS = float.PositiveInfinity, maxFPS = 0; - for (int i = 0; i < graph.Length; i++) { - minMem = Mathf.Min(graph[i].memory, minMem); - maxMem = Mathf.Max(graph[i].memory, maxMem); - minFPS = Mathf.Min(graph[i].fps, minFPS); - maxFPS = Mathf.Max(graph[i].fps, maxFPS); - } - - float line; - GUI.color = Color.blue; - // Round to nearest x.x MB - line = Mathf.RoundToInt(maxMem/(100.0f*1000)); - GUI.Label(new Rect(5, Screen.height - AstarMath.MapTo(minMem, maxMem, 0 + graphOffset, graphHeight + graphOffset, line*1000*100) - 10, 100, 20), (line/10.0f).ToString("0.0 MB")); - - line = Mathf.Round(minMem/(100.0f*1000)); - GUI.Label(new Rect(5, Screen.height - AstarMath.MapTo(minMem, maxMem, 0 + graphOffset, graphHeight + graphOffset, line*1000*100) - 10, 100, 20), (line/10.0f).ToString("0.0 MB")); - - GUI.color = Color.green; - // Round to nearest x.x MB - line = Mathf.Round(maxFPS); - GUI.Label(new Rect(55, Screen.height - AstarMath.MapTo(minFPS, maxFPS, 0 + graphOffset, graphHeight + graphOffset, line) - 10, 100, 20), line.ToString("0 FPS")); - - line = Mathf.Round(minFPS); - GUI.Label(new Rect(55, Screen.height - AstarMath.MapTo(minFPS, maxFPS, 0 + graphOffset, graphHeight + graphOffset, line) - 10, 100, 20), line.ToString("0 FPS")); - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/AstarDebugger.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/AstarDebugger.cs.meta deleted file mode 100644 index 8e8a58297815f6964a330f2dd8a9de062fdbd034..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/AstarDebugger.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5103795af2d504ea693528e938005441 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/Draw.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/Draw.cs deleted file mode 100644 index c168c27003bd3267abfbd72ab0a925de03bfd236..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/Draw.cs +++ /dev/null @@ -1,89 +0,0 @@ -using PF; -using UnityEngine; -using Mathf = UnityEngine.Mathf; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Quaternion = UnityEngine.Quaternion; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding.Util { - /** Helper methods for drawing gizmos and debug lines */ - public class Draw { - public static readonly Draw Debug = new Draw { gizmos = false }; - public static readonly Draw Gizmos = new Draw { gizmos = true }; - - bool gizmos; - Matrix4x4 matrix = Matrix4x4.identity; - - void SetColor (Color color) { - if (gizmos && UnityEngine.Gizmos.color != color) UnityEngine.Gizmos.color = color; - } - - public void Line (Vector3 a, Vector3 b, Color color) { - SetColor(color); - if (gizmos) UnityEngine.Gizmos.DrawLine(matrix.MultiplyPoint3x4(a), matrix.MultiplyPoint3x4(b)); - else UnityEngine.Debug.DrawLine(matrix.MultiplyPoint3x4(a), matrix.MultiplyPoint3x4(b), color); - } - - public void CircleXZ (Vector3 center, float radius, Color color, float startAngle = 0f, float endAngle = 2*Mathf.PI) { - int steps = 40; - -#if UNITY_EDITOR - if (gizmos) steps = (int)Mathf.Clamp(Mathf.Sqrt(radius / UnityEditor.HandleUtility.GetHandleSize((UnityEngine.Gizmos.matrix * matrix).MultiplyPoint3x4(center))) * 25, 4, 40); -#endif - while (startAngle > endAngle) startAngle -= 2*Mathf.PI; - - Vector3 prev = new Vector3(Mathf.Cos(startAngle)*radius, 0, Mathf.Sin(startAngle)*radius); - for (int i = 0; i <= steps; i++) { - Vector3 c = new Vector3(Mathf.Cos(Mathf.Lerp(startAngle, endAngle, i/(float)steps))*radius, 0, Mathf.Sin(Mathf.Lerp(startAngle, endAngle, i/(float)steps))*radius); - Line(center + prev, center + c, color); - prev = c; - } - } - - public void Cylinder (Vector3 position, Vector3 up, float height, float radius, Color color) { - var tangent = Vector3.Cross(up, Vector3.one).normalized; - - matrix = Matrix4x4.TRS(position, Quaternion.LookRotation(tangent, up), new Vector3(radius, height, radius)); - CircleXZ(Vector3.zero, 1, color); - - if (height > 0) { - CircleXZ(Vector3.up, 1, color); - Line(new Vector3(1, 0, 0), new Vector3(1, 1, 0), color); - Line(new Vector3(-1, 0, 0), new Vector3(-1, 1, 0), color); - Line(new Vector3(0, 0, 1), new Vector3(0, 1, 1), color); - Line(new Vector3(0, 0, -1), new Vector3(0, 1, -1), color); - } - - matrix = Matrix4x4.identity; - } - - public void CrossXZ (Vector3 position, Color color, float size = 1) { - size *= 0.5f; - Line(position - Vector3.right*size, position + Vector3.right*size, color); - Line(position - Vector3.forward*size, position + Vector3.forward*size, color); - } - - public void Bezier (Vector3 a, Vector3 b, Color color) { - Vector3 dir = b - a; - - if (dir == Vector3.zero) return; - - Vector3 normal = Vector3.Cross(Vector3.up, dir); - Vector3 normalUp = Vector3.Cross(dir, normal); - - normalUp = normalUp.normalized; - normalUp *= dir.magnitude*0.1f; - - Vector3 p1c = a + normalUp; - Vector3 p2c = b + normalUp; - - Vector3 prev = a; - for (int i = 1; i <= 20; i++) { - float t = i/20.0f; - Vector3 p = AstarSplines.CubicBezier(a, p1c, p2c, b, t); - Line(prev, p, color); - prev = p; - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/Draw.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/Draw.cs.meta deleted file mode 100644 index 9a92f584236fc7873e142cab64f86222530195b0..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/Draw.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 506739df886ce4ebb9b14b16d86b5e13 -timeCreated: 1492346087 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/EditorResourceHelper.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/EditorResourceHelper.cs deleted file mode 100644 index 55cff207ddaa847647fd7373022274725c4002a3..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/EditorResourceHelper.cs +++ /dev/null @@ -1,82 +0,0 @@ -namespace Pathfinding { -#if UNITY_EDITOR - using UnityEditor; - using UnityEngine; - using System.Collections.Generic; - - /** Internal utility class for looking up editor resources */ - public static class EditorResourceHelper { - /** Path to the editor assets folder for the A* Pathfinding Project. If this path turns out to be incorrect, the script will try to find the correct path - * \see LoadStyles */ - public static string editorAssets; - - static EditorResourceHelper () { - // Look up editor assets directory when first accessed - LocateEditorAssets(); - } - - static Material surfaceMat, lineMat; - public static Material GizmoSurfaceMaterial { - get { - if (!surfaceMat) surfaceMat = UnityEditor.AssetDatabase.LoadAssetAtPath(EditorResourceHelper.editorAssets + "/Materials/Navmesh.mat", typeof(Material)) as Material; - return surfaceMat; - } - } - - public static Material GizmoLineMaterial { - get { - if (!lineMat) lineMat = UnityEditor.AssetDatabase.LoadAssetAtPath(EditorResourceHelper.editorAssets + "/Materials/NavmeshOutline.mat", typeof(Material)) as Material; - return lineMat; - } - } - - /** Locates the editor assets folder in case the user has moved it */ - public static bool LocateEditorAssets () { - string projectPath = Application.dataPath; - - if (projectPath.EndsWith("/Assets")) { - projectPath = projectPath.Remove(projectPath.Length-("Assets".Length)); - } - - editorAssets = "Assets/AstarPathfindingProject/Editor/EditorAssets"; - if (!System.IO.File.Exists(projectPath + editorAssets + "/AstarEditorSkinLight.guiskin") && !System.IO.File.Exists(projectPath + editorAssets + "/AstarEditorSkin.guiskin")) { - //Initiate search - - var sdir = new System.IO.DirectoryInfo(Application.dataPath); - - var dirQueue = new Queue(); - dirQueue.Enqueue(sdir); - - bool found = false; - while (dirQueue.Count > 0) { - System.IO.DirectoryInfo dir = dirQueue.Dequeue(); - if (System.IO.File.Exists(dir.FullName + "/AstarEditorSkinLight.guiskin") || System.IO.File.Exists(dir.FullName + "/AstarEditorSkin.guiskin")) { - // Handle windows file paths - string path = dir.FullName.Replace('\\', '/'); - found = true; - // Remove data path from string to make it relative - path = path.Replace(projectPath, ""); - - if (path.StartsWith("/")) { - path = path.Remove(0, 1); - } - - editorAssets = path; - return true; - } - var dirs = dir.GetDirectories(); - for (int i = 0; i < dirs.Length; i++) { - dirQueue.Enqueue(dirs[i]); - } - } - - if (!found) { - Debug.LogWarning("Could not locate editor assets folder. Make sure you have imported the package correctly.\nA* Pathfinding Project"); - return false; - } - } - return true; - } - } -#endif -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/EditorResourceHelper.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/EditorResourceHelper.cs.meta deleted file mode 100644 index 494fc944c337cf9506ff3aa0a1784ed6b0c5e1f7..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/EditorResourceHelper.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8127bc49e9e2d42dfa7a4e057842f165 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphEditorBase.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphEditorBase.cs deleted file mode 100644 index 21713401e0c0626fc22ceeedddc22ed07f84d4f4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphEditorBase.cs +++ /dev/null @@ -1,10 +0,0 @@ -using PF; - -namespace Pathfinding { - [JsonOptIn] - /** Defined here only so non-editor classes can use the #target field */ - public class GraphEditorBase { - /** NavGraph this editor is exposing */ - public NavGraph target; - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphEditorBase.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphEditorBase.cs.meta deleted file mode 100644 index 1a638c920933b93bae9dd5d114dd1233a38ce27f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphEditorBase.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 704136724bc95455ebe477f42f5c5a84 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphModifier.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphModifier.cs deleted file mode 100644 index 8d0f63ff55b277027d62b7c2263d4cfea0298ebc..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphModifier.cs +++ /dev/null @@ -1,197 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; - -namespace Pathfinding { - /** GraphModifier is used for modifying graphs or processing graph data based on events. - * This class is a simple container for a number of events. - * - * \warning Some events will be called both in play mode and in editor mode (at least the scan events). - * So make sure your code handles both cases well. You may choose to ignore editor events. - * \see Application.IsPlaying - */ - [ExecuteInEditMode] - public abstract class GraphModifier : VersionedMonoBehaviour { - /** All active graph modifiers */ - private static GraphModifier root; - - private GraphModifier prev; - private GraphModifier next; - - /** Unique persistent ID for this component, used for serialization */ - [SerializeField] - [HideInInspector] - protected ulong uniqueID; - - /** Maps persistent IDs to the component that uses it */ - protected static Dictionary usedIDs = new Dictionary(); - - protected static List GetModifiersOfType() where T : GraphModifier { - var current = root; - var result = new List(); - - while (current != null) { - var cast = current as T; - if (cast != null) result.Add(cast); - current = current.next; - } - return result; - } - - public static void FindAllModifiers () { - var allModifiers = FindObjectsOfType(typeof(GraphModifier)) as GraphModifier[]; - - for (int i = 0; i < allModifiers.Length; i++) { - if (allModifiers[i].enabled) allModifiers[i].OnEnable(); - } - } - - /** GraphModifier event type */ - public enum EventType { - PostScan = 1 << 0, - PreScan = 1 << 1, - LatePostScan = 1 << 2, - PreUpdate = 1 << 3, - PostUpdate = 1 << 4, - PostCacheLoad = 1 << 5 - } - - /** Triggers an event for all active graph modifiers */ - public static void TriggerEvent (GraphModifier.EventType type) { - if (!Application.isPlaying) { - FindAllModifiers(); - } - - GraphModifier c = root; - switch (type) { - case EventType.PreScan: - while (c != null) { c.OnPreScan(); c = c.next; } - break; - case EventType.PostScan: - while (c != null) { c.OnPostScan(); c = c.next; } - break; - case EventType.LatePostScan: - while (c != null) { c.OnLatePostScan(); c = c.next; } - break; - case EventType.PreUpdate: - while (c != null) { c.OnGraphsPreUpdate(); c = c.next; } - break; - case EventType.PostUpdate: - while (c != null) { c.OnGraphsPostUpdate(); c = c.next; } - break; - case EventType.PostCacheLoad: - while (c != null) { c.OnPostCacheLoad(); c = c.next; } - break; - } - } - - /** Adds this modifier to list of active modifiers */ - protected virtual void OnEnable () { - RemoveFromLinkedList(); - AddToLinkedList(); - ConfigureUniqueID(); - } - - /** Removes this modifier from list of active modifiers */ - protected virtual void OnDisable () { - RemoveFromLinkedList(); - } - - protected override void Awake () { - base.Awake(); - ConfigureUniqueID(); - } - - void ConfigureUniqueID () { - // Check if any other object is using the same uniqueID - // In that case this object may have been duplicated - GraphModifier usedBy; - - if (usedIDs.TryGetValue(uniqueID, out usedBy) && usedBy != this) { - Reset(); - } - - usedIDs[uniqueID] = this; - } - - void AddToLinkedList () { - if (root == null) { - root = this; - } else { - next = root; - root.prev = this; - root = this; - } - } - - void RemoveFromLinkedList () { - if (root == this) { - root = next; - if (root != null) root.prev = null; - } else { - if (prev != null) prev.next = next; - if (next != null) next.prev = prev; - } - prev = null; - next = null; - } - - protected virtual void OnDestroy () { - usedIDs.Remove(uniqueID); - } - - /** Called right after all graphs have been scanned. - * FloodFill and other post processing has not been done. - * - * \warning Since OnEnable and Awake are called roughly in the same time, the only way - * to ensure that these scripts get this call when scanning in Awake is to - * set the Script Execution Order for AstarPath to some time later than default time - * (see Edit -> Project Settings -> Script Execution Order). - * \todo Is this still relevant? A call to FindAllModifiers should have before this method is called - * so the above warning is probably not relevant anymore. - * - * \see OnLatePostScan - */ - public virtual void OnPostScan () {} - - /** Called right before graphs are going to be scanned. - * - * \warning Since OnEnable and Awake are called roughly in the same time, the only way - * to ensure that these scripts get this call when scanning in Awake is to - * set the Script Execution Order for AstarPath to some time later than default time - * (see Edit -> Project Settings -> Script Execution Order). - * \todo Is this still relevant? A call to FindAllModifiers should have before this method is called - * so the above warning is probably not relevant anymore. - * - * \see OnLatePostScan - * */ - public virtual void OnPreScan () {} - - /** Called at the end of the scanning procedure. - * This is the absolute last thing done by Scan. - * - */ - public virtual void OnLatePostScan () {} - - /** Called after cached graphs have been loaded. - * When using cached startup, this event is analogous to OnLatePostScan and implementing scripts - * should do roughly the same thing for both events. - */ - public virtual void OnPostCacheLoad () {} - - /** Called before graphs are updated using GraphUpdateObjects */ - public virtual void OnGraphsPreUpdate () {} - - /** Called after graphs have been updated using GraphUpdateObjects. - * Eventual flood filling has been done */ - public virtual void OnGraphsPostUpdate () {} - - void Reset () { - // Create a new random 64 bit value (62 bit actually because we skip negative numbers, but that's still enough by a huge margin) - var rnd1 = (ulong)Random.Range(0, int.MaxValue); - var rnd2 = ((ulong)Random.Range(0, int.MaxValue) << 32); - - uniqueID = rnd1 | rnd2; - usedIDs[uniqueID] = this; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphModifier.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphModifier.cs.meta deleted file mode 100644 index e8dbf6d41e2af59b55fb116756aa6d7b93fc3dfe..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphModifier.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 39897fb482672480a817862c3909a4aa -timeCreated: 1490044676 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: -222 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUpdateProcessor.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUpdateProcessor.cs deleted file mode 100644 index 45057cdfd4f677dd5e151a5d44111c40ee8cffba..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUpdateProcessor.cs +++ /dev/null @@ -1,221 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using PF; -using UnityEngine; - -namespace Pathfinding { - using UnityEngine.Assertions; - -#if NETFX_CORE - using Thread = Pathfinding.WindowsStore.Thread; -#else - using Thread = System.Threading.Thread; -#endif - - class GraphUpdateProcessor { - public event System.Action OnGraphsUpdated; - -#if !UNITY_WEBGL - /** - * Reference to the thread which handles async graph updates. - * \see ProcessGraphUpdatesAsync - */ - Thread graphUpdateThread; -#endif - - /** Used for IsAnyGraphUpdateInProgress */ - bool anyGraphUpdateInProgress; - - /** - * Queue containing all waiting graph update queries. Add to this queue by using \link AddToQueue \endlink. - * \see AddToQueue - */ - readonly Queue graphUpdateQueue = new Queue(); - - /** Queue of all async graph updates waiting to be executed */ - readonly Queue graphUpdateQueueAsync = new Queue(); - - /** Queue of all non-async graph update post events waiting to be executed */ - readonly Queue graphUpdateQueuePost = new Queue(); - - /** Queue of all non-async graph updates waiting to be executed */ - readonly Queue graphUpdateQueueRegular = new Queue(); - - readonly System.Threading.ManualResetEvent asyncGraphUpdatesComplete = new System.Threading.ManualResetEvent(true); - -#if !UNITY_WEBGL - readonly System.Threading.AutoResetEvent graphUpdateAsyncEvent = new System.Threading.AutoResetEvent(false); - readonly System.Threading.AutoResetEvent exitAsyncThread = new System.Threading.AutoResetEvent(false); -#endif - - /** Returns if any graph updates are waiting to be applied */ - public bool IsAnyGraphUpdateQueued { get { return graphUpdateQueue.Count > 0; } } - - /** Returns if any graph updates are in progress */ - public bool IsAnyGraphUpdateInProgress { get { return anyGraphUpdateInProgress; } } - - /** The last area index which was used. - * Used for the \link FloodFill(GraphNode node) FloodFill \endlink function to start flood filling with an unused area. - * \see FloodFill(Node node) - */ - uint lastUniqueAreaIndex = 0; - - /** Order type for updating graphs */ - enum GraphUpdateOrder { - GraphUpdate, - FloodFill - } - - /** Holds a single update that needs to be performed on a graph */ - struct GUOSingle { - public GraphUpdateOrder order; - public GraphUpdateObject obj; - } - - public void DisableMultithreading () { -#if !UNITY_WEBGL - if (graphUpdateThread != null && graphUpdateThread.IsAlive) { - // Resume graph update thread, will cause it to terminate - exitAsyncThread.Set(); - - if (!graphUpdateThread.Join(5*1000)) { - Debug.LogError("Graph update thread did not exit in 5 seconds"); - } - - graphUpdateThread = null; - } -#endif - } - - /** Update all graphs using the GraphUpdateObject. - * This can be used to, e.g make all nodes in an area unwalkable, or set them to a higher penalty. - * The graphs will be updated as soon as possible (with respect to AstarPath.batchGraphUpdates) - * - * \see FlushGraphUpdates - */ - public void AddToQueue (GraphUpdateObject ob) { - // Put the GUO in the queue - graphUpdateQueue.Enqueue(ob); - } - - /** Floodfills starting from the specified node. - * \see https://en.wikipedia.org/wiki/Flood_fill - */ - public void FloodFill (GraphNode seed) { - FloodFill(seed, lastUniqueAreaIndex+1); - lastUniqueAreaIndex++; - } - - /** Floodfills starting from 'seed' using the specified area. - * \see https://en.wikipedia.org/wiki/Flood_fill - */ - public void FloodFill (GraphNode seed, uint area) { - if (area > GraphNode.MaxAreaIndex) { - Debug.LogError("Too high area index - The maximum area index is " + GraphNode.MaxAreaIndex); - return; - } - - if (area < 0) { - Debug.LogError("Too low area index - The minimum area index is 0"); - return; - } - - var stack = Pathfinding.Util.StackPool.Claim(); - - stack.Push(seed); - seed.Area = (uint)area; - - while (stack.Count > 0) { - stack.Pop().FloodFill(stack, (uint)area); - } - - Pathfinding.Util.StackPool.Release(stack); - } - - /** Floodfills all graphs and updates areas for every node. - * The different colored areas that you see in the scene view when looking at graphs - * are called just 'areas', this method calculates which nodes are in what areas. - * \see Pathfinding.Node.area - */ - public void FloodFill () { - #if ASTARDEBUG - System.DateTime startTime = System.DateTime.UtcNow; - #endif - - var graphs = PathFindHelper.graphs; - - if (graphs == null) { - return; - } - - // Iterate through all nodes in all graphs - // and reset their Area field - for (int i = 0; i < graphs.Length; i++) { - var graph = graphs[i]; - - if (graph != null) { - graph.GetNodes(node => node.Area = 0); - } - } - - lastUniqueAreaIndex = 0; - uint area = 0; - int forcedSmallAreas = 0; - - // Get a temporary stack from a pool - var stack = Pathfinding.Util.StackPool.Claim(); - - for (int i = 0; i < graphs.Length; i++) { - NavGraph graph = graphs[i]; - - if (graph == null) continue; - - graph.GetNodes(node => { - if (node.Walkable && node.Area == 0) { - area++; - - uint thisArea = area; - - if (area > GraphNode.MaxAreaIndex) { - // Forced to consider this a small area - area--; - thisArea = area; - - // Make sure the first small area is also counted - if (forcedSmallAreas == 0) forcedSmallAreas = 1; - - forcedSmallAreas++; - } - - stack.Clear(); - stack.Push(node); - - int counter = 1; - node.Area = thisArea; - - while (stack.Count > 0) { - counter++; - stack.Pop().FloodFill(stack, thisArea); - } - } - }); - } - - lastUniqueAreaIndex = area; - - if (forcedSmallAreas > 0) { - Debug.LogError(forcedSmallAreas +" areas had to share IDs. " + - "This usually doesn't affect pathfinding in any significant way (you might get 'Searched whole area but could not find target' as a reason for path failure) " + - "however some path requests may take longer to calculate (specifically those that fail with the 'Searched whole area' error)." + - "The maximum number of areas is " + GraphNode.MaxAreaIndex +"."); - } - - // Put back into the pool - Pathfinding.Util.StackPool.Release(stack); - - #if ASTARDEBUG - Debug.Log("Flood fill complete, "+area+" area"+(area > 1 ? "s" : "")+" found - "+((System.DateTime.UtcNow.Ticks-startTime.Ticks)*0.0001).ToString("0.00")+" ms"); - #endif - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUpdateProcessor.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUpdateProcessor.cs.meta deleted file mode 100644 index bd24da6b8aa008e3c2cd3ca577bccbf2b319c3cd..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUpdateProcessor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b1798d8e7c7d54972ae8522558cbd27c -timeCreated: 1443114816 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUtilities.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUtilities.cs deleted file mode 100644 index 53c04c98a427b3b3efa318aa81859a8cff45ed48..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUtilities.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System.Collections.Generic; -using PF; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - using Pathfinding.Util; - - /** Contains utility methods for getting useful information out of graph. - * This class works a lot with the #Pathfinding.GraphNode class, a useful function to get nodes is #AstarPath.GetNearest. - * - * \see #AstarPath.GetNearest - * \see #Pathfinding.GraphUpdateUtilities - * \see #Pathfinding.PathUtilities - * - * \ingroup utils - */ - public static class GraphUtilities - { - /** Convenience method to get a list of all segments of the contours of a graph. - * \returns A list of segments. Every 2 elements form a line segment. The first segment is (result[0], result[1]), the second one is (result[2], result[3]) etc. - * The line segments are oriented so that the navmesh is on the right side of the segments when seen from above. - * - * This method works for navmesh, recast, grid graphs and layered grid graphs. For other graph types it will return an empty list. - * - * If you need more information about how the contours are connected you can take a look at the other variants of this method. - * - * \snippet MiscSnippets.cs GraphUtilities.GetContours2 - * - * \shadowimage{navmesh_contour.png} - * \shadowimage{grid_contour.png} - */ - public static List GetContours(NavGraph graph) - { - List result = ListPool.Claim(); - if (graph is INavmesh) - { - GetContours(graph as INavmesh, (vertices, cycle) => - { - for (int j = cycle? vertices.Count - 1 : 0, i = 0; i < vertices.Count; j = i, i++) - { - result.Add((Vector3) vertices[j]); - result.Add((Vector3) vertices[i]); - } - }); - } - - return result; - } - - /** Traces the contour of a navmesh. - * \param navmesh The navmesh-like object to trace. This can be a recast or navmesh graph or it could be a single tile in one such graph. - * \param results Will be called once for each contour with the contour as a parameter as well as a boolean indicating if the contour is a cycle or a chain (see second image). - * - * \shadowimage{navmesh_contour.png} - * - * This image is just used to illustrate the difference between chains and cycles. That it shows a grid graph is not relevant. - * \shadowimage{grid_contour_compressed.png} - * - * \see #GetContours(NavGraph) - */ - public static void GetContours(INavmesh navmesh, System.Action, bool> results) - { - // Assume 3 vertices per node - var uses = new bool[3]; - - var outline = new Dictionary(); - var vertexPositions = new Dictionary(); - var hasInEdge = new HashSet(); - - navmesh.GetNodes(_node => - { - var node = _node as TriangleMeshNode; - - uses[0] = uses[1] = uses[2] = false; - - if (node != null) - { - // Find out which edges are shared with other nodes - for (int j = 0; j < node.connections.Length; j++) - { - var other = node.connections[j].node as TriangleMeshNode; - - // Not necessarily a TriangleMeshNode - if (other != null) - { - int a = node.SharedEdge(other); - if (a != -1) uses[a] = true; - } - } - - // Loop through all edges on the node - for (int j = 0; j < 3; j++) - { - // The edge is not shared with any other node - // I.e it is an exterior edge on the mesh - if (!uses[j]) - { - var i1 = j; - var i2 = (j + 1) % node.GetVertexCount(); - - outline[node.GetVertexIndex(i1)] = node.GetVertexIndex(i2); - hasInEdge.Add(node.GetVertexIndex(i2)); - vertexPositions[node.GetVertexIndex(i1)] = node.GetVertex(i1); - vertexPositions[node.GetVertexIndex(i2)] = node.GetVertex(i2); - } - } - } - }); - - Polygon.TraceContours(outline, hasInEdge, (chain, cycle) => - { - List vertices = ListPool.Claim(); - for (int i = 0; i < chain.Count; i++) vertices.Add(vertexPositions[chain[i]]); - results(vertices, cycle); - }); - } - - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUtilities.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUtilities.cs.meta deleted file mode 100644 index d0417cc94ffeb1a8a5fd9f0c279f431d9814da55..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/GraphUtilities.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: fd178834bf6c54cdb8fc5f76a039a91c -timeCreated: 1502889881 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/MovementUtilities.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/MovementUtilities.cs deleted file mode 100644 index e9fc3134fdfad28c75c1ad7d52359c4f3697f5f2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/MovementUtilities.cs +++ /dev/null @@ -1,176 +0,0 @@ -using System.Collections; -using PF; -using Mathf = UnityEngine.Mathf; -using Vector2 = UnityEngine.Vector2; - -namespace Pathfinding.Util { - public static class MovementUtilities { - /** Clamps the velocity to the max speed and optionally the forwards direction. - * \param velocity Desired velocity of the character. In world units per second. - * \param maxSpeed Max speed of the character. In world units per second. - * \param slowdownFactor Value between 0 and 1 which determines how much slower the character should move than normal. - * Normally 1 but should go to 0 when the character approaches the end of the path. - * \param slowWhenNotFacingTarget Prevent the velocity from being too far away from the forward direction of the character - * and slow the character down if the desired velocity is not in the same direction as the forward vector. - * \param forward Forward direction of the character. Used together with the \a slowWhenNotFacingTarget parameter. - * - * Note that all vectors are 2D vectors, not 3D vectors. - * - * \returns The clamped velocity in world units per second. - */ - public static Vector2 ClampVelocity (Vector2 velocity, float maxSpeed, float slowdownFactor, bool slowWhenNotFacingTarget, Vector2 forward) { - // Max speed to use for this frame - var currentMaxSpeed = maxSpeed * slowdownFactor; - - // Check if the agent should slow down in case it is not facing the direction it wants to move in - if (slowWhenNotFacingTarget && (forward.x != 0 || forward.y != 0)) { - float currentSpeed; - var normalizedVelocity = VectorMath.Normalize(velocity.ToPFV2(), out currentSpeed); - float dot = Vector2.Dot(normalizedVelocity.ToUnityV2(), forward); - - // Lower the speed when the character's forward direction is not pointing towards the desired velocity - // 1 when velocity is in the same direction as forward - // 0.2 when they point in the opposite directions - float directionSpeedFactor = Mathf.Clamp(dot+0.707f, 0.2f, 1.0f); - currentMaxSpeed *= directionSpeedFactor; - currentSpeed = Mathf.Min(currentSpeed, currentMaxSpeed); - - // Angle between the forwards direction of the character and our desired velocity - float angle = Mathf.Acos(Mathf.Clamp(dot, -1, 1)); - - // Clamp the angle to 20 degrees - // We cannot keep the velocity exactly in the forwards direction of the character - // because we use the rotation to determine in which direction to rotate and if - // the velocity would always be in the forwards direction of the character then - // the character would never rotate. - // Allow larger angles when near the end of the path to prevent oscillations. - angle = Mathf.Min(angle, (20f + 180f*(1 - slowdownFactor*slowdownFactor))*Mathf.Deg2Rad); - - float sin = Mathf.Sin(angle); - float cos = Mathf.Cos(angle); - - // Determine if we should rotate clockwise or counter-clockwise to move towards the current velocity - sin *= Mathf.Sign(normalizedVelocity.x*forward.y - normalizedVelocity.y*forward.x); - // Rotate the #forward vector by #angle radians - // The rotation is done using an inlined rotation matrix. - // See https://en.wikipedia.org/wiki/Rotation_matrix - return new Vector2(forward.x*cos + forward.y*sin, forward.y*cos - forward.x*sin) * currentSpeed; - } else { - return Vector2.ClampMagnitude(velocity, currentMaxSpeed); - } - } - - /** Calculate an acceleration to move deltaPosition units and get there with approximately a velocity of targetVelocity */ - public static Vector2 CalculateAccelerationToReachPoint (Vector2 deltaPosition, Vector2 targetVelocity, Vector2 currentVelocity, float forwardsAcceleration, float rotationSpeed, float maxSpeed, Vector2 forwardsVector) { - // Guard against div by zero - if (forwardsAcceleration <= 0) return Vector2.zero; - - float currentSpeed = currentVelocity.magnitude; - - // Convert rotation speed to an acceleration - // See https://en.wikipedia.org/wiki/Centripetal_force - var sidewaysAcceleration = currentSpeed * rotationSpeed * Mathf.Deg2Rad; - - // To avoid weird behaviour when the rotation speed is very low we allow the agent to accelerate sideways without rotating much - // if the rotation speed is very small. Also guards against division by zero. - sidewaysAcceleration = Mathf.Max(sidewaysAcceleration, forwardsAcceleration); - sidewaysAcceleration = forwardsAcceleration; - - // Transform coordinates to local space where +X is the forwards direction - // This is essentially equivalent to Transform.InverseTransformDirection. - deltaPosition = VectorMath.ComplexMultiplyConjugate(deltaPosition.ToPFV2(), forwardsVector.ToPFV2()).ToUnityV2(); - targetVelocity = VectorMath.ComplexMultiplyConjugate(targetVelocity.ToPFV2(), forwardsVector.ToPFV2()).ToUnityV2(); - currentVelocity = VectorMath.ComplexMultiplyConjugate(currentVelocity.ToPFV2(), forwardsVector.ToPFV2()).ToUnityV2(); - float ellipseSqrFactorX = 1 / (forwardsAcceleration*forwardsAcceleration); - float ellipseSqrFactorY = 1 / (sidewaysAcceleration*sidewaysAcceleration); - - // If the target velocity is zero we can use a more fancy approach - // and calculate a nicer path. - // In particular, this is the case at the end of the path. - if (targetVelocity == Vector2.zero) { - // Run a binary search over the time to get to the target point. - float mn = 0.01f; - float mx = 10; - while (mx - mn > 0.01f) { - var time = (mx + mn) * 0.5f; - - // Given that we want to move deltaPosition units from out current position, that our current velocity is given - // and that when we reach the target we want our velocity to be zero. Also assume that our acceleration will - // vary linearly during the slowdown. Then we can calculate what our acceleration should be during this frame. - - //{ t = time - //{ deltaPosition = vt + at^2/2 + qt^3/6 - //{ 0 = v + at + qt^2/2 - //{ solve for a - // a = acceleration vector - // q = derivative of the acceleration vector - var a = (6*deltaPosition - 4*time*currentVelocity)/(time*time); - var q = 6*(time*currentVelocity - 2*deltaPosition)/(time*time*time); - - // Make sure the acceleration is not greater than our maximum allowed acceleration. - // If it is we increase the time we want to use to get to the target - // and if it is not, we decrease the time to get there faster. - // Since the acceleration is described by acceleration = a + q*t - // we only need to check at t=0 and t=time. - // Note that the acceleration limit is described by an ellipse, not a circle. - var nextA = a + q*time; - if (a.x*a.x*ellipseSqrFactorX + a.y*a.y*ellipseSqrFactorY > 1.0f || nextA.x*nextA.x*ellipseSqrFactorX + nextA.y*nextA.y*ellipseSqrFactorY > 1.0f) { - mn = time; - } else { - mx = time; - } - } - - var finalAcceleration = (6*deltaPosition - 4*mx*currentVelocity)/(mx*mx); - - // Boosting - { - // The trajectory calculated above has a tendency to use very wide arcs - // and that does unfortunately not look particularly good in some cases. - // Here we amplify the component of the acceleration that is perpendicular - // to our current velocity. This will make the agent turn towards the - // target quicker. - // How much amplification to use. Value is unitless. - const float Boost = 1; - finalAcceleration.y *= 1 + Boost; - - // Clamp the velocity to the maximum acceleration. - // Note that the maximum acceleration constraint is shaped like an ellipse, not like a circle. - float ellipseMagnitude = finalAcceleration.x*finalAcceleration.x*ellipseSqrFactorX + finalAcceleration.y*finalAcceleration.y*ellipseSqrFactorY; - if (ellipseMagnitude > 1.0f) finalAcceleration /= Mathf.Sqrt(ellipseMagnitude); - } - - return VectorMath.ComplexMultiply(finalAcceleration.ToPFV2(), forwardsVector.ToPFV2()).ToUnityV2(); - } else { - // Here we try to move towards the next waypoint which has been modified slightly using our - // desired velocity at that point so that the agent will more smoothly round the corner. - - // How much to strive for making sure we reach the target point with the target velocity. Unitless. - const float TargetVelocityWeight = 0.5f; - - // Limit to how much to care about the target velocity. Value is in seconds. - // This prevents the character from moving away from the path too much when the target point is far away - const float TargetVelocityWeightLimit = 1.5f; - float targetSpeed; - var normalizedTargetVelocity = VectorMath.Normalize(targetVelocity.ToPFV2(), out targetSpeed); - - var distance = deltaPosition.magnitude; - var targetPoint = deltaPosition.ToPFV2() - normalizedTargetVelocity * System.Math.Min(TargetVelocityWeight * distance * targetSpeed / (currentSpeed + targetSpeed), maxSpeed*TargetVelocityWeightLimit); - - // How quickly the agent will try to reach the velocity that we want it to have. - // We need this to prevent oscillations and jitter which is what happens if - // we let the constant go towards zero. Value is in seconds. - const float TimeToReachDesiredVelocity = 0.1f; - // TODO: Clamp to ellipse using more accurate acceleration (use rotation speed as well) - var finalAcceleration = (targetPoint.normalized*maxSpeed - currentVelocity.ToPFV2()) * (1f/TimeToReachDesiredVelocity); - - // Clamp the velocity to the maximum acceleration. - // Note that the maximum acceleration constraint is shaped like an ellipse, not like a circle. - float ellipseMagnitude = finalAcceleration.x*finalAcceleration.x*ellipseSqrFactorX + finalAcceleration.y*finalAcceleration.y*ellipseSqrFactorY; - if (ellipseMagnitude > 1.0f) finalAcceleration /= Mathf.Sqrt(ellipseMagnitude); - - return VectorMath.ComplexMultiply(finalAcceleration, forwardsVector.ToPFV2()).ToUnityV2(); - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/MovementUtilities.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/MovementUtilities.cs.meta deleted file mode 100644 index bb4e60d69adf60d7c0971b7852bbaef580bb7ab7..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/MovementUtilities.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 0a6cffd9895f94907aa43f18b0904587 -timeCreated: 1490097740 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/NodeLink.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/NodeLink.cs deleted file mode 100644 index ff72dc4fed1ca5a148d5abf6737abd64a03c230f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/NodeLink.cs +++ /dev/null @@ -1,152 +0,0 @@ -using PF; -using UnityEngine; -#if UNITY_EDITOR -using UnityEditor; -#endif - -namespace Pathfinding { - using Pathfinding.Util; - - /** Connects two nodes with a direct connection. - * It is not possible to detect this link when following a path (which may be good or bad), for that you can use NodeLink2. - */ - [AddComponentMenu("Pathfinding/Link")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_node_link.php")] - public class NodeLink : GraphModifier { - /** End position of the link */ - public Transform end; - - /** The connection will be this times harder/slower to traverse. - * Note that values lower than one will not always make the pathfinder choose this path instead of another path even though this one should - * lead to a lower total cost unless you also adjust the Heuristic Scale in A* Inspector -> Settings -> Pathfinding or disable the heuristic altogether. - */ - public float costFactor = 1.0f; - - /** Make a one-way connection */ - public bool oneWay = false; - - /** Delete existing connection instead of adding one */ - public bool deleteConnection = false; - - public Transform Start { - get { return transform; } - } - - public Transform End { - get { return end; } - } - - public override void OnPostScan () { - if (AstarPath.active.isScanning) { - InternalOnPostScan(); - } else { - AstarPath.active.AddWorkItem(new AstarWorkItem(force => { - InternalOnPostScan(); - return true; - })); - } - } - - public void InternalOnPostScan () { - Apply(); - } - - public override void OnGraphsPostUpdate () { - if (!AstarPath.active.isScanning) { - AstarPath.active.AddWorkItem(new AstarWorkItem(force => { - InternalOnPostScan(); - return true; - })); - } - } - - public virtual void Apply () { - if (Start == null || End == null || AstarPath.active == null) return; - - GraphNode startNode = PathFindHelper.GetNearest(Start.position).node; - GraphNode endNode = PathFindHelper.GetNearest(End.position).node; - - if (startNode == null || endNode == null) return; - - - if (deleteConnection) { - startNode.RemoveConnection(endNode); - if (!oneWay) - endNode.RemoveConnection(startNode); - } else { - uint cost = (uint)System.Math.Round((startNode.position-endNode.position).costMagnitude*costFactor); - - startNode.AddConnection(endNode, cost); - if (!oneWay) - endNode.AddConnection(startNode, cost); - } - } - - public void OnDrawGizmos () { - if (Start == null || End == null) return; - - Draw.Gizmos.Bezier(Start.position, End.position, deleteConnection ? Color.red : Color.green); - } - - #if UNITY_EDITOR - [UnityEditor.MenuItem("Edit/Pathfinding/Link Pair %&l")] - public static void LinkObjects () { - Transform[] tfs = Selection.transforms; - if (tfs.Length == 2) { - LinkObjects(tfs[0], tfs[1], false); - } - SceneView.RepaintAll(); - } - - [UnityEditor.MenuItem("Edit/Pathfinding/Unlink Pair %&u")] - public static void UnlinkObjects () { - Transform[] tfs = Selection.transforms; - if (tfs.Length == 2) { - LinkObjects(tfs[0], tfs[1], true); - } - SceneView.RepaintAll(); - } - - [UnityEditor.MenuItem("Edit/Pathfinding/Delete Links on Selected %&b")] - public static void DeleteLinks () { - Transform[] tfs = Selection.transforms; - for (int i = 0; i < tfs.Length; i++) { - NodeLink[] conns = tfs[i].GetComponents(); - for (int j = 0; j < conns.Length; j++) DestroyImmediate(conns[j]); - } - SceneView.RepaintAll(); - } - - public static void LinkObjects (Transform a, Transform b, bool removeConnection) { - NodeLink connecting = null; - - NodeLink[] conns = a.GetComponents(); - for (int i = 0; i < conns.Length; i++) { - if (conns[i].end == b) { - connecting = conns[i]; - break; - } - } - - conns = b.GetComponents(); - for (int i = 0; i < conns.Length; i++) { - if (conns[i].end == a) { - connecting = conns[i]; - break; - } - } - - if (removeConnection) { - if (connecting != null) DestroyImmediate(connecting); - } else { - if (connecting == null) { - connecting = a.gameObject.AddComponent(); - connecting.end = b; - } else { - connecting.deleteConnection = !connecting.deleteConnection; - } - } - } - #endif - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/NodeLink.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/NodeLink.cs.meta deleted file mode 100644 index b4282dce40cdf51e2941c3ede7ba7e3f9b28675c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/NodeLink.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ca327ce4e754a4597a70fb963758f8bd -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/PathInterpolator.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/PathInterpolator.cs deleted file mode 100644 index 3c48b347636509b4dd5453f5b61f8b5df466dba1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/PathInterpolator.cs +++ /dev/null @@ -1,189 +0,0 @@ -using System.Collections.Generic; -using PF; -using Mathf = UnityEngine.Mathf; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding.Util { - /** Interpolates along a sequence of points */ - public class PathInterpolator { - List path; - - float distanceToSegmentStart; - float currentDistance; - float currentSegmentLength = float.PositiveInfinity; - float totalDistance = float.PositiveInfinity; - - /** Current position */ - public virtual Vector3 position { - get { - float t = currentSegmentLength > 0.0001f ? (currentDistance - distanceToSegmentStart) / currentSegmentLength : 0f; - return Vector3.Lerp(path[segmentIndex], path[segmentIndex+1], t); - } - } - - /** Tangent of the curve at the current position */ - public Vector3 tangent { - get { - return path[segmentIndex+1] - path[segmentIndex]; - } - } - - /** Remaining distance until the end of the path */ - public float remainingDistance { - get { - return totalDistance - distance; - } - set { - distance = totalDistance - value; - } - } - - /** Traversed distance from the start of the path */ - public float distance { - get { - return currentDistance; - } - set { - currentDistance = value; - - while (currentDistance < distanceToSegmentStart && segmentIndex > 0) PrevSegment(); - while (currentDistance > distanceToSegmentStart + currentSegmentLength && segmentIndex < path.Count - 2) NextSegment(); - } - } - - /** Current segment. - * The start and end points of the segment are path[value] and path[value+1]. - */ - public int segmentIndex { get; private set; } - - /** True if this instance has a path set. - * \see SetPath - */ - public bool valid { - get { - return path != null; - } - } - - /** Set the path to interpolate along. - * This will reset all interpolation variables. - */ - public void SetPath (List path) { - this.path = path; - currentDistance = 0; - segmentIndex = 0; - distanceToSegmentStart = 0; - - if (path == null) { - totalDistance = float.PositiveInfinity; - currentSegmentLength = float.PositiveInfinity; - return; - } - - if (path.Count < 2) throw new System.ArgumentException("Path must have a length of at least 2"); - - currentSegmentLength = (path[1] - path[0]).magnitude; - totalDistance = 0f; - - var prev = path[0]; - for (int i = 1; i < path.Count; i++) { - var current = path[i]; - totalDistance += (current - prev).magnitude; - prev = current; - } - } - - /** Move to the specified segment and move a fraction of the way to the next segment */ - public void MoveToSegment (int index, float fractionAlongSegment) { - if (path == null) return; - if (index < 0 || index >= path.Count - 1) throw new System.ArgumentOutOfRangeException("index"); - while (segmentIndex > index) PrevSegment(); - while (segmentIndex < index) NextSegment(); - distance = distanceToSegmentStart + Mathf.Clamp01(fractionAlongSegment) * currentSegmentLength; - } - - /** Move as close as possible to the specified point */ - public void MoveToClosestPoint (Vector3 point) { - if (path == null) return; - - float bestDist = float.PositiveInfinity; - float bestFactor = 0f; - int bestIndex = 0; - - for (int i = 0; i < path.Count-1; i++) { - float factor = VectorMath.ClosestPointOnLineFactor(path[i], path[i+1], point); - Vector3 closest = Vector3.Lerp(path[i], path[i+1], factor); - float dist = (point - closest).sqrMagnitude; - - if (dist < bestDist) { - bestDist = dist; - bestFactor = factor; - bestIndex = i; - } - } - - MoveToSegment(bestIndex, bestFactor); - } - - public void MoveToLocallyClosestPoint (Vector3 point, bool allowForwards = true, bool allowBackwards = true) { - if (path == null) return; - - while (allowForwards && segmentIndex < path.Count - 2 && (path[segmentIndex+1] - point).sqrMagnitude <= (path[segmentIndex] - point).sqrMagnitude) { - NextSegment(); - } - - while (allowBackwards && segmentIndex > 0 && (path[segmentIndex-1] - point).sqrMagnitude <= (path[segmentIndex] - point).sqrMagnitude) { - PrevSegment(); - } - - // Check the distances to the two segments extending from the vertex path[segmentIndex] - // and pick the position on those segments that is closest to the #point parameter. - float factor1 = 0, factor2 = 0, d1 = float.PositiveInfinity, d2 = float.PositiveInfinity; - if (segmentIndex > 0) { - factor1 = VectorMath.ClosestPointOnLineFactor(path[segmentIndex-1], path[segmentIndex], point); - d1 = (Vector3.Lerp(path[segmentIndex-1], path[segmentIndex], factor1) - point).sqrMagnitude; - } - - if (segmentIndex < path.Count - 1) { - factor2 = VectorMath.ClosestPointOnLineFactor(path[segmentIndex], path[segmentIndex+1], point); - d2 = (Vector3.Lerp(path[segmentIndex], path[segmentIndex+1], factor2) - point).sqrMagnitude; - } - - if (d1 < d2) MoveToSegment(segmentIndex - 1, factor1); - else MoveToSegment(segmentIndex, factor2); - } - - public void MoveToCircleIntersection2D (Vector3 circleCenter3D, float radius, IMovementPlane transform) { - if (path == null) return; - - // Move forwards as long as we are getting closer to circleCenter3D - while (segmentIndex < path.Count - 2 && VectorMath.ClosestPointOnLineFactor(path[segmentIndex], path[segmentIndex+1], circleCenter3D) > 1) { - NextSegment(); - } - - var circleCenter = transform.ToPlane(circleCenter3D); - - // Move forwards as long as the current segment endpoint is within the circle - while (segmentIndex < path.Count - 2 && (transform.ToPlane(path[segmentIndex+1]) - circleCenter).sqrMagnitude <= radius*radius) { - NextSegment(); - } - - // Calculate the intersection with the circle. This involves some math. - var factor = VectorMath.LineCircleIntersectionFactor(circleCenter, transform.ToPlane(path[segmentIndex]), transform.ToPlane(path[segmentIndex+1]), radius); - // Move to the intersection point - MoveToSegment(segmentIndex, factor); - } - - protected virtual void PrevSegment () { - segmentIndex--; - currentSegmentLength = (path[segmentIndex+1] - path[segmentIndex]).magnitude; - distanceToSegmentStart -= currentSegmentLength; - } - - protected virtual void NextSegment () { - segmentIndex++; - distanceToSegmentStart += currentSegmentLength; - currentSegmentLength = (path[segmentIndex+1] - path[segmentIndex]).magnitude; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/PathInterpolator.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/PathInterpolator.cs.meta deleted file mode 100644 index ed9f0c3c9e987d057f67962f897a79f400cdbd0d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/PathInterpolator.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9c0392dbc5e744ee28e7b9ee81aea1e2 -timeCreated: 1490125383 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/StackPool.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/StackPool.cs deleted file mode 100644 index eeb7beef0548bb4b19d28d9598913673a7ee706e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/StackPool.cs +++ /dev/null @@ -1,86 +0,0 @@ -//#define ASTAR_NO_POOLING //@SHOWINEDITOR Disable pooling for some reason. Could be debugging or just for measuring the difference. - -using System.Collections.Generic; - -namespace Pathfinding.Util { - /** Lightweight Stack Pool. - * Handy class for pooling stacks of type T. - * - * Usage: - * - Claim a new stack using \code Stack foo = StackPool.Claim (); \endcode - * - Use it and do stuff with it - * - Release it with \code StackPool.Release (foo); \endcode - * - * You do not need to clear the stack before releasing it. - * After you have released a stack, you should never use it again. - * - * \warning This class is not thread safe - * - * \since Version 3.2 - * \see Pathfinding.Util.ListPool - */ - public static class StackPool{ - /** Internal pool */ - static readonly List > pool; - - /** Static constructor */ - static StackPool () { - pool = new List >(); - } - - /** Claim a stack. - * Returns a pooled stack if any are in the pool. - * Otherwise it creates a new one. - * After usage, this stack should be released using the Release function (though not strictly necessary). - */ - public static Stack Claim () { -#if ASTAR_NO_POOLING - return new Stack(); -#else - if (pool.Count > 0) { - Stack ls = pool[pool.Count-1]; - pool.RemoveAt(pool.Count-1); - return ls; - } - - return new Stack(); -#endif - } - - /** Makes sure the pool contains at least \a count pooled items. - * This is good if you want to do all allocations at start. - */ - public static void Warmup (int count) { - var tmp = new Stack[count]; - - for (int i = 0; i < count; i++) tmp[i] = Claim(); - for (int i = 0; i < count; i++) Release(tmp[i]); - } - - /** Releases a stack. - * After the stack has been released it should not be used anymore. - * Releasing a stack twice will cause an error. - */ - public static void Release (Stack stack) { -#if !ASTAR_NO_POOLING - for (int i = 0; i < pool.Count; i++) - if (pool[i] == stack) UnityEngine.Debug.LogError("The Stack is released even though it is inside the pool"); - - stack.Clear(); - pool.Add(stack); -#endif - } - - /** Clears all pooled stacks of this type. - * This is an O(n) operation, where n is the number of pooled stacks - */ - public static void Clear () { - pool.Clear(); - } - - /** Number of stacks of this type in the pool */ - public static int GetSize () { - return pool.Count; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/StackPool.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/StackPool.cs.meta deleted file mode 100644 index 1c8a3b53be6e443b905fef53cffe5678392439b0..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/StackPool.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: de467bbbb1ff84668ae8262caad00941 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/WorkItemProcessor.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/WorkItemProcessor.cs deleted file mode 100644 index fcaba24f93ee5a78470816f23b315319a84e217f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/WorkItemProcessor.cs +++ /dev/null @@ -1,271 +0,0 @@ -namespace Pathfinding { - using UnityEngine; - - /** An item of work that can be executed when graphs are safe to update. - * \see #AstarPath.UpdateGraphs - * \see #AstarPath.AddWorkItem - */ - public struct AstarWorkItem { - /** Init function. - * May be null if no initialization is needed. - * Will be called once, right before the first call to #update. - */ - public System.Action init; - - /** Init function. - * May be null if no initialization is needed. - * Will be called once, right before the first call to #update. - * - * A context object is sent as a parameter. This can be used - * to for example queue a flood fill that will be executed either - * when a work item calls EnsureValidFloodFill or all work items have - * been completed. If multiple work items are updating nodes - * so that they need a flood fill afterwards, using the QueueFloodFill - * method is preferred since then only a single flood fill needs - * to be performed for all of the work items instead of one - * per work item. - */ - public System.Action initWithContext; - - /** Update function, called once per frame when the work item executes. - * Takes a param \a force. If that is true, the work item should try to complete the whole item in one go instead - * of spreading it out over multiple frames. - * \returns True when the work item is completed. - */ - public System.Func update; - - /** Update function, called once per frame when the work item executes. - * Takes a param \a force. If that is true, the work item should try to complete the whole item in one go instead - * of spreading it out over multiple frames. - * \returns True when the work item is completed. - * - * A context object is sent as a parameter. This can be used - * to for example queue a flood fill that will be executed either - * when a work item calls EnsureValidFloodFill or all work items have - * been completed. If multiple work items are updating nodes - * so that they need a flood fill afterwards, using the QueueFloodFill - * method is preferred since then only a single flood fill needs - * to be performed for all of the work items instead of one - * per work item. - */ - public System.Func updateWithContext; - - public AstarWorkItem (System.Func update) { - this.init = null; - this.initWithContext = null; - this.updateWithContext = null; - this.update = update; - } - - public AstarWorkItem (System.Func update) { - this.init = null; - this.initWithContext = null; - this.updateWithContext = update; - this.update = null; - } - - public AstarWorkItem (System.Action init, System.Func update = null) { - this.init = init; - this.initWithContext = null; - this.update = update; - this.updateWithContext = null; - } - - public AstarWorkItem (System.Action init, System.Func update = null) { - this.init = null; - this.initWithContext = init; - this.update = null; - this.updateWithContext = update; - } - } - - /** Interface to expose a subset of the WorkItemProcessor functionality */ - public interface IWorkItemContext { - /** Call during work items to queue a flood fill. - * An instant flood fill can be done via FloodFill() - * but this method can be used to batch several updates into one - * to increase performance. - * WorkItems which require a valid Flood Fill in their execution can call EnsureValidFloodFill - * to ensure that a flood fill is done if any earlier work items queued one. - * - * Once a flood fill is queued it will be done after all WorkItems have been executed. - */ - void QueueFloodFill (); - - /** If a WorkItem needs to have a valid flood fill during execution, call this method to ensure there are no pending flood fills */ - void EnsureValidFloodFill (); - } - - class WorkItemProcessor : IWorkItemContext { - /** Used to prevent waiting for work items to complete inside other work items as that will cause the program to hang */ - public bool workItemsInProgressRightNow { get; private set; } - - readonly IndexedQueue workItems = new IndexedQueue(); - - /** True if any work items have queued a flood fill. - * \see QueueWorkItemFloodFill - */ - bool queuedWorkItemFloodFill = false; - - /** - * True while a batch of work items are being processed. - * Set to true when a work item is started to be processed, reset to false when all work items are complete. - * - * Work item updates are often spread out over several frames, this flag will be true during the whole time the - * updates are in progress. - */ - public bool workItemsInProgress { get; private set; } - - /** Similar to Queue but allows random access */ - class IndexedQueue { - T[] buffer = new T[4]; - int start; - - public T this[int index] { - get { - if (index < 0 || index >= Count) throw new System.IndexOutOfRangeException(); - return buffer[(start + index) % buffer.Length]; - } - set { - if (index < 0 || index >= Count) throw new System.IndexOutOfRangeException(); - buffer[(start + index) % buffer.Length] = value; - } - } - - public int Count { get; private set; } - - public void Enqueue (T item) { - if (Count == buffer.Length) { - var newBuffer = new T[buffer.Length*2]; - for (int i = 0; i < Count; i++) { - newBuffer[i] = this[i]; - } - buffer = newBuffer; - start = 0; - } - - buffer[(start + Count) % buffer.Length] = item; - Count++; - } - - public T Dequeue () { - if (Count == 0) throw new System.InvalidOperationException(); - var item = buffer[start]; - start = (start + 1) % buffer.Length; - Count--; - return item; - } - } - - /** Call during work items to queue a flood fill. - * An instant flood fill can be done via FloodFill() - * but this method can be used to batch several updates into one - * to increase performance. - * WorkItems which require a valid Flood Fill in their execution can call EnsureValidFloodFill - * to ensure that a flood fill is done if any earlier work items queued one. - * - * Once a flood fill is queued it will be done after all WorkItems have been executed. - */ - void IWorkItemContext.QueueFloodFill () { - queuedWorkItemFloodFill = true; - } - - /** If a WorkItem needs to have a valid flood fill during execution, call this method to ensure there are no pending flood fills */ - public void EnsureValidFloodFill () { - if (queuedWorkItemFloodFill) { - AstarPath.active.FloodFill(); - } - } - - public void OnFloodFill () { - queuedWorkItemFloodFill = false; - } - - /** Add a work item to be processed when pathfinding is paused. - * - * \see ProcessWorkItems - */ - public void AddWorkItem (AstarWorkItem item) { - workItems.Enqueue(item); - } - - /** Process graph updating work items. - * Process all queued work items, e.g graph updates and the likes. - * - * \returns - * - false if there are still items to be processed. - * - true if the last work items was processed and pathfinding threads are ready to be resumed. - * - * \see AddWorkItem - * \see threadSafeUpdateState - * \see Update - */ - public bool ProcessWorkItems (bool force) { - if (workItemsInProgressRightNow) throw new System.Exception("Processing work items recursively. Please do not wait for other work items to be completed inside work items. " + - "If you think this is not caused by any of your scripts, this might be a bug."); - - workItemsInProgressRightNow = true; - AstarPath.active.data.LockGraphStructure(true); - while (workItems.Count > 0) { - // Working on a new batch - if (!workItemsInProgress) { - workItemsInProgress = true; - queuedWorkItemFloodFill = false; - } - - // Peek at first item in the queue - AstarWorkItem itm = workItems[0]; - - // Call init the first time the item is seen - if (itm.init != null) { - itm.init(); - itm.init = null; - } - - if (itm.initWithContext != null) { - itm.initWithContext(this); - itm.initWithContext = null; - } - - // Make sure the item in the queue is up to date - workItems[0] = itm; - - bool status; - try { - if (itm.update != null) { - status = itm.update(force); - } else if (itm.updateWithContext != null) { - status = itm.updateWithContext(this, force); - } else { - status = true; - } - } catch { - workItems.Dequeue(); - workItemsInProgressRightNow = false; - AstarPath.active.data.UnlockGraphStructure(); - throw; - } - - if (!status) { - if (force) { - Debug.LogError("Misbehaving WorkItem. 'force'=true but the work item did not complete.\nIf force=true is passed to a WorkItem it should always return true."); - } - - // Still work items to process - workItemsInProgressRightNow = false; - AstarPath.active.data.UnlockGraphStructure(); - return false; - } else { - workItems.Dequeue(); - } - } - - EnsureValidFloodFill(); - - workItemsInProgressRightNow = false; - workItemsInProgress = false; - AstarPath.active.data.UnlockGraphStructure(); - return true; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/WorkItemProcessor.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/WorkItemProcessor.cs.meta deleted file mode 100644 index e7cf32319faa9d28d9b1073c6bd22f8469abe90b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/Misc/WorkItemProcessor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 4236764d0fc1041abaac13b858be5118 -timeCreated: 1443114816 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO.meta deleted file mode 100644 index af53d83cdcac5b242efa4ed63d7234a28199400a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 21984232e39e76c468fe328b8966d908 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOAgent.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOAgent.cs deleted file mode 100644 index 0c07d0ee50454a3108c1b5d16600ff599fbdf060..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOAgent.cs +++ /dev/null @@ -1,964 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Mathf = UnityEngine.Mathf; -using Vector2 = UnityEngine.Vector2; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding.RVO.Sampled { - using Pathfinding; - using Pathfinding.RVO; - using Pathfinding.Util; - - /** Internal agent for the RVO system. - * Usually you will interface with the IAgent interface instead. - * - * \see IAgent - */ - public class Agent : IAgent { - //Current values for double buffer calculation - - internal float radius, height, desiredSpeed, maxSpeed, agentTimeHorizon, obstacleTimeHorizon; - internal bool locked = false; - - RVOLayer layer, collidesWith; - - int maxNeighbours; - internal Vector2 position; - float elevationCoordinate; - Vector2 currentVelocity; - - /** Desired target point - position */ - Vector2 desiredTargetPointInVelocitySpace; - Vector2 desiredVelocity; - - Vector2 nextTargetPoint; - float nextDesiredSpeed; - float nextMaxSpeed; - Vector2 collisionNormal; - bool manuallyControlled; - bool debugDraw; - - #region IAgent Properties - - /** \copydoc Pathfinding::RVO::IAgent::Position */ - public Vector2 Position { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::ElevationCoordinate */ - public float ElevationCoordinate { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::CalculatedTargetPoint */ - public Vector2 CalculatedTargetPoint { get; private set; } - - /** \copydoc Pathfinding::RVO::IAgent::CalculatedSpeed */ - public float CalculatedSpeed { get; private set; } - - /** \copydoc Pathfinding::RVO::IAgent::Locked */ - public bool Locked { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::Radius */ - public float Radius { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::Height */ - public float Height { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::AgentTimeHorizon */ - public float AgentTimeHorizon { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::ObstacleTimeHorizon */ - public float ObstacleTimeHorizon { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::MaxNeighbours */ - public int MaxNeighbours { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::NeighbourCount */ - public int NeighbourCount { get; private set; } - - /** \copydoc Pathfinding::RVO::IAgent::Layer */ - public RVOLayer Layer { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::CollidesWith */ - public RVOLayer CollidesWith { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::DebugDraw */ - public bool DebugDraw { - get { - return debugDraw; - } - set { - debugDraw = value && simulator != null && !simulator.Multithreading; - } - } - - /** \copydoc Pathfinding::RVO::IAgent::Priority */ - public float Priority { get; set; } - - /** \copydoc Pathfinding::RVO::IAgent::PreCalculationCallback */ - public System.Action PreCalculationCallback { private get; set; } - - #endregion - - #region IAgent Methods - - /** \copydoc Pathfinding::RVO::IAgent::SetTarget */ - public void SetTarget (Vector2 targetPoint, float desiredSpeed, float maxSpeed) { - maxSpeed = System.Math.Max(maxSpeed, 0); - desiredSpeed = System.Math.Min(System.Math.Max(desiredSpeed, 0), maxSpeed); - - nextTargetPoint = targetPoint; - nextDesiredSpeed = desiredSpeed; - nextMaxSpeed = maxSpeed; - } - - /** \copydoc Pathfinding::RVO::IAgent::SetCollisionNormal */ - public void SetCollisionNormal (Vector2 normal) { - collisionNormal = normal; - } - - /** \copydoc Pathfinding::RVO::IAgent::ForceSetVelocity */ - public void ForceSetVelocity (Vector2 velocity) { - // A bit hacky, but it is approximately correct - // assuming the agent does not move significantly - nextTargetPoint = CalculatedTargetPoint = position + velocity * 1000; - nextDesiredSpeed = CalculatedSpeed = velocity.magnitude; - manuallyControlled = true; - } - - #endregion - - /** Used internally for a linked list */ - internal Agent next; - - float calculatedSpeed; - Vector2 calculatedTargetPoint; - - /** Simulator which handles this agent. - * Used by this script as a reference and to prevent - * adding this agent to multiple simulations. - */ - internal Simulator simulator; - - List neighbours = new List(); - List neighbourDists = new List(); - List obstaclesBuffered = new List(); - List obstacles = new List(); - - const float DesiredVelocityWeight = 0.1f; - - /** Extra weight that walls will have */ - const float WallWeight = 5; - - public List NeighbourObstacles { - get { - return null; - } - } - - public Agent (Vector2 pos, float elevationCoordinate) { - AgentTimeHorizon = 2; - ObstacleTimeHorizon = 2; - Height = 5; - Radius = 5; - MaxNeighbours = 10; - Locked = false; - Position = pos; - ElevationCoordinate = elevationCoordinate; - Layer = RVOLayer.DefaultAgent; - CollidesWith = (RVOLayer)(-1); - Priority = 0.5f; - CalculatedTargetPoint = pos; - CalculatedSpeed = 0; - SetTarget(pos, 0, 0); - } - - /** Reads public properties and stores them in internal fields. - * This is required because multithreading is used and if another script - * updated the fields at the same time as this class used them in another thread - * weird things could happen. - * - * Will also set CalculatedTargetPoint and CalculatedSpeed to the result - * which was last calculated. - */ - public void BufferSwitch () { - // <== Read public properties - radius = Radius; - height = Height; - maxSpeed = nextMaxSpeed; - desiredSpeed = nextDesiredSpeed; - agentTimeHorizon = AgentTimeHorizon; - obstacleTimeHorizon = ObstacleTimeHorizon; - maxNeighbours = MaxNeighbours; - // Manually controlled overrides the agent being locked - // (if one for some reason uses them at the same time) - locked = Locked && !manuallyControlled; - position = Position; - elevationCoordinate = ElevationCoordinate; - collidesWith = CollidesWith; - layer = Layer; - - if (locked) { - // Locked agents do not move at all - desiredTargetPointInVelocitySpace = position; - desiredVelocity = currentVelocity = Vector2.zero; - } else { - desiredTargetPointInVelocitySpace = nextTargetPoint - position; - - // Estimate our current velocity - // This is necessary because other agents need to know - // how this agent is moving to be able to avoid it - currentVelocity = (CalculatedTargetPoint - position).normalized * CalculatedSpeed; - - // Calculate the desired velocity from the point we want to reach - desiredVelocity = desiredTargetPointInVelocitySpace.normalized*desiredSpeed; - - if (collisionNormal != Vector2.zero) { - collisionNormal.Normalize(); - var dot = Vector2.Dot(currentVelocity, collisionNormal); - - // Check if the velocity is going into the wall - if (dot < 0) { - // If so: remove that component from the velocity - currentVelocity -= collisionNormal * dot; - } - - // Clear the normal - collisionNormal = Vector2.zero; - } - } - } - - public void PreCalculation () { - if (PreCalculationCallback != null) { - PreCalculationCallback(); - } - } - - public void PostCalculation () { - // ==> Set public properties - if (!manuallyControlled) { - CalculatedTargetPoint = calculatedTargetPoint; - CalculatedSpeed = calculatedSpeed; - } - - List tmp = obstaclesBuffered; - obstaclesBuffered = obstacles; - obstacles = tmp; - - manuallyControlled = false; - } - - /** Populate the neighbours and neighbourDists lists with the closest agents to this agent */ - public void CalculateNeighbours () { - neighbours.Clear(); - neighbourDists.Clear(); - - if (MaxNeighbours > 0 && !locked) simulator.Quadtree.Query(position, maxSpeed, agentTimeHorizon, radius, this); - - NeighbourCount = neighbours.Count; - } - - /** Square a number */ - static float Sqr (float x) { - return x*x; - } - - /** Used by the Quadtree. - * \see CalculateNeighbours - */ - internal float InsertAgentNeighbour (Agent agent, float rangeSq) { - // Check if this agent collides with the other agent - if (this == agent || (agent.layer & collidesWith) == 0) return rangeSq; - - // 2D distance - float dist = (agent.position - position).sqrMagnitude; - - if (dist < rangeSq) { - if (neighbours.Count < maxNeighbours) { - neighbours.Add(null); - neighbourDists.Add(float.PositiveInfinity); - } - - // Insert the agent into the ordered list of neighbours - int i = neighbours.Count-1; - if (dist < neighbourDists[i]) { - while (i != 0 && dist < neighbourDists[i-1]) { - neighbours[i] = neighbours[i-1]; - neighbourDists[i] = neighbourDists[i-1]; - i--; - } - neighbours[i] = agent; - neighbourDists[i] = dist; - } - - if (neighbours.Count == maxNeighbours) { - rangeSq = neighbourDists[neighbourDists.Count-1]; - } - } - return rangeSq; - } - - - /** (x, 0, y) */ - static Vector3 FromXZ (Vector2 p) { - return new Vector3(p.x, 0, p.y); - } - - /** (x, z) */ - static Vector2 ToXZ (Vector3 p) { - return new Vector2(p.x, p.z); - } - - /** Converts a 3D vector to a 2D vector in the movement plane. - * If movementPlane is XZ it will be projected onto the XZ plane - * and the elevation coordinate will be the Y coordinate - * otherwise it will be projected onto the XY plane and elevation - * will be the Z coordinate. - */ - Vector2 To2D (Vector3 p, out float elevation) { - if (simulator.movementPlane == MovementPlane.XY) { - elevation = -p.z; - return new Vector2(p.x, p.y); - } else { - elevation = p.y; - return new Vector2(p.x, p.z); - } - } - - static void DrawVO (Vector2 circleCenter, float radius, Vector2 origin) { - float alpha = Mathf.Atan2((origin - circleCenter).y, (origin - circleCenter).x); - float gamma = radius/(origin-circleCenter).magnitude; - float delta = gamma <= 1.0f ? Mathf.Abs(Mathf.Acos(gamma)) : 0; - - Draw.Debug.CircleXZ(FromXZ(circleCenter), radius, Color.black, alpha-delta, alpha+delta); - Vector2 p1 = new Vector2(Mathf.Cos(alpha-delta), Mathf.Sin(alpha-delta)) * radius; - Vector2 p2 = new Vector2(Mathf.Cos(alpha+delta), Mathf.Sin(alpha+delta)) * radius; - - Vector2 p1t = -new Vector2(-p1.y, p1.x); - Vector2 p2t = new Vector2(-p2.y, p2.x); - p1 += circleCenter; - p2 += circleCenter; - - Debug.DrawRay(FromXZ(p1), FromXZ(p1t).normalized*100, Color.black); - Debug.DrawRay(FromXZ(p2), FromXZ(p2t).normalized*100, Color.black); - } - - /** Velocity Obstacle. - * This is a struct to avoid too many allocations. - * - * \see https://en.wikipedia.org/wiki/Velocity_obstacle - */ - internal struct VO { - Vector2 line1, line2, dir1, dir2; - - Vector2 cutoffLine, cutoffDir; - Vector2 circleCenter; - - bool colliding; - float radius; - float weightFactor; - float weightBonus; - - Vector2 segmentStart, segmentEnd; - bool segment; - - /** Creates a VO for avoiding another agent. - * \param center The position of the other agent relative to this agent. - * \param offset Offset of the velocity obstacle. For example to account for the agents' relative velocities. - * \param radius Combined radius of the two agents (radius1 + radius2). - * \param inverseDt 1 divided by the local avoidance time horizon (e.g avoid agents that we will hit within the next 2 seconds). - * \param inverseDeltaTime 1 divided by the time step length. - */ - public VO (Vector2 center, Vector2 offset, float radius, float inverseDt, float inverseDeltaTime) { - // Adjusted so that a parameter weightFactor of 1 will be the default ("natural") weight factor - this.weightFactor = 1; - weightBonus = 0; - - //this.radius = radius; - Vector2 globalCenter; - - circleCenter = center*inverseDt + offset; - - this.weightFactor = 4*Mathf.Exp(-Sqr(center.sqrMagnitude/(radius*radius))) + 1; - // Collision? - if (center.magnitude < radius) { - colliding = true; - - // 0.001 is there to make sure lin1.magnitude is not so small that the normalization - // below will return Vector2.zero as that will make the VO invalid and it will be ignored. - line1 = center.normalized * (center.magnitude - radius - 0.001f) * 0.3f * inverseDeltaTime; - dir1 = new Vector2(line1.y, -line1.x).normalized; - line1 += offset; - - cutoffDir = Vector2.zero; - cutoffLine = Vector2.zero; - dir2 = Vector2.zero; - line2 = Vector2.zero; - this.radius = 0; - } else { - colliding = false; - - center *= inverseDt; - radius *= inverseDt; - globalCenter = center+offset; - - // 0.001 is there to make sure cutoffDistance is not so small that the normalization - // below will return Vector2.zero as that will make the VO invalid and it will be ignored. - var cutoffDistance = center.magnitude - radius + 0.001f; - - cutoffLine = center.normalized * cutoffDistance; - cutoffDir = new Vector2(-cutoffLine.y, cutoffLine.x).normalized; - cutoffLine += offset; - - float alpha = Mathf.Atan2(-center.y, -center.x); - - float delta = Mathf.Abs(Mathf.Acos(radius/center.magnitude)); - - this.radius = radius; - - // Bounding Lines - - // Point on circle - line1 = new Vector2(Mathf.Cos(alpha+delta), Mathf.Sin(alpha+delta)); - // Vector tangent to circle which is the correct line tangent - // Note that this vector is normalized - dir1 = new Vector2(line1.y, -line1.x); - - // Point on circle - line2 = new Vector2(Mathf.Cos(alpha-delta), Mathf.Sin(alpha-delta)); - // Vector tangent to circle which is the correct line tangent - // Note that this vector is normalized - dir2 = new Vector2(line2.y, -line2.x); - - line1 = line1 * radius + globalCenter; - line2 = line2 * radius + globalCenter; - } - - segmentStart = Vector2.zero; - segmentEnd = Vector2.zero; - segment = false; - } - - /** Creates a VO for avoiding another agent. - * Note that the segment is directed, the agent will want to be on the left side of the segment. - */ - public static VO SegmentObstacle (Vector2 segmentStart, Vector2 segmentEnd, Vector2 offset, float radius, float inverseDt, float inverseDeltaTime) { - var vo = new VO(); - - // Adjusted so that a parameter weightFactor of 1 will be the default ("natural") weight factor - vo.weightFactor = 1; - // Just higher than anything else - vo.weightBonus = Mathf.Max(radius, 1)*40; - - var closestOnSegment = VectorMath.ClosestPointOnSegment(segmentStart.ToPFV2(), segmentEnd.ToPFV2(), Vector2.zero.ToPFV2()); - - // Collision? - if (closestOnSegment.magnitude <= radius) { - vo.colliding = true; - - vo.line1 = closestOnSegment.normalized.ToUnityV3() * (closestOnSegment.magnitude - radius) * 0.3f * inverseDeltaTime; - vo.dir1 = new Vector2(vo.line1.y, -vo.line1.x).normalized; - vo.line1 += offset; - - vo.cutoffDir = Vector2.zero; - vo.cutoffLine = Vector2.zero; - vo.dir2 = Vector2.zero; - vo.line2 = Vector2.zero; - vo.radius = 0; - - vo.segmentStart = Vector2.zero; - vo.segmentEnd = Vector2.zero; - vo.segment = false; - } else { - vo.colliding = false; - - segmentStart *= inverseDt; - segmentEnd *= inverseDt; - radius *= inverseDt; - - var cutoffTangent = (segmentEnd - segmentStart).normalized; - vo.cutoffDir = cutoffTangent; - vo.cutoffLine = segmentStart + new Vector2(-cutoffTangent.y, cutoffTangent.x) * radius; - vo.cutoffLine += offset; - - // See documentation for details - // The call to Max is just to prevent floating point errors causing NaNs to appear - var startSqrMagnitude = segmentStart.sqrMagnitude; - var normal1 = -VectorMath.ComplexMultiply(segmentStart, new Vector2(radius, Mathf.Sqrt(Mathf.Max(0, startSqrMagnitude - radius*radius)))) / startSqrMagnitude; - var endSqrMagnitude = segmentEnd.sqrMagnitude; - var normal2 = -VectorMath.ComplexMultiply(segmentEnd, new Vector2(radius, -Mathf.Sqrt(Mathf.Max(0, endSqrMagnitude - radius*radius)))) / endSqrMagnitude; - - vo.line1 = segmentStart + normal1.ToUnityV2() * radius + offset; - vo.line2 = segmentEnd + normal2.ToUnityV2() * radius + offset; - - // Note that the normals are already normalized - vo.dir1 = new Vector2(normal1.y, -normal1.x); - vo.dir2 = new Vector2(normal2.y, -normal2.x); - - vo.segmentStart = segmentStart; - vo.segmentEnd = segmentEnd; - vo.radius = radius; - vo.segment = true; - } - - return vo; - } - - /** Returns a negative number of if \a p lies on the left side of a line which with one point in \a a and has a tangent in the direction of \a dir. - * The number can be seen as the double signed area of the triangle {a, a+dir, p} multiplied by the length of \a dir. - * If dir.magnitude=1 this is also the distance from p to the line {a, a+dir}. - */ - public static float SignedDistanceFromLine (Vector2 a, Vector2 dir, Vector2 p) { - return (p.x - a.x) * (dir.y) - (dir.x) * (p.y - a.y); - } - - /** Gradient and value of the cost function of this VO. - * Very similar to the #Gradient method however the gradient - * and value have been scaled and tweaked slightly. - */ - public Vector2 ScaledGradient (Vector2 p, out float weight) { - var grad = Gradient(p, out weight); - - if (weight > 0) { - const float Scale = 2; - grad *= Scale * weightFactor; - weight *= Scale * weightFactor; - weight += 1 + weightBonus; - } - - return grad; - } - - /** Gradient and value of the cost function of this VO. - * The VO has a cost function which is 0 outside the VO - * and increases inside it as the point moves further into - * the VO. - * - * This is the negative gradient of that function as well as its - * value (the weight). The negative gradient points in the direction - * where the function decreases the fastest. - * - * The value of the function is the distance to the closest edge - * of the VO and the gradient is normalized. - */ - public Vector2 Gradient (Vector2 p, out float weight) { - if (colliding) { - // Calculate double signed area of the triangle consisting of the points - // {line1, line1+dir1, p} - float l1 = SignedDistanceFromLine(line1, dir1, p); - - // Serves as a check for which side of the line the point p is - if (l1 >= 0) { - weight = l1; - return new Vector2(-dir1.y, dir1.x); - } else { - weight = 0; - return new Vector2(0, 0); - } - } - - float det3 = SignedDistanceFromLine(cutoffLine, cutoffDir, p); - if (det3 <= 0) { - weight = 0; - return Vector2.zero; - } else { - // Signed distances to the two edges along the sides of the VO - float det1 = SignedDistanceFromLine(line1, dir1, p); - float det2 = SignedDistanceFromLine(line2, dir2, p); - if (det1 >= 0 && det2 >= 0) { - // We are inside both of the half planes - // (all three if we count the cutoff line) - // and thus inside the forbidden region in velocity space - - // Actually the negative gradient because we want the - // direction where it slopes the most downwards, not upwards - Vector2 gradient; - - // Check if we are in the semicircle region near the cap of the VO - if (Vector2.Dot(p - line1, dir1) > 0 && Vector2.Dot(p - line2, dir2) < 0) { - if (segment) { - // This part will only be reached for line obstacles (i.e not other agents) - if (det3 < radius) { - Vector3 closestPointOnLine = VectorMath.ClosestPointOnSegment(segmentStart.ToPFV2(), segmentEnd.ToPFV2(), p.ToPFV2()); - var dirFromCenter = p.ToPFV2() - closestPointOnLine.ToV2(); - float distToCenter; - gradient = VectorMath.Normalize(dirFromCenter, out distToCenter); - // The weight is the distance to the edge - weight = radius - distToCenter; - return gradient; - } - } else { - var dirFromCenter = p - circleCenter; - float distToCenter; - gradient = VectorMath.Normalize(dirFromCenter, out distToCenter); - // The weight is the distance to the edge - weight = radius - distToCenter; - return gradient; - } - } - - if (segment && det3 < det1 && det3 < det2) { - weight = det3; - gradient = new Vector2(-cutoffDir.y, cutoffDir.x); - return gradient; - } - - // Just move towards the closest edge - // The weight is the distance to the edge - if (det1 < det2) { - weight = det1; - gradient = new Vector2(-dir1.y, dir1.x); - } else { - weight = det2; - gradient = new Vector2(-dir2.y, dir2.x); - } - - return gradient; - } - - weight = 0; - return Vector2.zero; - } - } - } - - /** Very simple list. - * Cannot use a List because when indexing into a List and T is - * a struct (which VO is) then the whole struct will be copied. - * When indexing into an array, that copy can be skipped. - */ - internal class VOBuffer { - public VO[] buffer; - public int length; - - public void Clear () { - length = 0; - } - - public VOBuffer (int n) { - buffer = new VO[n]; - length = 0; - } - - public void Add (VO vo) { - if (length >= buffer.Length) { - var nbuffer = new VO[buffer.Length * 2]; - buffer.CopyTo(nbuffer, 0); - buffer = nbuffer; - } - buffer[length++] = vo; - } - } - - internal void CalculateVelocity (Pathfinding.RVO.Simulator.WorkerContext context) { - if (manuallyControlled) { - return; - } - - if (locked) { - calculatedSpeed = 0; - calculatedTargetPoint = position; - return; - } - - // Buffer which will be filled up with velocity obstacles (VOs) - var vos = context.vos; - vos.Clear(); - - GenerateObstacleVOs(vos); - GenerateNeighbourAgentVOs(vos); - - bool insideAnyVO = BiasDesiredVelocity(vos, ref desiredVelocity, ref desiredTargetPointInVelocitySpace, simulator.symmetryBreakingBias); - - if (!insideAnyVO) { - // Desired velocity can be used directly since it was not inside any velocity obstacle. - // No need to run optimizer because this will be the global minima. - // This is also a special case in which we can set the - // calculated target point to the desired target point - // instead of calculating a point based on a calculated velocity - // which is an important difference when the agent is very close - // to the target point - // TODO: Not actually guaranteed to be global minima if desiredTargetPointInVelocitySpace.magnitude < desiredSpeed - // maybe do something different here? - calculatedTargetPoint = desiredTargetPointInVelocitySpace + position; - calculatedSpeed = desiredSpeed; - if (DebugDraw) Draw.Debug.CrossXZ(FromXZ(calculatedTargetPoint), Color.white); - return; - } - - Vector2 result = Vector2.zero; - - result = GradientDescent(vos, currentVelocity, desiredVelocity); - - if (DebugDraw) Draw.Debug.CrossXZ(FromXZ(result+position), Color.white); - //Debug.DrawRay (To3D (position), To3D (result)); - - calculatedTargetPoint = position + result; - calculatedSpeed = Mathf.Min(result.magnitude, maxSpeed); - } - - static Color Rainbow (float v) { - Color c = new Color(v, 0, 0); - - if (c.r > 1) { c.g = c.r - 1; c.r = 1; } - if (c.g > 1) { c.b = c.g - 1; c.g = 1; } - return c; - } - - void GenerateObstacleVOs (VOBuffer vos) { - var range = maxSpeed * obstacleTimeHorizon; - - // Iterate through all obstacles that we might need to avoid - for (int i = 0; i < simulator.obstacles.Count; i++) { - var obstacle = simulator.obstacles[i]; - var vertex = obstacle; - // Iterate through all edges (defined by vertex and vertex.dir) in the obstacle - do { - // Ignore the edge if the agent should not collide with it - if (vertex.ignore || (vertex.layer & collidesWith) == 0) { - vertex = vertex.next; - continue; - } - - // Start and end points of the current segment - float elevation1, elevation2; - var p1 = To2D(vertex.position, out elevation1); - var p2 = To2D(vertex.next.position, out elevation2); - - Vector2 dir = (p2 - p1).normalized; - - // Signed distance from the line (not segment, lines are infinite) - // TODO: Can be optimized - float dist = VO.SignedDistanceFromLine(p1, dir, position); - - if (dist >= -0.01f && dist < range) { - float factorAlongSegment = Vector2.Dot(position - p1, p2 - p1) / (p2 - p1).sqrMagnitude; - - // Calculate the elevation (y) coordinate of the point on the segment closest to the agent - var segmentY = Mathf.Lerp(elevation1, elevation2, factorAlongSegment); - - // Calculate distance from the segment (not line) - var sqrDistToSegment = (Vector2.Lerp(p1, p2, factorAlongSegment) - position).sqrMagnitude; - - // Ignore the segment if it is too far away - // or the agent is too high up (or too far down) on the elevation axis (usually y axis) to avoid it. - // If the XY plane is used then all elevation checks are disabled - if (sqrDistToSegment < range*range && (simulator.movementPlane == MovementPlane.XY || (elevationCoordinate <= segmentY + vertex.height && elevationCoordinate+height >= segmentY))) { - vos.Add(VO.SegmentObstacle(p2 - position, p1 - position, Vector2.zero, radius * 0.01f, 1f / ObstacleTimeHorizon, 1f / simulator.DeltaTime)); - } - } - - vertex = vertex.next; - } while (vertex != obstacle && vertex != null && vertex.next != null); - } - } - - void GenerateNeighbourAgentVOs (VOBuffer vos) { - float inverseAgentTimeHorizon = 1.0f/agentTimeHorizon; - - // The RVO algorithm assumes we will continue to - // move in roughly the same direction - Vector2 optimalVelocity = currentVelocity; - - for (int o = 0; o < neighbours.Count; o++) { - Agent other = neighbours[o]; - - // Don't avoid ourselves - if (other == this) - continue; - - // Interval along the y axis in which the agents overlap - float maxY = System.Math.Min(elevationCoordinate + height, other.elevationCoordinate + other.height); - float minY = System.Math.Max(elevationCoordinate, other.elevationCoordinate); - - // The agents cannot collide since they are on different y-levels - if (maxY - minY < 0) { - continue; - } - - float totalRadius = radius + other.radius; - - // Describes a circle on the border of the VO - Vector2 voBoundingOrigin = other.position - position; - - float avoidanceStrength; - if (other.locked || other.manuallyControlled) { - avoidanceStrength = 1; - } else if (other.Priority > 0.00001f || Priority > 0.00001f) { - avoidanceStrength = other.Priority / (Priority + other.Priority); - } else { - // Both this agent's priority and the other agent's priority is zero or negative - // Assume they have the same priority - avoidanceStrength = 0.5f; - } - - // We assume that the other agent will continue to move with roughly the same velocity if the priorities for the agents are similar. - // If the other agent has a higher priority than this agent (avoidanceStrength > 0.5) then we will assume it will move more along its - // desired velocity. This will have the effect of other agents trying to clear a path for where a high priority agent wants to go. - // If this is not done then even high priority agents can get stuck when it is really crowded and they have had to slow down. - Vector2 otherOptimalVelocity = Vector2.Lerp(other.currentVelocity, other.desiredVelocity, 2*avoidanceStrength - 1); - - var voCenter = Vector2.Lerp(optimalVelocity, otherOptimalVelocity, avoidanceStrength); - - vos.Add(new VO(voBoundingOrigin, voCenter, totalRadius, inverseAgentTimeHorizon, 1 / simulator.DeltaTime)); - if (DebugDraw) - DrawVO(position + voBoundingOrigin * inverseAgentTimeHorizon + voCenter, totalRadius * inverseAgentTimeHorizon, position + voCenter); - } - } - - Vector2 GradientDescent (VOBuffer vos, Vector2 sampleAround1, Vector2 sampleAround2) { - float score1; - var minima1 = Trace(vos, sampleAround1, out score1); - - if (DebugDraw) Draw.Debug.CrossXZ(FromXZ(minima1 + position), Color.yellow, 0.5f); - - // Can be uncommented for higher quality local avoidance - // for ( int i = 0; i < 3; i++ ) { - // Vector2 p = desiredVelocity + new Vector2(Mathf.Cos(Mathf.PI*2*(i/3.0f)), Mathf.Sin(Mathf.PI*2*(i/3.0f))); - // float score;Vector2 res = Trace ( vos, p, velocity.magnitude*simulator.qualityCutoff, out score ); - // - // if ( score < best ) { - // result = res; - // best = score; - // } - // } - - float score2; - Vector2 minima2 = Trace(vos, sampleAround2, out score2); - if (DebugDraw) Draw.Debug.CrossXZ(FromXZ(minima2 + position), Color.magenta, 0.5f); - - return score1 < score2 ? minima1 : minima2; - } - - - /** Bias towards the right side of agents. - * Rotate desiredVelocity at most [value] number of radians. 1 radian ≈ 57° - * This breaks up symmetries. - * - * The desired velocity will only be rotated if it is inside a velocity obstacle (VO). - * If it is inside one, it will not be rotated further than to the edge of it - * - * The targetPointInVelocitySpace will be rotated by the same amount as the desired velocity - * - * \returns True if the desired velocity was inside any VO - */ - static bool BiasDesiredVelocity (VOBuffer vos, ref Vector2 desiredVelocity, ref Vector2 targetPointInVelocitySpace, float maxBiasRadians) { - var desiredVelocityMagn = desiredVelocity.magnitude; - var maxValue = 0f; - - for (int i = 0; i < vos.length; i++) { - float value; - // The value is approximately the distance to the edge of the VO - // so taking the maximum will give us the distance to the edge of the VO - // which the desired velocity is furthest inside - vos.buffer[i].Gradient(desiredVelocity, out value); - maxValue = Mathf.Max(maxValue, value); - } - - // Check if the agent was inside any VO - var inside = maxValue > 0; - - // Avoid division by zero below - if (desiredVelocityMagn < 0.001f) { - return inside; - } - - // Rotate the desired velocity clockwise (to the right) at most maxBiasRadians number of radians - // Assuming maxBiasRadians is small, we can just move it instead and it will give approximately the same effect - // See https://en.wikipedia.org/wiki/Small-angle_approximation - var angle = Mathf.Min(maxBiasRadians, maxValue / desiredVelocityMagn); - desiredVelocity += new Vector2(desiredVelocity.y, -desiredVelocity.x) * angle; - targetPointInVelocitySpace += new Vector2(targetPointInVelocitySpace.y, -targetPointInVelocitySpace.x) * angle; - return inside; - } - - /** Evaluate gradient and value of the cost function at velocity p */ - Vector2 EvaluateGradient (VOBuffer vos, Vector2 p, out float value) { - Vector2 gradient = Vector2.zero; - - value = 0; - - // Avoid other agents - for (int i = 0; i < vos.length; i++) { - float w; - var grad = vos.buffer[i].ScaledGradient(p, out w); - if (w > value) { - value = w; - gradient = grad; - } - } - - // Move closer to the desired velocity - var dirToDesiredVelocity = desiredVelocity - p; - var distToDesiredVelocity = dirToDesiredVelocity.magnitude; - if (distToDesiredVelocity > 0.0001f) { - gradient += dirToDesiredVelocity * (DesiredVelocityWeight/distToDesiredVelocity); - value += distToDesiredVelocity * DesiredVelocityWeight; - } - - // Prefer speeds lower or equal to the desired speed - // and avoid speeds greater than the max speed - var sqrSpeed = p.sqrMagnitude; - if (sqrSpeed > desiredSpeed*desiredSpeed) { - var speed = Mathf.Sqrt(sqrSpeed); - - if (speed > maxSpeed) { - const float MaxSpeedWeight = 3; - value += MaxSpeedWeight * (speed - maxSpeed); - gradient -= MaxSpeedWeight * (p/speed); - } - - // Scale needs to be strictly greater than DesiredVelocityWeight - // otherwise the agent will not prefer the desired speed over - // the maximum speed - float scale = 2*DesiredVelocityWeight; - value += scale * (speed - desiredSpeed); - gradient -= scale * (p/speed); - } - - return gradient; - } - - /** Traces the vector field constructed out of the velocity obstacles. - * Returns the position which gives the minimum score (approximately). - * - * \see https://en.wikipedia.org/wiki/Gradient_descent - */ - Vector2 Trace (VOBuffer vos, Vector2 p, out float score) { - // Pick a reasonable initial step size - float stepSize = Mathf.Max(radius, 0.2f * desiredSpeed); - - float bestScore = float.PositiveInfinity; - Vector2 bestP = p; - - // TODO: Add momentum to speed up convergence? - - const int MaxIterations = 50; - - for (int s = 0; s < MaxIterations; s++) { - float step = 1.0f - (s/(float)MaxIterations); - step = Sqr(step) * stepSize; - - float value; - var gradient = EvaluateGradient(vos, p, out value); - - if (value < bestScore) { - bestScore = value; - bestP = p; - } - - // TODO: Add cutoff for performance - - gradient.Normalize(); - - gradient *= step; - Vector2 prev = p; - p += gradient; - - if (DebugDraw) Debug.DrawLine(FromXZ(prev + position), FromXZ(p + position), Rainbow(s*0.1f) * new Color(1, 1, 1, 1f)); - } - - score = bestScore; - return bestP; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOAgent.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOAgent.cs.meta deleted file mode 100644 index 521b101ed09131fdac62310c7166024662afd335..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOAgent.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5a85e178962ba475ca424001ea4c13ca -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreObstacle.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreObstacle.cs deleted file mode 100644 index 87a28c9049ecb5d2408c51c6447b1eb34e30f2fc..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreObstacle.cs +++ /dev/null @@ -1,27 +0,0 @@ -using UnityEngine; - -namespace Pathfinding.RVO { - /** One vertex in an obstacle. - * This is a linked list and one vertex can therefore be used to reference the whole obstacle - * \astarpro - */ - public class ObstacleVertex { - public bool ignore; - - /** Position of the vertex */ - public Vector3 position; - public Vector2 dir; - - /** Height of the obstacle in this vertex */ - public float height; - - /** Collision layer for this obstacle */ - public RVOLayer layer = RVOLayer.DefaultObstacle; - - - /** Next vertex in the obstacle */ - public ObstacleVertex next; - /** Previous vertex in the obstacle */ - public ObstacleVertex prev; - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreObstacle.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreObstacle.cs.meta deleted file mode 100644 index 0811a7a5c9ebebed4629277ff1324e1d1a172dd3..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreObstacle.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 19c43d572022a4278a4d426f536b5ee4 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreSimulator.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreSimulator.cs deleted file mode 100644 index 0239ac8d8a42806ea2cdfc7d202b5763a43d8cf6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreSimulator.cs +++ /dev/null @@ -1,837 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using System.Threading; -using Pathfinding.RVO.Sampled; - -#if NETFX_CORE -using Thread = Pathfinding.WindowsStore.Thread; -using ThreadStart = Pathfinding.WindowsStore.ThreadStart; -#else -using Thread = System.Threading.Thread; -using ThreadStart = System.Threading.ThreadStart; -#endif - -/** Local avoidance related classes */ -namespace Pathfinding.RVO { - /** Exposes properties of an Agent class. - * - * \see RVOController - * \see RVOSimulator - * - * \astarpro - */ - public interface IAgent { - /** Position of the agent. - * The agent does not move by itself, a movement script has to be responsible for - * reading the CalculatedTargetPoint and CalculatedSpeed properties and move towards that point with that speed. - * This property should ideally be set every frame. - * - * Note that this is a Vector2, not a Vector3 since the RVO simulates everything internally in 2D. So if your agents move in the - * XZ plane you may have to convert it to a Vector3 like this. - * - * \code - * Vector3 position3D = new Vector3(agent.Position.x, agent.ElevationCoordinate, agent.Position.y); - * \endcode - */ - Vector2 Position { get; set; } - - /** Coordinate which separates characters in the height direction. - * Since RVO can be used either in 2D or 3D, it is not as simple as just using the y coordinate of the 3D position. - * In 3D this will most likely be set to the y coordinate, but in 2D (top down) it should in most cases be set to 0 since - * all characters are always in the same plane, however it may be set to some other value, for example if the game - * is 2D isometric. - * - * The position is assumed to be at the base of the character (near the feet). - */ - float ElevationCoordinate { get; set; } - - /** Optimal point to move towards to avoid collisions. - * The movement script should move towards this point with a speed of #CalculatedSpeed. - * - * \note This is a Vector2, not a Vector3 as that is what the #SetTarget method accepts. - * - * \see RVOController.CalculateMovementDelta. - */ - Vector2 CalculatedTargetPoint { get; } - - /** Optimal speed of the agent to avoid collisions. - * The movement script should move towards #CalculatedTargetPoint with this speed. - */ - float CalculatedSpeed { get; } - - /** Point towards which the agent should move. - * Usually you set this once per frame. The agent will try move as close to the target point as possible. - * Will take effect at the next simulation step. - * - * \note The system assumes that the agent will stop when it reaches the target point - * so if you just want to move the agent in a particular direction, make sure that you set the target point - * a good distance in front of the character as otherwise the system may not avoid colisions that well. - * What would happen is that the system (in simplified terms) would think that the agents would stop - * before the collision and thus it wouldn't slow down or change course. See the image below. - * In the image the desiredSpeed is the length of the blue arrow and the target point - * is the point where the black arrows point to. - * In the upper case the agent does not avoid the red agent (you can assume that the red - * agent has a very small velocity for simplicity) while in the lower case it does.\n - * If you are following a path a good way to pick the target point is to set it to - * \code - * targetPoint = directionToNextWaypoint.normalized * remainingPathDistance - * \endcode - * Where remainingPathDistance is the distance until the character would reach the end of the path. - * This works well because at the end of the path the direction to the next waypoint will just be the - * direction to the last point on the path and remainingPathDistance will be the distance to the last point - * in the path, so targetPoint will be set to simply the last point in the path. However when remainingPathDistance - * is large the target point will be so far away that the agent will essentially be told to move in a particular - * direction, which is precisely what we want. - * \shadowimage{rvo/rvo_target_point.png} - * - * \param targetPoint - * Target point in world space (XZ plane or XY plane depending on if the simulation is configured for 2D or 3D). - * Note that this is a Vector2, not a Vector3 since the system simulates everything internally in 2D. So if your agents move in the - * XZ plane you will have to supply it as a Vector2 with (x,z) coordinates. - * \param desiredSpeed - * Desired speed of the agent. In world units per second. The agent will try to move with this - * speed if possible. - * \param maxSpeed - * Max speed of the agent. In world units per second. If necessary (for example if another agent - * is on a collision trajectory towards this agent) the agent can move at this speed. - * Should be at least as high as desiredSpeed, but it is recommended to use a slightly - * higher value than desiredSpeed (for example desiredSpeed*1.2). - */ - void SetTarget (Vector2 targetPoint, float desiredSpeed, float maxSpeed); - - /** Locked agents will be assumed not to move */ - bool Locked { get; set; } - - /** Radius of the agent in world units. - * Agents are modelled as circles/cylinders. - */ - float Radius { get; set; } - - /** Height of the agent in world units. - * Agents are modelled as circles/cylinders. - */ - float Height { get; set; } - - /** Max number of estimated seconds to look into the future for collisions with agents. - * As it turns out, this variable is also very good for controling agent avoidance priorities. - * Agents with lower values will avoid other agents less and thus you can make 'high priority agents' by - * giving them a lower value. - */ - float AgentTimeHorizon { get; set; } - - /** Max number of estimated seconds to look into the future for collisions with obstacles */ - float ObstacleTimeHorizon { get; set; } - - /** Max number of agents to take into account. - * Decreasing this value can lead to better performance, increasing it can lead to better quality of the simulation. - */ - int MaxNeighbours { get; set; } - - /** Number of neighbours that the agent took into account during the last simulation step */ - int NeighbourCount { get; } - - /** Specifies the avoidance layer for this agent. - * The #CollidesWith mask on other agents will determine if they will avoid this agent. - */ - RVOLayer Layer { get; set; } - - /** Layer mask specifying which layers this agent will avoid. - * You can set it as CollidesWith = RVOLayer.DefaultAgent | RVOLayer.Layer3 | RVOLayer.Layer6 ... - * - * \see http://en.wikipedia.org/wiki/Mask_(computing) - */ - RVOLayer CollidesWith { get; set; } - - /** Draw debug information. - * - * \note Will always draw debug info in the XZ plane even if #Pathfinding.RVO.Simulator.movementPlane is set to XY. - * \note Ignored if multithreading on the simulator component has been enabled - * since Unity's Debug API can only be called from the main thread. - */ - bool DebugDraw { get; set; } - - /** List of obstacle segments which were close to the agent during the last simulation step. - * Can be used to apply additional wall avoidance forces for example. - * Segments are formed by the obstacle vertex and its .next property. - * - * \bug Always returns null - */ - [System.Obsolete()] - List NeighbourObstacles { get; } - - /** How strongly other agents will avoid this agent. - * Usually a value between 0 and 1. - * Agents with similar priorities will avoid each other with an equal strength. - * If an agent sees another agent with a higher priority than itself it will avoid that agent more strongly. - * In the extreme case (e.g this agent has a priority of 0 and the other agent has a priority of 1) it will treat the other agent as being a moving obstacle. - * Similarly if an agent sees another agent with a lower priority than itself it will avoid that agent less. - * - * In general the avoidance strength for this agent is: - * \code - * if this.priority > 0 or other.priority > 0: - * avoidanceStrength = other.priority / (this.priority + other.priority); - * else: - * avoidanceStrength = 0.5 - * \endcode - */ - float Priority { get; set; } - - /** Callback which will be called right before avoidance calculations are started. - * Used to update the other properties with the most up to date values - */ - System.Action PreCalculationCallback { set; } - - /** Set the normal of a wall (or something else) the agent is currently colliding with. - * This is used to make the RVO system aware of things like physics or an agent being clamped to the navmesh. - * The velocity of this agent that other agents observe will be modified so that there is no component - * into the wall. The agent will however not start to avoid the wall, for that you will need to add RVO obstacles. - * - * This value will be cleared after the next simulation step, normally it should be set every frame - * when the collision is still happening. - */ - void SetCollisionNormal (Vector2 normal); - - /** Set the current velocity of the agent. - * This will override the local avoidance input completely. - * It is useful if you have a player controlled character and want other agents to avoid it. - * - * Calling this method will mark the agent as being externally controlled for 1 simulation step. - * Local avoidance calculations will be skipped for the next simulation step but will be resumed - * after that unless this method is called again. - */ - void ForceSetVelocity (Vector2 velocity); - } - - /** Plane which movement is primarily happening in */ - public enum MovementPlane { - /** Movement happens primarily in the XZ plane (3D) */ - XZ, - /** Movement happens primarily in the XY plane (2D) */ - XY - } - - [System.Flags] - public enum RVOLayer { - DefaultAgent = 1 << 0, - DefaultObstacle = 1 << 1, - Layer2 = 1 << 2, - Layer3 = 1 << 3, - Layer4 = 1 << 4, - Layer5 = 1 << 5, - Layer6 = 1 << 6, - Layer7 = 1 << 7, - Layer8 = 1 << 8, - Layer9 = 1 << 9, - Layer10 = 1 << 10, - Layer11 = 1 << 11, - Layer12 = 1 << 12, - Layer13 = 1 << 13, - Layer14 = 1 << 14, - Layer15 = 1 << 15, - Layer16 = 1 << 16, - Layer17 = 1 << 17, - Layer18 = 1 << 18, - Layer19 = 1 << 19, - Layer20 = 1 << 20, - Layer21 = 1 << 21, - Layer22 = 1 << 22, - Layer23 = 1 << 23, - Layer24 = 1 << 24, - Layer25 = 1 << 25, - Layer26 = 1 << 26, - Layer27 = 1 << 27, - Layer28 = 1 << 28, - Layer29 = 1 << 29, - Layer30 = 1 << 30 - } - - /** Local Avoidance %Simulator. - * This class handles local avoidance simulation for a number of agents using - * Reciprocal Velocity Obstacles (RVO) and Optimal Reciprocal Collision Avoidance (ORCA). - * - * This class will handle calculation of velocities from desired velocities supplied by a script. - * It is, however, not responsible for moving any objects in a Unity Scene. For that there are other scripts (see below). - * - * Obstacles can be added and removed from the simulation, agents can also be added and removed at any time. - * \see RVOSimulator - * \see RVOAgent - * \see Pathfinding.RVO.IAgent - * - * The implementation uses a sampling based algorithm with gradient descent to find the avoidance velocities. - * - * You will most likely mostly use the wrapper class RVOSimulator. - * - * \astarpro - */ - public class Simulator { - /** Use Double Buffering. - * \see DoubleBuffering */ - private readonly bool doubleBuffering = true; - - /** Inverse desired simulation fps. - * \see DesiredDeltaTime - */ - private float desiredDeltaTime = 0.05f; - - /** Worker threads */ - readonly Worker[] workers; - - /** Agents in this simulation */ - List agents; - - /** Obstacles in this simulation */ - public List obstacles; - - /** Quadtree for this simulation. - * Used internally by the simulation to perform fast neighbour lookups for each agent. - * Please only read from this tree, do not rebuild it since that can interfere with the simulation. - * It is rebuilt when necessary. - */ - public RVOQuadtree Quadtree { get; private set; } - - private float deltaTime; - private float lastStep = -99999; - - private bool doUpdateObstacles = false; - private bool doCleanObstacles = false; - - public float DeltaTime { get { return deltaTime; } } - - /** Is using multithreading */ - public bool Multithreading { get { return workers != null && workers.Length > 0; } } - - /** Time in seconds between each simulation step. - * This is the desired delta time, the simulation will never run at a higher fps than - * the rate at which the Update function is called. - */ - public float DesiredDeltaTime { get { return desiredDeltaTime; } set { desiredDeltaTime = System.Math.Max(value, 0.0f); } } - - /** Bias agents to pass each other on the right side. - * If the desired velocity of an agent puts it on a collision course with another agent or an obstacle - * its desired velocity will be rotated this number of radians (1 radian is approximately 57°) to the right. - * This helps to break up symmetries and makes it possible to resolve some situations much faster. - * - * When many agents have the same goal this can however have the side effect that the group - * clustered around the target point may as a whole start to spin around the target point. - * - * Recommended values are in the range of 0 to 0.2. - * - * If this value is negative, the agents will be biased towards passing each other on the left side instead. - */ - public float symmetryBreakingBias = 0.1f; - - /** Determines if the XY (2D) or XZ (3D) plane is used for movement */ - public readonly MovementPlane movementPlane = MovementPlane.XZ; - - /** Get a list of all agents. - * - * This is an internal list. - * I'm not going to be restrictive so you may access it since it is better for performance - * but please do not modify it since that can cause errors in the simulation. - * - * \warning Do not modify this list! - */ - public List GetAgents () { - return agents; - } - - /** Get a list of all obstacles. - * This is a list of obstacle vertices. - * Each vertex is part of a doubly linked list loop - * forming an obstacle polygon. - * - * \warning Do not modify this list! - * - * \see AddObstacle - * \see RemoveObstacle - */ - public List GetObstacles () { - return obstacles; - } - - /** Create a new simulator. - * - * \param workers Use the specified number of worker threads.\n - * When the number zero is specified, no multithreading will be used. - * A good number is the number of cores on the machine. - * \param doubleBuffering Use Double Buffering for calculations. - * Testing done with 5000 agents and 0.1 desired delta time showed that with double buffering enabled - * the game ran at 50 fps for most frames, dropping to 10 fps during calculation frames. But without double buffering - * it ran at around 10 fps all the time.\n - * This will let threads calculate while the game progresses instead of waiting for the calculations - * to finish. - * \param movementPlane The plane that the movement happens in. XZ for 3D games, XY for 2D games. - * - * \note Will only have effect if using multithreading - * - * \see #Multithreading - */ - public Simulator (int workers, bool doubleBuffering, MovementPlane movementPlane) { - this.workers = new Simulator.Worker[workers]; - this.doubleBuffering = doubleBuffering; - this.DesiredDeltaTime = 1; - this.movementPlane = movementPlane; - Quadtree = new RVOQuadtree(); - - for (int i = 0; i < workers; i++) this.workers[i] = new Simulator.Worker(this); - - agents = new List(); - obstacles = new List(); - } - - /** Removes all agents from the simulation */ - public void ClearAgents () { - //Bad to update agents while processing of current agents might be done - //Don't interfere with ongoing calculations - BlockUntilSimulationStepIsDone(); - - for (int i = 0; i < agents.Count; i++) { - agents[i].simulator = null; - } - agents.Clear(); - } - - public void OnDestroy () { - if (workers != null) { - for (int i = 0; i < workers.Length; i++) workers[i].Terminate(); - } - } - - /** Terminates any worker threads */ - ~Simulator () { - OnDestroy(); - } - - /** Add a previously removed agent to the simulation. - * An agent can only be in one simulation at a time, any attempt to add an agent to two simulations - * or multiple times to the same simulation will result in an exception being thrown. - * - * \see RemoveAgent - */ - public IAgent AddAgent (IAgent agent) { - if (agent == null) throw new System.ArgumentNullException("Agent must not be null"); - - Agent agentReal = agent as Agent; - if (agentReal == null) throw new System.ArgumentException("The agent must be of type Agent. Agent was of type "+agent.GetType()); - - if (agentReal.simulator != null && agentReal.simulator == this) throw new System.ArgumentException("The agent is already in the simulation"); - else if (agentReal.simulator != null) throw new System.ArgumentException("The agent is already added to another simulation"); - agentReal.simulator = this; - - //Don't interfere with ongoing calculations - BlockUntilSimulationStepIsDone(); - - agents.Add(agentReal); - return agent; - } - - /** Add an agent at the specified position. - * You can use the returned interface to read several parameters such as position and velocity - * and set for example radius and desired velocity. - * - * \deprecated Use AddAgent(Vector2,float) instead - */ - [System.Obsolete("Use AddAgent(Vector2,float) instead")] - public IAgent AddAgent (Vector3 position) { - return AddAgent(new Vector2(position.x, position.z), position.y); - } - - /** Add an agent at the specified position. - * You can use the returned interface to read and write parameters - * and set for example radius and desired point to move to. - * - * \see RemoveAgent - * - * \param position See IAgent.Position - * \param elevationCoordinate See IAgent.ElevationCoordinate - */ - public IAgent AddAgent (Vector2 position, float elevationCoordinate) { - return AddAgent(new Agent(position, elevationCoordinate)); - } - - /** Removes a specified agent from this simulation. - * The agent can be added again later by using AddAgent. - * - * \see AddAgent(IAgent) - * \see ClearAgents - */ - public void RemoveAgent (IAgent agent) { - if (agent == null) throw new System.ArgumentNullException("Agent must not be null"); - - Agent agentReal = agent as Agent; - if (agentReal == null) throw new System.ArgumentException("The agent must be of type Agent. Agent was of type "+agent.GetType()); - - if (agentReal.simulator != this) throw new System.ArgumentException("The agent is not added to this simulation"); - - //Don't interfere with ongoing calculations - BlockUntilSimulationStepIsDone(); - - agentReal.simulator = null; - - if (!agents.Remove(agentReal)) { - throw new System.ArgumentException("Critical Bug! This should not happen. Please report this."); - } - } - - /** Adds a previously removed obstacle. - * This does not check if the obstacle is already added to the simulation, so please do not add an obstacle multiple times. - * - * It is assumed that this is a valid obstacle. - */ - public ObstacleVertex AddObstacle (ObstacleVertex v) { - if (v == null) throw new System.ArgumentNullException("Obstacle must not be null"); - - //Don't interfere with ongoing calculations - BlockUntilSimulationStepIsDone(); - - obstacles.Add(v); - UpdateObstacles(); - return v; - } - - /** Adds an obstacle described by the vertices. - * - * \see RemoveObstacle - */ - public ObstacleVertex AddObstacle (Vector3[] vertices, float height, bool cycle = true) { - return AddObstacle(vertices, height, Matrix4x4.identity, RVOLayer.DefaultObstacle, cycle); - } - - /** Adds an obstacle described by the vertices. - * - * \see RemoveObstacle - */ - public ObstacleVertex AddObstacle (Vector3[] vertices, float height, Matrix4x4 matrix, RVOLayer layer = RVOLayer.DefaultObstacle, bool cycle = true) { - if (vertices == null) throw new System.ArgumentNullException("Vertices must not be null"); - if (vertices.Length < 2) throw new System.ArgumentException("Less than 2 vertices in an obstacle"); - - ObstacleVertex first = null; - ObstacleVertex prev = null; - - // Don't interfere with ongoing calculations - BlockUntilSimulationStepIsDone(); - - for (int i = 0; i < vertices.Length; i++) { - var v = new ObstacleVertex { - prev = prev, - layer = layer, - height = height - }; - - if (first == null) first = v; - else prev.next = v; - - prev = v; - } - - if (cycle) { - prev.next = first; - first.prev = prev; - } - - UpdateObstacle(first, vertices, matrix); - obstacles.Add(first); - return first; - } - - /** - * Adds a line obstacle with a specified height. - * - * \see RemoveObstacle - */ - public ObstacleVertex AddObstacle (Vector3 a, Vector3 b, float height) { - ObstacleVertex first = new ObstacleVertex(); - ObstacleVertex second = new ObstacleVertex(); - - first.layer = RVOLayer.DefaultObstacle; - second.layer = RVOLayer.DefaultObstacle; - - first.prev = second; - second.prev = first; - first.next = second; - second.next = first; - - first.position = a; - second.position = b; - first.height = height; - second.height = height; - second.ignore = true; - - first.dir = new Vector2(b.x-a.x, b.z-a.z).normalized; - second.dir = -first.dir; - - //Don't interfere with ongoing calculations - BlockUntilSimulationStepIsDone(); - - obstacles.Add(first); - - UpdateObstacles(); - return first; - } - - /** Updates the vertices of an obstacle. - * \param obstacle %Obstacle to update - * \param vertices New vertices for the obstacle, must have at least the number of vertices in the original obstacle - * \param matrix %Matrix to multiply vertices with before updating obstacle - * - * The number of vertices in an obstacle cannot be changed, existing vertices can only be moved. - */ - public void UpdateObstacle (ObstacleVertex obstacle, Vector3[] vertices, Matrix4x4 matrix) { - if (vertices == null) throw new System.ArgumentNullException("Vertices must not be null"); - if (obstacle == null) throw new System.ArgumentNullException("Obstacle must not be null"); - - if (vertices.Length < 2) throw new System.ArgumentException("Less than 2 vertices in an obstacle"); - - bool identity = matrix == Matrix4x4.identity; - - // Don't interfere with ongoing calculations - BlockUntilSimulationStepIsDone(); - - int count = 0; - - // Obstacles are represented using linked lists - var vertex = obstacle; - do { - if (count >= vertices.Length) { - Debug.DrawLine(vertex.prev.position, vertex.position, Color.red); - throw new System.ArgumentException("Obstacle has more vertices than supplied for updating (" + vertices.Length+ " supplied)"); - } - - // Premature optimization ftw! - vertex.position = identity ? vertices[count] : matrix.MultiplyPoint3x4(vertices[count]); - vertex = vertex.next; - count++; - } while (vertex != obstacle && vertex != null); - - vertex = obstacle; - do { - if (vertex.next == null) { - vertex.dir = Vector2.zero; - } else { - Vector3 dir = vertex.next.position - vertex.position; - vertex.dir = new Vector2(dir.x, dir.z).normalized; - } - - vertex = vertex.next; - } while (vertex != obstacle && vertex != null); - - ScheduleCleanObstacles(); - UpdateObstacles(); - } - - private void ScheduleCleanObstacles () { - doCleanObstacles = true; - } - - private void CleanObstacles () { - } - - /** Removes the obstacle identified by the vertex. - * This must be the same vertex as the one returned by the AddObstacle call. - * - * \see AddObstacle - */ - public void RemoveObstacle (ObstacleVertex v) { - if (v == null) throw new System.ArgumentNullException("Vertex must not be null"); - - // Don't interfere with ongoing calculations - BlockUntilSimulationStepIsDone(); - - obstacles.Remove(v); - UpdateObstacles(); - } - - /** Rebuilds the obstacle tree at next simulation frame. - * Add and remove obstacle functions call this automatically. - */ - public void UpdateObstacles () { - // Update obstacles at next frame - doUpdateObstacles = true; - } - - void BuildQuadtree () { - Quadtree.Clear(); - if (agents.Count > 0) { - Rect bounds = Rect.MinMaxRect(agents[0].position.x, agents[0].position.y, agents[0].position.x, agents[0].position.y); - for (int i = 1; i < agents.Count; i++) { - Vector2 p = agents[i].position; - bounds = Rect.MinMaxRect(Mathf.Min(bounds.xMin, p.x), Mathf.Min(bounds.yMin, p.y), Mathf.Max(bounds.xMax, p.x), Mathf.Max(bounds.yMax, p.y)); - } - Quadtree.SetBounds(bounds); - - for (int i = 0; i < agents.Count; i++) { - Quadtree.Insert(agents[i]); - } - - //quadtree.DebugDraw (); - } - - Quadtree.CalculateSpeeds(); - } - - /** Blocks until separate threads have finished with the current simulation step. - * When double buffering is done, the simulation is performed in between frames. - */ - void BlockUntilSimulationStepIsDone () { - if (Multithreading && doubleBuffering) for (int j = 0; j < workers.Length; j++) workers[j].WaitOne(); - } - - private WorkerContext coroutineWorkerContext = new WorkerContext(); - - void PreCalculation () { - for (int i = 0; i < agents.Count; i++) agents[i].PreCalculation(); - } - - void CleanAndUpdateObstaclesIfNecessary () { - if (doCleanObstacles) { - CleanObstacles(); - doCleanObstacles = false; - doUpdateObstacles = true; - } - - if (doUpdateObstacles) { - doUpdateObstacles = false; - } - } - - /** Should be called once per frame */ - public void Update () { - // Initialize last step - if (lastStep < 0) { - lastStep = Time.time; - deltaTime = DesiredDeltaTime; - } - - if (Time.time - lastStep >= DesiredDeltaTime) { - deltaTime = Time.time - lastStep; - lastStep = Time.time; - - // Prevent a zero delta time - deltaTime = System.Math.Max(deltaTime, 1.0f/2000f); - - if (Multithreading) { - // Make sure the threads have completed their tasks - // Otherwise block until they have - if (doubleBuffering) { - for (int i = 0; i < workers.Length; i++) workers[i].WaitOne(); - for (int i = 0; i < agents.Count; i++) agents[i].PostCalculation(); - } - - PreCalculation(); - CleanAndUpdateObstaclesIfNecessary(); - BuildQuadtree(); - - for (int i = 0; i < workers.Length; i++) { - workers[i].start = i*agents.Count / workers.Length; - workers[i].end = (i+1)*agents.Count / workers.Length; - } - - // BufferSwitch - for (int i = 0; i < workers.Length; i++) workers[i].Execute(1); - for (int i = 0; i < workers.Length; i++) workers[i].WaitOne(); - - // Calculate New Velocity - for (int i = 0; i < workers.Length; i++) workers[i].Execute(0); - - // Make sure the threads have completed their tasks - // Otherwise block until they have - if (!doubleBuffering) { - for (int i = 0; i < workers.Length; i++) workers[i].WaitOne(); - for (int i = 0; i < agents.Count; i++) agents[i].PostCalculation(); - } - } else { - PreCalculation(); - CleanAndUpdateObstaclesIfNecessary(); - BuildQuadtree(); - - for (int i = 0; i < agents.Count; i++) { - agents[i].BufferSwitch(); - } - - for (int i = 0; i < agents.Count; i++) { - agents[i].CalculateNeighbours(); - agents[i].CalculateVelocity(coroutineWorkerContext); - } - - for (int i = 0; i < agents.Count; i++) agents[i].PostCalculation(); - } - } - } - - internal class WorkerContext { - public Agent.VOBuffer vos = new Agent.VOBuffer(16); - - public const int KeepCount = 3; - public Vector2[] bestPos = new Vector2[KeepCount]; - public float[] bestSizes = new float[KeepCount]; - public float[] bestScores = new float[KeepCount+1]; - - public Vector2[] samplePos = new Vector2[50]; - public float[] sampleSize = new float[50]; - } - - /** Worker thread for RVO simulation */ - class Worker { - public int start, end; - readonly AutoResetEvent runFlag = new AutoResetEvent(false); - readonly ManualResetEvent waitFlag = new ManualResetEvent(true); - readonly Simulator simulator; - int task = 0; - bool terminate = false; - WorkerContext context = new WorkerContext(); - - public Worker (Simulator sim) { - this.simulator = sim; - var thread = new Thread(new ThreadStart(Run)); - thread.IsBackground = true; - thread.Name = "RVO Simulator Thread"; - thread.Start(); - } - - public void Execute (int task) { - this.task = task; - waitFlag.Reset(); - runFlag.Set(); - } - - public void WaitOne () { - if (!terminate) waitFlag.WaitOne(); - } - - public void Terminate () { - WaitOne(); - terminate = true; - Execute(-1); - } - - public void Run () { - runFlag.WaitOne(); - - while (!terminate) { - try { - List agents = simulator.GetAgents(); - if (task == 0) { - for (int i = start; i < end; i++) { - agents[i].CalculateNeighbours(); - agents[i].CalculateVelocity(context); - } - } else if (task == 1) { - for (int i = start; i < end; i++) { - agents[i].BufferSwitch(); - } - } else if (task == 2) { - simulator.BuildQuadtree(); - } else { - Debug.LogError("Invalid Task Number: " + task); - throw new System.Exception("Invalid Task Number: " + task); - } - } catch (System.Exception e) { - Debug.LogError(e); - } - waitFlag.Set(); - runFlag.WaitOne(); - } - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreSimulator.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreSimulator.cs.meta deleted file mode 100644 index d9a2b4ae0a947cfabd1968fb4790b4f8ee214dc2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOCoreSimulator.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f373cccc6991444b0b8b6e8c512842db -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOLine.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOLine.cs deleted file mode 100644 index dd58bc8bdff39491560245eafeaf31c577ef3254..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOLine.cs +++ /dev/null @@ -1,13 +0,0 @@ -using UnityEngine; - -namespace Pathfinding.RVO { - /** ORCA Line. - * Simply holds a point and a direction, nothing fancy. - * - * \astarpro - */ - public struct Line { - public Vector2 point; - public Vector2 dir; - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOLine.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOLine.cs.meta deleted file mode 100644 index 89ca59653c47f5843409d4e15c9dbaf47e16f314..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOLine.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b02eba22c48084de68f51d5c8295e58d -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOQuadtree.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOQuadtree.cs deleted file mode 100644 index 18c0054356174e75927b1d5391ce353838650b54..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOQuadtree.cs +++ /dev/null @@ -1,247 +0,0 @@ -using UnityEngine; -using Pathfinding.RVO.Sampled; - -namespace Pathfinding.RVO { - /** Quadtree for quick nearest neighbour search of rvo agents. - * \see Pathfinding.RVO.Simulator - */ - public class RVOQuadtree { - const int LeafSize = 15; - - float maxRadius = 0; - - /** Node in a quadtree for storing RVO agents. - * \see Pathfinding.GraphNode for the node class that is used for pathfinding data. - */ - struct Node { - public int child00; - public int child01; - public int child10; - public int child11; - public Agent linkedList; - public byte count; - - /** Maximum speed of all agents inside this node */ - public float maxSpeed; - - public void Add (Agent agent) { - agent.next = linkedList; - linkedList = agent; - } - - /** Distribute the agents in this node among the children. - * Used after subdividing the node. - */ - public void Distribute (Node[] nodes, Rect r) { - Vector2 c = r.center; - - while (linkedList != null) { - Agent nx = linkedList.next; - if (linkedList.position.x > c.x) { - if (linkedList.position.y > c.y) { - nodes[child11].Add(linkedList); - } else { - nodes[child10].Add(linkedList); - } - } else { - if (linkedList.position.y > c.y) { - nodes[child01].Add(linkedList); - } else { - nodes[child00].Add(linkedList); - } - } - linkedList = nx; - } - count = 0; - } - - public float CalculateMaxSpeed (Node[] nodes, int index) { - if (child00 == index) { - // Leaf node - for (var agent = linkedList; agent != null; agent = agent.next) { - maxSpeed = System.Math.Max(maxSpeed, agent.CalculatedSpeed); - } - } else { - maxSpeed = System.Math.Max(nodes[child00].CalculateMaxSpeed(nodes, child00), nodes[child01].CalculateMaxSpeed(nodes, child01)); - maxSpeed = System.Math.Max(maxSpeed, nodes[child10].CalculateMaxSpeed(nodes, child10)); - maxSpeed = System.Math.Max(maxSpeed, nodes[child11].CalculateMaxSpeed(nodes, child11)); - } - return maxSpeed; - } - } - - Node[] nodes = new Node[42]; - int filledNodes = 1; - - Rect bounds; - - /** Removes all agents from the tree */ - public void Clear () { - nodes[0] = new Node(); - filledNodes = 1; - maxRadius = 0; - } - - public void SetBounds (Rect r) { - bounds = r; - } - - int GetNodeIndex () { - if (filledNodes == nodes.Length) { - var nds = new Node[nodes.Length*2]; - for (int i = 0; i < nodes.Length; i++) nds[i] = nodes[i]; - nodes = nds; - } - nodes[filledNodes] = new Node(); - nodes[filledNodes].child00 = filledNodes; - filledNodes++; - return filledNodes-1; - } - - /** Add a new agent to the tree. - * \warning Agents must not be added multiple times to the same tree - */ - public void Insert (Agent agent) { - int i = 0; - Rect r = bounds; - Vector2 p = new Vector2(agent.position.x, agent.position.y); - - agent.next = null; - - maxRadius = System.Math.Max(agent.radius, maxRadius); - - int depth = 0; - - while (true) { - depth++; - - if (nodes[i].child00 == i) { - // Leaf node. Break at depth 10 in case lots of agents ( > LeafSize ) are in the same spot - if (nodes[i].count < LeafSize || depth > 10) { - nodes[i].Add(agent); - nodes[i].count++; - break; - } else { - // Split - Node node = nodes[i]; - node.child00 = GetNodeIndex(); - node.child01 = GetNodeIndex(); - node.child10 = GetNodeIndex(); - node.child11 = GetNodeIndex(); - nodes[i] = node; - - nodes[i].Distribute(nodes, r); - } - } - // Note, no else - if (nodes[i].child00 != i) { - // Not a leaf node - Vector2 c = r.center; - if (p.x > c.x) { - if (p.y > c.y) { - i = nodes[i].child11; - r = Rect.MinMaxRect(c.x, c.y, r.xMax, r.yMax); - } else { - i = nodes[i].child10; - r = Rect.MinMaxRect(c.x, r.yMin, r.xMax, c.y); - } - } else { - if (p.y > c.y) { - i = nodes[i].child01; - r = Rect.MinMaxRect(r.xMin, c.y, c.x, r.yMax); - } else { - i = nodes[i].child00; - r = Rect.MinMaxRect(r.xMin, r.yMin, c.x, c.y); - } - } - } - } - } - - public void CalculateSpeeds () { - nodes[0].CalculateMaxSpeed(nodes, 0); - } - - public void Query (Vector2 p, float speed, float timeHorizon, float agentRadius, Agent agent) { - new QuadtreeQuery { - p = p, speed = speed, timeHorizon = timeHorizon, maxRadius = float.PositiveInfinity, - agentRadius = agentRadius, agent = agent, nodes = nodes - }.QueryRec(0, bounds); - } - - struct QuadtreeQuery { - public Vector2 p; - public float speed, timeHorizon, agentRadius, maxRadius; - public Agent agent; - public Node[] nodes; - - public void QueryRec (int i, Rect r) { - // Determine the radius that we need to search to take all agents into account - // Note: the second agentRadius usage should actually be the radius of the other agents, not this agent - // but for performance reasons and for simplicity we assume that agents have approximately the same radius. - // Thus an agent with a very small radius may in some cases detect an agent with a very large radius too late - // however this effect should be minor. - var radius = System.Math.Min(System.Math.Max((nodes[i].maxSpeed + speed)*timeHorizon, agentRadius) + agentRadius, maxRadius); - - if (nodes[i].child00 == i) { - // Leaf node - for (Agent a = nodes[i].linkedList; a != null; a = a.next) { - float v = agent.InsertAgentNeighbour(a, radius*radius); - // Limit the search if the agent has hit the max number of nearby agents threshold - if (v < maxRadius*maxRadius) { - maxRadius = Mathf.Sqrt(v); - } - } - } else { - // Not a leaf node - Vector2 c = r.center; - if (p.x-radius < c.x) { - if (p.y-radius < c.y) { - QueryRec(nodes[i].child00, Rect.MinMaxRect(r.xMin, r.yMin, c.x, c.y)); - radius = System.Math.Min(radius, maxRadius); - } - if (p.y+radius > c.y) { - QueryRec(nodes[i].child01, Rect.MinMaxRect(r.xMin, c.y, c.x, r.yMax)); - radius = System.Math.Min(radius, maxRadius); - } - } - - if (p.x+radius > c.x) { - if (p.y-radius < c.y) { - QueryRec(nodes[i].child10, Rect.MinMaxRect(c.x, r.yMin, r.xMax, c.y)); - radius = System.Math.Min(radius, maxRadius); - } - if (p.y+radius > c.y) { - QueryRec(nodes[i].child11, Rect.MinMaxRect(c.x, c.y, r.xMax, r.yMax)); - } - } - } - } - } - - public void DebugDraw () { - DebugDrawRec(0, bounds); - } - - void DebugDrawRec (int i, Rect r) { - Debug.DrawLine(new Vector3(r.xMin, 0, r.yMin), new Vector3(r.xMax, 0, r.yMin), Color.white); - Debug.DrawLine(new Vector3(r.xMax, 0, r.yMin), new Vector3(r.xMax, 0, r.yMax), Color.white); - Debug.DrawLine(new Vector3(r.xMax, 0, r.yMax), new Vector3(r.xMin, 0, r.yMax), Color.white); - Debug.DrawLine(new Vector3(r.xMin, 0, r.yMax), new Vector3(r.xMin, 0, r.yMin), Color.white); - - if (nodes[i].child00 != i) { - // Not a leaf node - Vector2 c = r.center; - DebugDrawRec(nodes[i].child11, Rect.MinMaxRect(c.x, c.y, r.xMax, r.yMax)); - DebugDrawRec(nodes[i].child10, Rect.MinMaxRect(c.x, r.yMin, r.xMax, c.y)); - DebugDrawRec(nodes[i].child01, Rect.MinMaxRect(r.xMin, c.y, c.x, r.yMax)); - DebugDrawRec(nodes[i].child00, Rect.MinMaxRect(r.xMin, r.yMin, c.x, c.y)); - } - - for (Agent a = nodes[i].linkedList; a != null; a = a.next) { - var p = nodes[i].linkedList.position; - Debug.DrawLine(new Vector3(p.x, 0, p.y)+Vector3.up, new Vector3(a.position.x, 0, a.position.y)+Vector3.up, new Color(1, 1, 0, 0.5f)); - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOQuadtree.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOQuadtree.cs.meta deleted file mode 100644 index f18d4adcaab3cbcd1b8517d78b4221c3809f8453..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/RVO/RVOQuadtree.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4fadcced8ad4d40d59f3eea45426359d -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/astarclasses.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/astarclasses.cs deleted file mode 100644 index 0ad86c5dc4b8b555219a59e1cd3c4f33d290c1c8..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/astarclasses.cs +++ /dev/null @@ -1,297 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Mathf = UnityEngine.Mathf; - -// Empty namespace declaration to avoid errors in the free version -// Which does not have any classes in the RVO namespace -namespace Pathfinding.RVO {} - -namespace Pathfinding { - using Pathfinding.Util; - -#if UNITY_5_0 - /** Used in Unity 5.0 since the HelpURLAttribute was first added in Unity 5.1 */ - public class HelpURLAttribute : Attribute { - } -#endif - - [System.Serializable] - /** Stores editor colors */ - public class AstarColor { - public Color _NodeConnection; - public Color _UnwalkableNode; - public Color _BoundsHandles; - - public Color _ConnectionLowLerp; - public Color _ConnectionHighLerp; - - public Color _MeshEdgeColor; - - /** Holds user set area colors. - * Use GetAreaColor to get an area color */ - public Color[] _AreaColors; - - public static Color NodeConnection = new Color(1, 1, 1, 0.9F); - public static Color UnwalkableNode = new Color(1, 0, 0, 0.5F); - public static Color BoundsHandles = new Color(0.29F, 0.454F, 0.741F, 0.9F); - - public static Color ConnectionLowLerp = new Color(0, 1, 0, 0.5F); - public static Color ConnectionHighLerp = new Color(1, 0, 0, 0.5F); - - public static Color MeshEdgeColor = new Color(0, 0, 0, 0.5F); - - /** Holds user set area colors. - * Use GetAreaColor to get an area color */ - private static Color[] AreaColors; - - /** Returns an color for an area, uses both user set ones and calculated. - * If the user has set a color for the area, it is used, but otherwise the color is calculated using Mathfx.IntToColor - * \see #AreaColors */ - public static Color GetAreaColor (uint area) { - if (AreaColors == null || area >= AreaColors.Length) { - return UnityHelper.IntToColor((int)area, 1F); - } - return AreaColors[(int)area]; - } - - /** Pushes all local variables out to static ones. - * This is done because that makes it so much easier to access the colors during Gizmo rendering - * and it has a positive performance impact as well (gizmo rendering is hot code). - */ - public void OnEnable () { - NodeConnection = _NodeConnection; - UnwalkableNode = _UnwalkableNode; - BoundsHandles = _BoundsHandles; - ConnectionLowLerp = _ConnectionLowLerp; - ConnectionHighLerp = _ConnectionHighLerp; - MeshEdgeColor = _MeshEdgeColor; - AreaColors = _AreaColors; - } - - public AstarColor () { - // Set default colors - _NodeConnection = new Color(1, 1, 1, 0.9F); - _UnwalkableNode = new Color(1, 0, 0, 0.5F); - _BoundsHandles = new Color(0.29F, 0.454F, 0.741F, 0.9F); - _ConnectionLowLerp = new Color(0, 1, 0, 0.5F); - _ConnectionHighLerp = new Color(1, 0, 0, 0.5F); - _MeshEdgeColor = new Color(0, 0, 0, 0.5F); - } - } - - /** Progress info for e.g a progressbar. - * Used by the scan functions in the project - * \see #AstarPath.ScanAsync - */ - public struct Progress { - /** Current progress as a value between 0 and 1 */ - public readonly float progress; - /** Description of what is currently being done */ - public readonly string description; - - public Progress (float progress, string description) { - this.progress = progress; - this.description = description; - } - - public Progress MapTo (float min, float max, string prefix = null) { - return new Progress(Mathf.Lerp(min, max, progress), prefix + description); - } - - public override string ToString () { - return progress.ToString("0.0") + " " + description; - } - } - - /** Represents a collection of settings used to update nodes in a specific region of a graph. - * \see AstarPath.UpdateGraphs - * \see \ref graph-updates - */ - public class GraphUpdateObject { - /** The bounds to update nodes within. - * Defined in world space. - */ - public Bounds bounds; - - /** Controlls if a flood fill will be carried out after this GUO has been applied. - * Disabling this can be used to gain a performance boost, but use with care. - * If you are sure that a GUO will not modify walkability or connections. You can set this to false. - * For example when only updating penalty values it can save processing power when setting this to false. Especially on large graphs. - * \note If you set this to false, even though it does change e.g walkability, it can lead to paths returning that they failed even though there is a path, - * or the try to search the whole graph for a path even though there is none, and will in the processes use wast amounts of processing power. - * - * If using the basic GraphUpdateObject (not a derived class), a quick way to check if it is going to need a flood fill is to check if #modifyWalkability is true or #updatePhysics is true. - * - */ - public bool requiresFloodFill = true; - - /** Use physics checks to update nodes. - * When updating a grid graph and this is true, the nodes' position and walkability will be updated using physics checks - * with settings from "Collision Testing" and "Height Testing". - * - * When updating a PointGraph, setting this to true will make it re-evaluate all connections in the graph which passes through the #bounds. - * This has no effect when updating GridGraphs if #modifyWalkability is turned on. - * - * On RecastGraphs, having this enabled will trigger a complete recalculation of all tiles intersecting the bounds. - * This is quite slow (but powerful). If you only want to update e.g penalty on existing nodes, leave it disabled. - */ - public bool updatePhysics = true; - - /** Reset penalties to their initial values when updating grid graphs and #updatePhysics is true. - * If you want to keep old penalties even when you update the graph you may want to disable this option. - * - * The images below shows two overlapping graph update objects, the right one happened to be applied before the left one. They both have updatePhysics = true and are - * set to increase the penalty of the nodes by some amount. - * - * The first image shows the result when resetPenaltyOnPhysics is false. Both penalties are added correctly. - * \shadowimage{resetPenaltyOnPhysics_False.png} - * - * This second image shows when resetPenaltyOnPhysics is set to true. The first GUO is applied correctly, but then the second one (the left one) is applied - * and during its updating, it resets the penalties first and then adds penalty to the nodes. The result is that the penalties from both GUOs are not added together. - * The green patch in at the border is there because physics recalculation (recalculation of the position of the node, checking for obstacles etc.) affects a slightly larger - * area than the original GUO bounds because of the Grid Graph -> Collision Testing -> Diameter setting (it is enlarged by that value). So some extra nodes have their penalties reset. - * - * \shadowimage{resetPenaltyOnPhysics_True.png} - */ - public bool resetPenaltyOnPhysics = true; - - /** Update Erosion for GridGraphs. - * When enabled, erosion will be recalculated for grid graphs - * after the GUO has been applied. - * - * In the below image you can see the different effects you can get with the different values.\n - * The first image shows the graph when no GUO has been applied. The blue box is not identified as an obstacle by the graph, the reason - * there are unwalkable nodes around it is because there is a height difference (nodes are placed on top of the box) so erosion will be applied (an erosion value of 2 is used in this graph). - * The orange box is identified as an obstacle, so the area of unwalkable nodes around it is a bit larger since both erosion and collision has made - * nodes unwalkable.\n - * The GUO used simply sets walkability to true, i.e making all nodes walkable. - * - * \shadowimage{updateErosion.png} - * - * When updateErosion=True, the reason the blue box still has unwalkable nodes around it is because there is still a height difference - * so erosion will still be applied. The orange box on the other hand has no height difference and all nodes are set to walkable.\n - * \n - * When updateErosion=False, all nodes walkability are simply set to be walkable in this example. - * - * \see Pathfinding.GridGraph - */ - public bool updateErosion = true; - - /** NNConstraint to use. - * The Pathfinding.NNConstraint.SuitableGraph function will be called on the NNConstraint to enable filtering of which graphs to update.\n - * \note As the Pathfinding.NNConstraint.SuitableGraph function is A* Pathfinding Project Pro only, this variable doesn't really affect anything in the free version. - * - * - * \astarpro */ - public NNConstraint nnConstraint = NNConstraint.None; - - /** Penalty to add to the nodes. - * A penalty of 1000 is equivalent to the cost of moving 1 world unit. - */ - public int addPenalty; - - /** If true, all nodes' \a walkable variable will be set to #setWalkability */ - public bool modifyWalkability; - - /** If #modifyWalkability is true, the nodes' \a walkable variable will be set to this value */ - public bool setWalkability; - - /** If true, all nodes' \a tag will be set to #setTag */ - public bool modifyTag; - - /** If #modifyTag is true, all nodes' \a tag will be set to this value */ - public int setTag; - - /** Track which nodes are changed and save backup data. - * Used internally to revert changes if needed. - */ - public bool trackChangedNodes; - - /** Nodes which were updated by this GraphUpdateObject. - * Will only be filled if #trackChangedNodes is true. - * \note It might take a few frames for graph update objects to be applied. - * If you need this info immediately, use #AstarPath.FlushGraphUpdates. - */ - public List changedNodes; - private List backupData; - private List backupPositionData; - - /** A shape can be specified if a bounds object does not give enough precision. - * Note that if you set this, you should set the bounds so that it encloses the shape - * because the bounds will be used as an initial fast check for which nodes that should - * be updated. - */ - public GraphUpdateShape shape; - - /** Should be called on every node which is updated with this GUO before it is updated. - * \param node The node to save fields for. If null, nothing will be done - * \see #trackChangedNodes - */ - public virtual void WillUpdateNode (GraphNode node) { - if (trackChangedNodes && node != null) { - if (changedNodes == null) { changedNodes = ListPool.Claim(); backupData = ListPool.Claim(); backupPositionData = ListPool.Claim(); } - changedNodes.Add(node); - backupPositionData.Add(node.position); - backupData.Add(node.Penalty); - backupData.Add(node.Flags); - } - } - - /** Reverts penalties and flags (which includes walkability) on every node which was updated using this GUO. - * Data for reversion is only saved if #trackChangedNodes is true. - * - * \note Not all data is saved. The saved data includes: penalties, walkability, tags, area, position and for grid graphs (not layered) it also includes connection data. - */ - public virtual void RevertFromBackup () { - if (trackChangedNodes) { - if (changedNodes == null) return; - - int counter = 0; - for (int i = 0; i < changedNodes.Count; i++) { - changedNodes[i].Penalty = backupData[counter]; - counter++; - changedNodes[i].Flags = backupData[counter]; - counter++; - changedNodes[i].position = backupPositionData[i]; - } - - ListPool.Release(ref changedNodes); - ListPool.Release(ref backupData); - ListPool.Release(ref backupPositionData); - } else { - throw new System.InvalidOperationException("Changed nodes have not been tracked, cannot revert from backup. Please set trackChangedNodes to true before applying the update."); - } - } - - /** Updates the specified node using this GUO's settings */ - public virtual void Apply (GraphNode node) { - if (shape == null || shape.Contains(node)) { - //Update penalty and walkability - node.Penalty = (uint)(node.Penalty+addPenalty); - if (modifyWalkability) { - node.Walkable = setWalkability; - } - - //Update tags - if (modifyTag) node.Tag = (uint)setTag; - } - } - - public GraphUpdateObject () { - } - - /** Creates a new GUO with the specified bounds */ - public GraphUpdateObject (Bounds b) { - bounds = b; - } - } - - - public delegate void OnGraphDelegate (NavGraph graph); - - public delegate void OnScanDelegate (AstarPath script); - - /** \deprecated */ - public delegate void OnScanStatus (Progress progress); -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/astarclasses.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/astarclasses.cs.meta deleted file mode 100644 index 63b1d90a5dc8ae2e8337887fa40e43cac0f3d124..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Core/astarclasses.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f499b0552bded40b6a9d474dfb94343a -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes.meta deleted file mode 100644 index 011750080f0c7bcd5b9a2258e1a2b1f6369c2c00..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: f37641593a1ef394aa15c1b0c0155d25 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1.meta deleted file mode 100644 index 1d6508d119f1a1a10630828ac077caab213e61ec..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 76289b20bb5200147967a7d4f7e2b8b4 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Debris.prefab b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Debris.prefab deleted file mode 100644 index 3e172f2beb4ee8001c2dcb17b0ec276654b4e7e2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Debris.prefab +++ /dev/null @@ -1,146 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &100000 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 4 - m_Component: - - 4: {fileID: 400000} - m_Layer: 8 - m_Name: Debris - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &100002 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 4 - m_Component: - - 4: {fileID: 400002} - - 33: {fileID: 3300000} - - 65: {fileID: 6500000} - - 23: {fileID: 2300000} - - 114: {fileID: 11400000} - - 54: {fileID: 5400000} - m_Layer: 8 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &400000 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -4.2824173, y: .645388603, z: -2.89640141} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 400002} - m_Father: {fileID: 0} ---- !u!4 &400002 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_LocalRotation: {x: -.141364366, y: -.237669498, z: -.167781711, w: .946244538} - m_LocalPosition: {x: 0, y: 7.19962692, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 400000} ---- !u!23 &2300000 -Renderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_LightmapIndex: 255 - m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} - m_Materials: - - {fileID: 2100000, guid: b71b71b0a1f9a48768a27ca6eefcfbdf, type: 2} - m_SubsetIndices: - m_StaticBatchRoot: {fileID: 0} - m_UseLightProbes: 0 - m_LightProbeAnchor: {fileID: 0} - m_ScaleInLightmap: 1 ---- !u!33 &3300000 -MeshFilter: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!54 &5400000 -Rigidbody: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - serializedVersion: 2 - m_Mass: 1 - m_Drag: 0 - m_AngularDrag: .0500000007 - m_UseGravity: 1 - m_IsKinematic: 0 - m_Interpolate: 0 - m_Constraints: 0 - m_CollisionDetection: 0 ---- !u!65 &6500000 -BoxCollider: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6bee0a6fa1f5d4f4db481219040523c4, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 1 - mesh: {fileID: 0} - rectangleSize: {x: 2.5, y: 2.5} - circleRadius: 1.71000004 - circleResolution: 6 - height: 2 - meshScale: 1 - center: {x: 0, y: 0, z: 0} - updateDistance: .5 - updateRotationDistance: 10 - useRotation: 0 ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 100000} - m_IsPrefabParent: 1 - m_IsExploded: 1 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Debris.prefab.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Debris.prefab.meta deleted file mode 100644 index e2f734c324411b6bb7a466c437c20048a841f33b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Debris.prefab.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: deba0a6f7ec514207b7e850591a6f942 -NativeFormatImporter: - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials.meta deleted file mode 100644 index c6791d4fe04614bc8101292547511786bce0cb37..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 02b9653198491154c907338b80ca3268 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/Material.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/Material.mat deleted file mode 100644 index c36e90ba15b0a44698db75b94a299a47d2e41d91..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/Material.mat +++ /dev/null @@ -1,27 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: Material - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .800000012, g: .800000012, b: .800000012, a: 1} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/Material.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/Material.mat.meta deleted file mode 100644 index c5538a40b1d67462ba922932c24b4be3851a3522..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/Material.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 6744540c2b299465799c6bc35f8b0b56 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/structure2-Material.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/structure2-Material.mat deleted file mode 100644 index 96aad750ccd646f19cf9a35c500abb50fb0c37cd..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/structure2-Material.mat +++ /dev/null @@ -1,34 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: structure2-Material - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _BumpMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .921568632, g: .737254918, b: .368627459, a: 1} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/structure2-Material.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/structure2-Material.mat.meta deleted file mode 100644 index db30d6e664be104633f892c8937863fffed135c9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/Materials/structure2-Material.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 0b4c00bf1af5b45db943a3866a5a954d diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/MecanimBridge.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/MecanimBridge.cs deleted file mode 100644 index 415d1069ee7e875cab11da3fac72b69b47f599e0..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/MecanimBridge.cs +++ /dev/null @@ -1,146 +0,0 @@ -using UnityEngine; - -namespace Pathfinding.Examples { - using Pathfinding.Util; - - /** Example of how to use Mecanim with the included movement scripts. - * - * This script will use Mecanim to apply root motion to move the character - * instead of allowing the movement script to do the movement. - * - * It assumes that the Mecanim controller uses 3 input variables - * - \a InputMagnitude which is simply 1 when the character should be moving and 0 when it should stop. - * - \a X which is component of the desired movement direction along the left/right axis. - * - \a Y which is component of the desired movement direction along the forward/backward axis. - * - * It works with AIPath and RichAI. - * - * \see #Pathfinding.IAstarAI - * \see #Pathfinding.AIPath - * \see #Pathfinding.RichAI - */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_examples_1_1_mecanim_bridge.php")] - public class MecanimBridge : VersionedMonoBehaviour { - public float velocitySmoothing = 1; - - /** Cached reference to the movement script */ - IAstarAI ai; - - /** Cached Animator component */ - Animator anim; - - /** Cached Transform component */ - Transform tr; - - Vector3 smoothedVelocity; - - /** Position of the left and right feet during the previous frame */ - Vector3[] prevFootPos = new Vector3[2]; - - /** Cached reference to the left and right feet */ - Transform[] footTransforms; - - protected override void Awake () { - base.Awake(); - ai = GetComponent(); - anim = GetComponent(); - tr = transform; - - // Find the feet of the character - footTransforms = new [] { anim.GetBoneTransform(HumanBodyBones.LeftFoot), anim.GetBoneTransform(HumanBodyBones.RightFoot) }; - } - - /** Update is called once per frame */ - void Update () { - var aiBase = ai as AIBase; - - aiBase.canMove = false; - // aiBase.updatePosition = false; - // aiBase.updateRotation = false; - } - - /** Calculate position of the currently grounded foot */ - Vector3 CalculateBlendPoint () { - // Fall back to rotating around the transform position if no feet could be found - if (footTransforms[0] == null || footTransforms[1] == null) return tr.position; - - var leftFootPos = footTransforms[0].position; - var rightFootPos = footTransforms[1].position; - - // This is the same calculation that Unity uses for - // Animator.pivotWeight and Animator.pivotPosition - // but those properties do not work for all animations apparently. - var footVelocity1 = (leftFootPos - prevFootPos[0]) / Time.deltaTime; - var footVelocity2 = (rightFootPos - prevFootPos[1]) / Time.deltaTime; - float denominator = footVelocity1.magnitude + footVelocity2.magnitude; - var pivotWeight = denominator > 0 ? footVelocity1.magnitude / denominator : 0.5f; - prevFootPos[0] = leftFootPos; - prevFootPos[1] = rightFootPos; - var pivotPosition = Vector3.Lerp(leftFootPos, rightFootPos, pivotWeight); - return pivotPosition; - } - - void OnAnimatorMove () { - Vector3 nextPosition; - Quaternion nextRotation; - - ai.MovementUpdate(Time.deltaTime, out nextPosition, out nextRotation); - - //var desiredVelocity = (ai.steeringTarget - tr.position).normalized * 2;//ai.desiredVelocity; - var desiredVelocity = ai.desiredVelocity; - var desiredVelocityWithoutGrav = desiredVelocity; - desiredVelocityWithoutGrav.y = 0; - - anim.SetFloat("InputMagnitude", ai.reachedEndOfPath || desiredVelocityWithoutGrav.magnitude < 0.1f ? 0f : 1f); - - // Calculate the desired velocity relative to the character (+Z = forward, +X = right) - var localDesiredVelocity = tr.InverseTransformDirection(desiredVelocityWithoutGrav); - - smoothedVelocity = Vector3.Lerp(smoothedVelocity, localDesiredVelocity, velocitySmoothing > 0 ? Time.deltaTime / velocitySmoothing : 1); - if (smoothedVelocity.magnitude < 0.4f) { - smoothedVelocity = smoothedVelocity.normalized * 0.4f; - } - - anim.SetFloat("X", smoothedVelocity.x); - anim.SetFloat("Y", smoothedVelocity.z); - - // Calculate how much the agent should rotate during this frame - var newRot = RotateTowards(desiredVelocityWithoutGrav, Time.deltaTime * (ai as AIPath).rotationSpeed); - // Rotate the character around the currently grounded foot to prevent foot sliding - nextPosition = ai.position; - nextRotation = ai.rotation; - - nextPosition = RotatePointAround(nextPosition, CalculateBlendPoint(), newRot * Quaternion.Inverse(nextRotation)); - nextRotation = newRot; - - // Apply rotational root motion - nextRotation = anim.deltaRotation * nextRotation; - - // Use gravity from the movement script, not from animation - var deltaPos = anim.deltaPosition; - deltaPos.y = desiredVelocity.y * Time.deltaTime; - nextPosition += deltaPos; - - // Call the movement script to perform the final movement - ai.FinalizeMovement(nextPosition, nextRotation); - } - - static Vector3 RotatePointAround (Vector3 point, Vector3 around, Quaternion rotation) { - return rotation * (point - around) + around; - } - - /** Calculates a rotation closer to the desired direction. - * \param direction Direction in the movement plane to rotate toward. - * \param maxDegrees Maximum number of degrees to rotate this frame. - * \returns The new rotation for the character - */ - protected virtual Quaternion RotateTowards (Vector3 direction, float maxDegrees) { - if (direction != Vector3.zero) { - Quaternion targetRotation = Quaternion.LookRotation(direction); - return Quaternion.RotateTowards(tr.rotation, targetRotation, maxDegrees); - } else { - return tr.rotation; - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/MecanimBridge.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/MecanimBridge.cs.meta deleted file mode 100644 index 4b83b1646a6f9293211d547b0deafeb83e5b164f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/MecanimBridge.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 50c378ba3baff4dbba6f2a814ab1c489 -timeCreated: 1495360295 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample.meta deleted file mode 100644 index 36839b7a1e27829878979e4ea126e0c2bc974922..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 2c2f05fc8d0edb944ac1298aea94516e -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample.unity b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample.unity deleted file mode 100644 index f2fb4fe8a0a144a0cc61aa05ecd898d6ea5043b3..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample.unity +++ /dev/null @@ -1,9547 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.6303525, g: 0.78416735, b: 0.9632353, a: 1} - m_AmbientEquatorColor: {r: 0.37802768, g: 0.49123016, b: 0.6764706, a: 1} - m_AmbientGroundColor: {r: 0.25373137, g: 0.25373137, b: 0.25373137, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 520} - m_IndirectSpecularColor: {r: 0.44442612, g: 0.49431813, b: 0.57472146, a: 1} ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 1 - m_BakeResolution: 10 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 0 - m_TextureCompression: 0 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 112000001, guid: 1c44db7fd2dd64d9b98b1a179b7493ac, - type: 2} - m_UseShadowmask: 0 ---- !u!1 &5 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 119} - - component: {fileID: 334} - - component: {fileID: 429} - - component: {fileID: 235} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &12 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 126} - - component: {fileID: 338} - - component: {fileID: 430} - - component: {fileID: 239} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &13 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 127} - - component: {fileID: 339} - - component: {fileID: 431} - - component: {fileID: 240} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &14 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 128} - - component: {fileID: 340} - - component: {fileID: 432} - - component: {fileID: 241} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &15 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 129} - - component: {fileID: 341} - - component: {fileID: 433} - - component: {fileID: 242} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &16 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 130} - - component: {fileID: 342} - - component: {fileID: 434} - - component: {fileID: 243} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &17 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 131} - - component: {fileID: 343} - - component: {fileID: 435} - - component: {fileID: 244} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &18 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 132} - - component: {fileID: 344} - - component: {fileID: 436} - - component: {fileID: 245} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &19 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 133} - - component: {fileID: 345} - - component: {fileID: 437} - - component: {fileID: 246} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &20 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 134} - - component: {fileID: 346} - - component: {fileID: 438} - - component: {fileID: 247} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &21 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 135} - - component: {fileID: 347} - - component: {fileID: 439} - - component: {fileID: 248} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &22 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 136} - - component: {fileID: 348} - - component: {fileID: 440} - - component: {fileID: 249} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &23 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 137} - - component: {fileID: 349} - - component: {fileID: 441} - - component: {fileID: 250} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &24 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 138} - - component: {fileID: 350} - - component: {fileID: 442} - - component: {fileID: 251} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &25 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 139} - - component: {fileID: 351} - - component: {fileID: 443} - - component: {fileID: 252} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &26 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 140} - - component: {fileID: 352} - - component: {fileID: 444} - - component: {fileID: 253} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &27 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 141} - - component: {fileID: 353} - - component: {fileID: 445} - - component: {fileID: 254} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &28 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 142} - - component: {fileID: 354} - - component: {fileID: 446} - - component: {fileID: 255} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &29 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 143} - - component: {fileID: 355} - - component: {fileID: 447} - - component: {fileID: 256} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &30 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 144} - - component: {fileID: 356} - - component: {fileID: 448} - - component: {fileID: 257} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &31 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 145} - - component: {fileID: 357} - - component: {fileID: 449} - - component: {fileID: 258} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &32 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 146} - - component: {fileID: 358} - - component: {fileID: 450} - - component: {fileID: 259} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &33 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 147} - - component: {fileID: 359} - - component: {fileID: 451} - - component: {fileID: 260} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &34 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 148} - - component: {fileID: 360} - - component: {fileID: 452} - - component: {fileID: 261} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &35 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 149} - - component: {fileID: 361} - - component: {fileID: 453} - - component: {fileID: 262} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &36 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 150} - - component: {fileID: 362} - - component: {fileID: 454} - - component: {fileID: 263} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &37 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 151} - - component: {fileID: 363} - - component: {fileID: 455} - - component: {fileID: 264} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &38 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 152} - - component: {fileID: 364} - - component: {fileID: 456} - - component: {fileID: 265} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &39 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 153} - - component: {fileID: 365} - - component: {fileID: 457} - - component: {fileID: 266} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &40 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 154} - - component: {fileID: 366} - - component: {fileID: 458} - - component: {fileID: 267} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &41 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 155} - - component: {fileID: 367} - - component: {fileID: 459} - - component: {fileID: 268} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &42 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 156} - - component: {fileID: 368} - - component: {fileID: 460} - - component: {fileID: 269} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &43 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 157} - - component: {fileID: 369} - - component: {fileID: 461} - - component: {fileID: 270} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &44 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 158} - - component: {fileID: 370} - - component: {fileID: 462} - - component: {fileID: 271} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &45 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 159} - m_Layer: 0 - m_Name: Obstacles - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &46 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 160} - m_Layer: 0 - m_Name: Some Cubes - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &47 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 161} - - component: {fileID: 371} - - component: {fileID: 463} - - component: {fileID: 272} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &48 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 162} - - component: {fileID: 372} - - component: {fileID: 464} - - component: {fileID: 273} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &49 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 163} - - component: {fileID: 373} - - component: {fileID: 465} - - component: {fileID: 274} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &50 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 164} - - component: {fileID: 374} - - component: {fileID: 466} - - component: {fileID: 275} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &51 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 165} - - component: {fileID: 375} - - component: {fileID: 467} - - component: {fileID: 276} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &52 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 166} - - component: {fileID: 376} - - component: {fileID: 468} - - component: {fileID: 277} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &53 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 167} - - component: {fileID: 377} - - component: {fileID: 469} - - component: {fileID: 278} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &54 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 168} - - component: {fileID: 378} - - component: {fileID: 470} - - component: {fileID: 279} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &55 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 169} - - component: {fileID: 379} - - component: {fileID: 471} - - component: {fileID: 280} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &56 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 170} - - component: {fileID: 380} - - component: {fileID: 472} - - component: {fileID: 281} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &57 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 171} - - component: {fileID: 381} - - component: {fileID: 473} - - component: {fileID: 282} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &58 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 172} - - component: {fileID: 382} - - component: {fileID: 474} - - component: {fileID: 283} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &59 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 173} - - component: {fileID: 383} - - component: {fileID: 475} - - component: {fileID: 284} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &60 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 174} - - component: {fileID: 384} - - component: {fileID: 476} - - component: {fileID: 285} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &61 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 175} - - component: {fileID: 385} - - component: {fileID: 477} - - component: {fileID: 286} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &62 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 176} - - component: {fileID: 386} - - component: {fileID: 478} - - component: {fileID: 287} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &63 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 177} - - component: {fileID: 387} - - component: {fileID: 479} - - component: {fileID: 288} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &64 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 178} - - component: {fileID: 388} - - component: {fileID: 480} - - component: {fileID: 289} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &65 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 179} - - component: {fileID: 389} - - component: {fileID: 481} - - component: {fileID: 290} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &66 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 180} - - component: {fileID: 390} - - component: {fileID: 482} - - component: {fileID: 291} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &67 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 181} - - component: {fileID: 391} - - component: {fileID: 483} - - component: {fileID: 292} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &68 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 182} - - component: {fileID: 392} - - component: {fileID: 484} - - component: {fileID: 293} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &69 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 183} - - component: {fileID: 393} - - component: {fileID: 485} - - component: {fileID: 294} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &70 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 184} - - component: {fileID: 394} - - component: {fileID: 486} - - component: {fileID: 295} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &71 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 185} - - component: {fileID: 395} - - component: {fileID: 487} - - component: {fileID: 296} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &72 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 186} - - component: {fileID: 396} - - component: {fileID: 488} - - component: {fileID: 297} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &73 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 187} - - component: {fileID: 397} - - component: {fileID: 489} - - component: {fileID: 298} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &74 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 188} - - component: {fileID: 398} - - component: {fileID: 490} - - component: {fileID: 299} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &75 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 189} - - component: {fileID: 399} - - component: {fileID: 491} - - component: {fileID: 300} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &76 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 190} - - component: {fileID: 400} - - component: {fileID: 492} - - component: {fileID: 301} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &77 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 191} - - component: {fileID: 401} - - component: {fileID: 493} - - component: {fileID: 302} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &78 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 192} - - component: {fileID: 402} - - component: {fileID: 494} - - component: {fileID: 303} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &79 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 193} - - component: {fileID: 403} - - component: {fileID: 495} - - component: {fileID: 304} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &80 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 194} - - component: {fileID: 404} - - component: {fileID: 496} - - component: {fileID: 305} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &81 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 195} - - component: {fileID: 405} - - component: {fileID: 497} - - component: {fileID: 306} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &82 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 196} - - component: {fileID: 406} - - component: {fileID: 498} - - component: {fileID: 307} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &83 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 197} - - component: {fileID: 407} - - component: {fileID: 499} - - component: {fileID: 308} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &84 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 198} - - component: {fileID: 408} - - component: {fileID: 500} - - component: {fileID: 309} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &85 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 199} - - component: {fileID: 409} - - component: {fileID: 501} - - component: {fileID: 310} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &86 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 200} - - component: {fileID: 410} - - component: {fileID: 502} - - component: {fileID: 311} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &87 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 201} - - component: {fileID: 411} - - component: {fileID: 503} - - component: {fileID: 312} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &88 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 202} - - component: {fileID: 412} - - component: {fileID: 504} - - component: {fileID: 313} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &89 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 203} - - component: {fileID: 413} - - component: {fileID: 505} - - component: {fileID: 314} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &90 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100018, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 204} - - component: {fileID: 414} - - component: {fileID: 315} - m_Layer: 8 - m_Name: minebot_right_lowerleg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &91 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100020, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 208} - - component: {fileID: 415} - - component: {fileID: 316} - m_Layer: 8 - m_Name: minebot_right_upperleg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &92 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100008, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 205} - - component: {fileID: 416} - - component: {fileID: 317} - m_Layer: 8 - m_Name: minebot_left_lowerleg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &93 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100010, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 209} - - component: {fileID: 417} - - component: {fileID: 318} - m_Layer: 8 - m_Name: minebot_left_upperleg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &94 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100016, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 210} - - component: {fileID: 418} - - component: {fileID: 319} - m_Layer: 8 - m_Name: minebot_head - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &95 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100004, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 206} - - component: {fileID: 419} - - component: {fileID: 320} - m_Layer: 8 - m_Name: minebot_front_lowerleg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &96 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100006, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 211} - - component: {fileID: 420} - - component: {fileID: 321} - m_Layer: 8 - m_Name: minebot_front_upperleg 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &97 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100012, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 207} - - component: {fileID: 421} - - component: {fileID: 322} - m_Layer: 8 - m_Name: minebot_back_lowerleg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &98 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100014, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 212} - - component: {fileID: 422} - - component: {fileID: 323} - m_Layer: 8 - m_Name: minebot_front_upperleg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &99 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100022, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 213} - - component: {fileID: 423} - - component: {fileID: 324} - m_Layer: 8 - m_Name: minebot_main - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &100 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100024, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 215} - - component: {fileID: 522} - m_Layer: 8 - m_Name: mine_bot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &102 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 100002, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 216} - - component: {fileID: 530} - - component: {fileID: 104} - - component: {fileID: 103} - - component: {fileID: 526} - - component: {fileID: 528} - - component: {fileID: 105} - m_Layer: 8 - m_Name: Bot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &103 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 102} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8503d71a898994d3288ce1708e2707fe, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 1 - anim: {fileID: 522} - sleepVelocity: 0.2 - animationSpeed: 0.4 - endOfPathEffect: {fileID: 100000, guid: 441e67a4721e749f0bca9581956f2729, type: 2} ---- !u!114 &104 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 102} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f6eb1402c17e84a9282a7f0f62eb584f, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 2 - repathRate: 0.2 - canSearch: 1 - canMove: 1 - maxSpeed: 4 - gravity: {x: NaN, y: NaN, z: NaN} - groundMask: - serializedVersion: 2 - m_Bits: 4294967295 - centerOffset: 1 - rotationIn2D: 0 - targetCompatibility: {fileID: 0} - maxAcceleration: -2.5 - rotationSpeed: 540 - slowdownDistance: 0.6 - pickNextWaypointDist: 1.5 - endReachedDistance: 0.05 - alwaysDrawGizmos: 0 - slowWhenNotFacingTarget: 1 - whenCloseToDestination: 0 - constrainInsideGraph: 0 ---- !u!114 &105 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 102} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c9679e68a0f1144e79c664d9a11ca121, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 1 - target: {fileID: 226} ---- !u!1 &108 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 222} - - component: {fileID: 234} - - component: {fileID: 510} - - component: {fileID: 525} - - component: {fileID: 508} - - component: {fileID: 533} - - component: {fileID: 428} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &109 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 223} - - component: {fileID: 424} - - component: {fileID: 327} - - component: {fileID: 506} - m_Layer: 0 - m_Name: Ground - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &110 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 224} - - component: {fileID: 520} - m_Layer: 0 - m_Name: Directional light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!1 &111 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 225} - - component: {fileID: 532} - m_Layer: 0 - m_Name: A* - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &112 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 226} - - component: {fileID: 425} - - component: {fileID: 328} - m_Layer: 8 - m_Name: Target - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &119 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 5} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 7.79195, y: 30.101498, z: -15.25816} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 76 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &126 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 12} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 7.4845953, y: 30.101498, z: -21.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 26 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &127 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 13} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 13.79195, y: 30.101498, z: -21.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &128 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 14} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 19.79195, y: 30.101498, z: -21.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &129 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 15} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 25.79195, y: 30.101498, z: -21.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &130 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 16} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 25.79195, y: 30.101498, z: -27.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &131 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 17} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 19.79195, y: 30.101498, z: -27.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &132 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 18} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 13.79195, y: 30.101498, z: -27.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 55 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &133 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 19} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 7.79195, y: 30.101498, z: -27.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &134 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 20} - m_LocalRotation: {x: 0, y: 0, z: -0.033671997, w: 0.999433} - m_LocalPosition: {x: 26.050236, y: 28.291721, z: -35.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &135 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 21} - m_LocalRotation: {x: 0, y: 0, z: -0.09379425, w: 0.99559164} - m_LocalPosition: {x: 23.614468, y: 28.838072, z: -35.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &136 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 22} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 21.79195, y: 29.101498, z: -35.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &137 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 23} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 19.79, y: 29.3, z: -35.98} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &138 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 24} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 17.79195, y: 29.501497, z: -35.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 30 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &139 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 25} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 15.79, y: 29.7, z: -35.98} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &140 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 26} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 13.79195, y: 29.901497, z: -35.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &141 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 27} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 11.79195, y: 30.101498, z: -35.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &142 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 28} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 11.79195, y: 30.101498, z: -38.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &143 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 29} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 11.79195, y: 30.101498, z: -41.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &144 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 30} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 14.79195, y: 30.101498, z: -41.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 25 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &145 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 31} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 17.79195, y: 30.101498, z: -41.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 27 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &146 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 32} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 20.79195, y: 30.101498, z: -41.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 28 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &147 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 33} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 17.79195, y: 30.101498, z: -44.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &148 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 34} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 14.79195, y: 30.101498, z: -45.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &149 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 35} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 14.79195, y: 30.101498, z: -48.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &150 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 36} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 17.79195, y: 30.101498, z: -48.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &151 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 37} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 20.79195, y: 30.101498, z: -48.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &152 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 38} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 26.79195, y: 30.101498, z: -48.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &153 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 39} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 26.79195, y: 30.101498, z: -45.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &154 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 40} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 26.79195, y: 30.101498, z: -42.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 29 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &155 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 41} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 29.79195, y: 30.101498, z: -42.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &156 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 42} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 32.79195, y: 30.101498, z: -42.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &157 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 43} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 32.79195, y: 30.101498, z: -48.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &158 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 44} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 29.79195, y: 30.101498, z: -48.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 31 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &159 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 45} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -7.79195, y: -29.101498, z: 21.93608} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 160} - m_Father: {fileID: 517080817} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &160 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 46} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.5, y: 0, z: -0.5} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 129} - - {fileID: 143} - - {fileID: 147} - - {fileID: 136} - - {fileID: 140} - - {fileID: 130} - - {fileID: 151} - - {fileID: 131} - - {fileID: 150} - - {fileID: 134} - - {fileID: 133} - - {fileID: 139} - - {fileID: 157} - - {fileID: 141} - - {fileID: 155} - - {fileID: 127} - - {fileID: 137} - - {fileID: 152} - - {fileID: 148} - - {fileID: 128} - - {fileID: 156} - - {fileID: 149} - - {fileID: 153} - - {fileID: 142} - - {fileID: 135} - - {fileID: 144} - - {fileID: 126} - - {fileID: 145} - - {fileID: 146} - - {fileID: 154} - - {fileID: 138} - - {fileID: 158} - - {fileID: 203} - - {fileID: 161} - - {fileID: 197} - - {fileID: 162} - - {fileID: 186} - - {fileID: 163} - - {fileID: 185} - - {fileID: 178} - - {fileID: 177} - - {fileID: 193} - - {fileID: 164} - - {fileID: 195} - - {fileID: 166} - - {fileID: 200} - - {fileID: 169} - - {fileID: 165} - - {fileID: 196} - - {fileID: 179} - - {fileID: 168} - - {fileID: 172} - - {fileID: 184} - - {fileID: 202} - - {fileID: 176} - - {fileID: 132} - - {fileID: 174} - - {fileID: 198} - - {fileID: 189} - - {fileID: 173} - - {fileID: 182} - - {fileID: 187} - - {fileID: 170} - - {fileID: 199} - - {fileID: 181} - - {fileID: 201} - - {fileID: 191} - - {fileID: 180} - - {fileID: 167} - - {fileID: 188} - - {fileID: 190} - - {fileID: 194} - - {fileID: 192} - - {fileID: 175} - - {fileID: 171} - - {fileID: 183} - - {fileID: 119} - m_Father: {fileID: 159} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &161 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 47} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 13.79195, y: 30.101498, z: -32.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 33 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &162 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 48} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 10.79195, y: 30.101498, z: -32.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 35 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &163 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 49} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 7.79195, y: 30.101498, z: -32.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 37 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &164 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 50} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 16.79195, y: 30.101498, z: -32.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 42 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &165 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 51} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.20804977, y: 30.101498, z: -40.93608} - m_LocalScale: {x: 3, y: 2, z: 2.7177618} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 47 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &166 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 52} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 4.79195, y: 30.101498, z: -32.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 44 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &167 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 53} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1.7919502, y: 30.101498, z: -32.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 68 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &168 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 54} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -3.2080498, y: 30.101498, z: -40.93608} - m_LocalScale: {x: 3, y: 2, z: 2} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 50 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &169 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 55} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -6.20805, y: 30.101498, z: -40.93608} - m_LocalScale: {x: 3, y: 2, z: 2} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 46 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &170 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 56} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -8.20805, y: 30.101498, z: -40.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 62 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &171 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 57} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -9.20805, y: 30.101498, z: -40.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 74 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &172 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 58} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -10.20805, y: 30.101498, z: -40.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 51 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &173 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 59} - m_LocalRotation: {x: 0, y: -0.70710665, z: 0, w: 0.70710695} - m_LocalPosition: {x: -14.208052, y: 30.101498, z: -44.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 59 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &174 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 60} - m_LocalRotation: {x: 0, y: -0.70710665, z: 0, w: 0.70710695} - m_LocalPosition: {x: -14.208048, y: 30.101498, z: -43.936077} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 56 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &175 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 61} - m_LocalRotation: {x: 0, y: -0.70710665, z: 0, w: 0.70710695} - m_LocalPosition: {x: -14.20805, y: 30.101498, z: -42.936085} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 73 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &176 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 62} - m_LocalRotation: {x: 0, y: -0.70710665, z: 0, w: 0.70710695} - m_LocalPosition: {x: -14.208048, y: 30.101498, z: -41.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 54 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &177 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 63} - m_LocalRotation: {x: 0, y: -0.70710665, z: 0, w: 0.70710695} - m_LocalPosition: {x: -14.20805, y: 30.101498, z: -40.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 40 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &178 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 64} - m_LocalRotation: {x: 0, y: -0.70710665, z: 0, w: 0.70710695} - m_LocalPosition: {x: -14.208052, y: 30.101498, z: -45.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 39 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &179 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 65} - m_LocalRotation: {x: 0, y: -0.70710665, z: 0, w: 0.70710695} - m_LocalPosition: {x: -14.20805, y: 30.101498, z: -46.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 49 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &180 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 66} - m_LocalRotation: {x: 0, y: -0.70710665, z: 0, w: 0.70710695} - m_LocalPosition: {x: -14.208052, y: 30.101498, z: -47.936085} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 67 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &181 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 67} - m_LocalRotation: {x: 0, y: -0.70710665, z: 0, w: 0.70710695} - m_LocalPosition: {x: -14.20805, y: 30.101498, z: -48.936077} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 64 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &182 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 68} - m_LocalRotation: {x: 0, y: -0.70710665, z: 0, w: 0.70710695} - m_LocalPosition: {x: -14.208054, y: 30.101498, z: -49.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 60 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &183 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 69} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -9.2080555, y: 30.101498, z: -49.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 75 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &184 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 70} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -10.2080555, y: 30.101498, z: -49.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 52 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &185 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 71} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -11.208044, y: 30.101498, z: -49.93609} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 38 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &186 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 72} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -12.208054, y: 30.101498, z: -49.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 36 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &187 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 73} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -13.2080555, y: 30.101498, z: -49.93608} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 61 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &188 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 74} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -8.2080555, y: 30.101498, z: -49.936085} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 69 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &189 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 75} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -7.2080536, y: 30.101498, z: -49.936085} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 58 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &190 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 76} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -6.208044, y: 30.101498, z: -49.936092} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 70 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &191 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 77} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -5.2080555, y: 30.101498, z: -49.936085} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 66 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &192 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 78} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -4.2080555, y: 30.101498, z: -49.936085} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 72 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &193 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 79} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: 0.7919445, y: 30.101498, z: -49.93609} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 41 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &194 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 80} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -0.2080555, y: 30.101498, z: -49.93609} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 71 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &195 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 81} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -1.208044, y: 30.101498, z: -49.936096} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 43 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &196 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 82} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -2.2080536, y: 30.101498, z: -49.93609} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 48 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &197 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 83} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -3.2080555, y: 30.101498, z: -49.93609} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 34 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &198 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 84} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.21, y: 30.08, z: -43.67} - m_LocalScale: {x: 2.3951724, y: 2, z: 3.5} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 57 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &199 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 85} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.20804977, y: 30.101498, z: -46.93608} - m_LocalScale: {x: 2.288723, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 63 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &200 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 86} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: 0.79194546, y: 30.101498, z: -48.93609} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 45 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &201 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 87} - m_LocalRotation: {x: 0, y: -1, z: 0, w: 0.00000044703484} - m_LocalPosition: {x: -1.2080545, y: 30.101498, z: -48.93609} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 65 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &202 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 88} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 5.79195, y: 30.86155, z: -40.93608} - m_LocalScale: {x: 9, y: 0.5, z: 2.736631} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 53 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &203 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 89} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 17.79195, y: 30.397146, z: -45.93608} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 160} - m_RootOrder: 32 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &204 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400018, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 90} - m_LocalRotation: {x: -0.0037455678, y: 0.00047785335, z: 0.00055707025, w: 0.9999927} - m_LocalPosition: {x: -0.000000014156103, y: -0.09292825, z: 0.3060712} - m_LocalScale: {x: 1, y: 0.9999998, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 208} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &205 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400008, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 92} - m_LocalRotation: {x: -0.003772634, y: -0.0003011082, z: 0.00026565636, w: 0.99999285} - m_LocalPosition: {x: -0.000000014305114, y: -0.09292825, z: 0.30607122} - m_LocalScale: {x: 0.99999994, y: 1.0000001, z: 1.0000001} - m_Children: [] - m_Father: {fileID: 209} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &206 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400004, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 95} - m_LocalRotation: {x: -0.008426809, y: -0.000069992035, z: -0.000030909396, w: 0.99996454} - m_LocalPosition: {x: -0.000000014300458, y: -0.09292829, z: 0.30607122} - m_LocalScale: {x: 0.99999994, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 211} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &207 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400012, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 97} - m_LocalRotation: {x: -0.00843205, y: 0.000024319022, z: 0.000028339457, w: 0.9999645} - m_LocalPosition: {x: -0.000000014301622, y: -0.09292829, z: 0.30607116} - m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} - m_Children: [] - m_Father: {fileID: 212} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &208 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400020, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 91} - m_LocalRotation: {x: -0.4938536, y: 0.50490654, z: 0.4954421, w: 0.5056828} - m_LocalPosition: {x: 0.2814941, y: -0.079537675, z: 0.00000010396199} - m_LocalScale: {x: 1, y: 0.99999994, z: 1} - m_Children: - - {fileID: 204} - m_Father: {fileID: 213} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &209 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400010, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 93} - m_LocalRotation: {x: -0.48992172, y: -0.509469, z: -0.48969793, w: 0.5105038} - m_LocalPosition: {x: -0.28149432, y: -0.0795377, z: 0.000000041562274} - m_LocalScale: {x: 1, y: 1.0000001, z: 1.0000001} - m_Children: - - {fileID: 205} - m_Father: {fileID: 213} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &210 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400016, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 94} - m_LocalRotation: {x: 0.000000043711367, y: -5.889458e-15, z: -0.00000007549791, - w: 1} - m_LocalPosition: {x: 0.00000006853786, y: 0.34678704, z: -0.000000043811227} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 213} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &211 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400006, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 96} - m_LocalRotation: {x: -0.7057329, y: 0.00006328893, z: -0.000114930284, w: 0.70847803} - m_LocalPosition: {x: -0.00000011920927, y: -0.07953771, z: 0.2814943} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 206} - m_Father: {fileID: 213} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &212 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400014, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 98} - m_LocalRotation: {x: 0.000053780266, y: 0.70847875, z: 0.7057321, w: 0.000027028062} - m_LocalPosition: {x: -0.00000007152555, y: -0.07953771, z: -0.28149417} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 207} - m_Father: {fileID: 213} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &213 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400022, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 99} - m_LocalRotation: {x: 0.5000001, y: -0.49999997, z: -0.49999982, w: 0.5000001} - m_LocalPosition: {x: -0, y: -0.000000014011195, z: 0.28516918} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 212} - - {fileID: 211} - - {fileID: 210} - - {fileID: 209} - - {fileID: 208} - m_Father: {fileID: 215} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &215 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400024, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 100} - m_LocalRotation: {x: 0.7071066, y: 0, z: 0, w: -0.70710695} - m_LocalPosition: {x: 0, y: 0, z: -0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 213} - m_Father: {fileID: 216} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &216 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 400002, guid: acada0fce8d404ed8b9182f16a02d435, type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 102} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -10, y: 0.049999997, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 215} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &222 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 108} - m_LocalRotation: {x: 0.48865515, y: 0, z: 0, w: 0.87247705} - m_LocalPosition: {x: 2.1579952, y: 35.460117, z: -32.150215} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &223 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 109} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 10, y: 10, z: 10} - m_Children: [] - m_Father: {fileID: 517080817} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &224 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 110} - m_LocalRotation: {x: 0.4698464, y: 0.29619816, z: -0.17101012, w: 0.81379765} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &225 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 111} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 100, y: 0, z: 100} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &226 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 112} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -27.16675, y: 1.5, z: -0.6643887} - m_LocalScale: {x: 0.7, y: 0.7, z: 0.7} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &234 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 108} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 100 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!23 &235 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 5} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &239 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 12} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &240 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 13} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &241 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 14} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &242 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 15} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &243 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 16} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &244 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 17} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &245 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 18} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &246 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 19} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &247 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 20} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &248 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 21} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &249 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 22} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &250 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 23} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &251 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 24} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &252 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 25} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &253 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 26} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &254 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 27} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &255 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 28} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &256 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 29} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &257 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 30} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &258 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 31} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &259 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 32} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &260 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 33} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &261 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 34} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &262 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 35} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &263 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 36} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &264 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 37} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &265 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 38} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &266 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 39} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &267 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 40} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &268 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 41} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &269 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 42} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &270 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 43} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &271 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 44} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &272 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 47} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &273 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 48} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &274 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 49} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &275 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 50} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &276 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 51} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &277 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 52} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &278 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 53} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &279 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 54} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &280 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 55} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &281 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 56} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &282 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 57} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &283 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 58} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &284 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 59} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &285 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 60} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &286 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 61} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &287 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 62} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &288 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 63} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &289 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 64} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &290 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 65} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &291 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 66} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &292 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 67} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &293 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 68} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &294 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 69} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &295 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 70} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &296 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 71} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &297 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 72} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &298 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 73} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &299 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 74} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &300 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 75} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &301 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 76} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &302 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 77} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &303 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 78} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &304 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 79} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &305 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 80} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &306 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 81} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &307 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 82} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &308 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 83} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &309 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 84} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &310 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 85} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &311 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 86} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &312 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 87} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &313 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 88} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &314 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 89} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &315 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300014, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 90} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 0f239eb41e29343e28970d1c5e9adede, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &316 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300016, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 91} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 0f239eb41e29343e28970d1c5e9adede, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &317 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300004, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 92} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 0f239eb41e29343e28970d1c5e9adede, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &318 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300006, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 93} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 0f239eb41e29343e28970d1c5e9adede, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &319 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300012, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 94} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 0f239eb41e29343e28970d1c5e9adede, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &320 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300000, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 95} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 0f239eb41e29343e28970d1c5e9adede, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &321 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300002, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 96} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 0f239eb41e29343e28970d1c5e9adede, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &322 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300008, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 97} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 0f239eb41e29343e28970d1c5e9adede, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &323 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300010, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 98} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 0f239eb41e29343e28970d1c5e9adede, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &324 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 2300018, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 99} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 0f239eb41e29343e28970d1c5e9adede, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &327 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 109} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 3219de2d574674beb889c87b844502b5, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 0.5 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!23 &328 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 112} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &334 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 5} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &338 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 12} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &339 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 13} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &340 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 14} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &341 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 15} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &342 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 16} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &343 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 17} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &344 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 18} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &345 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 19} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &346 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 20} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &347 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 21} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &348 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 22} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &349 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 23} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &350 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 24} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &351 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 25} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &352 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 26} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &353 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 27} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &354 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 28} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &355 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 29} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &356 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 30} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &357 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 31} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &358 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 32} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &359 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 33} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &360 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 34} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &361 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 35} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &362 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 36} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &363 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 37} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &364 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 38} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &365 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 39} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &366 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 40} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &367 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 41} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &368 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 42} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &369 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 43} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &370 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 44} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &371 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 47} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &372 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 48} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &373 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 49} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &374 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 50} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &375 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 51} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &376 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 52} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &377 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 53} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &378 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 54} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &379 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 55} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &380 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 56} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &381 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 57} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &382 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 58} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &383 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 59} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &384 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 60} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &385 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 61} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &386 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 62} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &387 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 63} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &388 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 64} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &389 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 65} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &390 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 66} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &391 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 67} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &392 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 68} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &393 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 69} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &394 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 70} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &395 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 71} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &396 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 72} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &397 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 73} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &398 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 74} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &399 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 75} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &400 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 76} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &401 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 77} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &402 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 78} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &403 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 79} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &404 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 80} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &405 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 81} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &406 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 82} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &407 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 83} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &408 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 84} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &409 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 85} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &410 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 86} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &411 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 87} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &412 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 88} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &413 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 89} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &414 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300014, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 90} - m_Mesh: {fileID: 4300004, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} ---- !u!33 &415 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300016, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 91} - m_Mesh: {fileID: 4300002, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} ---- !u!33 &416 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300004, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 92} - m_Mesh: {fileID: 4300014, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} ---- !u!33 &417 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300006, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 93} - m_Mesh: {fileID: 4300012, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} ---- !u!33 &418 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300012, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 94} - m_Mesh: {fileID: 4300006, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} ---- !u!33 &419 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300000, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 95} - m_Mesh: {fileID: 4300018, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} ---- !u!33 &420 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300002, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 96} - m_Mesh: {fileID: 4300016, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} ---- !u!33 &421 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300008, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 97} - m_Mesh: {fileID: 4300010, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} ---- !u!33 &422 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300010, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 98} - m_Mesh: {fileID: 4300008, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} ---- !u!33 &423 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 3300018, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 99} - m_Mesh: {fileID: 4300000, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} ---- !u!33 &424 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 109} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &425 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 112} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!114 &428 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 687e3bc0934ac46d3957e59872965f3c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!65 &429 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 5} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &430 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 12} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &431 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 13} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &432 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 14} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &433 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 15} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &434 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 16} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &435 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 17} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &436 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 18} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &437 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 19} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &438 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 20} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &439 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 21} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &440 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 22} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &441 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 23} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &442 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 24} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &443 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 25} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &444 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 26} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &445 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 27} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &446 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 28} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &447 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 29} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &448 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 30} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &449 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 31} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &450 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 32} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &451 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 33} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &452 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 34} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &453 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 35} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &454 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 36} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &455 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 37} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &456 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 38} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &457 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 39} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &458 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 40} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &459 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 41} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &460 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 42} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &461 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 43} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &462 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 44} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &463 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 47} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &464 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 48} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &465 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 49} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &466 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 50} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &467 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 51} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &468 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 52} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &469 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 53} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &470 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 54} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &471 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 55} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &472 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 56} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &473 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 57} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &474 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 58} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &475 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 59} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &476 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 60} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &477 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 61} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &478 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 62} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &479 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 63} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &480 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 64} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &481 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 65} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &482 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 66} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &483 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 67} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &484 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 68} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &485 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 69} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &486 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 70} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &487 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 71} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &488 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 72} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &489 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 73} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &490 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 74} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &491 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 75} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &492 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 76} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &493 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 77} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &494 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 78} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &495 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 79} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &496 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 80} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &497 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 81} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &498 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 82} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &499 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 83} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &500 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 84} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &501 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 85} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &502 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 86} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &503 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 87} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &504 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 88} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &505 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 89} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!65 &506 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 109} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 10, y: 0.002, z: 10} - m_Center: {x: 0, y: 0, z: 0} ---- !u!81 &508 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 108} - m_Enabled: 1 ---- !u!92 &510 -Behaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 108} - m_Enabled: 1 ---- !u!108 &520 -Light: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 110} - m_Enabled: 1 - serializedVersion: 8 - m_Type: 1 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 0.75663376 - m_Bias: 0.04891036 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 1 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 4 ---- !u!111 &522 -Animation: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 11100000, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 100} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: f8136785e54fd1d459d2a3a0849fe770, type: 3} - m_Animations: - - {fileID: 7400000, guid: caeffedc34d9f4161b7694ad0d84bbd3, type: 3} - - {fileID: 7400000, guid: 7e212db0aa2c00b448aa511ece336f20, type: 3} - - {fileID: 7400000, guid: a13fed205b1fa3942abfab7ba21463ec, type: 3} - - {fileID: 7400000, guid: 1da85f72a7a82bc4eabdbd8f0683bde2, type: 3} - - {fileID: 7400000, guid: b667956babf1f0446a76fa8b99404ab8, type: 3} - - {fileID: 7400000, guid: f8136785e54fd1d459d2a3a0849fe770, type: 3} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 0 - m_CullingType: 0 ---- !u!124 &525 -Behaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 108} - m_Enabled: 1 ---- !u!143 &526 -CharacterController: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 14300000, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 102} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Height: 0.87 - m_Radius: 0.35 - m_SlopeLimit: 45 - m_StepOffset: 0.5 - m_SkinWidth: 0.08 - m_MinMoveDistance: 0 - m_Center: {x: 0, y: 0.48, z: 0} ---- !u!114 &528 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 11400004, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 102} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 77f586f285b3847808d79083bd19ef1f, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 1 - unwrap: 1 - splitAtEveryPortal: 0 ---- !u!114 &530 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 11400002, guid: acada0fce8d404ed8b9182f16a02d435, - type: 2} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 102} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 373b52eb9bf8c40f785bb6947a1aee66, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 1 - drawGizmos: 1 - detailedGizmos: 0 - startEndModifier: - addPoints: 0 - exactStartPoint: 3 - exactEndPoint: 3 - useRaycasting: 0 - mask: - serializedVersion: 2 - m_Bits: 4294967295 - useGraphRaycasting: 0 - traversableTags: -1 - tagPenalties: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - graphMask: -1 ---- !u!114 &532 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 111} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 78396926cbbfc4ac3b48fc5fc34a87d1, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 1 - data: - dataString: UEsDBBQAAAgIAABAIexCS+W7zQEAAJkDAAALACQAZ3JhcGgwLmpzb24KACAAAAAAAAEAGAAAgD7V3rGdAQCAPtXesZ0BAIA+1d6xnQGVUk1v2zAM/SuGz1vhOKmX7bg06A5LM9g9FC12oCXaFipLmSw1aYL894mynXpYLz1JfOTjxyNPMWvAALNocuDCdfG3KLlafopippXVzmzgsDZGG4+nhKKUhThiCCNgD/IZSok/UNSN9fDs6noCr6RoyxBMaAuHQuodsedJb695jT9R1bahCgEUKsdaaDXUCSByYbW5FxIHdJZSk3YAHv5DHi+I65B4NJk1Dj1iUOILKHtrYNcUzlTAcKM5pY1v9J22Of5xwmBMsdB5bXzClZZScDSUpwLZ4dS5wa75p8LouEdjQKj3PAanDDakz0f/DVoQkqboleqe6U8TQr3praffZPYVCmh3F3HmVEhbsF5Fb56i+EA78Ojr8B7pjc7+V2nDkH/XTvFuhcqn+whjKDjEz5KRsRgpHgqkrtF7UmnrrBQK3wYnx50Xf6WVQkYdTxUeacOW3mgKwWBnC/+wZqvk68PjhFY7wfu2XkC6sFiW4jwpsyVkWTpbZOXnLxwXX1mVLhPGyuo6i0OfQgkrQP5CBdKOs/uTnaxQQRsy5sj8sqJwRXQq3MD+VhxbPVmrUJUumF+12vY5LoP5JYP06vF1OO0CrRWqJmp8Osfnv1BLAwQUAAAICAAAQCHsi8sxl2YAAABxAAAACQAkAG1ldGEuanNvbgoAIAAAAAAAAQAYAACAPtXesZ0BAIA+1d6xnQEAgD7V3rGdAatWKkstKs7Mz1OyUjDRM9QzNNNRUEovSizIKAaKGII4pZkpIHa0UrJRqrFBkplFopmZkaGJWZKueUqqiWVympGFQXJyUpqpmVIsUH1JZUGqX2JuKkRPgJteUGpyYnGJO8hMpdhaAFBLAQItABQAAAgIAABAIexCS+W7zQEAAJkDAAALACQAAAAAAAAAAAAAAAAAAABncmFwaDAuanNvbgoAIAAAAAAAAQAYAACAPtXesZ0BAIA+1d6xnQEAgD7V3rGdAVBLAQItABQAAAgIAABAIeyLyzGXZgAAAHEAAAAJACQAAAAAAAAAAAAAABoCAABtZXRhLmpzb24KACAAAAAAAAEAGAAAgD7V3rGdAQCAPtXesZ0BAIA+1d6xnQFQSwUGAAAAAAIAAgC4AAAAywIAAAAA - upgradeData: - file_cachedStartup: {fileID: 4900000, guid: 2524e2d7819833e4985fb7872def6656, - type: 3} - data_cachedStartup: - cacheStartup: 1 - showNavGraphs: 1 - showUnwalkableNodes: 1 - debugMode: 0 - debugFloor: 0 - debugRoof: 1 - manualDebugFloorRoof: 0 - showSearchTree: 1 - unwalkableNodeDebugSize: 0.3 - logPathResults: 1 - maxNearestNodeDistance: 4 - scanOnStartup: 1 - fullGetNearestSearch: 0 - prioritizeGraphs: 0 - prioritizeGraphsLimit: 1 - colorSettings: - _NodeConnection: {r: 0, g: 1, b: 0, a: 0.5} - _UnwalkableNode: {r: 0.99689525, g: 0, b: 0, a: 0.5} - _BoundsHandles: {r: 0.29, g: 0.454, b: 0.741, a: 0.9} - _ConnectionLowLerp: {r: 0, g: 1, b: 0, a: 0.5} - _ConnectionHighLerp: {r: 1, g: 0, b: 0, a: 0.5} - _MeshEdgeColor: {r: 0, g: 0, b: 0, a: 0.5} - _AreaColors: [] - tagNames: - - Basic Ground - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9 - - 10 - - 11 - - 12 - - 13 - - 14 - - 15 - - 16 - - 17 - - 18 - - 19 - - 20 - - 21 - - 22 - - 23 - - 24 - - 25 - - 26 - - 27 - - 28 - - 29 - - 30 - - 31 - heuristic: 2 - heuristicScale: 1 - threadCount: 0 - maxFrameTime: 1 - minAreaSize: 4 - batchGraphUpdates: 0 - graphUpdateBatchingInterval: 0.2 - euclideanEmbedding: - mode: 2 - seed: 0 - spreadOutCount: 10 - showGraphs: 1 ---- !u!114 &533 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f903c2eb621d8418d88f8dad81b13dc6, type: 3} - m_Name: - m_EditorClassIdentifier: - mask: - serializedVersion: 2 - m_Bits: 1 - target: {fileID: 226} - onlyOnDoubleClick: 1 - use2D: 0 ---- !u!196 &536 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666666 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 23800000, guid: ddfe2d991620b454b97694885504c548, type: 2} ---- !u!1 &97428509 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 97428513} - - component: {fileID: 97428512} - - component: {fileID: 97428511} - - component: {fileID: 97428510} - m_Layer: 8 - m_Name: Sphere (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &97428510 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 97428509} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &97428511 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 97428509} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &97428512 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 97428509} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &97428513 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 97428509} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -28.533, y: 0.049999997, z: -3.067} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &133779271 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 133779275} - - component: {fileID: 133779274} - - component: {fileID: 133779273} - - component: {fileID: 133779272} - m_Layer: 8 - m_Name: Sphere (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &133779272 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 133779271} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &133779273 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 133779271} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &133779274 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 133779271} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &133779275 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 133779271} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -27.16675, y: 1.5, z: -0.6643887} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &163726774 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 163726778} - - component: {fileID: 163726777} - - component: {fileID: 163726776} - - component: {fileID: 163726775} - m_Layer: 8 - m_Name: Sphere (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &163726775 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 163726774} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &163726776 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 163726774} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &163726777 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 163726774} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &163726778 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 163726774} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -39.7, y: 0.049999997, z: -39.9} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &267872797 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 267872798} - - component: {fileID: 267872800} - - component: {fileID: 267872799} - m_Layer: 0 - m_Name: Description - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &267872798 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 267872797} - m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} - m_LocalPosition: {x: 17.399673, y: 1.9949932, z: -26.08417} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 692086695} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &267872799 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 267872797} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!102 &267872800 -TextMesh: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 267872797} - m_Text: 'Toggle ''Show Graphs'' on the A* - - GameObject to show graphs - - But press ''Scan'' first, otherwise - - there will be no graphs to show' - m_OffsetZ: 0 - m_CharacterSize: 0.4 - m_LineSpacing: 1 - m_Anchor: 0 - m_Alignment: 0 - m_TabSize: 4 - m_FontSize: 15 - m_FontStyle: 0 - m_RichText: 1 - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_Color: - serializedVersion: 2 - rgba: 4294967295 ---- !u!1 &300046456 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 300046460} - - component: {fileID: 300046459} - - component: {fileID: 300046458} - - component: {fileID: 300046457} - m_Layer: 8 - m_Name: Sphere (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &300046457 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 300046456} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &300046458 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 300046456} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &300046459 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 300046456} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &300046460 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 300046456} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -20.867, y: 0.049999997, z: -2.733} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &373135828 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 373135832} - - component: {fileID: 373135831} - - component: {fileID: 373135830} - - component: {fileID: 373135829} - m_Layer: 8 - m_Name: Sphere - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &373135829 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 373135828} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &373135830 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 373135828} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &373135831 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 373135828} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &373135832 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 373135828} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -16.6, y: 0.049999997, z: -12.667} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &517080816 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 517080817} - m_Layer: 0 - m_Name: World - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &517080817 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 517080816} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 223} - - {fileID: 159} - m_Father: {fileID: 0} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &692086694 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 692086695} - m_Layer: 0 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &692086695 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 692086694} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2106762545} - - {fileID: 1963828706} - - {fileID: 1233227550} - - {fileID: 267872798} - - {fileID: 1847378300} - m_Father: {fileID: 0} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &909848451 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 909848455} - - component: {fileID: 909848454} - - component: {fileID: 909848453} - - component: {fileID: 909848452} - m_Layer: 8 - m_Name: Sphere (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &909848452 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 909848451} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &909848453 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 909848451} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &909848454 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 909848451} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &909848455 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 909848451} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -24, y: 0.049999997, z: -18.8} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &922290439 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 922290443} - - component: {fileID: 922290442} - - component: {fileID: 922290441} - - component: {fileID: 922290440} - m_Layer: 8 - m_Name: Sphere (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &922290440 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 922290439} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &922290441 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 922290439} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &922290442 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 922290439} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &922290443 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 922290439} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -23.4, y: 0.049999997, z: -18.2} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1233227549 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1233227550} - - component: {fileID: 1233227552} - - component: {fileID: 1233227551} - m_Layer: 0 - m_Name: Description - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1233227550 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1233227549} - m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} - m_LocalPosition: {x: 17.293255, y: 1.9949926, z: -20.127924} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 692086695} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1233227551 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1233227549} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!102 &1233227552 -TextMesh: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1233227549} - m_Text: 'The modifier components on the Player - - smooths and simplifies the path. - - Remove them to see the difference' - m_OffsetZ: 0 - m_CharacterSize: 0.33 - m_LineSpacing: 1 - m_Anchor: 0 - m_Alignment: 0 - m_TabSize: 4 - m_FontSize: 15 - m_FontStyle: 0 - m_RichText: 1 - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_Color: - serializedVersion: 2 - rgba: 4294967295 ---- !u!1001 &1280746451 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 400000, guid: deba0a6f7ec514207b7e850591a6f942, type: 2} - propertyPath: m_LocalPosition.x - value: -4.2824173 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: deba0a6f7ec514207b7e850591a6f942, type: 2} - propertyPath: m_LocalPosition.y - value: .645388603 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: deba0a6f7ec514207b7e850591a6f942, type: 2} - propertyPath: m_LocalPosition.z - value: -2.89640141 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: deba0a6f7ec514207b7e850591a6f942, type: 2} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: deba0a6f7ec514207b7e850591a6f942, type: 2} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: deba0a6f7ec514207b7e850591a6f942, type: 2} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: deba0a6f7ec514207b7e850591a6f942, type: 2} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: deba0a6f7ec514207b7e850591a6f942, type: 2} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: deba0a6f7ec514207b7e850591a6f942, type: 2} - m_IsPrefabParent: 0 ---- !u!1 &1288735058 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1288735062} - - component: {fileID: 1288735061} - - component: {fileID: 1288735060} - - component: {fileID: 1288735059} - m_Layer: 8 - m_Name: Sphere (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &1288735059 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1288735058} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &1288735060 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1288735058} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &1288735061 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1288735058} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1288735062 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1288735058} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -11.35859, y: 0.049999997, z: -10.45076} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1534293642 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1534293646} - - component: {fileID: 1534293645} - - component: {fileID: 1534293644} - - component: {fileID: 1534293643} - m_Layer: 8 - m_Name: Sphere - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &1534293643 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1534293642} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &1534293644 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1534293642} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &1534293645 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1534293642} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1534293646 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1534293642} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -15.733, y: 0.049999997, z: -6.4} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1606302577 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1606302581} - - component: {fileID: 1606302580} - - component: {fileID: 1606302579} - - component: {fileID: 1606302578} - m_Layer: 8 - m_Name: Sphere (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &1606302578 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1606302577} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &1606302579 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1606302577} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &1606302580 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1606302577} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1606302581 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1606302577} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -24.4, y: 0.049999997, z: -24.4} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1847378297 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1847378300} - - component: {fileID: 1847378299} - - component: {fileID: 1847378298} - m_Layer: 0 - m_Name: Description - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!132 &1847378298 -GUIText: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1847378297} - m_Enabled: 1 - serializedVersion: 3 - m_Text: 'Move the target around and the AI will follow it - - Press P to place an obstacle' - m_Anchor: 1 - m_Alignment: 1 - m_PixelOffset: {x: -5, y: -5} - m_LineSpacing: 1 - m_TabSize: 4 - m_Font: {fileID: 0} - m_Material: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Color: - serializedVersion: 2 - rgba: 4281545523 - m_PixelCorrect: 1 - m_RichText: 1 ---- !u!23 &1847378299 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1847378297} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!4 &1847378300 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1847378297} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.5, y: 1, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 692086695} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1963828705 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1963828706} - - component: {fileID: 1963828708} - - component: {fileID: 1963828707} - m_Layer: 0 - m_Name: Description - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1963828706 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1963828705} - m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} - m_LocalPosition: {x: -7.8457923, y: 1.9949914, z: -10.323018} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 692086695} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1963828707 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1963828705} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!102 &1963828708 -TextMesh: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1963828705} - m_Text: 'It''s the A* GameObject which has all - - the settings for the pathfinding graphs' - m_OffsetZ: 0 - m_CharacterSize: 0.7 - m_LineSpacing: 1 - m_Anchor: 0 - m_Alignment: 0 - m_TabSize: 4 - m_FontSize: 15 - m_FontStyle: 0 - m_RichText: 1 - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_Color: - serializedVersion: 2 - rgba: 4294967295 ---- !u!1 &2022651864 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 2022651865} - - component: {fileID: 2022651866} - m_Layer: 0 - m_Name: Helper - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2022651865 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2022651864} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1.9828298, y: 7.4577637, z: -4.823372} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2022651866 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2022651864} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c89de3babe23e46669cbf998c0200cad, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &2106762544 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 2106762545} - - component: {fileID: 2106762547} - - component: {fileID: 2106762546} - m_Layer: 0 - m_Name: Description - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2106762545 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2106762544} - m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} - m_LocalPosition: {x: 5.168248, y: 1.9949932, z: -26.08417} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 692086695} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &2106762546 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2106762544} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!102 &2106762547 -TextMesh: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 2106762544} - m_Text: 'The ''Repath Rate'' on the ''Player'' - - can be lowered for faster repaths' - m_OffsetZ: 0 - m_CharacterSize: 0.4 - m_LineSpacing: 1 - m_Anchor: 0 - m_Alignment: 0 - m_TabSize: 4 - m_FontSize: 15 - m_FontStyle: 0 - m_RichText: 1 - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_Color: - serializedVersion: 2 - rgba: 4294967295 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample.unity.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample.unity.meta deleted file mode 100644 index 8a6c8514c4539e4f52732951310f7f58479f1daa..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample.unity.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: d90ceba0148a049e3b56fcde2b55cec1 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample/LightmapFar-0.exr b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample/LightmapFar-0.exr deleted file mode 100644 index a1651ba5cee0f932b8bf712e951e861fd4a64bae..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample/LightmapFar-0.exr and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample/LightmapFar-0.exr.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample/LightmapFar-0.exr.meta deleted file mode 100644 index 6683a2614e2b7edaecabc2c6412893ce6660c913..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Example3_Recast_Navmesh1/RecastExample/LightmapFar-0.exr.meta +++ /dev/null @@ -1,47 +0,0 @@ -fileFormatVersion: 2 -guid: f78bce26cfc774d20a8ce6fece9be593 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 - textureSettings: - filterMode: 1 - aniso: 3 - mipBias: -1 - wrapMode: 1 - nPOTScale: 1 - lightmap: 1 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 6 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts.meta deleted file mode 100644 index 380db8472044e3878b02d60fc63a240e214b06bb..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: bffaacea0b950924586fa2e40c618c0e -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/MineBotAnimation.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/MineBotAnimation.cs deleted file mode 100644 index caae81e3bef6c6e29bcf629da9b01887c77f223a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/MineBotAnimation.cs +++ /dev/null @@ -1,102 +0,0 @@ -using UnityEngine; - -namespace Pathfinding.Examples { - /** Animation helper specifically made for the spider robot in the example scenes. - * The spider robot (or mine-bot) which has been copied from the Unity Example Project - * can have this script attached to be able to pathfind around with animations working properly.\n - * This script should be attached to a parent GameObject however since the original bot has Z+ as up. - * This component requires Z+ to be forward and Y+ to be up.\n - * - * A movement script (e.g AIPath) must also be attached to the same GameObject to actually move the unit. - * - * Animation is handled by this component. The Animation component refered to in #anim should have animations named "awake" and "forward". - * The forward animation will have it's speed modified by the velocity and scaled by #animationSpeed to adjust it to look good. - * The awake animation will only be sampled at the end frame and will not play.\n - * When the end of path is reached, if the #endOfPathEffect is not null, it will be instantiated at the current position. However a check will be - * done so that it won't spawn effects too close to the previous spawn-point. - * \shadowimage{mine-bot.png} - */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_examples_1_1_mine_bot_animation.php")] - public class MineBotAnimation : VersionedMonoBehaviour { - /** Animation component. - * Should hold animations "awake" and "forward" - */ - public Animation anim; - - /** Minimum velocity for moving */ - public float sleepVelocity = 0.4F; - - /** Speed relative to velocity with which to play animations */ - public float animationSpeed = 0.2F; - - /** Effect which will be instantiated when end of path is reached. - * \see OnTargetReached */ - public GameObject endOfPathEffect; - - bool isAtDestination; - - IAstarAI ai; - Transform tr; - - protected override void Awake () { - base.Awake(); - ai = GetComponent(); - tr = GetComponent(); - } - - void Start () { - // Prioritize the walking animation - anim["forward"].layer = 10; - - // Play all animations - anim.Play("awake"); - anim.Play("forward"); - - // Setup awake animations properties - anim["awake"].wrapMode = WrapMode.Clamp; - anim["awake"].speed = 0; - anim["awake"].normalizedTime = 1F; - } - - /** Point for the last spawn of #endOfPathEffect */ - protected Vector3 lastTarget; - - /** - * Called when the end of path has been reached. - * An effect (#endOfPathEffect) is spawned when this function is called - * However, since paths are recalculated quite often, we only spawn the effect - * when the current position is some distance away from the previous spawn-point - */ - void OnTargetReached () { - if (endOfPathEffect != null && Vector3.Distance(tr.position, lastTarget) > 1) { - GameObject.Instantiate(endOfPathEffect, tr.position, tr.rotation); - lastTarget = tr.position; - } - } - - protected void Update () { - if (ai.reachedEndOfPath) { - if (!isAtDestination) OnTargetReached(); - isAtDestination = true; - } else isAtDestination = false; - - // Calculate the velocity relative to this transform's orientation - Vector3 relVelocity = tr.InverseTransformDirection(ai.velocity); - relVelocity.y = 0; - - if (relVelocity.sqrMagnitude <= sleepVelocity*sleepVelocity) { - // Fade out walking animation - anim.Blend("forward", 0, 0.2F); - } else { - // Fade in walking animation - anim.Blend("forward", 1, 0.2F); - - // Modify animation speed to match velocity - AnimationState state = anim["forward"]; - - float speed = relVelocity.z; - state.speed = speed*animationSpeed; - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/MineBotAnimation.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/MineBotAnimation.cs.meta deleted file mode 100644 index 9fe7ec29c4905bfa88b9a2a41b57092b3bc4a26f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/MineBotAnimation.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8503d71a898994d3288ce1708e2707fe -timeCreated: 1516539312 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdate.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdate.cs deleted file mode 100644 index 7f764717a8f9c55be4e5b69f23c909648d382275..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdate.cs +++ /dev/null @@ -1,47 +0,0 @@ -using UnityEngine; - -namespace Pathfinding { - /** Updates the recast tile(s) it is in at start, needs RecastTileUpdateHandler. - * - * If there is a collider attached to the same GameObject, the bounds - * of that collider will be used for updating, otherwise - * only the position of the object will be used. - * - * \note This class needs a RecastTileUpdateHandler somewhere in the scene. - * See the documentation for that class, it contains more information. - * - * \note This does not use navmesh cutting. If you only ever add - * obstacles, but never add any new walkable surfaces then you might - * want to use navmesh cutting instead. See \ref navmeshcutting. - * - * \see RecastTileUpdateHandler - */ - [AddComponentMenu("Pathfinding/Navmesh/RecastTileUpdate")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_recast_tile_update.php")] - public class RecastTileUpdate : MonoBehaviour { - public static event System.Action OnNeedUpdates; - - void Start () { - ScheduleUpdate(); - } - - void OnDestroy () { - ScheduleUpdate(); - } - - /** Schedule a tile update for all tiles that contain this object */ - public void ScheduleUpdate () { - var collider = GetComponent(); - - if (collider != null) { - if (OnNeedUpdates != null) { - OnNeedUpdates(collider.bounds); - } - } else { - if (OnNeedUpdates != null) { - OnNeedUpdates(new Bounds(transform.position, Vector3.zero)); - } - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdate.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdate.cs.meta deleted file mode 100644 index a8e90b492b9936bac62c2fe987a867689ecccc0f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdate.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c17ca1d2569424ba1be3606fe1bb5c7d -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdateHandler.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdateHandler.cs deleted file mode 100644 index 1ecb008147fb01c912da78b539b92da4cbd9a78b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdateHandler.cs +++ /dev/null @@ -1,159 +0,0 @@ -using PF; -using UnityEngine; -using Mathf = UnityEngine.Mathf; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - /** Helper for easier fast updates to recast graphs. - * - * When updating recast graphs, you might just have plonked down a few - * GraphUpdateScene objects or issued a few GraphUpdateObjects to the - * system. This works fine if you are only issuing a few but the problem - * is that they don't have any coordination in between themselves. So if - * you have 10 GraphUpdateScene objects in one tile, they will all update - * that tile (10 times in total) instead of just updating it once which - * is all that is required (meaning it will be 10 times slower than just - * updating one tile). This script exists to help with updating only the - * tiles that need updating and only updating them once instead of - * multiple times. - * - * It is coupled with the RecastTileUpdate component, which works a bit - * like the GraphUpdateScene component, just with fewer options. You can - * attach the RecastTileUpdate to any GameObject to have it schedule an - * update for the tile(s) that contain the GameObject. E.g if you are - * creating a new building somewhere, you can attach the RecastTileUpdate - * component to it to make it update the graph when it is instantiated. - * - * If a single tile contains multiple RecastTileUpdate components and - * many try to update the graph at the same time, only one tile update - * will be done, which greatly improves performance. - * - * If you have objects that are instantiated at roughly the same time - * but not exactly the same frame, you can use the maxThrottlingDelay - * field. It will delay updates up to that number of seconds to allow - * more updates to be batched together. - * - * \note You should only have one instance of this script in the scene - * if you only have a single recast graph. If you have more than one - * graph you can have more than one instance of this script but you need - * to manually call the SetGraph method to configure it with the correct - * graph. - * - * \note This does not use navmesh cutting. If you only ever add - * obstacles, but never add any new walkable surfaces then you might - * want to use navmesh cutting instead. See \ref navmeshcutting. - */ - [AddComponentMenu("Pathfinding/Navmesh/RecastTileUpdateHandler")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_recast_tile_update_handler.php")] - public class RecastTileUpdateHandler : MonoBehaviour { - /** Graph that handles the updates */ - RecastGraph graph; - - /** True for a tile if it needs updating */ - bool[] dirtyTiles; - - /** True if any elements in dirtyTiles are true */ - bool anyDirtyTiles = false; - - /** Earliest update request we are handling right now */ - float earliestDirty = float.NegativeInfinity; - - /** All tile updates will be performed within (roughly) this number of seconds */ - public float maxThrottlingDelay = 0.5f; - - public void SetGraph (RecastGraph graph) { - this.graph = graph; - - if (graph == null) - return; - - dirtyTiles = new bool[graph.tileXCount*graph.tileZCount]; - anyDirtyTiles = false; - } - - /** Requests an update to all tiles which touch the specified bounds */ - public void ScheduleUpdate (Bounds bounds) { - if (graph == null) { - // If no graph has been set, use the first graph available - if (AstarPath.active != null) { - SetGraph(AstarPath.active.data.recastGraph); - } - - if (graph == null) { - Debug.LogError("Received tile update request (from RecastTileUpdate), but no RecastGraph could be found to handle it"); - return; - } - } - - // Make sure that tiles which do not strictly - // contain this bounds object but which still - // might need to be updated are actually updated - int voxelCharacterRadius = Mathf.CeilToInt(graph.characterRadius/graph.cellSize); - int borderSize = voxelCharacterRadius + 3; - - // Expand borderSize voxels on each side - bounds.Expand(new Vector3(borderSize, 0, borderSize)*graph.cellSize*2); - - var touching = graph.GetTouchingTiles(bounds); - - if (touching.Width * touching.Height > 0) { - if (!anyDirtyTiles) { - earliestDirty = Time.time; - anyDirtyTiles = true; - } - - for (int z = touching.ymin; z <= touching.ymax; z++) { - for (int x = touching.xmin; x <= touching.xmax; x++) { - dirtyTiles[z*graph.tileXCount + x] = true; - } - } - } - } - - void OnEnable () { - RecastTileUpdate.OnNeedUpdates += ScheduleUpdate; - } - - void OnDisable () { - RecastTileUpdate.OnNeedUpdates -= ScheduleUpdate; - } - - void Update () { - if (anyDirtyTiles && Time.time - earliestDirty >= maxThrottlingDelay && graph != null) { - UpdateDirtyTiles(); - } - } - - /** Update all dirty tiles now */ - public void UpdateDirtyTiles () { - if (graph == null) { - new System.InvalidOperationException("No graph is set on this object"); - } - - if (graph.tileXCount * graph.tileZCount != dirtyTiles.Length) { - Debug.LogError("Graph has changed dimensions. Clearing queued graph updates and resetting."); - SetGraph(graph); - return; - } - - for (int z = 0; z < graph.tileZCount; z++) { - for (int x = 0; x < graph.tileXCount; x++) { - if (dirtyTiles[z*graph.tileXCount + x]) { - dirtyTiles[z*graph.tileXCount + x] = false; - - var bounds = graph.GetTileBounds(x, z); - - // Shrink it a bit to make sure other tiles - // are not included because of rounding errors - bounds.extents *= 0.5f; - - var guo = new GraphUpdateObject(bounds); - guo.nnConstraint.graphMask = 1 << (int)graph.graphIndex; - } - } - } - - anyDirtyTiles = false; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdateHandler.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdateHandler.cs.meta deleted file mode 100644 index a135a25ad2a7e951b35c362926ebda008c4220f3..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/RecastTileUpdateHandler.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e5e3ec6ef8d2e4827b1645ee843bbe16 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/TargetMover.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/TargetMover.cs deleted file mode 100644 index e314babf71cd01e847cd51fff8f338277b23f8d6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/TargetMover.cs +++ /dev/null @@ -1,76 +0,0 @@ -using UnityEngine; -using System.Linq; - -namespace Pathfinding { - /** Moves the target in example scenes. - * This is a simple script which has the sole purpose - * of moving the target point of agents in the example - * scenes for the A* Pathfinding Project. - * - * It is not meant to be pretty, but it does the job. - */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_target_mover.php")] - public class TargetMover : MonoBehaviour { - /** Mask for the raycast placement */ - public LayerMask mask; - - public Transform target; - IAstarAI[] ais; - - /** Determines if the target position should be updated every frame or only on double-click */ - public bool onlyOnDoubleClick; - public bool use2D; - - Camera cam; - - public void Start () { - //Cache the Main Camera - cam = Camera.main; - // Slightly inefficient way of finding all AIs, but this is just an example script, so it doesn't matter much. - // FindObjectsOfType does not support interfaces unfortunately. - ais = FindObjectsOfType().OfType().ToArray(); - useGUILayout = false; - } - - public void OnGUI () { - if (onlyOnDoubleClick && cam != null && Event.current.type == EventType.MouseDown && Event.current.clickCount == 2) { - UpdateTargetPosition(); - } - } - - /** Update is called once per frame */ - void Update () { - if (!onlyOnDoubleClick && cam != null) { - UpdateTargetPosition(); - } - } - - public void UpdateTargetPosition () { - Vector3 newPosition = Vector3.zero; - bool positionFound = false; - - if (use2D) { - newPosition = cam.ScreenToWorldPoint(Input.mousePosition); - newPosition.z = 0; - positionFound = true; - } else { - // Fire a ray through the scene at the mouse position and place the target where it hits - RaycastHit hit; - if (Physics.Raycast(cam.ScreenPointToRay(Input.mousePosition), out hit, Mathf.Infinity, mask)) { - newPosition = hit.point; - positionFound = true; - } - } - - if (positionFound && newPosition != target.position) { - target.position = newPosition; - - if (onlyOnDoubleClick) { - for (int i = 0; i < ais.Length; i++) { - if (ais[i] != null) ais[i].SearchPath(); - } - } - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/TargetMover.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/TargetMover.cs.meta deleted file mode 100644 index 0fbd5b75a92fdc0cd64b9276161d44c14a48582a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/ExampleScripts/TargetMover.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f903c2eb621d8418d88f8dad81b13dc6 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials.meta deleted file mode 100644 index 5f082585546e7921ae9fc339088c407cf454ec16..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 9d36f2115bff26a4eae2225ce3032d3b -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/AI.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/AI.mat deleted file mode 100644 index b056c01779a0467c581c2381551279a8d7b137d7..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/AI.mat +++ /dev/null @@ -1,64 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: AI - m_Shader: {fileID: 4800000, guid: 5c4aad560e4da4a59aa10f6f2f6e84ce, type: 3} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _BumpMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _ParallaxMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - data: - first: - name: _Shininess - second: .284990668 - data: - first: - name: _Parallax - second: .0199999996 - m_Colors: - data: - first: - name: _Color - second: {r: .71938777, g: .451387316, b: 0, a: 1} - data: - first: - name: _SpecColor - second: {r: .5, g: .5, b: .5, a: 1} - data: - first: - name: _Emission - second: {r: 0, g: 0, b: 0, a: 0} - data: - first: - name: _NotVisibleColor - second: {r: 0, g: 1, b: 0, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/AI.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/AI.mat.meta deleted file mode 100644 index c2a317d0dba2b6bea26b9e649fa7dbebd4eb1dd5..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/AI.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: db55ebdb9473a4a80a0037f64aafccce diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueBox.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueBox.mat deleted file mode 100644 index 6c3a29c394bed792f8375a6e6d48989c6bd64ac3..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueBox.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: BlueBox - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .176163018, g: .421043277, b: .568627477, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueBox.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueBox.mat.meta deleted file mode 100644 index 63e67de810cbf61cec60893abeace4897b419ded..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueBox.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 99dbb3f3abc3c4845a9b650ff678e7c1 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueCheckerGround.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueCheckerGround.mat deleted file mode 100644 index 9ed22b8864309af2099de924646668a00be8da62..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueCheckerGround.mat +++ /dev/null @@ -1,42 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: BlueCheckerGround - m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 5 - m_CustomRenderQueue: -1 - stringTagMap: {} - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 2800000, guid: ee2523340e7944c4297a80937a51484c, type: 3} - m_Scale: {x: 110, y: 110} - m_Offset: {x: 0, y: 0} - m_Floats: - data: - first: - name: _InvFade - second: 3 - m_Colors: - data: - first: - name: _Color - second: {r: 1, g: 1, b: 1, a: 1} - data: - first: - name: _TintColor - second: {r: .0447761416, g: .0447761416, b: .0447761416, a: 1} - data: - first: - name: _EmisColor - second: {r: .649253726, g: .649253726, b: .649253726, a: .156862751} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueCheckerGround.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueCheckerGround.mat.meta deleted file mode 100644 index cd705ed06c93f42517af418ce188a6813ea75fcf..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueCheckerGround.mat.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 8f4d5503fdeab441e8c6c041504cf535 -NativeFormatImporter: - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueGround.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueGround.mat deleted file mode 100644 index 483cecf857e592e94113ad49cbae4a519deef7ec..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueGround.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: BlueGround - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 50, y: 50} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .194386765, g: .46459946, b: .627451003, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueGround.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueGround.mat.meta deleted file mode 100644 index 8a0cda783b63c9089c5ee69673cdf8fef20e3e6b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/BlueGround.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: b71b71b0a1f9a48768a27ca6eefcfbdf diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/DiffuseAlwaysVisible.shader b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/DiffuseAlwaysVisible.shader deleted file mode 100644 index 495ce6275fa522d15c9342dbdbede64e1aa25e77..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/DiffuseAlwaysVisible.shader +++ /dev/null @@ -1,45 +0,0 @@ -Shader "Diffuse - Always visible" { - Properties { - _NotVisibleColor ("X-ray color (RGB)", Color) = (0,1,0,1) - _Color ("Main Color",Color) = (0.5,0.5,0.5,1) - _MainTex ("Base (RGB)", 2D) = "white" {} - } - SubShader { - Tags { "RenderType"="Opaque-1" } - LOD 200 - - - - Pass { - ZTest LEqual - Material { - Diffuse [_Color] - Ambient [_Color] - } - Lighting On - - SetTexture [_MainTex] { - Combine texture * primary DOUBLE, texture * primary - } - } - - Pass { - - ZTest Greater - - Material { - Diffuse [_NotVisibleColor] - } - - Color [_NotVisibleColor] - - } - - - - - - - } - FallBack "Diffuse" -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/DiffuseAlwaysVisible.shader.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/DiffuseAlwaysVisible.shader.meta deleted file mode 100644 index 2960ae833a55929c47a43381a4d7af2e9971001a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/DiffuseAlwaysVisible.shader.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 5c4aad560e4da4a59aa10f6f2f6e84ce diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Door.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Door.mat deleted file mode 100644 index d3a7ad1432ac121f6d433c03137baed59a42493c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Door.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: Door - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .638857961, g: .854667306, b: 1, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Door.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Door.mat.meta deleted file mode 100644 index 8bd3e4b8d66eb909dfeb23ae85447db08fc0f24f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Door.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 863174fbef875425ca78e4c949f12318 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Ground.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Ground.mat deleted file mode 100644 index 4c37b249814364df5b187ee2b169a8e1f334b2fe..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Ground.mat +++ /dev/null @@ -1,80 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Ground - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 0.8134328, g: 0.80239576, b: 0.7345177, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Ground.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Ground.mat.meta deleted file mode 100644 index fcf5f9d4813a4c60f79d6de74f323b03df76c109..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Ground.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 3219de2d574674beb889c87b844502b5 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/GroundRTS.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/GroundRTS.mat deleted file mode 100644 index 979ff574d71b7590dc5a6e8e7317cb506fbafd1d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/GroundRTS.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: GroundRTS - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .922599792, g: .839560509, b: .747126341, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/GroundRTS.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/GroundRTS.mat.meta deleted file mode 100644 index 853e3bd829c53049fe79f9e642c6ad2dca2edb9c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/GroundRTS.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 48404990b059d4ad881cae67992eb592 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/OrangeGround.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/OrangeGround.mat deleted file mode 100644 index f439b677b375a57469ee10fc1acbe8a7c9cc1f02..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/OrangeGround.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: OrangeGround - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .776470602, g: .343709856, b: .185743943, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/OrangeGround.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/OrangeGround.mat.meta deleted file mode 100644 index 88857ab7f691729cd8de037ebd170ccadae3eed1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/OrangeGround.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 20e84239fa93246fe8f7f753e8ee4ef2 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathBlueArea.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathBlueArea.mat deleted file mode 100644 index 1ce4416f1cd0da1eaa2bf8b4bc00d733ab8a0965..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathBlueArea.mat +++ /dev/null @@ -1,42 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: PathBlueArea - m_Shader: {fileID: 6, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - data: - first: - name: _Shininess - second: .699999988 - m_Colors: - data: - first: - name: _Color - second: {r: 0, g: 0, b: 0, a: 1} - data: - first: - name: _SpecColor - second: {r: 1, g: 1, b: 1, a: 0} - data: - first: - name: _Emission - second: {r: .263175696, g: .324492931, b: .427450985, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathBlueArea.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathBlueArea.mat.meta deleted file mode 100644 index 18fe6581e0c0fb60cc39f9cff8083009bc413846..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathBlueArea.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 6e0bae036cdbd42bfb17a675c07df5f9 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathGreyCube.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathGreyCube.mat deleted file mode 100644 index 562eddca1cca032f569ac0f63f368c13a848a0ea..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathGreyCube.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: PathGreyCube - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .518715024, g: .518715024, b: .518715024, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathGreyCube.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathGreyCube.mat.meta deleted file mode 100644 index 4ebde37374f6fa99975721a84c9bd0b60bd991cd..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathGreyCube.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 48e8130f8426d4539a2879304cc512fb diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathRedArea.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathRedArea.mat deleted file mode 100644 index 264d287d80b2199f8513a1b7b7d382c2b5919cc3..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathRedArea.mat +++ /dev/null @@ -1,42 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: PathRedArea - m_Shader: {fileID: 6, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - data: - first: - name: _Shininess - second: .699999988 - m_Colors: - data: - first: - name: _Color - second: {r: 0, g: 0, b: 0, a: 1} - data: - first: - name: _SpecColor - second: {r: 1, g: 1, b: 1, a: 0} - data: - first: - name: _Emission - second: {r: .427450985, g: .263175696, b: .263175696, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathRedArea.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathRedArea.mat.meta deleted file mode 100644 index 0508109ab78dfbbc107ad011982166006eac89b5..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/PathRedArea.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: deda211578c2d47f69bee1211faed775 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Projector Light.shader b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Projector Light.shader deleted file mode 100644 index 58f19d3587c77da4ad2fd6027c2425172eb7aab9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Projector Light.shader +++ /dev/null @@ -1,26 +0,0 @@ -Shader "Projector/Light" { - Properties { - _Color ("Main Color", Color) = (1,1,1,1) - _ShadowTex ("Cookie", 2D) = "" { TexGen ObjectLinear } - _FalloffTex ("FallOff", 2D) = "" { TexGen ObjectLinear } - } - Subshader { - Pass { - ZWrite off - Fog { Color (0, 0, 0) } - Color [_Color] - ColorMask RGB - Blend DstColor One - Offset -1, -1 - SetTexture [_ShadowTex] { - combine texture * primary, ONE - texture - Matrix [_Projector] - } - SetTexture [_FalloffTex] { - constantColor (0,0,0,0) - combine previous lerp (texture) constant - Matrix [_ProjectorClip] - } - } - } -} \ No newline at end of file diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Projector Light.shader.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Projector Light.shader.meta deleted file mode 100644 index 7754281f7f4c3cfc26a05e4075f444dff691b97b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Projector Light.shader.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 2bec400a4eb5244d5b08b2425411bc8b diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/SomeBox.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/SomeBox.mat deleted file mode 100644 index ec42af89c2bc9bb6a885fb58cd481da2f7bf4db1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/SomeBox.mat +++ /dev/null @@ -1,42 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: SomeBox - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Detail: - m_Texture: {fileID: 2800000, guid: 527965173b00f43f9a1b8fc9e8c2e64b, type: 3} - m_Scale: {x: 10, y: 10} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: 527965173b00f43f9a1b8fc9e8c2e64b, type: 3} - m_Scale: {x: 15, y: 15} - m_Offset: {x: 0, y: 0} - m_Floats: - - _Shininess: 1 - m_Colors: - - _Color: {r: 1, g: 0.8, b: 0.4, a: 0.96862745} - - _NotVisibleColor: {r: 0, g: 1, b: 0, a: 1} - - _SpecColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/SomeBox.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/SomeBox.mat.meta deleted file mode 100644 index 52ce3b1ddcaa0375fb9b33f7b321709c3f1d3e03..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/SomeBox.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 86ebf3c4b42174d2a9d3c1dfd2476f32 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures.meta deleted file mode 100644 index e0cf884c04b1e5ea7c52e80ffe9e4380b4b9bccf..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: d9514d54a747aba4cb187ac73b08b817 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff-Reflected.psd b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff-Reflected.psd deleted file mode 100644 index 5aeca9d221c78537ad9edd5f87a9af4bda0e3eac..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff-Reflected.psd and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff-Reflected.psd.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff-Reflected.psd.meta deleted file mode 100644 index 9a5176c29db1db794b57cd2f25918787a6ad19d8..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff-Reflected.psd.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: 5d4852a517f1f496ebca302bd37b988a -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 1 - generateCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 - textureSettings: - filterMode: 1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - textureType: 5 - buildTargetSettings: [] diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff.psd b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff.psd deleted file mode 100644 index 2dea3342ec3b1c6899e884d4f7962493549deec4..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff.psd and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff.psd.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff.psd.meta deleted file mode 100644 index 06605eaed4a37dc2d1f0750973a127adf0f09e89..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Falloff.psd.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: 6f8825d71b24a41f79429012e915aab5 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 1 - generateCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 - textureSettings: - filterMode: 1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - textureType: 5 - buildTargetSettings: [] diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Shadow.psd b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Shadow.psd deleted file mode 100644 index 656dcb42c13f365eee0232a807d620c4b08383ec..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Shadow.psd and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Shadow.psd.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Shadow.psd.meta deleted file mode 100644 index ffa139ce3d5f394d1b75ba6ffba4c7e9bd484c85..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Textures/Shadow.psd.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: 741d7187968324981907bd5a897bb005 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 1 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 1 - generateCubemap: 0 - textureFormat: 4 - maxTextureSize: 32 - textureSettings: - filterMode: 1 - aniso: 0 - mipBias: -1 - wrapMode: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - textureType: 5 - buildTargetSettings: [] diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Wall.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Wall.mat deleted file mode 100644 index 1904a1d37bc2f7bbc9fa41a1c19730c85ae7e06b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Wall.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: Wall - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: 1, g: .840577126, b: .705201745, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Wall.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Wall.mat.meta deleted file mode 100644 index 48268e98fa922df6c6506d76364c8b8deb00031d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Materials/Wall.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: cf1ecd0b49db547c4b565a629c69a256 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs.meta deleted file mode 100644 index 5e8fdc52f87e54084349c67c7f5facd52938768c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 3656e0cc40fde734281b309e6ae4d651 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/DynamicObstacle.prefab b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/DynamicObstacle.prefab deleted file mode 100644 index 09cdc3d90b4b5a2571013e7e1735725d3f8cadab..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/DynamicObstacle.prefab +++ /dev/null @@ -1,189 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &100000 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 4 - m_Component: - - 4: {fileID: 400000} - m_Layer: 1 - m_Name: DynamicObstacle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1002 &100001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!1 &100002 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 4 - m_Component: - - 4: {fileID: 400002} - - 33: {fileID: 3300000} - - 65: {fileID: 6500000} - - 23: {fileID: 2300000} - - 111: {fileID: 11100000} - - 114: {fileID: 11400000} - - 54: {fileID: 5400000} - m_Layer: 1 - m_Name: SomeBox - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1002 &100003 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!4 &400000 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - m_LocalRotation: {x: 0, y: .653554201, z: 0, w: .756879747} - m_LocalPosition: {x: 65.2209015, y: 4.16080093, z: 174.764023} - m_LocalScale: {x: 5, y: 5, z: 5} - m_Children: - - {fileID: 400002} - m_Father: {fileID: 0} ---- !u!1002 &400001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!4 &400002 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 3, y: 2, z: 3} - m_Children: [] - m_Father: {fileID: 400000} ---- !u!1002 &400003 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!23 &2300000 -Renderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_LightmapIndex: 255 - m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} - m_Materials: - - {fileID: 2100000, guid: feabfa330ba7e4d4b87813ea1b42a974, type: 2} - m_SubsetIndices: - m_StaticBatchRoot: {fileID: 0} - m_UseLightProbes: 0 - m_LightProbeAnchor: {fileID: 0} - m_ScaleInLightmap: 1 ---- !u!1002 &2300001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!33 &3300000 -MeshFilter: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1002 &3300001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!54 &5400000 -Rigidbody: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - serializedVersion: 2 - m_Mass: 1 - m_Drag: 0 - m_AngularDrag: .0500000007 - m_UseGravity: 0 - m_IsKinematic: 1 - m_Interpolate: 0 - m_Constraints: 0 - m_CollisionDetection: 0 ---- !u!1002 &5400001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!65 &6500000 -BoxCollider: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!1002 &6500001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!111 &11100000 -Animation: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_Enabled: 1 - serializedVersion: 3 - m_Animation: {fileID: 7400000, guid: fca8a128acb4a4567ae3aacfdb0e4a13, type: 2} - m_Animations: - - {fileID: 7400000, guid: fca8a128acb4a4567ae3aacfdb0e4a13, type: 2} - m_WrapMode: 0 - m_PlayAutomatically: 1 - m_AnimatePhysics: 1 - m_CullingType: 0 - m_UserAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} ---- !u!1002 &11100001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100002} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 183748dd497aa473a98ff0cd8cb67fc5, type: 3} - m_Name: - m_EditorClassIdentifier: - updateError: .200000003 - checkTime: .100000001 ---- !u!1002 &11400001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 100000} - m_IsPrefabParent: 1 - m_IsExploded: 1 ---- !u!1002 &100100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/DynamicObstacle.prefab.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/DynamicObstacle.prefab.meta deleted file mode 100644 index 8bcc8f758ef6f47996ba41863ca1025d95ed38c9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/DynamicObstacle.prefab.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 4267c4f7628024c018e8bd0acd298526 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot.meta deleted file mode 100644 index a251c075b6d25aef08105ee45cf13d11147ccd97..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 242d9c7300823a0428bc2479b60ac8b1 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials.meta deleted file mode 100644 index faafeb72de82cf0fb5603e892dfcde05a8d9e1fa..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 00084ea111c8e314197b3a4c53e76fa0 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot.tif b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot.tif deleted file mode 100644 index b1f7ccbc1deef5e385d1e52d5ec1083aa3158e31..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot.tif and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot.tif.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot.tif.meta deleted file mode 100644 index fc65c3ed4e96e2f3fae50d2a637134794467f5f5..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot.tif.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: d7ab2029fbe34d0499a26f57de1f51d6 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - textureFormat: -1 - maxTextureSize: 512 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - textureType: 0 - buildTargetSettings: [] diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot_NRM.tif b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot_NRM.tif deleted file mode 100644 index 473e66cacdc8ce52b3fe89cc1c3ccdd16f342ea2..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot_NRM.tif and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot_NRM.tif.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot_NRM.tif.meta deleted file mode 100644 index daa23a1dc7d593f3628664aaee15b0c5d2d91a1a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/Minebot_NRM.tif.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: 7cec4fc9f20c5e145941cf016d68ff64 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 1 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - textureFormat: -1 - maxTextureSize: 256 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - textureType: 1 - buildTargetSettings: [] diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-01 - Default.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-01 - Default.mat deleted file mode 100644 index 97c95d4cd2ad5d9389df443d9b2ef8c90b3edbdf..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-01 - Default.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: mine_bot-01 - Default - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .588235319, g: .588235319, b: .588235319, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-01 - Default.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-01 - Default.mat.meta deleted file mode 100644 index 8facd35a3c77e73c64df1979c38c2ea48dc3df4f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-01 - Default.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 1829738127541482a895692670703544 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-minebot.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-minebot.mat deleted file mode 100644 index 346e104e16888e4f01bac820f0a3abfd16a1e0fa..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-minebot.mat +++ /dev/null @@ -1,74 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: mine_bot-minebot - m_Shader: {fileID: 13, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 2800000, guid: d7ab2029fbe34d0499a26f57de1f51d6, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _BumpMap - second: - m_Texture: {fileID: 2800000, guid: 7cec4fc9f20c5e145941cf016d68ff64, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _Illum - second: - m_Texture: {fileID: 2800000, guid: d7ab2029fbe34d0499a26f57de1f51d6, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _Cube - second: - m_Texture: {fileID: 8900000, guid: cf75cef0c04674bf88463d85196d8876, type: 2} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _Normal - second: - m_Texture: {fileID: 2800000, guid: 7cec4fc9f20c5e145941cf016d68ff64, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - data: - first: - name: _Shininess - second: .0858016536 - data: - first: - name: _EmissionLM - second: 0 - data: - first: - name: _SelfIllumination - second: 0 - m_Colors: - data: - first: - name: _Color - second: {r: 1, g: 1, b: 1, a: 1} - data: - first: - name: _SpecColor - second: {r: .5, g: .5, b: .5, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-minebot.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-minebot.mat.meta deleted file mode 100644 index 09a277410428617aa382817a16cc77f71a152aea..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot-minebot.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 0f239eb41e29343e28970d1c5e9adede diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@awake-01 - Default.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@awake-01 - Default.mat deleted file mode 100644 index 829c69afbe4784c5f23c29a783b4486c90b6ed8b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@awake-01 - Default.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: mine_bot@awake-01 - Default - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .588235319, g: .588235319, b: .588235319, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@awake-01 - Default.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@awake-01 - Default.mat.meta deleted file mode 100644 index 0f1177d85a1500b07e771f3f30a22e13b3dcc150..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@awake-01 - Default.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 67af7822a09c145bea7714196d07f476 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@back-01 - Default.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@back-01 - Default.mat deleted file mode 100644 index cff158edb12702a72852f13be0df7e1fcce198ea..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@back-01 - Default.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: mine_bot@back-01 - Default - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .588235319, g: .588235319, b: .588235319, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@back-01 - Default.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@back-01 - Default.mat.meta deleted file mode 100644 index f46053383dc178b105cc81d76a9a65e6eee00954..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@back-01 - Default.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 0d2961682f01448ef8b2bf2cc390a419 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@forward-01 - Default.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@forward-01 - Default.mat deleted file mode 100644 index 0f9bcf572bc1aed20389ea19b6d8d6f445162ef1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@forward-01 - Default.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: mine_bot@forward-01 - Default - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .588235319, g: .588235319, b: .588235319, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@forward-01 - Default.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@forward-01 - Default.mat.meta deleted file mode 100644 index 05eea841b56190255072587c971dda3cfad0f8b9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@forward-01 - Default.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 7c7ae9bbdf3d944e7877ee4243ac4801 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@left-01 - Default.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@left-01 - Default.mat deleted file mode 100644 index 07cb971d7902669e0e0ae1c8ac742265f329884d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@left-01 - Default.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: mine_bot@left-01 - Default - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .588235319, g: .588235319, b: .588235319, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@left-01 - Default.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@left-01 - Default.mat.meta deleted file mode 100644 index f7fc248f5d8bb69e20788068d7bf8bd10aec82af..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@left-01 - Default.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 84be6514d56e743dd9b8f1a1fca98f50 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@right-01 - Default.mat b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@right-01 - Default.mat deleted file mode 100644 index 99422f05f8fafe3754e3ad44c05da6d88c96df8e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@right-01 - Default.mat +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: mine_bot@right-01 - Default - m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: [] - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: {} - m_Colors: - data: - first: - name: _Color - second: {r: .588235319, g: .588235319, b: .588235319, a: 1} ---- !u!1002 &2100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@right-01 - Default.mat.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@right-01 - Default.mat.meta deleted file mode 100644 index d1c4de665d6795b3f317561c8c800719a2f40f03..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/Materials/mine_bot@right-01 - Default.mat.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: a0410f0ca50c248fbaad373ecfcf872b diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot.FBX b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot.FBX deleted file mode 100644 index 6c1483cdcd64e60cf0e703f141c11acdeadd0026..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot.FBX and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot.FBX.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot.FBX.meta deleted file mode 100644 index 7806d0e80e98769f80019c359252fe1928efc768..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot.FBX.meta +++ /dev/null @@ -1,271 +0,0 @@ -fileFormatVersion: 2 -guid: caeffedc34d9f4161b7694ad0d84bbd3 -ModelImporter: - serializedVersion: 19300 - internalIDToNameTable: - - first: - 43: 4300000 - second: minebot_main - - first: - 43: 4300002 - second: minebot_right_upperleg - - first: - 43: 4300004 - second: minebot_right_lowerleg - - first: - 43: 4300006 - second: minebot_head - - first: - 43: 4300008 - second: minebot_front_upperleg - - first: - 43: 4300010 - second: minebot_back_lowerleg - - first: - 43: 4300012 - second: minebot_left_upperleg - - first: - 43: 4300014 - second: minebot_left_lowerleg - - first: - 43: 4300016 - second: minebot_front_upperleg - - first: - 43: 4300018 - second: minebot_front_lowerleg - - first: - 74: 7400000 - second: Take 001 - - first: - 1001: 100100000 - second: DataTemplate __Singleton__ - - first: - 111: 11100000 - second: //RootNode - - first: - 4: 400014 - second: //RootNode - - first: - 1: 100014 - second: //RootNode - - first: - 23: 2300004 - second: minebot_back_lowerleg - - first: - 4: 400004 - second: minebot_back_lowerleg - - first: - 1: 100004 - second: minebot_back_lowerleg - - first: - 33: 3300004 - second: minebot_back_lowerleg - - first: - 23: 2300000 - second: minebot_front_lowerleg - - first: - 4: 400000 - second: minebot_front_lowerleg - - first: - 1: 100000 - second: minebot_front_lowerleg - - first: - 33: 3300000 - second: minebot_front_lowerleg - - first: - 23: 2300012 - second: minebot_front_upperleg - - first: - 4: 400012 - second: minebot_front_upperleg - - first: - 1: 100012 - second: minebot_front_upperleg - - first: - 33: 3300012 - second: minebot_front_upperleg - - first: - 23: 2300002 - second: minebot_front_upperleg 1 - - first: - 4: 400002 - second: minebot_front_upperleg 1 - - first: - 1: 100002 - second: minebot_front_upperleg 1 - - first: - 33: 3300002 - second: minebot_front_upperleg 1 - - first: - 23: 2300010 - second: minebot_head - - first: - 4: 400010 - second: minebot_head - - first: - 1: 100010 - second: minebot_head - - first: - 33: 3300010 - second: minebot_head - - first: - 23: 2300018 - second: minebot_left_lowerleg - - first: - 4: 400020 - second: minebot_left_lowerleg - - first: - 1: 100020 - second: minebot_left_lowerleg - - first: - 33: 3300018 - second: minebot_left_lowerleg - - first: - 23: 2300006 - second: minebot_left_upperleg - - first: - 4: 400006 - second: minebot_left_upperleg - - first: - 1: 100006 - second: minebot_left_upperleg - - first: - 33: 3300006 - second: minebot_left_upperleg - - first: - 23: 2300016 - second: minebot_main - - first: - 4: 400018 - second: minebot_main - - first: - 1: 100018 - second: minebot_main - - first: - 33: 3300016 - second: minebot_main - - first: - 23: 2300008 - second: minebot_right_lowerleg - - first: - 4: 400008 - second: minebot_right_lowerleg - - first: - 1: 100008 - second: minebot_right_lowerleg - - first: - 33: 3300008 - second: minebot_right_lowerleg - - first: - 23: 2300014 - second: minebot_right_upperleg - - first: - 4: 400016 - second: minebot_right_upperleg - - first: - 1: 100016 - second: minebot_right_upperleg - - first: - 33: 3300014 - second: minebot_right_upperleg - externalObjects: - - first: - type: UnityEngine:Material - assembly: UnityEngine.CoreModule - name: 01 - Default - second: {fileID: 2100000, guid: 1829738127541482a895692670703544, type: 2} - materials: - materialImportMode: 1 - materialName: 3 - materialSearch: 1 - materialLocation: 0 - animations: - legacyGenerateAnimations: 3 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 1 - meshes: - lODScreenPercentages: [] - globalScale: 0.01 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 0 - importBlendShapes: 1 - importCameras: 0 - importLights: 0 - swapUVChannels: 1 - generateSecondaryUV: 0 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - meshOptimizationFlags: -1 - indexFormat: 1 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVPackMargin: 4 - useFileScale: 0 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 4 - normalCalculationMode: 0 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: - - 7e212db0aa2c00b448aa511ece336f20 - - a13fed205b1fa3942abfab7ba21463ec - - 1da85f72a7a82bc4eabdbd8f0683bde2 - - b667956babf1f0446a76fa8b99404ab8 - - f8136785e54fd1d459d2a3a0849fe770 - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 0.01 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 1 - humanoidOversampling: 1 - avatarSetup: 0 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@awake.FBX b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@awake.FBX deleted file mode 100644 index 6c1483cdcd64e60cf0e703f141c11acdeadd0026..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@awake.FBX and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@awake.FBX.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@awake.FBX.meta deleted file mode 100644 index 7cf975d1fe1d64eb6465070c57a2211e9a495477..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@awake.FBX.meta +++ /dev/null @@ -1,190 +0,0 @@ -fileFormatVersion: 2 -guid: 7e212db0aa2c00b448aa511ece336f20 -ModelImporter: - fileIDToRecycleName: - 4300000: minebot_main - 4300002: minebot_right_upperleg - 4300004: minebot_right_lowerleg - 4300006: minebot_head - 4300008: minebot_front_upperleg - 4300010: minebot_back_lowerleg - 4300012: minebot_left_upperleg - 4300014: minebot_left_lowerleg - 4300016: minebot_front_upperleg - 4300018: minebot_front_lowerleg - 7400000: Take 001 //// mine_bot@awake - 100100000: DataTemplate __Singleton__ - serializedVersion: 10 - materials: - importMaterials: 1 - materialName: 3 - materialSearch: 1 - animations: - generateAnimations: 3 - bakeSimulation: 0 - splitAnimations: 0 - animationCompression: 1 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 - animationWrapMode: 8 - clipAnimations: [] - meshes: - lODScreenPercentages: [] - globalScale: .00999999978 - meshCompression: 0 - addColliders: 0 - swapUVChannels: 1 - generateSecondaryUV: 0 - useFileUnits: 1 - optimizeMesh: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVPackMargin: 4 - tangentSpace: - normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 - normalImportMode: 0 - tangentImportMode: 1 - textMetaNamesToFileIDs: - //RootNode: - data: - first: 1 - second: b4860100 - data: - first: 4 - second: 941a0600 - data: - first: 111 - second: 605fa900 - minebot_back_lowerleg: - data: - first: 1 - second: aa860100 - data: - first: 4 - second: 8a1a0600 - data: - first: 23 - second: 6a182300 - data: - first: 33 - second: aa5a3200 - minebot_front_lowerleg: - data: - first: 1 - second: a2860100 - data: - first: 4 - second: 821a0600 - data: - first: 23 - second: 62182300 - data: - first: 33 - second: a25a3200 - minebot_front_upperleg: - data: - first: 1 - second: ae860100 - data: - first: 4 - second: 8e1a0600 - data: - first: 23 - second: 6e182300 - data: - first: 33 - second: ae5a3200 - minebot_front_upperleg 1: - data: - first: 1 - second: a4860100 - data: - first: 4 - second: 841a0600 - data: - first: 23 - second: 64182300 - data: - first: 33 - second: a45a3200 - minebot_head: - data: - first: 1 - second: a6860100 - data: - first: 4 - second: 861a0600 - data: - first: 23 - second: 66182300 - data: - first: 33 - second: a65a3200 - minebot_left_lowerleg: - data: - first: 1 - second: a0860100 - data: - first: 4 - second: 801a0600 - data: - first: 23 - second: 60182300 - data: - first: 33 - second: a05a3200 - minebot_left_upperleg: - data: - first: 1 - second: a8860100 - data: - first: 4 - second: 881a0600 - data: - first: 23 - second: 68182300 - data: - first: 33 - second: a85a3200 - minebot_main: - data: - first: 1 - second: b2860100 - data: - first: 4 - second: 921a0600 - data: - first: 23 - second: 72182300 - data: - first: 33 - second: b25a3200 - minebot_right_lowerleg: - data: - first: 1 - second: ac860100 - data: - first: 4 - second: 8c1a0600 - data: - first: 23 - second: 6c182300 - data: - first: 33 - second: ac5a3200 - minebot_right_upperleg: - data: - first: 1 - second: b0860100 - data: - first: 4 - second: 901a0600 - data: - first: 23 - second: 70182300 - data: - first: 33 - second: b05a3200 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@back.FBX b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@back.FBX deleted file mode 100644 index 6c20f33a7b9e08f7f8d8e8f0c36219217da4a66d..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@back.FBX and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@back.FBX.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@back.FBX.meta deleted file mode 100644 index ccb36d4bbbc826814c1cc0f2803c1a923fca8229..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@back.FBX.meta +++ /dev/null @@ -1,190 +0,0 @@ -fileFormatVersion: 2 -guid: a13fed205b1fa3942abfab7ba21463ec -ModelImporter: - fileIDToRecycleName: - 4300000: minebot_main - 4300002: minebot_right_upperleg - 4300004: minebot_right_lowerleg - 4300006: minebot_head - 4300008: minebot_front_upperleg - 4300010: minebot_back_lowerleg - 4300012: minebot_left_upperleg - 4300014: minebot_left_lowerleg - 4300016: minebot_front_upperleg - 4300018: minebot_front_lowerleg - 7400000: Take 001 //// mine_bot@back - 100100000: DataTemplate __Singleton__ - serializedVersion: 10 - materials: - importMaterials: 1 - materialName: 3 - materialSearch: 1 - animations: - generateAnimations: 3 - bakeSimulation: 0 - splitAnimations: 0 - animationCompression: 1 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 - animationWrapMode: 2 - clipAnimations: [] - meshes: - lODScreenPercentages: [] - globalScale: .00999999978 - meshCompression: 0 - addColliders: 0 - swapUVChannels: 1 - generateSecondaryUV: 0 - useFileUnits: 1 - optimizeMesh: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVPackMargin: 4 - tangentSpace: - normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 - normalImportMode: 0 - tangentImportMode: 1 - textMetaNamesToFileIDs: - //RootNode: - data: - first: 1 - second: b2860100 - data: - first: 4 - second: 921a0600 - data: - first: 111 - second: 605fa900 - minebot_back_lowerleg: - data: - first: 1 - second: a6860100 - data: - first: 4 - second: 861a0600 - data: - first: 23 - second: 66182300 - data: - first: 33 - second: a65a3200 - minebot_front_lowerleg: - data: - first: 1 - second: a2860100 - data: - first: 4 - second: 821a0600 - data: - first: 23 - second: 62182300 - data: - first: 33 - second: a25a3200 - minebot_front_upperleg: - data: - first: 1 - second: ac860100 - data: - first: 4 - second: 8c1a0600 - data: - first: 23 - second: 6c182300 - data: - first: 33 - second: ac5a3200 - minebot_front_upperleg 1: - data: - first: 1 - second: a4860100 - data: - first: 4 - second: 841a0600 - data: - first: 23 - second: 64182300 - data: - first: 33 - second: a45a3200 - minebot_head: - data: - first: 1 - second: ae860100 - data: - first: 4 - second: 8e1a0600 - data: - first: 23 - second: 6e182300 - data: - first: 33 - second: ae5a3200 - minebot_left_lowerleg: - data: - first: 1 - second: a0860100 - data: - first: 4 - second: 801a0600 - data: - first: 23 - second: 60182300 - data: - first: 33 - second: a05a3200 - minebot_left_upperleg: - data: - first: 1 - second: a8860100 - data: - first: 4 - second: 881a0600 - data: - first: 23 - second: 68182300 - data: - first: 33 - second: a85a3200 - minebot_main: - data: - first: 1 - second: b4860100 - data: - first: 4 - second: 941a0600 - data: - first: 23 - second: 72182300 - data: - first: 33 - second: b25a3200 - minebot_right_lowerleg: - data: - first: 1 - second: b0860100 - data: - first: 4 - second: 901a0600 - data: - first: 23 - second: 70182300 - data: - first: 33 - second: b05a3200 - minebot_right_upperleg: - data: - first: 1 - second: aa860100 - data: - first: 4 - second: 8a1a0600 - data: - first: 23 - second: 6a182300 - data: - first: 33 - second: aa5a3200 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@forward.FBX b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@forward.FBX deleted file mode 100644 index 534e64ad25c851907d4ce9ccd25174743701daef..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@forward.FBX and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@forward.FBX.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@forward.FBX.meta deleted file mode 100644 index cd67e65963115b15f587f49db9713d458461f4c3..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@forward.FBX.meta +++ /dev/null @@ -1,190 +0,0 @@ -fileFormatVersion: 2 -guid: 1da85f72a7a82bc4eabdbd8f0683bde2 -ModelImporter: - fileIDToRecycleName: - 4300000: minebot_main - 4300002: minebot_right_upperleg - 4300004: minebot_right_lowerleg - 4300006: minebot_head - 4300008: minebot_front_upperleg - 4300010: minebot_back_lowerleg - 4300012: minebot_left_upperleg - 4300014: minebot_left_lowerleg - 4300016: minebot_front_upperleg - 4300018: minebot_front_lowerleg - 7400000: Take 001 //// mine_bot@forward - 100100000: DataTemplate __Singleton__ - serializedVersion: 10 - materials: - importMaterials: 1 - materialName: 3 - materialSearch: 1 - animations: - generateAnimations: 3 - bakeSimulation: 0 - splitAnimations: 0 - animationCompression: 1 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 - animationWrapMode: 2 - clipAnimations: [] - meshes: - lODScreenPercentages: [] - globalScale: .00999999978 - meshCompression: 0 - addColliders: 0 - swapUVChannels: 1 - generateSecondaryUV: 0 - useFileUnits: 1 - optimizeMesh: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVPackMargin: 4 - tangentSpace: - normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 - normalImportMode: 0 - tangentImportMode: 1 - textMetaNamesToFileIDs: - //RootNode: - data: - first: 1 - second: b0860100 - data: - first: 4 - second: 901a0600 - data: - first: 111 - second: 605fa900 - minebot_back_lowerleg: - data: - first: 1 - second: a4860100 - data: - first: 4 - second: 841a0600 - data: - first: 23 - second: 64182300 - data: - first: 33 - second: a45a3200 - minebot_front_lowerleg: - data: - first: 1 - second: a2860100 - data: - first: 4 - second: 821a0600 - data: - first: 23 - second: 62182300 - data: - first: 33 - second: a25a3200 - minebot_front_upperleg: - data: - first: 1 - second: ae860100 - data: - first: 4 - second: 8e1a0600 - data: - first: 23 - second: 6e182300 - data: - first: 33 - second: ae5a3200 - minebot_front_upperleg 1: - data: - first: 1 - second: a0860100 - data: - first: 4 - second: 801a0600 - data: - first: 23 - second: 60182300 - data: - first: 33 - second: a05a3200 - minebot_head: - data: - first: 1 - second: ac860100 - data: - first: 4 - second: 8c1a0600 - data: - first: 23 - second: 6c182300 - data: - first: 33 - second: ac5a3200 - minebot_left_lowerleg: - data: - first: 1 - second: a6860100 - data: - first: 4 - second: 861a0600 - data: - first: 23 - second: 66182300 - data: - first: 33 - second: a65a3200 - minebot_left_upperleg: - data: - first: 1 - second: a8860100 - data: - first: 4 - second: 881a0600 - data: - first: 23 - second: 68182300 - data: - first: 33 - second: a85a3200 - minebot_main: - data: - first: 1 - second: b4860100 - data: - first: 4 - second: 941a0600 - data: - first: 23 - second: 72182300 - data: - first: 33 - second: b25a3200 - minebot_right_lowerleg: - data: - first: 1 - second: aa860100 - data: - first: 4 - second: 8a1a0600 - data: - first: 23 - second: 6a182300 - data: - first: 33 - second: aa5a3200 - minebot_right_upperleg: - data: - first: 1 - second: b2860100 - data: - first: 4 - second: 921a0600 - data: - first: 23 - second: 70182300 - data: - first: 33 - second: b05a3200 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@left.FBX b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@left.FBX deleted file mode 100644 index 8fed3633e070ab8119aef5550c69382a614d7400..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@left.FBX and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@left.FBX.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@left.FBX.meta deleted file mode 100644 index 20d8b274d21aadfef32c17aacf782a73dbdb371e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@left.FBX.meta +++ /dev/null @@ -1,190 +0,0 @@ -fileFormatVersion: 2 -guid: b667956babf1f0446a76fa8b99404ab8 -ModelImporter: - fileIDToRecycleName: - 4300000: minebot_main - 4300002: minebot_right_upperleg - 4300004: minebot_right_lowerleg - 4300006: minebot_head - 4300008: minebot_front_upperleg - 4300010: minebot_back_lowerleg - 4300012: minebot_left_upperleg - 4300014: minebot_left_lowerleg - 4300016: minebot_front_upperleg - 4300018: minebot_front_lowerleg - 7400000: Take 001 //// mine_bot@left - 100100000: DataTemplate __Singleton__ - serializedVersion: 10 - materials: - importMaterials: 1 - materialName: 3 - materialSearch: 1 - animations: - generateAnimations: 3 - bakeSimulation: 0 - splitAnimations: 0 - animationCompression: 1 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 - animationWrapMode: 2 - clipAnimations: [] - meshes: - lODScreenPercentages: [] - globalScale: .00999999978 - meshCompression: 0 - addColliders: 0 - swapUVChannels: 1 - generateSecondaryUV: 0 - useFileUnits: 1 - optimizeMesh: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVPackMargin: 4 - tangentSpace: - normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 - normalImportMode: 0 - tangentImportMode: 1 - textMetaNamesToFileIDs: - //RootNode: - data: - first: 1 - second: b0860100 - data: - first: 4 - second: 901a0600 - data: - first: 111 - second: 605fa900 - minebot_back_lowerleg: - data: - first: 1 - second: a6860100 - data: - first: 4 - second: 861a0600 - data: - first: 23 - second: 66182300 - data: - first: 33 - second: a65a3200 - minebot_front_lowerleg: - data: - first: 1 - second: a2860100 - data: - first: 4 - second: 821a0600 - data: - first: 23 - second: 62182300 - data: - first: 33 - second: a25a3200 - minebot_front_upperleg: - data: - first: 1 - second: ae860100 - data: - first: 4 - second: 8e1a0600 - data: - first: 23 - second: 6e182300 - data: - first: 33 - second: ae5a3200 - minebot_front_upperleg 1: - data: - first: 1 - second: a4860100 - data: - first: 4 - second: 841a0600 - data: - first: 23 - second: 64182300 - data: - first: 33 - second: a45a3200 - minebot_head: - data: - first: 1 - second: ac860100 - data: - first: 4 - second: 8c1a0600 - data: - first: 23 - second: 6c182300 - data: - first: 33 - second: ac5a3200 - minebot_left_lowerleg: - data: - first: 1 - second: a0860100 - data: - first: 4 - second: 801a0600 - data: - first: 23 - second: 60182300 - data: - first: 33 - second: a05a3200 - minebot_left_upperleg: - data: - first: 1 - second: a8860100 - data: - first: 4 - second: 881a0600 - data: - first: 23 - second: 68182300 - data: - first: 33 - second: a85a3200 - minebot_main: - data: - first: 1 - second: b4860100 - data: - first: 4 - second: 941a0600 - data: - first: 23 - second: 72182300 - data: - first: 33 - second: b25a3200 - minebot_right_lowerleg: - data: - first: 1 - second: aa860100 - data: - first: 4 - second: 8a1a0600 - data: - first: 23 - second: 6a182300 - data: - first: 33 - second: aa5a3200 - minebot_right_upperleg: - data: - first: 1 - second: b2860100 - data: - first: 4 - second: 921a0600 - data: - first: 23 - second: 70182300 - data: - first: 33 - second: b05a3200 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@right.FBX b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@right.FBX deleted file mode 100644 index e9d23f8c7e56ace4af6b79a51759356be2a7609a..0000000000000000000000000000000000000000 Binary files a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@right.FBX and /dev/null differ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@right.FBX.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@right.FBX.meta deleted file mode 100644 index 7b96ab90561d15fe8d0a68a0674b28e4687d7fbf..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/MineBot/mine_bot@right.FBX.meta +++ /dev/null @@ -1,190 +0,0 @@ -fileFormatVersion: 2 -guid: f8136785e54fd1d459d2a3a0849fe770 -ModelImporter: - fileIDToRecycleName: - 4300000: minebot_main - 4300002: minebot_right_upperleg - 4300004: minebot_right_lowerleg - 4300006: minebot_head - 4300008: minebot_front_upperleg - 4300010: minebot_back_lowerleg - 4300012: minebot_left_upperleg - 4300014: minebot_left_lowerleg - 4300016: minebot_front_upperleg - 4300018: minebot_front_lowerleg - 7400000: Take 001 //// mine_bot@right - 100100000: DataTemplate __Singleton__ - serializedVersion: 10 - materials: - importMaterials: 1 - materialName: 3 - materialSearch: 1 - animations: - generateAnimations: 3 - bakeSimulation: 0 - splitAnimations: 0 - animationCompression: 1 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 - animationWrapMode: 2 - clipAnimations: [] - meshes: - lODScreenPercentages: [] - globalScale: .00999999978 - meshCompression: 0 - addColliders: 0 - swapUVChannels: 1 - generateSecondaryUV: 0 - useFileUnits: 1 - optimizeMesh: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVPackMargin: 4 - tangentSpace: - normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 - normalImportMode: 0 - tangentImportMode: 1 - textMetaNamesToFileIDs: - //RootNode: - data: - first: 1 - second: b2860100 - data: - first: 4 - second: 921a0600 - data: - first: 111 - second: 605fa900 - minebot_back_lowerleg: - data: - first: 1 - second: a2860100 - data: - first: 4 - second: 821a0600 - data: - first: 23 - second: 62182300 - data: - first: 33 - second: a25a3200 - minebot_front_lowerleg: - data: - first: 1 - second: a0860100 - data: - first: 4 - second: 801a0600 - data: - first: 23 - second: 60182300 - data: - first: 33 - second: a05a3200 - minebot_front_upperleg: - data: - first: 1 - second: a8860100 - data: - first: 4 - second: 881a0600 - data: - first: 23 - second: 68182300 - data: - first: 33 - second: a85a3200 - minebot_front_upperleg 1: - data: - first: 1 - second: a4860100 - data: - first: 4 - second: 841a0600 - data: - first: 23 - second: 64182300 - data: - first: 33 - second: a45a3200 - minebot_head: - data: - first: 1 - second: ae860100 - data: - first: 4 - second: 8e1a0600 - data: - first: 23 - second: 6e182300 - data: - first: 33 - second: ae5a3200 - minebot_left_lowerleg: - data: - first: 1 - second: a6860100 - data: - first: 4 - second: 861a0600 - data: - first: 23 - second: 66182300 - data: - first: 33 - second: a65a3200 - minebot_left_upperleg: - data: - first: 1 - second: aa860100 - data: - first: 4 - second: 8a1a0600 - data: - first: 23 - second: 6a182300 - data: - first: 33 - second: aa5a3200 - minebot_main: - data: - first: 1 - second: ac860100 - data: - first: 4 - second: 8c1a0600 - data: - first: 23 - second: 6c182300 - data: - first: 33 - second: ac5a3200 - minebot_right_lowerleg: - data: - first: 1 - second: b0860100 - data: - first: 4 - second: 901a0600 - data: - first: 23 - second: 70182300 - data: - first: 33 - second: b05a3200 - minebot_right_upperleg: - data: - first: 1 - second: b4860100 - data: - first: 4 - second: 941a0600 - data: - first: 23 - second: 72182300 - data: - first: 33 - second: b25a3200 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/SomeBox.prefab b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/SomeBox.prefab deleted file mode 100644 index c432aa42b7bbb1cf09cc78810bebdfd1bd268701..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/SomeBox.prefab +++ /dev/null @@ -1,110 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &100000 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 4 - m_Component: - - 4: {fileID: 400000} - - 33: {fileID: 3300000} - - 65: {fileID: 6500000} - - 23: {fileID: 2300000} - m_Layer: 1 - m_Name: SomeBox - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1002 &100001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!4 &400000 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - m_LocalRotation: {x: 0, y: .70710659, z: 0, w: -.707106948} - m_LocalPosition: {x: -14.2080498, y: 30.1014977, z: -48.9360771} - m_LocalScale: {x: 10, y: 3, z: 10} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 ---- !u!1002 &400001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!23 &2300000 -MeshRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_Materials: - - {fileID: 2100000, guid: 86ebf3c4b42174d2a9d3c1dfd2476f32, type: 2} - m_SubsetIndices: - m_StaticBatchRoot: {fileID: 0} - m_UseLightProbes: 0 - m_ReflectionProbeUsage: 1 - m_ProbeAnchor: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: .5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingOrder: 0 ---- !u!1002 &2300001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!33 &3300000 -MeshFilter: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1002 &3300001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!65 &6500000 -BoxCollider: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!1002 &6500001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 0} - propertyPath: m_LocalScale.y - value: 3 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 100000} - m_IsPrefabParent: 1 ---- !u!1002 &100100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/SomeBox.prefab.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/SomeBox.prefab.meta deleted file mode 100644 index f12b4b8a6c4131afc8d507334175a8b49aea3454..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/SomeBox.prefab.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: b1a1bb6d1bcc546df826488cc72438c3 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/TargetReachedEffect.prefab b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/TargetReachedEffect.prefab deleted file mode 100644 index 9a3fa2298b79ec25fcb75e325344ad42365db20e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/TargetReachedEffect.prefab +++ /dev/null @@ -1,146 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &100000 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 4 - m_Component: - - 4: {fileID: 400000} - - 15: {fileID: 1500000} - - 12: {fileID: 1200000} - - 26: {fileID: 2600000} - m_Layer: 0 - m_Name: TargetReachedEffect - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1002 &100001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!4 &400000 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -.342651248, y: .218500137, z: -23.426815} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} ---- !u!1002 &400001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!12 &1200000 -ParticleAnimator: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - Does Animate Color?: 1 - colorAnimation[0]: - serializedVersion: 2 - rgba: 167772160 - colorAnimation[1]: - serializedVersion: 2 - rgba: 3019898880 - colorAnimation[2]: - serializedVersion: 2 - rgba: 4278190080 - colorAnimation[3]: - serializedVersion: 2 - rgba: 3019898880 - colorAnimation[4]: - serializedVersion: 2 - rgba: 167772160 - worldRotationAxis: {x: 0, y: 0, z: 0} - localRotationAxis: {x: 0, y: 0, z: 0} - sizeGrow: 1 - rndForce: {x: 0, y: 0, z: 0} - force: {x: 0, y: 0, z: 0} - damping: .00100000005 - stopSimulation: 0 - autodestruct: 1 ---- !u!1002 &1200001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!15 &1500000 -EllipsoidParticleEmitter: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - serializedVersion: 2 - m_Enabled: 1 - m_Emit: 1 - minSize: .200000003 - maxSize: .400000006 - minEnergy: .200000003 - maxEnergy: .699999988 - minEmission: 100 - maxEmission: 100 - worldVelocity: {x: 0, y: 0, z: 0} - localVelocity: {x: 0, y: 0, z: 0} - rndVelocity: {x: 15, y: 0, z: 15} - emitterVelocityScale: .0500000007 - tangentVelocity: {x: 0, y: 0, z: 0} - angularVelocity: 0 - rndAngularVelocity: 0 - rndRotation: 0 - Simulate in Worldspace?: 1 - m_OneShot: 1 - m_Ellipsoid: {x: .100000001, y: 0, z: .100000001} - m_MinEmitterRange: 1 ---- !u!1002 &1500001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!26 &2600000 -ParticleRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 100000} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_LightmapIndex: 255 - m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} - m_Materials: - - {fileID: 10301, guid: 0000000000000000f000000000000000, type: 0} - m_SubsetIndices: - m_StaticBatchRoot: {fileID: 0} - m_UseLightProbes: 0 - m_LightProbeAnchor: {fileID: 0} - m_ScaleInLightmap: 1 - serializedVersion: 2 - m_CameraVelocityScale: 0 - m_StretchParticles: 4 - m_LengthScale: 2 - m_VelocityScale: 0 - m_MaxParticleSize: .25 - UV Animation: - x Tile: 1 - y Tile: 1 - cycles: 1 ---- !u!1002 &2600001 -EditorExtensionImpl: - serializedVersion: 6 ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 100000} - m_IsPrefabParent: 1 - m_IsExploded: 1 ---- !u!1002 &100100001 -EditorExtensionImpl: - serializedVersion: 6 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/TargetReachedEffect.prefab.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/TargetReachedEffect.prefab.meta deleted file mode 100644 index 1f322aa9eee603266f5785e6c42e82bdce9d73de..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/Prefabs/TargetReachedEffect.prefab.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 441e67a4721e749f0bca9581956f2729 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/_Example Scenes.txt b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/_Example Scenes.txt deleted file mode 100644 index 0344f5c1e7d9b557bdd28d13dea4d3a4a997895a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/_Example Scenes.txt +++ /dev/null @@ -1,2 +0,0 @@ -This folder contains a number of example scenes which I hope will help you get started with the A* Pathfinding Project easier and faster. -The folder is in no way required by the rest of the library and may be deleted if you wish. However in the ExampleScripts folder you might find useful scripts which you might want to keep. \ No newline at end of file diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/_Example Scenes.txt.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/_Example Scenes.txt.meta deleted file mode 100644 index f94c86634ea4389825497d8d4c97fb7e85995869..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/ExampleScenes/_Example Scenes.txt.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 6319be37e337542dbb990c039726bc8f diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators.meta deleted file mode 100644 index b315ee8e40a18a90719c57bbac94db517a249e4f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 543c10440cb8ef8409cc3e598ca58e1a -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities.meta deleted file mode 100644 index e972a3b2c90a802173d82758b96f2aa92735de45..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 3adb86935a6ec8545882ed1921777e28 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/ObjImporter.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/ObjImporter.cs deleted file mode 100644 index 6493831c4679c2d8c6581a275c02dbd9f3eeee5e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/ObjImporter.cs +++ /dev/null @@ -1,247 +0,0 @@ -/** This is a simple utility class for importing obj files into a Unity mesh at runtime. - * This version of ObjImporter first reads through the entire file, getting a count of how large - * the final arrays will be, and then uses standard arrays for everything (as opposed to ArrayLists - * or any other fancy things). - * \author el anónimo at the UnifyCommunity wiki (at least he seems to have created the page) - */ - -using UnityEngine; -using System.Collections.Generic; -using System.IO; -#if NETFX_CORE && !UNITY_EDITOR -//using MarkerMetro.Unity.WinLegacy.IO; -#endif - -namespace Pathfinding { - public class ObjImporter { - private struct meshStruct { - public Vector3[] vertices; - public Vector3[] normals; - public Vector2[] uv; - public Vector2[] uv1; - public Vector2[] uv2; - public int[] triangles; - public int[] faceVerts; - public int[] faceUVs; - public Vector3[] faceData; - public string name; - public string fileName; - } - - // Use this for initialization - public static Mesh ImportFile (string filePath) { -#if NETFX_CORE - throw new System.NotSupportedException("Method not available on this platform"); -#else - if (!File.Exists(filePath)) { - Debug.LogError("No file was found at '"+filePath+"'"); - return null; - } - - meshStruct newMesh = createMeshStruct(filePath); - populateMeshStruct(ref newMesh); - - Vector3[] newVerts = new Vector3[newMesh.faceData.Length]; - Vector2[] newUVs = new Vector2[newMesh.faceData.Length]; - Vector3[] newNormals = new Vector3[newMesh.faceData.Length]; - int i = 0; - /* The following foreach loops through the facedata and assigns the appropriate vertex, uv, or normal - * for the appropriate Unity mesh array. - */ - foreach (Vector3 v in newMesh.faceData) { - newVerts[i] = newMesh.vertices[(int)v.x - 1]; - if (v.y >= 1) - newUVs[i] = newMesh.uv[(int)v.y - 1]; - - if (v.z >= 1) - newNormals[i] = newMesh.normals[(int)v.z - 1]; - i++; - } - - Mesh mesh = new Mesh(); - - mesh.vertices = newVerts; - mesh.uv = newUVs; - mesh.normals = newNormals; - mesh.triangles = newMesh.triangles; - - mesh.RecalculateBounds(); - //mesh.Optimize(); - - return mesh; -#endif - } - - private static meshStruct createMeshStruct (string filename) { -#if NETFX_CORE - throw new System.NotSupportedException("Method not available on this platform"); -#else - int triangles = 0; - int vertices = 0; - int vt = 0; - int vn = 0; - int face = 0; - meshStruct mesh = new meshStruct(); - mesh.fileName = filename; - StreamReader stream = File.OpenText(filename); - string entireText = stream.ReadToEnd(); - stream.Dispose(); - using (StringReader reader = new StringReader(entireText)) - { - string currentText = reader.ReadLine(); - char[] splitIdentifier = { ' ' }; - string[] brokenString; - while (currentText != null) { - if (!currentText.StartsWith("f ") && !currentText.StartsWith("v ") && !currentText.StartsWith("vt ") - && !currentText.StartsWith("vn ")) { - currentText = reader.ReadLine(); - if (currentText != null) { - currentText = currentText.Replace(" ", " "); - } - } else { - currentText = currentText.Trim(); //Trim the current line - brokenString = currentText.Split(splitIdentifier, 50); //Split the line into an array, separating the original line by blank spaces - switch (brokenString[0]) { - case "v": - vertices++; - break; - case "vt": - vt++; - break; - case "vn": - vn++; - break; - case "f": - face = face + brokenString.Length - 1; - triangles = triangles + 3 * (brokenString.Length - 2); /*brokenString.Length is 3 or greater since a face must have at least - * 3 vertices. For each additional vertice, there is an additional - * triangle in the mesh (hence this formula).*/ - break; - } - currentText = reader.ReadLine(); - if (currentText != null) { - currentText = currentText.Replace(" ", " "); - } - } - } - } - mesh.triangles = new int[triangles]; - mesh.vertices = new Vector3[vertices]; - mesh.uv = new Vector2[vt]; - mesh.normals = new Vector3[vn]; - mesh.faceData = new Vector3[face]; - return mesh; -#endif - } - - private static void populateMeshStruct (ref meshStruct mesh) { -#if NETFX_CORE - throw new System.NotSupportedException("Method not available on this platform"); -#else - StreamReader stream = File.OpenText(mesh.fileName); - string entireText = stream.ReadToEnd(); - stream.Close(); - using (StringReader reader = new StringReader(entireText)) - { - string currentText = reader.ReadLine(); - - char[] splitIdentifier = { ' ' }; - char[] splitIdentifier2 = { '/' }; - string[] brokenString; - string[] brokenBrokenString; - int f = 0; - int f2 = 0; - int v = 0; - int vn = 0; - int vt = 0; - int vt1 = 0; - int vt2 = 0; - while (currentText != null) { - if (!currentText.StartsWith("f ") && !currentText.StartsWith("v ") && !currentText.StartsWith("vt ") && - !currentText.StartsWith("vn ") && !currentText.StartsWith("g ") && !currentText.StartsWith("usemtl ") && - !currentText.StartsWith("mtllib ") && !currentText.StartsWith("vt1 ") && !currentText.StartsWith("vt2 ") && - !currentText.StartsWith("vc ") && !currentText.StartsWith("usemap ")) { - currentText = reader.ReadLine(); - if (currentText != null) { - currentText = currentText.Replace(" ", " "); - } - } else { - currentText = currentText.Trim(); - brokenString = currentText.Split(splitIdentifier, 50); - switch (brokenString[0]) { - case "g": - break; - case "usemtl": - break; - case "usemap": - break; - case "mtllib": - break; - case "v": - mesh.vertices[v] = new Vector3(System.Convert.ToSingle(brokenString[1]), System.Convert.ToSingle(brokenString[2]), - System.Convert.ToSingle(brokenString[3])); - v++; - break; - case "vt": - mesh.uv[vt] = new Vector2(System.Convert.ToSingle(brokenString[1]), System.Convert.ToSingle(brokenString[2])); - vt++; - break; - case "vt1": - mesh.uv[vt1] = new Vector2(System.Convert.ToSingle(brokenString[1]), System.Convert.ToSingle(brokenString[2])); - vt1++; - break; - case "vt2": - mesh.uv[vt2] = new Vector2(System.Convert.ToSingle(brokenString[1]), System.Convert.ToSingle(brokenString[2])); - vt2++; - break; - case "vn": - mesh.normals[vn] = new Vector3(System.Convert.ToSingle(brokenString[1]), System.Convert.ToSingle(brokenString[2]), - System.Convert.ToSingle(brokenString[3])); - vn++; - break; - case "vc": - break; - case "f": - - int j = 1; - List intArray = new List(); - while (j < brokenString.Length && ("" + brokenString[j]).Length > 0) { - Vector3 temp = new Vector3(); - brokenBrokenString = brokenString[j].Split(splitIdentifier2, 3); //Separate the face into individual components (vert, uv, normal) - temp.x = System.Convert.ToInt32(brokenBrokenString[0]); - if (brokenBrokenString.Length > 1) { //Some .obj files skip UV and normal - if (brokenBrokenString[1] != "") { //Some .obj files skip the uv and not the normal - temp.y = System.Convert.ToInt32(brokenBrokenString[1]); - } - temp.z = System.Convert.ToInt32(brokenBrokenString[2]); - } - j++; - - mesh.faceData[f2] = temp; - intArray.Add(f2); - f2++; - } - j = 1; - while (j + 2 < brokenString.Length) { //Create triangles out of the face data. There will generally be more than 1 triangle per face. - mesh.triangles[f] = intArray[0]; - f++; - mesh.triangles[f] = intArray[j]; - f++; - mesh.triangles[f] = intArray[j+1]; - f++; - - j++; - } - break; - } - currentText = reader.ReadLine(); - if (currentText != null) { - currentText = currentText.Replace(" ", " "); //Some .obj files insert double spaces, this removes them. - } - } - } - } -#endif - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/ObjImporter.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/ObjImporter.cs.meta deleted file mode 100644 index 0855e8c26b8f59a6ac0ad7a94b900f8212901cb4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/ObjImporter.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a4ed1c6c3af454395b428ad955994366 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastBBTree.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastBBTree.cs deleted file mode 100644 index 5448770a5cb545e0b965afe3346137175cc811ac..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastBBTree.cs +++ /dev/null @@ -1,185 +0,0 @@ -using System; -using UnityEngine; -using System.Collections.Generic; - -namespace Pathfinding { - /** Axis Aligned Bounding Box Tree. - * Holds a bounding box tree of RecastMeshObj components.\n - * Note that it assumes that once an object has been added, it stays at the same - * world position. If it is moved, then it might not be able to be found. - * - * \astarpro - */ - public class RecastBBTree { - RecastBBTreeBox root; - - /** Queries the tree for all RecastMeshObjs inside the specified bounds. - * - * \param bounds World space bounds to search within - * \param buffer The results will be added to the buffer - */ - public void QueryInBounds (Rect bounds, List buffer) { - if (root == null) return; - QueryBoxInBounds(root, bounds, buffer); - } - - void QueryBoxInBounds (RecastBBTreeBox box, Rect bounds, List boxes) { - if (box.mesh != null) { - // Leaf node - if (RectIntersectsRect(box.rect, bounds)) { - // Found a RecastMeshObj, add it to the result - boxes.Add(box.mesh); - } - } else { - // Search children - if (RectIntersectsRect(box.c1.rect, bounds)) { - QueryBoxInBounds(box.c1, bounds, boxes); - } - - if (RectIntersectsRect(box.c2.rect, bounds)) { - QueryBoxInBounds(box.c2, bounds, boxes); - } - } - } - - /** Removes the specified mesh from the tree. - * Assumes that it has the correct bounds information. - * - * \returns True if the mesh was removed from the tree, false otherwise. - */ - public bool Remove (RecastMeshObj mesh) { - if (mesh == null) throw new ArgumentNullException("mesh"); - - if (root == null) { - return false; - } - - bool found = false; - Bounds b = mesh.GetBounds(); - //Convert to top down rect - Rect r = Rect.MinMaxRect(b.min.x, b.min.z, b.max.x, b.max.z); - - root = RemoveBox(root, mesh, r, ref found); - - return found; - } - - RecastBBTreeBox RemoveBox (RecastBBTreeBox c, RecastMeshObj mesh, Rect bounds, ref bool found) { - if (!RectIntersectsRect(c.rect, bounds)) { - return c; - } - - if (c.mesh == mesh) { - found = true; - return null; - } - - if (c.mesh == null && !found) { - c.c1 = RemoveBox(c.c1, mesh, bounds, ref found); - if (c.c1 == null) { - return c.c2; - } - - if (!found) { - c.c2 = RemoveBox(c.c2, mesh, bounds, ref found); - if (c.c2 == null) { - return c.c1; - } - } - - if (found) { - c.rect = ExpandToContain(c.c1.rect, c.c2.rect); - } - } - return c; - } - - /** Inserts a RecastMeshObj in the tree at its current position */ - public void Insert (RecastMeshObj mesh) { - var box = new RecastBBTreeBox(mesh); - - if (root == null) { - root = box; - return; - } - - RecastBBTreeBox c = root; - while (true) { - c.rect = ExpandToContain(c.rect, box.rect); - if (c.mesh != null) { - //Is Leaf - c.c1 = box; - var box2 = new RecastBBTreeBox(c.mesh); - c.c2 = box2; - - - c.mesh = null; - return; - } else { - float e1 = ExpansionRequired(c.c1.rect, box.rect); - float e2 = ExpansionRequired(c.c2.rect, box.rect); - - // Choose the rect requiring the least expansion to contain box.rect - if (e1 < e2) { - c = c.c1; - } else if (e2 < e1) { - c = c.c2; - } else { - // Equal, Choose the one with the smallest area - c = RectArea(c.c1.rect) < RectArea(c.c2.rect) ? c.c1 : c.c2; - } - } - } - } - - - static bool RectIntersectsRect (Rect r, Rect r2) { - return (r.xMax > r2.xMin && r.yMax > r2.yMin && r2.xMax > r.xMin && r2.yMax > r.yMin); - } - - /** Returns the difference in area between \a r and \a r expanded to contain \a r2 */ - static float ExpansionRequired (Rect r, Rect r2) { - float xMin = Mathf.Min(r.xMin, r2.xMin); - float xMax = Mathf.Max(r.xMax, r2.xMax); - float yMin = Mathf.Min(r.yMin, r2.yMin); - float yMax = Mathf.Max(r.yMax, r2.yMax); - - return (xMax-xMin)*(yMax-yMin)-RectArea(r); - } - - /** Returns a new rect which contains both \a r and \a r2 */ - static Rect ExpandToContain (Rect r, Rect r2) { - float xMin = Mathf.Min(r.xMin, r2.xMin); - float xMax = Mathf.Max(r.xMax, r2.xMax); - float yMin = Mathf.Min(r.yMin, r2.yMin); - float yMax = Mathf.Max(r.yMax, r2.yMax); - - return Rect.MinMaxRect(xMin, yMin, xMax, yMax); - } - - /** Returns the area of a rect */ - static float RectArea (Rect r) { - return r.width*r.height; - } - } - - public class RecastBBTreeBox { - public Rect rect; - public RecastMeshObj mesh; - - public RecastBBTreeBox c1; - public RecastBBTreeBox c2; - - public RecastBBTreeBox (RecastMeshObj mesh) { - this.mesh = mesh; - - Vector3 min = mesh.bounds.min; - Vector3 max = mesh.bounds.max; - rect = Rect.MinMaxRect(min.x, min.z, max.x, max.z); - } - - public bool Contains (Vector3 p) { - return rect.Contains(p); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastBBTree.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastBBTree.cs.meta deleted file mode 100644 index 50515caf862fb0e4ceaa752ab851cc2e1e716d4d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastBBTree.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 183e10f9cadca424792b5f940ce3fe3d -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshGatherer.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshGatherer.cs deleted file mode 100644 index b2fc9403f0a2756e43eabea3c3769f88884659fe..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshGatherer.cs +++ /dev/null @@ -1,564 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Mathf = UnityEngine.Mathf; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Quaternion = UnityEngine.Quaternion; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding.Recast { - using System; - using Pathfinding; - using Pathfinding.Voxels; - - internal class RecastMeshGatherer { - readonly int terrainSampleSize; - readonly LayerMask mask; - readonly List tagMask; - readonly float colliderRasterizeDetail; - readonly Bounds bounds; - - public RecastMeshGatherer (Bounds bounds, int terrainSampleSize, LayerMask mask, List tagMask, float colliderRasterizeDetail) { - // Clamp to at least 1 since that's the resolution of the heightmap - terrainSampleSize = Math.Max(terrainSampleSize, 1); - - this.bounds = bounds; - this.terrainSampleSize = terrainSampleSize; - this.mask = mask; - this.tagMask = tagMask ?? new List(); - this.colliderRasterizeDetail = colliderRasterizeDetail; - } - - static List FilterMeshes (MeshFilter[] meshFilters, List tagMask, LayerMask layerMask) { - var filtered = new List(meshFilters.Length / 3); - - for (int i = 0; i < meshFilters.Length; i++) { - MeshFilter filter = meshFilters[i]; - Renderer rend = filter.GetComponent(); - - if (rend != null && filter.sharedMesh != null && rend.enabled && (((1 << filter.gameObject.layer) & layerMask) != 0 || tagMask.Contains(filter.tag))) { - if (filter.GetComponent() == null) { - filtered.Add(filter); - } - } - } - - return filtered; - } - - public void CollectSceneMeshes (List meshes) { - if (tagMask.Count > 0 || mask != 0) { - // This is unfortunately the fastest way to find all mesh filters.. and it is not particularly fast. - var meshFilters = GameObject.FindObjectsOfType(); - var filteredMeshes = FilterMeshes(meshFilters, tagMask, mask); - - var cachedVertices = new Dictionary(); - var cachedTris = new Dictionary(); - - bool containedStatic = false; - - for (int i = 0; i < filteredMeshes.Count; i++) { - MeshFilter filter = filteredMeshes[i]; - - // Note, guaranteed to have a renderer - Renderer rend = filter.GetComponent(); - - if (rend.isPartOfStaticBatch) { - // Statically batched meshes cannot be used due to Unity limitations - // log a warning about this - containedStatic = true; - } else { - // Only include it if it intersects with the graph - if (rend.bounds.Intersects(bounds)) { - Mesh mesh = filter.sharedMesh; - RasterizationMesh smesh; - - // Check the cache to avoid allocating - // a new array unless necessary - if (cachedVertices.ContainsKey(mesh)) { - smesh = new RasterizationMesh(cachedVertices[mesh], cachedTris[mesh], rend.bounds); - } else { - smesh = new RasterizationMesh(mesh.vertices, mesh.triangles, rend.bounds); - cachedVertices[mesh] = smesh.vertices; - cachedTris[mesh] = smesh.triangles; - } - - smesh.matrix = rend.localToWorldMatrix; - smesh.original = filter; - meshes.Add(smesh); - } - } - - if (containedStatic) - Debug.LogWarning("Some meshes were statically batched. These meshes can not be used for navmesh calculation" + - " due to technical constraints.\nDuring runtime scripts cannot access the data of meshes which have been statically batched.\n" + - "One way to solve this problem is to use cached startup (Save & Load tab in the inspector) to only calculate the graph when the game is not playing."); - } - - #if ASTARDEBUG - int y = 0; - foreach (RasterizationMesh smesh in meshes) { - y++; - Vector3[] vecs = smesh.vertices; - int[] tris = smesh.triangles; - - for (int i = 0; i < tris.Length; i += 3) { - Vector3 p1 = smesh.matrix.MultiplyPoint3x4(vecs[tris[i+0]]); - Vector3 p2 = smesh.matrix.MultiplyPoint3x4(vecs[tris[i+1]]); - Vector3 p3 = smesh.matrix.MultiplyPoint3x4(vecs[tris[i+2]]); - - Debug.DrawLine(p1, p2, Color.red, 1); - Debug.DrawLine(p2, p3, Color.red, 1); - Debug.DrawLine(p3, p1, Color.red, 1); - } - } - #endif - } - } - - /** Find all relevant RecastMeshObj components and create ExtraMeshes for them */ - public void CollectRecastMeshObjs (List buffer) { - var buffer2 = ListPool.Claim(); - - // Get all recast mesh objects inside the bounds - RecastMeshObj.GetAllInBounds(buffer2, bounds); - - var cachedVertices = new Dictionary(); - var cachedTris = new Dictionary(); - - // Create an RasterizationMesh object - // for each RecastMeshObj - for (int i = 0; i < buffer2.Count; i++) { - MeshFilter filter = buffer2[i].GetMeshFilter(); - Renderer rend = filter != null ? filter.GetComponent() : null; - - if (filter != null && rend != null) { - Mesh mesh = filter.sharedMesh; - RasterizationMesh smesh; - - // Don't read the vertices and triangles from the - // mesh if we have seen the same mesh previously - if (cachedVertices.ContainsKey(mesh)) { - smesh = new RasterizationMesh(cachedVertices[mesh], cachedTris[mesh], rend.bounds); - } else { - smesh = new RasterizationMesh(mesh.vertices, mesh.triangles, rend.bounds); - cachedVertices[mesh] = smesh.vertices; - cachedTris[mesh] = smesh.triangles; - } - - smesh.matrix = rend.localToWorldMatrix; - smesh.original = filter; - smesh.area = buffer2[i].area; - buffer.Add(smesh); - } else { - Collider coll = buffer2[i].GetCollider(); - - if (coll == null) { - Debug.LogError("RecastMeshObject ("+buffer2[i].gameObject.name +") didn't have a collider or MeshFilter+Renderer attached", buffer2[i].gameObject); - continue; - } - - RasterizationMesh smesh = RasterizeCollider(coll); - - // Make sure a valid RasterizationMesh was returned - if (smesh != null) { - smesh.area = buffer2[i].area; - buffer.Add(smesh); - } - } - } - - // Clear cache to avoid memory leak - capsuleCache.Clear(); - - ListPool.Release(ref buffer2); - } - - public void CollectTerrainMeshes (bool rasterizeTrees, float desiredChunkSize, List result) { - // Find all terrains in the scene - var terrains = Terrain.activeTerrains; - - if (terrains.Length > 0) { - // Loop through all terrains in the scene - for (int j = 0; j < terrains.Length; j++) { - if (terrains[j].terrainData == null) continue; - - GenerateTerrainChunks(terrains[j], bounds, desiredChunkSize, result); - - if (rasterizeTrees) { - // Rasterize all tree colliders on this terrain object - CollectTreeMeshes(terrains[j], result); - } - } - } - } - - void GenerateTerrainChunks (Terrain terrain, Bounds bounds, float desiredChunkSize, List result) { - var terrainData = terrain.terrainData; - - if (terrainData == null) - throw new System.ArgumentException("Terrain contains no terrain data"); - - Vector3 offset = terrain.GetPosition(); - Vector3 center = offset + terrainData.size * 0.5F; - - // Figure out the bounds of the terrain in world space - var terrainBounds = new Bounds(center, terrainData.size); - - // Only include terrains which intersects the graph - if (!terrainBounds.Intersects(bounds)) - return; - - // Original heightmap size - int heightmapWidth = terrainData.heightmapResolution; - int heightmapDepth = terrainData.heightmapResolution; - - // Sample the terrain heightmap - float[, ] heights = terrainData.GetHeights(0, 0, heightmapWidth, heightmapDepth); - - Vector3 sampleSize = terrainData.heightmapScale; - sampleSize.y = terrainData.size.y; - - // Make chunks at least 12 quads wide - // since too small chunks just decreases performance due - // to the overhead of checking for bounds and similar things - const int MinChunkSize = 12; - - // Find the number of samples along each edge that corresponds to a world size of desiredChunkSize - // Then round up to the nearest multiple of terrainSampleSize - var chunkSizeAlongX = Mathf.CeilToInt(Mathf.Max(desiredChunkSize / (sampleSize.x * terrainSampleSize), MinChunkSize)) * terrainSampleSize; - var chunkSizeAlongZ = Mathf.CeilToInt(Mathf.Max(desiredChunkSize / (sampleSize.z * terrainSampleSize), MinChunkSize)) * terrainSampleSize; - - for (int z = 0; z < heightmapDepth; z += chunkSizeAlongZ) { - for (int x = 0; x < heightmapWidth; x += chunkSizeAlongX) { - var width = Mathf.Min(chunkSizeAlongX, heightmapWidth - x); - var depth = Mathf.Min(chunkSizeAlongZ, heightmapDepth - z); - var chunkMin = offset + new Vector3(z * sampleSize.x, 0, x * sampleSize.z); - var chunkMax = offset + new Vector3((z + depth) * sampleSize.x, sampleSize.y, (x + width) * sampleSize.z); - var chunkBounds = new Bounds(); - chunkBounds.SetMinMax(chunkMin, chunkMax); - - // Skip chunks that are not inside the desired bounds - if (chunkBounds.Intersects(bounds)) { - var chunk = GenerateHeightmapChunk(heights, sampleSize, offset, x, z, width, depth, terrainSampleSize); - result.Add(chunk); - } - } - } - } - - /** Returns ceil(lhs/rhs), i.e lhs/rhs rounded up */ - static int CeilDivision (int lhs, int rhs) { - return (lhs + rhs - 1)/rhs; - } - - /** Generates a terrain chunk mesh */ - RasterizationMesh GenerateHeightmapChunk (float[, ] heights, Vector3 sampleSize, Vector3 offset, int x0, int z0, int width, int depth, int stride) { - // Downsample to a smaller mesh (full resolution will take a long time to rasterize) - // Round up the width to the nearest multiple of terrainSampleSize and then add 1 - // (off by one because there are vertices at the edge of the mesh) - int resultWidth = CeilDivision(width, terrainSampleSize) + 1; - int resultDepth = CeilDivision(depth, terrainSampleSize) + 1; - - var heightmapWidth = heights.GetLength(0); - var heightmapDepth = heights.GetLength(1); - - // Create a mesh from the heightmap - var numVerts = resultWidth * resultDepth; - var terrainVertices = ArrayPool.Claim(numVerts); - - // Create lots of vertices - for (int z = 0; z < resultDepth; z++) { - for (int x = 0; x < resultWidth; x++) { - int sampleX = Math.Min(x0 + x*stride, heightmapWidth-1); - int sampleZ = Math.Min(z0 + z*stride, heightmapDepth-1); - - terrainVertices[z*resultWidth + x] = new Vector3(sampleZ * sampleSize.x, heights[sampleX, sampleZ]*sampleSize.y, sampleX * sampleSize.z) + offset; - } - } - - // Create the mesh by creating triangles in a grid like pattern - int numTris = (resultWidth-1)*(resultDepth-1)*2*3; - var tris = ArrayPool.Claim(numTris); - int triangleIndex = 0; - for (int z = 0; z < resultDepth-1; z++) { - for (int x = 0; x < resultWidth-1; x++) { - tris[triangleIndex] = z*resultWidth + x; - tris[triangleIndex+1] = z*resultWidth + x+1; - tris[triangleIndex+2] = (z+1)*resultWidth + x+1; - triangleIndex += 3; - tris[triangleIndex] = z*resultWidth + x; - tris[triangleIndex+1] = (z+1)*resultWidth + x+1; - tris[triangleIndex+2] = (z+1)*resultWidth + x; - triangleIndex += 3; - } - } - -#if ASTARDEBUG - var color = AstarMath.IntToColor(x0 + 7 * z0, 0.7f); - for (int i = 0; i < numTris; i += 3) { - Debug.DrawLine(terrainVertices[tris[i]], terrainVertices[tris[i+1]], color, 40); - Debug.DrawLine(terrainVertices[tris[i+1]], terrainVertices[tris[i+2]], color, 40); - Debug.DrawLine(terrainVertices[tris[i+2]], terrainVertices[tris[i]], color, 40); - } -#endif - - var mesh = new RasterizationMesh(terrainVertices, tris, new Bounds()); - mesh.numVertices = numVerts; - mesh.numTriangles = numTris; - mesh.pool = true; - // Could probably calculate these bounds in a faster way - mesh.RecalculateBounds(); - return mesh; - } - - void CollectTreeMeshes (Terrain terrain, List result) { - TerrainData data = terrain.terrainData; - - for (int i = 0; i < data.treeInstances.Length; i++) { - TreeInstance instance = data.treeInstances[i]; - TreePrototype prot = data.treePrototypes[instance.prototypeIndex]; - - // Make sure that the tree prefab exists - if (prot.prefab == null) { - continue; - } - - var collider = prot.prefab.GetComponent(); - var treePosition = terrain.transform.position + Vector3.Scale(instance.position, data.size); - - if (collider == null) { - var instanceBounds = new Bounds(terrain.transform.position + Vector3.Scale(instance.position, data.size), new Vector3(instance.widthScale, instance.heightScale, instance.widthScale)); - - Matrix4x4 matrix = Matrix4x4.TRS(treePosition, Quaternion.identity, new Vector3(instance.widthScale, instance.heightScale, instance.widthScale)*0.5f); - - var mesh = new RasterizationMesh(BoxColliderVerts, BoxColliderTris, instanceBounds, matrix); - - result.Add(mesh); - } else { - // The prefab has a collider, use that instead - var scale = new Vector3(instance.widthScale, instance.heightScale, instance.widthScale); - - // Generate a mesh from the collider - RasterizationMesh mesh = RasterizeCollider(collider, Matrix4x4.TRS(treePosition, Quaternion.identity, scale)); - - // Make sure a valid mesh was generated - if (mesh != null) { - // The bounds are incorrectly based on collider.bounds. - // It is incorrect because the collider is on the prefab, not on the tree instance - // so we need to recalculate the bounds based on the actual vertex positions - mesh.RecalculateBounds(); - result.Add(mesh); - } - } - } - } - - public void CollectColliderMeshes (List result) { - /** \todo Use Physics.OverlapBox on newer Unity versions */ - // Find all colliders that could possibly be inside the bounds - var colls = Physics.OverlapSphere(bounds.center, bounds.size.magnitude, -1, QueryTriggerInteraction.Ignore); - - if (tagMask.Count > 0 || mask != 0) { - for (int i = 0; i < colls.Length; i++) { - Collider collider = colls[i]; - - if ((((mask >> collider.gameObject.layer) & 1) != 0 || tagMask.Contains(collider.tag)) && collider.enabled && !collider.isTrigger && collider.bounds.Intersects(bounds) && collider.GetComponent() == null) { - RasterizationMesh emesh = RasterizeCollider(collider); - //Make sure a valid RasterizationMesh was returned - if (emesh != null) - result.Add(emesh); - } - } - } - - // Clear cache to avoid memory leak - capsuleCache.Clear(); - } - - /** Box Collider triangle indices can be reused for multiple instances. - * \warning This array should never be changed - */ - private readonly static int[] BoxColliderTris = { - 0, 1, 2, - 0, 2, 3, - - 6, 5, 4, - 7, 6, 4, - - 0, 5, 1, - 0, 4, 5, - - 1, 6, 2, - 1, 5, 6, - - 2, 7, 3, - 2, 6, 7, - - 3, 4, 0, - 3, 7, 4 - }; - - /** Box Collider vertices can be reused for multiple instances. - * \warning This array should never be changed - */ - private readonly static Vector3[] BoxColliderVerts = { - new Vector3(-1, -1, -1), - new Vector3(1, -1, -1), - new Vector3(1, -1, 1), - new Vector3(-1, -1, 1), - - new Vector3(-1, 1, -1), - new Vector3(1, 1, -1), - new Vector3(1, 1, 1), - new Vector3(-1, 1, 1), - }; - - /** Holds meshes for capsules to avoid generating duplicate capsule meshes for identical capsules */ - private List capsuleCache = new List(); - - class CapsuleCache { - public int rows; - public float height; - public Vector3[] verts; - public int[] tris; - } - - /** Rasterizes a collider to a mesh. - * This will pass the col.transform.localToWorldMatrix to the other overload of this function. - */ - RasterizationMesh RasterizeCollider (Collider col) { - return RasterizeCollider(col, col.transform.localToWorldMatrix); - } - - /** Rasterizes a collider to a mesh assuming it's vertices should be multiplied with the matrix. - * Note that the bounds of the returned RasterizationMesh is based on collider.bounds. So you might want to - * call myExtraMesh.RecalculateBounds on the returned mesh to recalculate it if the collider.bounds would - * not give the correct value. - */ - RasterizationMesh RasterizeCollider (Collider col, Matrix4x4 localToWorldMatrix) { - RasterizationMesh result = null; - - if (col is BoxCollider) { - result = RasterizeBoxCollider(col as BoxCollider, localToWorldMatrix); - } else if (col is SphereCollider || col is CapsuleCollider) { - var scollider = col as SphereCollider; - var ccollider = col as CapsuleCollider; - - float radius = (scollider != null ? scollider.radius : ccollider.radius); - float height = scollider != null ? 0 : (ccollider.height*0.5f/radius) - 1; - Quaternion rot = Quaternion.identity; - // Capsule colliders can be aligned along the X, Y or Z axis - if (ccollider != null) rot = Quaternion.Euler(ccollider.direction == 2 ? 90 : 0, 0, ccollider.direction == 0 ? 90 : 0); - Matrix4x4 matrix = Matrix4x4.TRS(scollider != null ? scollider.center : ccollider.center, rot, Vector3.one*radius); - - matrix = localToWorldMatrix * matrix; - - result = RasterizeCapsuleCollider(radius, height, col.bounds, matrix); - } else if (col is MeshCollider) { - var collider = col as MeshCollider; - - if (collider.sharedMesh != null) { - result = new RasterizationMesh(collider.sharedMesh.vertices, collider.sharedMesh.triangles, collider.bounds, localToWorldMatrix); - } - } - - #if ASTARDEBUG - for (int i = 0; i < result.triangles.Length; i += 3) { - Debug.DrawLine(result.matrix.MultiplyPoint3x4(result.vertices[result.triangles[i]]), result.matrix.MultiplyPoint3x4(result.vertices[result.triangles[i+1]]), Color.yellow); - Debug.DrawLine(result.matrix.MultiplyPoint3x4(result.vertices[result.triangles[i+2]]), result.matrix.MultiplyPoint3x4(result.vertices[result.triangles[i+1]]), Color.yellow); - Debug.DrawLine(result.matrix.MultiplyPoint3x4(result.vertices[result.triangles[i]]), result.matrix.MultiplyPoint3x4(result.vertices[result.triangles[i+2]]), Color.yellow); - } - #endif - - return result; - } - - RasterizationMesh RasterizeBoxCollider (BoxCollider collider, Matrix4x4 localToWorldMatrix) { - Matrix4x4 matrix = Matrix4x4.TRS(collider.center, Quaternion.identity, collider.size*0.5f); - - matrix = localToWorldMatrix * matrix; - - return new RasterizationMesh(BoxColliderVerts, BoxColliderTris, collider.bounds, matrix); - } - - RasterizationMesh RasterizeCapsuleCollider (float radius, float height, Bounds bounds, Matrix4x4 localToWorldMatrix) { - // Calculate the number of rows to use - // grows as sqrt(x) to the radius of the sphere/capsule which I have found works quite well - int rows = Mathf.Max(4, Mathf.RoundToInt(colliderRasterizeDetail*Mathf.Sqrt(localToWorldMatrix.MultiplyVector(Vector3.one).magnitude))); - - if (rows > 100) { - Debug.LogWarning("Very large detail for some collider meshes. Consider decreasing Collider Rasterize Detail (RecastGraph)"); - } - - int cols = rows; - - Vector3[] verts; - int[] trisArr; - - // Check if we have already calculated a similar capsule - CapsuleCache cached = null; - for (int i = 0; i < capsuleCache.Count; i++) { - CapsuleCache c = capsuleCache[i]; - if (c.rows == rows && Mathf.Approximately(c.height, height)) { - cached = c; - } - } - - if (cached == null) { - // Generate a sphere/capsule mesh - - verts = new Vector3[(rows)*cols + 2]; - - var tris = new List(); - verts[verts.Length-1] = Vector3.up; - - for (int r = 0; r < rows; r++) { - for (int c = 0; c < cols; c++) { - verts[c + r*cols] = new Vector3(Mathf.Cos(c*Mathf.PI*2/cols)*Mathf.Sin((r*Mathf.PI/(rows-1))), Mathf.Cos((r*Mathf.PI/(rows-1))) + (r < rows/2 ? height : -height), Mathf.Sin(c*Mathf.PI*2/cols)*Mathf.Sin((r*Mathf.PI/(rows-1)))); - } - } - - verts[verts.Length-2] = Vector3.down; - - for (int i = 0, j = cols-1; i < cols; j = i++) { - tris.Add(verts.Length-1); - tris.Add(0*cols + j); - tris.Add(0*cols + i); - } - - for (int r = 1; r < rows; r++) { - for (int i = 0, j = cols-1; i < cols; j = i++) { - tris.Add(r*cols + i); - tris.Add(r*cols + j); - tris.Add((r-1)*cols + i); - - tris.Add((r-1)*cols + j); - tris.Add((r-1)*cols + i); - tris.Add(r*cols + j); - } - } - - for (int i = 0, j = cols-1; i < cols; j = i++) { - tris.Add(verts.Length-2); - tris.Add((rows-1)*cols + j); - tris.Add((rows-1)*cols + i); - } - - // Add calculated mesh to the cache - cached = new CapsuleCache(); - cached.rows = rows; - cached.height = height; - cached.verts = verts; - cached.tris = tris.ToArray(); - capsuleCache.Add(cached); - } - - // Read from cache - verts = cached.verts; - trisArr = cached.tris; - - return new RasterizationMesh(verts, trisArr, bounds, localToWorldMatrix); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshGatherer.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshGatherer.cs.meta deleted file mode 100644 index 21c7975547da37cf6cd55a7016faeb35c524c4e6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshGatherer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6eafb2bafadcd40cab49fa79908ee5f1 -timeCreated: 1454097062 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshObj.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshObj.cs deleted file mode 100644 index 1f892e35d0184e364bbf68c5e39c8d6894325bba..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshObj.cs +++ /dev/null @@ -1,175 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; - -namespace Pathfinding { - /** Explicit mesh object for recast graphs. - * Adding this component to an object will make sure it is included in any recast graphs. - * It will be included even though the Rasterize Meshes toggle is set to false. - * - * Using RecastMeshObjs instead of relying on the Rasterize Meshes option is good for several reasons. - * - Rasterize Meshes is slow. If you are using a tiled graph and you are updaing it, every time something is recalculated - * the graph will have to search all meshes in your scene for ones to rasterize, in contrast, RecastMeshObjs are stored - * in a tree for extreamly fast lookup (O(log n + k) compared to O(n) where \a n is the number of meshes in your scene and \a k is the number of meshes - * which should be rasterized, if you know Big-O notation). - * - The RecastMeshObj exposes some options which can not be accessed using the Rasterize Meshes toggle. See member documentation for more info. - * This can for example be used to include meshes in the recast graph rasterization, but make sure that the character cannot walk on them. - * - * Since the objects are stored in a tree, and trees are slow to update, there is an enforcement that objects are not allowed to move - * unless the #dynamic option is enabled. When the dynamic option is enabled, the object will be stored in an array instead of in the tree. - * This will reduce the performance improvement over 'Rasterize Meshes' but is still faster. - * - * If a mesh filter and a mesh renderer is attached to this GameObject, those will be used in the rasterization - * otherwise if a collider is attached, that will be used. - */ - [AddComponentMenu("Pathfinding/Navmesh/RecastMeshObj")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_recast_mesh_obj.php")] - public class RecastMeshObj : VersionedMonoBehaviour { - /** Static objects are stored in a tree for fast bounds lookups */ - protected static RecastBBTree tree = new RecastBBTree(); - - /** Dynamic objects are stored in a list since it is costly to update the tree every time they move */ - protected static List dynamicMeshObjs = new List(); - - /** Fills the buffer with all RecastMeshObjs which intersect the specified bounds */ - public static void GetAllInBounds (List buffer, Bounds bounds) { - if (!Application.isPlaying) { - var objs = FindObjectsOfType(typeof(RecastMeshObj)) as RecastMeshObj[]; - for (int i = 0; i < objs.Length; i++) { - objs[i].RecalculateBounds(); - if (objs[i].GetBounds().Intersects(bounds)) { - buffer.Add(objs[i]); - } - } - return; - } else if (Time.timeSinceLevelLoad == 0) { - // Is is not guaranteed that all RecastMeshObj OnEnable functions have been called, so if it is the first frame since loading a new level - // try to initialize all RecastMeshObj objects. - var objs = FindObjectsOfType(typeof(RecastMeshObj)) as RecastMeshObj[]; - for (int i = 0; i < objs.Length; i++) objs[i].Register(); - } - - for (int q = 0; q < dynamicMeshObjs.Count; q++) { - if (dynamicMeshObjs[q].GetBounds().Intersects(bounds)) { - buffer.Add(dynamicMeshObjs[q]); - } - } - - Rect r = Rect.MinMaxRect(bounds.min.x, bounds.min.z, bounds.max.x, bounds.max.z); - - tree.QueryInBounds(r, buffer); - } - - [HideInInspector] - public Bounds bounds; - - /** Check if the object will move. - * Recalculation of bounding box trees is expensive so if this is true, the object - * will simply be stored in an array. Easier to move, but slower lookup, so use wisely. - * If you for some reason want to move it, but don't want it dynamic (maybe you will only move it veery seldom and have lots of similar - * objects so they would add overhead by being dynamic). You can enable and disable the component every time you move it. - * Disabling it will remove it from the bounding box tree and enabling it will add it to the bounding box tree again. - * - * The object should never move unless being dynamic or disabling/enabling it as described above. - */ - public bool dynamic = true; - - /** Voxel area for mesh. - * This area (not to be confused with pathfinding areas, this is only used when rasterizing meshes for the recast graph) field - * can be used to explicitly insert edges in the navmesh geometry or to make some parts of the mesh unwalkable. - * If the area is set to -1, it will be removed from the resulting navmesh. This is useful if you have some object that you want to be included in the rasterization, - * but you don't want to let the character walk on it. - * - * When rasterizing the world and two objects with different area values are adjacent to each other, a split in the navmesh geometry - * will be added between them, characters will still be able to walk between them, but this can be useful when working with navmesh updates. - * - * Navmesh updates which recalculate a whole tile (updatePhysics=True) are very slow So if there are special places - * which you know are going to be updated quite often, for example at a door opening (opened/closed door) you - * can use areas to create splits on the navmesh for easier updating using normal graph updates (updatePhysics=False). - * See the below video for more information. - * - * \youtube{CS6UypuEMwM} - * - */ - public int area = 0; - - bool _dynamic; - bool registered; - - void OnEnable () { - Register(); - } - - void Register () { - if (registered) return; - - registered = true; - - //Clamp area, upper limit isn't really a hard limit, but if it gets much higher it will start to interfere with other stuff - area = Mathf.Clamp(area, -1, 1 << 25); - - Renderer rend = GetComponent(); - - Collider coll = GetComponent(); - if (rend == null && coll == null) throw new System.Exception("A renderer or a collider should be attached to the GameObject"); - - MeshFilter filter = GetComponent(); - - if (rend != null && filter == null) throw new System.Exception("A renderer was attached but no mesh filter"); - - // Default to renderer - bounds = rend != null ? rend.bounds : coll.bounds; - - _dynamic = dynamic; - if (_dynamic) { - dynamicMeshObjs.Add(this); - } else { - tree.Insert(this); - } - } - - /** Recalculates the internally stored bounds of the object */ - private void RecalculateBounds () { - Renderer rend = GetComponent(); - - Collider coll = GetCollider(); - - if (rend == null && coll == null) throw new System.Exception("A renderer or a collider should be attached to the GameObject"); - - MeshFilter filter = GetComponent(); - - if (rend != null && filter == null) throw new System.Exception("A renderer was attached but no mesh filter"); - - // Default to renderer - bounds = rend != null ? rend.bounds : coll.bounds; - } - - /** Bounds completely enclosing the mesh for this object */ - public Bounds GetBounds () { - if (_dynamic) { - RecalculateBounds(); - } - return bounds; - } - - public MeshFilter GetMeshFilter () { - return GetComponent(); - } - - public Collider GetCollider () { - return GetComponent(); - } - - void OnDisable () { - registered = false; - - if (_dynamic) { - dynamicMeshObjs.Remove(this); - } else { - if (!tree.Remove(this)) { - throw new System.Exception("Could not remove RecastMeshObj from tree even though it should exist in it. Has the object moved without being marked as dynamic?"); - } - } - _dynamic = dynamic; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshObj.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshObj.cs.meta deleted file mode 100644 index 5ef9823ba7e44e955bc9039faa29f08b62cd975d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/RecastMeshObj.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 220345cbaa167417bbe806f230f68615 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelClasses.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelClasses.cs deleted file mode 100644 index 339fade0675ed33b164805d330a00d12dae26aa8..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelClasses.cs +++ /dev/null @@ -1,572 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Vector3 = UnityEngine.Vector3; - -#if NETFX_CORE && !UNITY_EDITOR -//using MarkerMetro.Unity.WinLegacy.IO; -#endif - -namespace Pathfinding.Voxels { - /** Stores a voxel field. \astarpro */ - public class VoxelArea { - public const uint MaxHeight = 65536; - public const int MaxHeightInt = 65536; - - /** Constant for default LinkedVoxelSpan top and bottom values. - * It is important with the U since ~0 != ~0U - * This can be used to check if a LinkedVoxelSpan is valid and not just the default span - */ - public const uint InvalidSpanValue = ~0U; - - /** Initial estimate on the average number of spans (layers) in the voxel representation. Should be greater or equal to 1 */ - public const float AvgSpanLayerCountEstimate = 8; - - /** The width of the field along the x-axis. [Limit: >= 0] [Units: vx] */ - public readonly int width = 0; - - /** The depth of the field along the z-axis. [Limit: >= 0] [Units: vx] */ - public readonly int depth = 0; - -#if ASTAR_RECAST_CLASS_BASED_LINKED_LIST - public VoxelCell[] cells; -#endif - - public CompactVoxelSpan[] compactSpans; - public CompactVoxelCell[] compactCells; - public int compactSpanCount; - - public ushort[] tmpUShortArr; - - public int[] areaTypes; - - public ushort[] dist; - public ushort maxDistance; - - public int maxRegions = 0; - - public int[] DirectionX; - public int[] DirectionZ; - - public Vector3[] VectorDirection; - - public void Reset () { -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - ResetLinkedVoxelSpans(); -#else - for (int i = 0; i < cells.Length; i++) cells[i].firstSpan = null; -#endif - - for (int i = 0; i < compactCells.Length; i++) { - compactCells[i].count = 0; - compactCells[i].index = 0; - } - } - -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - private void ResetLinkedVoxelSpans () { - int len = linkedSpans.Length; - - linkedSpanCount = width*depth; - LinkedVoxelSpan df = new LinkedVoxelSpan(InvalidSpanValue, InvalidSpanValue, -1, -1); - for (int i = 0; i < len; ) { - // 16x unrolling, actually improves performance - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - linkedSpans[i] = df; i++; - } - removedStackCount = 0; - } -#endif - - public VoxelArea (int width, int depth) { - this.width = width; - this.depth = depth; - - int wd = width*depth; - compactCells = new CompactVoxelCell[wd]; - -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - // & ~0xF ensures it is a multiple of 16. Required for unrolling - linkedSpans = new LinkedVoxelSpan[((int)(wd*AvgSpanLayerCountEstimate) + 15)& ~0xF]; - ResetLinkedVoxelSpans(); -#else - cells = new VoxelCell[wd]; -#endif - - DirectionX = new int[4] { -1, 0, 1, 0 }; - DirectionZ = new int[4] { 0, width, 0, -width }; - - VectorDirection = new Vector3[4] { Vector3.left, Vector3.forward, Vector3.right, Vector3.back }; - } - - public int GetSpanCountAll () { - int count = 0; - - int wd = width*depth; - - for (int x = 0; x < wd; x++) { -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - for (int s = x; s != -1 && linkedSpans[s].bottom != InvalidSpanValue; s = linkedSpans[s].next) { - count++; - } -#else - for (VoxelSpan s = cells[x].firstSpan; s != null; s = s.next) { - count++; - } -#endif - } - - return count; - } - - public int GetSpanCount () { - int count = 0; - - int wd = width*depth; - - for (int x = 0; x < wd; x++) { -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - for (int s = x; s != -1 && linkedSpans[s].bottom != InvalidSpanValue; s = linkedSpans[s].next) { - if (linkedSpans[s].area != 0) { - count++; - } - } -#else - for (VoxelSpan s = cells[x].firstSpan; s != null; s = s.next) { - if (s.area != 0) { - count++; - } - } -#endif - } - return count; - } - - -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - private int linkedSpanCount; - public LinkedVoxelSpan[] linkedSpans; - - private int[] removedStack = new int[128]; - private int removedStackCount = 0; - - void PushToSpanRemovedStack (int index) { - // Make sure we don't overflow the list - if (removedStackCount == removedStack.Length) { - // Create a new list to hold recycled values - int[] st2 = new int[removedStackCount*4]; - System.Buffer.BlockCopy(removedStack, 0, st2, 0, removedStackCount*sizeof(int)); - removedStack = st2; - } - - removedStack[removedStackCount] = index; - removedStackCount++; - } -#endif - - public void AddLinkedSpan (int index, uint bottom, uint top, int area, int voxelWalkableClimb) { -#if ASTAR_RECAST_CLASS_BASED_LINKED_LIST - cells[index].AddSpan(bottom, top, area, voxelWalkableClimb); -#else - // linkedSpans[index] is the span with the lowest y-coordinate at the position x,z such that index=x+z*width - // i.e linkedSpans is a 2D array laid out in a 1D array (for performance and simplicity) - - // Check if there is a root span, otherwise we can just add a new (valid) span and exit - if (linkedSpans[index].bottom == InvalidSpanValue) { - linkedSpans[index] = new LinkedVoxelSpan(bottom, top, area); - return; - } - - int prev = -1; - - // Original index, the first span we visited - int oindex = index; - - while (index != -1) { - if (linkedSpans[index].bottom > top) { - // If the current span's bottom higher up than the span we want to insert's top, then they do not intersect - // and we should just insert a new span here - break; - } else if (linkedSpans[index].top < bottom) { - // The current span and the span we want to insert do not intersect - // so just skip to the next span (it might intersect) - prev = index; - index = linkedSpans[index].next; - } else { - // Intersection! Merge the spans - - // Find the new bottom and top for the merged span - bottom = System.Math.Min(linkedSpans[index].bottom, bottom); - top = System.Math.Max(linkedSpans[index].top, top); - - // voxelWalkableClimb is flagMergeDistance, when a walkable flag is favored before an unwalkable one - // So if a walkable span intersects an unwalkable span, the walkable span can be up to voxelWalkableClimb - // below the unwalkable span and the merged span will still be walkable - if (System.Math.Abs((int)top - (int)linkedSpans[index].top) <= voxelWalkableClimb) { - // linkedSpans[index] is the lowest span, but we might use that span's area anyway if it is walkable - area = System.Math.Max(area, linkedSpans[index].area); - } - - // Find the next span in the linked list - int next = linkedSpans[index].next; - if (prev != -1) { - // There is a previous span - // Remove this span from the linked list - linkedSpans[prev].next = next; - - // Add this span index to a list for recycling - PushToSpanRemovedStack(index); - - // Move to the next span in the list - index = next; - } else if (next != -1) { - // This was the root span and there is a span left in the linked list - // Remove this span from the linked list by assigning the next span as the root span - linkedSpans[oindex] = linkedSpans[next]; - - // Recycle the old span index - PushToSpanRemovedStack(next); - - // Move to the next span in the list - // NOP since we just removed the current span, the next span - // we want to visit will have the same index as we are on now (i.e oindex) - } else { - // This was the root span and there are no other spans in the linked list - // Just replace the root span with the merged span and exit - linkedSpans[oindex] = new LinkedVoxelSpan(bottom, top, area); - return; - } - } - } - - // We now have a merged span that needs to be inserted - // and connected with the existing spans - - // The new merged span will be inserted right after 'prev' (if it exists, otherwise before index) - - // Make sure that we have enough room in our array - if (linkedSpanCount >= linkedSpans.Length) { - LinkedVoxelSpan[] tmp = linkedSpans; - int count = linkedSpanCount; - int popped = removedStackCount; - linkedSpans = new LinkedVoxelSpan[linkedSpans.Length*2]; - ResetLinkedVoxelSpans(); - linkedSpanCount = count; - removedStackCount = popped; - for (int i = 0; i < linkedSpanCount; i++) { - linkedSpans[i] = tmp[i]; - } - Debug.Log("Layer estimate too low, doubling size of buffer.\nThis message is harmless."); - } - - // Take a node from the recycling stack if possible - // Otherwise create a new node (well, just a new index really) - int nextIndex; - if (removedStackCount > 0) { - removedStackCount--; - nextIndex = removedStack[removedStackCount]; - } else { - nextIndex = linkedSpanCount; - linkedSpanCount++; - } - - if (prev != -1) { - //span.next = prev.next; - //prev.next = span; - - linkedSpans[nextIndex] = new LinkedVoxelSpan(bottom, top, area, linkedSpans[prev].next); - linkedSpans[prev].next = nextIndex; - } else { - //span.next = firstSpan; - //firstSpan = span; - - linkedSpans[nextIndex] = linkedSpans[oindex]; - linkedSpans[oindex] = new LinkedVoxelSpan(bottom, top, area, nextIndex); - } -#endif - } - } - - public struct LinkedVoxelSpan { - public uint bottom; - public uint top; - - public int next; - - /*Area - * 0 is an unwalkable span (triangle face down) - * 1 is a walkable span (triangle face up) - */ - public int area; - - public LinkedVoxelSpan (uint bottom, uint top, int area) { - this.bottom = bottom; this.top = top; this.area = area; this.next = -1; - } - - public LinkedVoxelSpan (uint bottom, uint top, int area, int next) { - this.bottom = bottom; this.top = top; this.area = area; this.next = next; - } - } - - /** Represents a mesh. \deprecated Use RasterizationMesh instead */ - [System.Obsolete("Use RasterizationMesh instead")] - public class ExtraMesh : RasterizationMesh { - public ExtraMesh (Vector3[] vertices, int[] triangles, Bounds bounds) : base(vertices, triangles, bounds) {} - public ExtraMesh (Vector3[] vertices, int[] triangles, Bounds bounds, Matrix4x4 matrix) : base(vertices, triangles, bounds, matrix) {} - } - - /** Represents a mesh which will be rasterized. - * The vertices will be multiplied with the matrix when rasterizing it to voxels. - * The vertices and triangles array may be used in multiple instances, it is not changed when voxelizing. - * - * \see SceneMesh - * - * \astarpro - */ - public class RasterizationMesh { - /** Source of the mesh. - * May be null if the source was not a mesh filter - */ - public MeshFilter original; - - public int area; - public Vector3[] vertices; - public int[] triangles; - - /** Number of vertices in the #vertices array. - * The vertices array is often pooled and then it sometimes makes sense to use a larger array than is actually necessary. - */ - public int numVertices; - - /** Number of triangles in the #triangles array. - * The triangles array is often pooled and then it sometimes makes sense to use a larger array than is actually necessary. - */ - public int numTriangles; - - /** World bounds of the mesh. Assumed to already be multiplied with the matrix */ - public Bounds bounds; - - public Matrix4x4 matrix; - - /** If true, the vertex and triangle arrays will be pooled after they have been used. - * Should be used only if the vertex and triangle arrays were originally taken from a pool. - */ - public bool pool; - - public RasterizationMesh () { - } - - public RasterizationMesh (Vector3[] vertices, int[] triangles, Bounds bounds) { - matrix = Matrix4x4.identity; - this.vertices = vertices; - this.numVertices = vertices.Length; - this.triangles = triangles; - this.numTriangles = triangles.Length; - this.bounds = bounds; - original = null; - area = 0; - } - - public RasterizationMesh (Vector3[] vertices, int[] triangles, Bounds bounds, Matrix4x4 matrix) { - this.matrix = matrix; - this.vertices = vertices; - this.numVertices = vertices.Length; - this.triangles = triangles; - this.numTriangles = triangles.Length; - this.bounds = bounds; - original = null; - area = 0; - } - - /** Recalculate the bounds based on #vertices and #matrix */ - public void RecalculateBounds () { - Bounds b = new Bounds(matrix.MultiplyPoint3x4(vertices[0]), Vector3.zero); - - for (int i = 1; i < numVertices; i++) { - b.Encapsulate(matrix.MultiplyPoint3x4(vertices[i])); - } - - // Assigned here to avoid changing bounds if vertices would happen to be null - bounds = b; - } - - /** Pool the #vertices and #triangles arrays if the #pool field is true */ - public void Pool () { - if (pool) { - ArrayPool.Release(ref triangles); - ArrayPool.Release(ref vertices); - } - } - } - - /** VoxelContourSet used for recast graphs. - * \astarpro - */ - public class VoxelContourSet { - public List conts; // Pointer to all contours. - public Bounds bounds; // Bounding box of the heightfield. - } - - /** VoxelContour used for recast graphs. - * \astarpro - */ - public struct VoxelContour { - public int nverts; - public int[] verts; // Vertex coordinates, each vertex contains 4 components. - public int[] rverts; // Raw vertex coordinates, each vertex contains 4 components. - - public int reg; // Region ID of the contour. - public int area; // Area ID of the contour. - } - - /** VoxelMesh used for recast graphs. - * \astarpro - */ - public struct VoxelMesh { - /** Vertices of the mesh */ - public Int3[] verts; - - /** Triangles of the mesh. - * Each element points to a vertex in the #verts array - */ - public int[] tris; - - /** Area index for each triangle */ - public int[] areas; - } - - /** VoxelCell used for recast graphs. - * \astarpro - */ - public struct VoxelCell { - public VoxelSpan firstSpan; - - //public System.Object lockObject; - - public void AddSpan (uint bottom, uint top, int area, int voxelWalkableClimb) { - VoxelSpan span = new VoxelSpan(bottom, top, area); - - if (firstSpan == null) { - firstSpan = span; - return; - } - - VoxelSpan prev = null; - VoxelSpan cSpan = firstSpan; - - while (cSpan != null) { - if (cSpan.bottom > span.top) { - break; - } else if (cSpan.top < span.bottom) { - prev = cSpan; - cSpan = cSpan.next; - } else { - if (cSpan.bottom < bottom) { - span.bottom = cSpan.bottom; - } - if (cSpan.top > top) { - span.top = cSpan.top; - } - - //1 is flagMergeDistance, when a walkable flag is favored before an unwalkable one - if (System.Math.Abs((int)span.top - (int)cSpan.top) <= voxelWalkableClimb) { - span.area = System.Math.Max(span.area, cSpan.area); - } - - VoxelSpan next = cSpan.next; - if (prev != null) { - prev.next = next; - } else { - firstSpan = next; - } - cSpan = next; - } - } - - if (prev != null) { - span.next = prev.next; - prev.next = span; - } else { - span.next = firstSpan; - firstSpan = span; - } - } - } - - /** CompactVoxelCell used for recast graphs. - * \astarpro - */ - public struct CompactVoxelCell { - public uint index; - public uint count; - - public CompactVoxelCell (uint i, uint c) { - index = i; - count = c; - } - } - - /** CompactVoxelSpan used for recast graphs. - * \astarpro - */ - public struct CompactVoxelSpan { - public ushort y; - public uint con; - public uint h; - public int reg; - - public CompactVoxelSpan (ushort bottom, uint height) { - con = 24; - y = bottom; - h = height; - reg = 0; - } - - public void SetConnection (int dir, uint value) { - int shift = dir*6; - - con = (uint)((con & ~(0x3f << shift)) | ((value & 0x3f) << shift)); - } - - public int GetConnection (int dir) { - return ((int)con >> dir*6) & 0x3f; - } - } - - /** VoxelSpan used for recast graphs. - * \astarpro - */ - public class VoxelSpan { - public uint bottom; - public uint top; - - public VoxelSpan next; - - /*Area - * 0 is an unwalkable span (triangle face down) - * 1 is a walkable span (triangle face up) - */ - public int area; - - public VoxelSpan (uint b, uint t, int area) { - bottom = b; - top = t; - this.area = area; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelClasses.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelClasses.cs.meta deleted file mode 100644 index 5b6a3c0008c4b1057690f4e89635c2c5bafd949b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelClasses.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f5dd44f89a71b4173850829be7460bfa -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelContour.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelContour.cs deleted file mode 100644 index a9d7692e91981952e3546b1ccee13543376f71e5..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelContour.cs +++ /dev/null @@ -1,873 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Mathf = UnityEngine.Mathf; - -namespace Pathfinding.Voxels { - public partial class Voxelize { - public void BuildContours (float maxError, int maxEdgeLength, VoxelContourSet cset, int buildFlags) { - AstarProfiler.StartProfile("Build Contours"); - - AstarProfiler.StartProfile("- Init"); - int w = voxelArea.width; - int d = voxelArea.depth; - - int wd = w*d; - - //cset.bounds = voxelArea.bounds; - - int maxContours = Mathf.Max(8 /*Max Regions*/, 8); - - - //cset.conts = new VoxelContour[maxContours]; - List contours = new List(maxContours); - - AstarProfiler.EndProfile("- Init"); - AstarProfiler.StartProfile("- Mark Boundaries"); - - //cset.nconts = 0; - - //NOTE: This array may contain any data, but since we explicitly set all data in it before we use it, it's OK. - ushort[] flags = voxelArea.tmpUShortArr; - if (flags.Length < voxelArea.compactSpanCount) { - flags = voxelArea.tmpUShortArr = new ushort[voxelArea.compactSpanCount]; - } - - // Mark boundaries. (@?) - for (int z = 0; z < wd; z += voxelArea.width) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell c = voxelArea.compactCells[x+z]; - - for (int i = (int)c.index, ci = (int)(c.index+c.count); i < ci; i++) { - ushort res = 0; - CompactVoxelSpan s = voxelArea.compactSpans[i]; - - if (s.reg == 0 || (s.reg & BorderReg) == BorderReg) { - flags[i] = 0; - continue; - } - - for (int dir = 0; dir < 4; dir++) { - int r = 0; - - if (s.GetConnection(dir) != NotConnected) { - int nx = x + voxelArea.DirectionX[dir]; - int nz = z + voxelArea.DirectionZ[dir]; - - int ni = (int)voxelArea.compactCells[nx+nz].index + s.GetConnection(dir); - r = voxelArea.compactSpans[ni].reg; - } - - //@TODO - Why isn't this inside the previous IF - if (r == s.reg) { - res |= (ushort)(1 << dir); - } - } - - //Inverse, mark non connected edges. - flags[i] = (ushort)(res ^ 0xf); - } - } - } - - AstarProfiler.EndProfile("- Mark Boundaries"); - - AstarProfiler.StartProfile("- Simplify Contours"); - List verts = ListPool.Claim(256);//new List (256); - List simplified = ListPool.Claim(64);//new List (64); - - for (int z = 0; z < wd; z += voxelArea.width) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell c = voxelArea.compactCells[x+z]; - - for (int i = (int)c.index, ci = (int)(c.index+c.count); i < ci; i++) { - //CompactVoxelSpan s = voxelArea.compactSpans[i]; - - if (flags[i] == 0 || flags[i] == 0xf) { - flags[i] = 0; - continue; - } - - int reg = voxelArea.compactSpans[i].reg; - - if (reg == 0 || (reg & BorderReg) == BorderReg) { - continue; - } - - int area = voxelArea.areaTypes[i]; - - verts.Clear(); - simplified.Clear(); - - WalkContour(x, z, i, flags, verts); - - SimplifyContour(verts, simplified, maxError, maxEdgeLength, buildFlags); - RemoveDegenerateSegments(simplified); - - VoxelContour contour = new VoxelContour(); - contour.verts = ArrayPool.Claim(simplified.Count);//simplified.ToArray (); - for (int j = 0; j < simplified.Count; j++) contour.verts[j] = simplified[j]; -#if ASTAR_RECAST_INCLUDE_RAW_VERTEX_CONTOUR - //Not used at the moment, just debug stuff - contour.rverts = ClaimIntArr(verts.Count); - for (int j = 0; j < verts.Count; j++) contour.rverts[j] = verts[j]; -#endif - contour.nverts = simplified.Count/4; - contour.reg = reg; - contour.area = area; - - contours.Add(contour); - - #if ASTARDEBUG - for (int q = 0, j = (simplified.Count/4)-1; q < (simplified.Count/4); j = q, q++) { - int i4 = q*4; - int j4 = j*4; - - Vector3 p1 = Vector3.Scale( - new Vector3( - simplified[i4+0], - simplified[i4+1], - (simplified[i4+2]/(float)voxelArea.width) - ), - cellScale) - +voxelOffset; - - Vector3 p2 = Vector3.Scale( - new Vector3( - simplified[j4+0], - simplified[j4+1], - (simplified[j4+2]/(float)voxelArea.width) - ) - , cellScale) - +voxelOffset; - - - if (CalcAreaOfPolygon2D(contour.verts, contour.nverts) > 0) { - Debug.DrawLine(p1, p2, AstarMath.IntToColor(reg, 0.5F)); - } else { - Debug.DrawLine(p1, p2, Color.red); - } - } - #endif - } - } - } - - ListPool.Release(ref verts); - ListPool.Release(ref simplified); - - AstarProfiler.EndProfile("- Simplify Contours"); - - AstarProfiler.StartProfile("- Fix Contours"); - - // Check and merge droppings. - // Sometimes the previous algorithms can fail and create several contours - // per area. This pass will try to merge the holes into the main region. - for (int i = 0; i < contours.Count; i++) { - VoxelContour cont = contours[i]; - // Check if the contour is would backwards. - if (CalcAreaOfPolygon2D(cont.verts, cont.nverts) < 0) { - // Find another contour which has the same region ID. - int mergeIdx = -1; - for (int j = 0; j < contours.Count; j++) { - if (i == j) continue; - if (contours[j].nverts > 0 && contours[j].reg == cont.reg) { - // Make sure the polygon is correctly oriented. - if (CalcAreaOfPolygon2D(contours[j].verts, contours[j].nverts) > 0) { - mergeIdx = j; - break; - } - } - } - if (mergeIdx == -1) { - Debug.LogError("rcBuildContours: Could not find merge target for bad contour "+i+"."); - } else { - // Debugging - //Debug.LogWarning ("Fixing contour"); - - VoxelContour mcont = contours[mergeIdx]; - // Merge by closest points. - int ia = 0, ib = 0; - GetClosestIndices(mcont.verts, mcont.nverts, cont.verts, cont.nverts, ref ia, ref ib); - - if (ia == -1 || ib == -1) { - Debug.LogWarning("rcBuildContours: Failed to find merge points for "+i+" and "+mergeIdx+"."); - continue; - } - -#if ASTARDEBUG - int p4 = ia*4; - int p42 = ib*4; - - Vector3 p12 = Vector3.Scale( - new Vector3( - mcont.verts[p4+0], - mcont.verts[p4+1], - (mcont.verts[p4+2]/(float)voxelArea.width) - ), - cellScale) - +voxelOffset; - - Vector3 p22 = Vector3.Scale( - new Vector3( - cont.verts[p42+0], - cont.verts[p42+1], - (cont.verts[p42+2]/(float)voxelArea.width) - ) - , cellScale) - +voxelOffset; - - Debug.DrawLine(p12, p22, Color.green); -#endif - - if (!MergeContours(ref mcont, ref cont, ia, ib)) { - Debug.LogWarning("rcBuildContours: Failed to merge contours "+i+" and "+mergeIdx+"."); - continue; - } - - contours[mergeIdx] = mcont; - contours[i] = cont; - - #if ASTARDEBUG - Debug.Log(mcont.nverts); - - for (int q = 0, j = (mcont.nverts)-1; q < (mcont.nverts); j = q, q++) { - int i4 = q*4; - int j4 = j*4; - - Vector3 p1 = Vector3.Scale( - new Vector3( - mcont.verts[i4+0], - mcont.verts[i4+1], - (mcont.verts[i4+2]/(float)voxelArea.width) - ), - cellScale) - +voxelOffset; - - Vector3 p2 = Vector3.Scale( - new Vector3( - mcont.verts[j4+0], - mcont.verts[j4+1], - (mcont.verts[j4+2]/(float)voxelArea.width) - ) - , cellScale) - +voxelOffset; - - Debug.DrawLine(p1, p2, Color.red); - //} - } - #endif - } - } - } - - cset.conts = contours; - - AstarProfiler.EndProfile("- Fix Contours"); - - AstarProfiler.EndProfile("Build Contours"); - } - - void GetClosestIndices (int[] vertsa, int nvertsa, - int[] vertsb, int nvertsb, - ref int ia, ref int ib) { - int closestDist = 0xfffffff; - - ia = -1; - ib = -1; - for (int i = 0; i < nvertsa; i++) { - //in is a keyword in C#, so I can't use that as a variable name - int in2 = (i+1) % nvertsa; - int ip = (i+nvertsa-1) % nvertsa; - int va = i*4; - int van = in2*4; - int vap = ip*4; - - for (int j = 0; j < nvertsb; ++j) { - int vb = j*4; - // vb must be "infront" of va. - if (Ileft(vap, va, vb, vertsa, vertsa, vertsb) && Ileft(va, van, vb, vertsa, vertsa, vertsb)) { - int dx = vertsb[vb+0] - vertsa[va+0]; - int dz = (vertsb[vb+2]/voxelArea.width) - (vertsa[va+2]/voxelArea.width); - int d = dx*dx + dz*dz; - if (d < closestDist) { - ia = i; - ib = j; - closestDist = d; - } - } - } - } - } - - /** Releases contents of a contour set to caches */ - static void ReleaseContours (VoxelContourSet cset) { - for (int i = 0; i < cset.conts.Count; i++) { - VoxelContour cont = cset.conts[i]; - ArrayPool.Release(ref cont.verts); - ArrayPool.Release(ref cont.rverts); - } - cset.conts = null; - } - - public static bool MergeContours (ref VoxelContour ca, ref VoxelContour cb, int ia, int ib) { - int maxVerts = ca.nverts + cb.nverts + 2; - - int[] verts = ArrayPool.Claim(maxVerts*4); - - //if (!verts) - // return false; - - int nv = 0; - - // Copy contour A. - for (int i = 0; i <= ca.nverts; i++) { - int dst = nv*4; - int src = ((ia+i) % ca.nverts)*4; - verts[dst+0] = ca.verts[src+0]; - verts[dst+1] = ca.verts[src+1]; - verts[dst+2] = ca.verts[src+2]; - verts[dst+3] = ca.verts[src+3]; - nv++; - } - - // Copy contour B - for (int i = 0; i <= cb.nverts; i++) { - int dst = nv*4; - int src = ((ib+i) % cb.nverts)*4; - verts[dst+0] = cb.verts[src+0]; - verts[dst+1] = cb.verts[src+1]; - verts[dst+2] = cb.verts[src+2]; - verts[dst+3] = cb.verts[src+3]; - nv++; - } - - ArrayPool.Release(ref ca.verts); - ArrayPool.Release(ref cb.verts); - - ca.verts = verts; - ca.nverts = nv; - - cb.verts = ArrayPool.Claim(0); - cb.nverts = 0; - - return true; - } - - public void SimplifyContour (List verts, List simplified, float maxError, int maxEdgeLenght, int buildFlags) { - // Add initial points. - bool hasConnections = false; - - for (int i = 0; i < verts.Count; i += 4) { - if ((verts[i+3] & ContourRegMask) != 0) { - hasConnections = true; - break; - } - } - - if (hasConnections) { - // The contour has some portals to other regions. - // Add a new point to every location where the region changes. - for (int i = 0, ni = verts.Count/4; i < ni; i++) { - int ii = (i+1) % ni; - bool differentRegs = (verts[i*4+3] & ContourRegMask) != (verts[ii*4+3] & ContourRegMask); - bool areaBorders = (verts[i*4+3] & RC_AREA_BORDER) != (verts[ii*4+3] & RC_AREA_BORDER); - - if (differentRegs || areaBorders) { - simplified.Add(verts[i*4+0]); - simplified.Add(verts[i*4+1]); - simplified.Add(verts[i*4+2]); - simplified.Add(i); - } - } - } - - - if (simplified.Count == 0) { - // If there is no connections at all, - // create some initial points for the simplification process. - // Find lower-left and upper-right vertices of the contour. - int llx = verts[0]; - int lly = verts[1]; - int llz = verts[2]; - int lli = 0; - int urx = verts[0]; - int ury = verts[1]; - int urz = verts[2]; - int uri = 0; - - for (int i = 0; i < verts.Count; i += 4) { - int x = verts[i+0]; - int y = verts[i+1]; - int z = verts[i+2]; - if (x < llx || (x == llx && z < llz)) { - llx = x; - lly = y; - llz = z; - lli = i/4; - } - if (x > urx || (x == urx && z > urz)) { - urx = x; - ury = y; - urz = z; - uri = i/4; - } - } - - simplified.Add(llx); - simplified.Add(lly); - simplified.Add(llz); - simplified.Add(lli); - - simplified.Add(urx); - simplified.Add(ury); - simplified.Add(urz); - simplified.Add(uri); - } - - // Add points until all raw points are within - // error tolerance to the simplified shape. - int pn = verts.Count/4; - - //Use the max squared error instead - maxError *= maxError; - - for (int i = 0; i < simplified.Count/4; ) { - int ii = (i+1) % (simplified.Count/4); - - int ax = simplified[i*4+0]; - int az = simplified[i*4+2]; - int ai = simplified[i*4+3]; - - int bx = simplified[ii*4+0]; - int bz = simplified[ii*4+2]; - int bi = simplified[ii*4+3]; - - // Find maximum deviation from the segment. - float maxd = 0; - int maxi = -1; - int ci, cinc, endi; - - // Traverse the segment in lexilogical order so that the - // max deviation is calculated similarly when traversing - // opposite segments. - if (bx > ax || (bx == ax && bz > az)) { - cinc = 1; - ci = (ai+cinc) % pn; - endi = bi; - } else { - cinc = pn-1; - ci = (bi+cinc) % pn; - endi = ai; - Memory.Swap(ref ax, ref bx); - Memory.Swap(ref az, ref bz); - } - - // Tessellate only outer edges or edges between areas. - if ((verts[ci*4+3] & ContourRegMask) == 0 || - (verts[ci*4+3] & RC_AREA_BORDER) == RC_AREA_BORDER) { - while (ci != endi) { - float d2 = VectorMath.SqrDistancePointSegmentApproximate(verts[ci*4+0], verts[ci*4+2]/voxelArea.width, ax, az/voxelArea.width, bx, bz/voxelArea.width); - - if (d2 > maxd) { - maxd = d2; - maxi = ci; - } - ci = (ci+cinc) % pn; - } - } - - // If the max deviation is larger than accepted error, - // add new point, else continue to next segment. - if (maxi != -1 && maxd > maxError) { - // Add space for the new point. - //simplified.resize(simplified.size()+4); - simplified.Add(0); - simplified.Add(0); - simplified.Add(0); - simplified.Add(0); - - int n = simplified.Count/4; - - for (int j = n-1; j > i; --j) { - simplified[j*4+0] = simplified[(j-1)*4+0]; - simplified[j*4+1] = simplified[(j-1)*4+1]; - simplified[j*4+2] = simplified[(j-1)*4+2]; - simplified[j*4+3] = simplified[(j-1)*4+3]; - } - // Add the point. - simplified[(i+1)*4+0] = verts[maxi*4+0]; - simplified[(i+1)*4+1] = verts[maxi*4+1]; - simplified[(i+1)*4+2] = verts[maxi*4+2]; - simplified[(i+1)*4+3] = maxi; - } else { - i++; - } - } - - - - //Split too long edges - - float maxEdgeLen = maxEdgeLength / cellSize; - - if (maxEdgeLen > 0 && (buildFlags & (RC_CONTOUR_TESS_WALL_EDGES|RC_CONTOUR_TESS_AREA_EDGES|RC_CONTOUR_TESS_TILE_EDGES)) != 0) { - for (int i = 0; i < simplified.Count/4; ) { - if (simplified.Count/4 > 200) { - break; - } - - int ii = (i+1) % (simplified.Count/4); - - int ax = simplified[i*4+0]; - int az = simplified[i*4+2]; - int ai = simplified[i*4+3]; - - int bx = simplified[ii*4+0]; - int bz = simplified[ii*4+2]; - int bi = simplified[ii*4+3]; - - // Find maximum deviation from the segment. - int maxi = -1; - int ci = (ai+1) % pn; - - // Tessellate only outer edges or edges between areas. - bool tess = false; - - // Wall edges. - if ((buildFlags & RC_CONTOUR_TESS_WALL_EDGES) != 0 && (verts[ci*4+3] & ContourRegMask) == 0) - tess = true; - - // Edges between areas. - if ((buildFlags & RC_CONTOUR_TESS_AREA_EDGES) != 0 && (verts[ci*4+3] & RC_AREA_BORDER) == RC_AREA_BORDER) - tess = true; - - // Border of tile - if ((buildFlags & RC_CONTOUR_TESS_TILE_EDGES) != 0 && (verts[ci*4+3] & BorderReg) == BorderReg) - tess = true; - - if (tess) { - int dx = bx - ax; - int dz = (bz/voxelArea.width) - (az/voxelArea.width); - if (dx*dx + dz*dz > maxEdgeLen*maxEdgeLen) { - // Round based on the segments in lexilogical order so that the - // max tesselation is consistent regardles in which direction - // segments are traversed. - int n = bi < ai ? (bi+pn - ai) : (bi - ai); - if (n > 1) { - if (bx > ax || (bx == ax && bz > az)) { - maxi = (ai + n/2) % pn; - } else { - maxi = (ai + (n+1)/2) % pn; - } - } - } - } - - // If the max deviation is larger than accepted error, - // add new point, else continue to next segment. - if (maxi != -1) { - // Add space for the new point. - //simplified.resize(simplified.size()+4); - simplified.AddRange(new int[4]); - - int n = simplified.Count/4; - for (int j = n-1; j > i; --j) { - simplified[j*4+0] = simplified[(j-1)*4+0]; - simplified[j*4+1] = simplified[(j-1)*4+1]; - simplified[j*4+2] = simplified[(j-1)*4+2]; - simplified[j*4+3] = simplified[(j-1)*4+3]; - } - // Add the point. - simplified[(i+1)*4+0] = verts[maxi*4+0]; - simplified[(i+1)*4+1] = verts[maxi*4+1]; - simplified[(i+1)*4+2] = verts[maxi*4+2]; - simplified[(i+1)*4+3] = maxi; - } else { - ++i; - } - } - } - - for (int i = 0; i < simplified.Count/4; i++) { - // The edge vertex flag is take from the current raw point, - // and the neighbour region is take from the next raw point. - int ai = (simplified[i*4+3]+1) % pn; - int bi = simplified[i*4+3]; - simplified[i*4+3] = (verts[ai*4+3] & ContourRegMask) | (verts[bi*4+3] & RC_BORDER_VERTEX); - } - } - - public void WalkContour (int x, int z, int i, ushort[] flags, List verts) { - // Choose the first non-connected edge - int dir = 0; - - while ((flags[i] & (ushort)(1 << dir)) == 0) { - dir++; - } - - int startDir = dir; - int startI = i; - - int area = voxelArea.areaTypes[i]; - - int iter = 0; - - #if ASTARDEBUG - Vector3 previousPos; - Vector3 currentPos; - - previousPos = ConvertPos( - x, - 0, - z - ); - - Vector3 previousPos2 = ConvertPos( - x, - 0, - z - ); - #endif - - while (iter++ < 40000) { - //Are we facing a region edge - if ((flags[i] & (ushort)(1 << dir)) != 0) { - #if ASTARDEBUG - Vector3 pos = ConvertPos(x, 0, z)+new Vector3((voxelArea.DirectionX[dir] != 0) ? Mathf.Sign(voxelArea.DirectionX[dir]) : 0, 0, (voxelArea.DirectionZ[dir]) != 0 ? Mathf.Sign(voxelArea.DirectionZ[dir]) : 0)*0.6F; - //int dir2 = (dir+1) & 0x3; - //pos += new Vector3 ((voxelArea.DirectionX[dir2] != 0) ? Mathf.Sign(voxelArea.DirectionX[dir2]) : 0,0,(voxelArea.DirectionZ[dir2]) != 0 ? Mathf.Sign(voxelArea.DirectionZ[dir2]) : 0)*1.2F; - - //Debug.DrawLine (ConvertPos (x,0,z),pos,Color.cyan); - Debug.DrawLine(previousPos2, pos, Color.blue); - previousPos2 = pos; - #endif - - //Choose the edge corner - bool isBorderVertex = false; - bool isAreaBorder = false; - - int px = x; - int py = GetCornerHeight(x, z, i, dir, ref isBorderVertex); - int pz = z; - - switch (dir) { - case 0: pz += voxelArea.width;; break; - case 1: px++; pz += voxelArea.width; break; - case 2: px++; break; - } - - /*case 1: px++; break; - * case 2: px++; pz += voxelArea.width; break; - * case 3: pz += voxelArea.width; break; - */ - - int r = 0; - CompactVoxelSpan s = voxelArea.compactSpans[i]; - - if (s.GetConnection(dir) != NotConnected) { - int nx = x + voxelArea.DirectionX[dir]; - int nz = z + voxelArea.DirectionZ[dir]; - int ni = (int)voxelArea.compactCells[nx+nz].index + s.GetConnection(dir); - r = (int)voxelArea.compactSpans[ni].reg; - - if (area != voxelArea.areaTypes[ni]) { - isAreaBorder = true; - } - } - - if (isBorderVertex) { - r |= RC_BORDER_VERTEX; - } - if (isAreaBorder) { - r |= RC_AREA_BORDER; - } - - verts.Add(px); - verts.Add(py); - verts.Add(pz); - verts.Add(r); - - //Debug.DrawRay (previousPos,new Vector3 ((dir == 1 || dir == 2) ? 1 : 0, 0, (dir == 0 || dir == 1) ? 1 : 0),Color.cyan); - - flags[i] = (ushort)(flags[i] & ~(1 << dir)); // Remove visited edges - - dir = (dir+1) & 0x3; // Rotate CW - } else { - int ni = -1; - int nx = x + voxelArea.DirectionX[dir]; - int nz = z + voxelArea.DirectionZ[dir]; - - CompactVoxelSpan s = voxelArea.compactSpans[i]; - - if (s.GetConnection(dir) != NotConnected) { - CompactVoxelCell nc = voxelArea.compactCells[nx+nz]; - ni = (int)nc.index + s.GetConnection(dir); - } - - if (ni == -1) { - Debug.LogWarning("Degenerate triangles might have been generated.\n" + - "Usually this is not a problem, but if you have a static level, try to modify the graph settings slightly to avoid this edge case."); - return; - } - x = nx; - z = nz; - i = ni; - - // & 0x3 is the same as % 4 (modulo 4) - dir = (dir+3) & 0x3; // Rotate CCW - - #if ASTARDEBUG - currentPos = ConvertPos( - x, - 0, - z - ); - - Debug.DrawLine(previousPos+Vector3.up*0, currentPos, Color.blue); - previousPos = currentPos; - #endif - } - - if (startI == i && startDir == dir) { - break; - } - } - - #if ASTARDEBUG - Color col = new Color(Random.value, Random.value, Random.value); - - for (int q = 0, j = (verts.Count/4)-1; q < (verts.Count/4); j = q, q++) { - int i4 = q*4; - int j4 = j*4; - - Vector3 p1 = ConvertPosWithoutOffset( - verts[i4+0], - verts[i4+1], - verts[i4+2] - ); - - Vector3 p2 = ConvertPosWithoutOffset( - verts[j4+0], - verts[j4+1], - verts[j4+2] - ); - - Debug.DrawLine(p1, p2, col); - } - #endif - } - - public int GetCornerHeight (int x, int z, int i, int dir, ref bool isBorderVertex) { - CompactVoxelSpan s = voxelArea.compactSpans[i]; - - int ch = (int)s.y; - - //dir + clockwise direction - int dirp = (dir+1) & 0x3; - - //int dirp = (dir+3) & 0x3; - - uint[] regs = new uint[4]; - - regs[0] = (uint)voxelArea.compactSpans[i].reg | ((uint)voxelArea.areaTypes[i] << 16); - - if (s.GetConnection(dir) != NotConnected) { - int nx = x + voxelArea.DirectionX[dir]; - int nz = z + voxelArea.DirectionZ[dir]; - int ni = (int)voxelArea.compactCells[nx+nz].index + s.GetConnection(dir); - - CompactVoxelSpan ns = voxelArea.compactSpans[ni]; - - ch = System.Math.Max(ch, (int)ns.y); - regs[1] = (uint)ns.reg | ((uint)voxelArea.areaTypes[ni] << 16); - - if (ns.GetConnection(dirp) != NotConnected) { - int nx2 = nx + voxelArea.DirectionX[dirp]; - int nz2 = nz + voxelArea.DirectionZ[dirp]; - int ni2 = (int)voxelArea.compactCells[nx2+nz2].index + ns.GetConnection(dirp); - - CompactVoxelSpan ns2 = voxelArea.compactSpans[ni2]; - - ch = System.Math.Max(ch, (int)ns2.y); - regs[2] = (uint)ns2.reg | ((uint)voxelArea.areaTypes[ni2] << 16); - } - } - - if (s.GetConnection(dirp) != NotConnected) { - int nx = x + voxelArea.DirectionX[dirp]; - int nz = z + voxelArea.DirectionZ[dirp]; - int ni = (int)voxelArea.compactCells[nx+nz].index + s.GetConnection(dirp); - - CompactVoxelSpan ns = voxelArea.compactSpans[ni]; - - ch = System.Math.Max(ch, (int)ns.y); - regs[3] = (uint)ns.reg | ((uint)voxelArea.areaTypes[ni] << 16); - - if (ns.GetConnection(dir) != NotConnected) { - int nx2 = nx + voxelArea.DirectionX[dir]; - int nz2 = nz + voxelArea.DirectionZ[dir]; - int ni2 = (int)voxelArea.compactCells[nx2+nz2].index + ns.GetConnection(dir); - - CompactVoxelSpan ns2 = voxelArea.compactSpans[ni2]; - - ch = System.Math.Max(ch, (int)ns2.y); - regs[2] = (uint)ns2.reg | ((uint)voxelArea.areaTypes[ni2] << 16); - } - } - - // Check if the vertex is special edge vertex, these vertices will be removed later. - for (int j = 0; j < 4; ++j) { - int a = j; - int b = (j+1) & 0x3; - int c = (j+2) & 0x3; - int d = (j+3) & 0x3; - - // The vertex is a border vertex there are two same exterior cells in a row, - // followed by two interior cells and none of the regions are out of bounds. - bool twoSameExts = (regs[a] & regs[b] & BorderReg) != 0 && regs[a] == regs[b]; - bool twoInts = ((regs[c] | regs[d]) & BorderReg) == 0; - bool intsSameArea = (regs[c]>>16) == (regs[d]>>16); - bool noZeros = regs[a] != 0 && regs[b] != 0 && regs[c] != 0 && regs[d] != 0; - if (twoSameExts && twoInts && intsSameArea && noZeros) { - isBorderVertex = true; - break; - } - } - - return ch; - } - - public void RemoveDegenerateSegments (List simplified) { - // Remove adjacent vertices which are equal on xz-plane, - // or else the triangulator will get confused - for (int i = 0; i < simplified.Count/4; i++) { - int ni = i+1; - if (ni >= (simplified.Count/4)) - ni = 0; - - if (simplified[i*4+0] == simplified[ni*4+0] && - simplified[i*4+2] == simplified[ni*4+2]) { - // Degenerate segment, remove. - simplified.RemoveRange(i, 4); - } - } - } - - public int CalcAreaOfPolygon2D (int[] verts, int nverts) { - int area = 0; - - for (int i = 0, j = nverts-1; i < nverts; j = i++) { - int vi = i*4; - int vj = j*4; - area += verts[vi+0] * (verts[vj+2]/voxelArea.width) - verts[vj+0] * (verts[vi+2]/voxelArea.width); - } - - return (area+1) / 2; - } - - public static bool Ileft (int a, int b, int c, int[] va, int[] vb, int[] vc) { - return (vb[b+0] - va[a+0]) * (vc[c+2] - va[a+2]) - (vc[c+0] - va[a+0]) * (vb[b+2] - va[a+2]) <= 0; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelContour.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelContour.cs.meta deleted file mode 100644 index 1ee18ed88f50b2f31d63722d8d8cd6c95d24cfe2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelContour.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e3bbeea6925814e4d864e0ba4e4ee932 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelMesh.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelMesh.cs deleted file mode 100644 index 4005a486776e28e9f8d8393da5db724348e6cc4e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelMesh.cs +++ /dev/null @@ -1,350 +0,0 @@ -using PF; -using UnityEngine; - -namespace Pathfinding.Voxels { - using Pathfinding.Util; - - public partial class Voxelize { - /** Returns T iff (v_i, v_j) is a proper internal - * diagonal of P. - */ - public static bool Diagonal (int i, int j, int n, int[] verts, int[] indices) { - return InCone(i, j, n, verts, indices) && Diagonalie(i, j, n, verts, indices); - } - - public static bool InCone (int i, int j, int n, int[] verts, int[] indices) { - int pi = (indices[i] & 0x0fffffff) * 4; - int pj = (indices[j] & 0x0fffffff) * 4; - int pi1 = (indices[Next(i, n)] & 0x0fffffff) * 4; - int pin1 = (indices[Prev(i, n)] & 0x0fffffff) * 4; - - // If P[i] is a convex vertex [ i+1 left or on (i-1,i) ]. - if (LeftOn(pin1, pi, pi1, verts)) - return Left(pi, pj, pin1, verts) && Left(pj, pi, pi1, verts); - // Assume (i-1,i,i+1) not collinear. - // else P[i] is reflex. - return !(LeftOn(pi, pj, pi1, verts) && LeftOn(pj, pi, pin1, verts)); - } - - /** Returns true iff c is strictly to the left of the directed - * line through a to b. - */ - public static bool Left (int a, int b, int c, int[] verts) { - return Area2(a, b, c, verts) < 0; - } - - public static bool LeftOn (int a, int b, int c, int[] verts) { - return Area2(a, b, c, verts) <= 0; - } - - public static bool Collinear (int a, int b, int c, int[] verts) { - return Area2(a, b, c, verts) == 0; - } - - public static int Area2 (int a, int b, int c, int[] verts) { - return (verts[b] - verts[a]) * (verts[c+2] - verts[a+2]) - (verts[c+0] - verts[a+0]) * (verts[b+2] - verts[a+2]); - } - - /** - * Returns T iff (v_i, v_j) is a proper internal *or* external - * diagonal of P, *ignoring edges incident to v_i and v_j*. - */ - static bool Diagonalie (int i, int j, int n, int[] verts, int[] indices) { - int d0 = (indices[i] & 0x0fffffff) * 4; - int d1 = (indices[j] & 0x0fffffff) * 4; - - /*int a = (i+1) % indices.Length; - * if (a == j) a = (i-1 + indices.Length) % indices.Length; - * int a_v = (indices[a] & 0x0fffffff) * 4; - * - * if (a != j && Collinear (d0,a_v,d1,verts)) { - * return false; - * }*/ - - // For each edge (k,k+1) of P - for (int k = 0; k < n; k++) { - int k1 = Next(k, n); - // Skip edges incident to i or j - if (!((k == i) || (k1 == i) || (k == j) || (k1 == j))) { - int p0 = (indices[k] & 0x0fffffff) * 4; - int p1 = (indices[k1] & 0x0fffffff) * 4; - - if (Vequal(d0, p0, verts) || Vequal(d1, p0, verts) || Vequal(d0, p1, verts) || Vequal(d1, p1, verts)) - continue; - - if (Intersect(d0, d1, p0, p1, verts)) - return false; - } - } - - - return true; - } - - // Exclusive or: true iff exactly one argument is true. - // The arguments are negated to ensure that they are 0/1 - // values. Then the bitwise Xor operator may apply. - // (This idea is due to Michael Baldwin.) - public static bool Xorb (bool x, bool y) { - return !x ^ !y; - } - - // Returns true iff ab properly intersects cd: they share - // a point interior to both segments. The properness of the - // intersection is ensured by using strict leftness. - public static bool IntersectProp (int a, int b, int c, int d, int[] verts) { - // Eliminate improper cases. - if (Collinear(a, b, c, verts) || Collinear(a, b, d, verts) || - Collinear(c, d, a, verts) || Collinear(c, d, b, verts)) - return false; - - return Xorb(Left(a, b, c, verts), Left(a, b, d, verts)) && Xorb(Left(c, d, a, verts), Left(c, d, b, verts)); - } - - // Returns T iff (a,b,c) are collinear and point c lies - // on the closed segement ab. - static bool Between (int a, int b, int c, int[] verts) { - if (!Collinear(a, b, c, verts)) - return false; - // If ab not vertical, check betweenness on x; else on y. - if (verts[a+0] != verts[b+0]) - return ((verts[a+0] <= verts[c+0]) && (verts[c+0] <= verts[b+0])) || ((verts[a+0] >= verts[c+0]) && (verts[c+0] >= verts[b+0])); - else - return ((verts[a+2] <= verts[c+2]) && (verts[c+2] <= verts[b+2])) || ((verts[a+2] >= verts[c+2]) && (verts[c+2] >= verts[b+2])); - } - - // Returns true iff segments ab and cd intersect, properly or improperly. - static bool Intersect (int a, int b, int c, int d, int[] verts) { - if (IntersectProp(a, b, c, d, verts)) - return true; - else if (Between(a, b, c, verts) || Between(a, b, d, verts) || - Between(c, d, a, verts) || Between(c, d, b, verts)) - return true; - else - return false; - } - - static bool Vequal (int a, int b, int[] verts) { - return verts[a+0] == verts[b+0] && verts[a+2] == verts[b+2]; - } - - /** (i-1+n) % n assuming 0 <= i < n */ - public static int Prev (int i, int n) { return i-1 >= 0 ? i-1 : n-1; } - /** (i+1) % n assuming 0 <= i < n */ - public static int Next (int i, int n) { return i+1 < n ? i+1 : 0; } - - /** Builds a polygon mesh from a contour set. - * - * \param cset contour set to build a mesh from. - * \param nvp Maximum allowed vertices per polygon. \warning Currently locked to 3. - * \param mesh Results will be written to this mesh. - */ - public void BuildPolyMesh (VoxelContourSet cset, int nvp, out VoxelMesh mesh) { - AstarProfiler.StartProfile("Build Poly Mesh"); - - nvp = 3; - - int maxVertices = 0; - int maxTris = 0; - int maxVertsPerCont = 0; - - for (int i = 0; i < cset.conts.Count; i++) { - // Skip null contours. - if (cset.conts[i].nverts < 3) continue; - - maxVertices += cset.conts[i].nverts; - maxTris += cset.conts[i].nverts - 2; - maxVertsPerCont = System.Math.Max(maxVertsPerCont, cset.conts[i].nverts); - } - - Int3[] verts = ArrayPool.Claim(maxVertices); - int[] polys = ArrayPool.Claim(maxTris*nvp); - int[] areas = ArrayPool.Claim(maxTris); - - Memory.MemSet(polys, 0xff, sizeof(int)); - - int[] indices = ArrayPool.Claim(maxVertsPerCont); - int[] tris = ArrayPool.Claim(maxVertsPerCont*3); - - int vertexIndex = 0; - int polyIndex = 0; - int areaIndex = 0; - - for (int i = 0; i < cset.conts.Count; i++) { - VoxelContour cont = cset.conts[i]; - - // Skip degenerate contours - if (cont.nverts < 3) { - continue; - } - - for (int j = 0; j < cont.nverts; j++) { - indices[j] = j; - // Convert the z coordinate from the form z*voxelArea.width which is used in other places for performance - cont.verts[j*4+2] /= voxelArea.width; - } - - // Triangulate the contour - int ntris = Triangulate(cont.nverts, cont.verts, ref indices, ref tris); - - // Assign the correct vertex indices - int startIndex = vertexIndex; - for (int j = 0; j < ntris*3; polyIndex++, j++) { - //@Error sometimes - polys[polyIndex] = tris[j]+startIndex; - } - - // Mark all triangles generated by this contour - // as having the area cont.area - for (int j = 0; j < ntris; areaIndex++, j++) { - areas[areaIndex] = cont.area; - } - - // Copy the vertex positions - for (int j = 0; j < cont.nverts; vertexIndex++, j++) { - verts[vertexIndex] = new Int3(cont.verts[j*4], cont.verts[j*4+1], cont.verts[j*4+2]); - } - } - - mesh = new VoxelMesh { - verts = Memory.ShrinkArray(verts, vertexIndex), - tris = Memory.ShrinkArray(polys, polyIndex), - areas = Memory.ShrinkArray(areas, areaIndex) - }; - - ArrayPool.Release(ref verts); - ArrayPool.Release(ref polys); - ArrayPool.Release(ref areas); - ArrayPool.Release(ref indices); - ArrayPool.Release(ref tris); - AstarProfiler.EndProfile("Build Poly Mesh"); - } - - int Triangulate (int n, int[] verts, ref int[] indices, ref int[] tris) { - int ntris = 0; - - int[] dst = tris; - - int dstIndex = 0; - - // Debug code - //int on = n; - - // The last bit of the index is used to indicate if the vertex can be removed. - for (int i = 0; i < n; i++) { - int i1 = Next(i, n); - int i2 = Next(i1, n); - if (Diagonal(i, i2, n, verts, indices)) { - indices[i1] |= 0x40000000; - } - } - - while (n > 3) { - #if ASTARDEBUG - for (int j = 0; j < n; j++) { - DrawLine(Prev(j, n), j, indices, verts, Color.red); - } - #endif - - int minLen = -1; - int mini = -1; - - for (int q = 0; q < n; q++) { - int q1 = Next(q, n); - if ((indices[q1] & 0x40000000) != 0) { - int p0 = (indices[q] & 0x0fffffff) * 4; - int p2 = (indices[Next(q1, n)] & 0x0fffffff) * 4; - - int dx = verts[p2+0] - verts[p0+0]; - int dz = verts[p2+2] - verts[p0+2]; - - #if ASTARDEBUG - DrawLine(q, Next(q1, n), indices, verts, Color.blue); - #endif - - //Squared distance - int len = dx*dx + dz*dz; - - if (minLen < 0 || len < minLen) { - minLen = len; - mini = q; - } - } - } - - if (mini == -1) { - Debug.LogWarning("Degenerate triangles might have been generated.\n" + - "Usually this is not a problem, but if you have a static level, try to modify the graph settings slightly to avoid this edge case."); - - // Can't run the debug stuff because we are likely running from a separate thread - //for (int j=0;j= n) i1 = 0; - i = Prev(i1, n); - // Update diagonal flags. - if (Diagonal(Prev(i, n), i1, n, verts, indices)) { - indices[i] |= 0x40000000; - } else { - indices[i] &= 0x0fffffff; - } - if (Diagonal(i, Next(i1, n), n, verts, indices)) { - indices[i1] |= 0x40000000; - } else { - indices[i1] &= 0x0fffffff; - } - } - - dst[dstIndex] = indices[0] & 0x0fffffff; - dstIndex++; - dst[dstIndex] = indices[1] & 0x0fffffff; - dstIndex++; - dst[dstIndex] = indices[2] & 0x0fffffff; - dstIndex++; - ntris++; - - return ntris; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelMesh.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelMesh.cs.meta deleted file mode 100644 index 690cf6e5fd6d16188fe0a647cc1dcf23b3d5cc7a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelMesh.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 66ea80679290d45778de562ccdf7d3cd -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelPolygonClipper.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelPolygonClipper.cs deleted file mode 100644 index ca549ce27c8e4e6deff950286553590b732b51e1..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelPolygonClipper.cs +++ /dev/null @@ -1,161 +0,0 @@ -using PF; - -namespace Pathfinding.Voxels { - /** Utility for clipping polygons */ - internal struct VoxelPolygonClipper { - /** Cache this buffer to avoid unnecessary allocations */ - float[] clipPolygonCache; - - /** Cache this buffer to avoid unnecessary allocations */ - int[] clipPolygonIntCache; - - /** Initialize buffers if they are null */ - void Init () { - if (clipPolygonCache == null) { - clipPolygonCache = new float[7*3]; - clipPolygonIntCache = new int[7*3]; - } - } - - /** Clips a polygon against an axis aligned half plane. - * \param vIn Input vertices in XYZ format, so each group of 3 indices form a single vertex - * \param n Number of input vertices (may be less than the length of the vIn array) - * \param vOut Output vertices, needs to be large enough - * \param multi Scale factor for the input vertices - * \param offset Offset to move the input vertices with before cutting - * \param axis Axis to cut along, either x=0, y=1, z=2 - * - * \returns Number of output vertices - * - * The vertices will be scaled and then offset, after that they will be cut using either the - * x axis, y axis or the z axis as the cutting line. The resulting vertices will be added to the - * vOut array in their original space (i.e before scaling and offsetting). - */ - public int ClipPolygon (float[] vIn, int n, float[] vOut, float multi, float offset, int axis) { - Init(); - - float[] d = clipPolygonCache; - - for (int i = 0; i < n; i++) { - d[i] = multi*vIn[i*3+axis]+offset; - } - - //Number of resulting vertices - int m = 0; - - for (int i = 0, j = n-1; i < n; j = i, i++) { - bool prev = d[j] >= 0; - bool curr = d[i] >= 0; - - if (prev != curr) { - int m3 = m*3; - int i3 = i*3; - int j3 = j*3; - - float s = d[j] / (d[j] - d[i]); - - vOut[m3+0] = vIn[j3+0] + (vIn[i3+0]-vIn[j3+0])*s; - vOut[m3+1] = vIn[j3+1] + (vIn[i3+1]-vIn[j3+1])*s; - vOut[m3+2] = vIn[j3+2] + (vIn[i3+2]-vIn[j3+2])*s; - - //vOut[m*3+0] = vIn[j*3+0] + (vIn[i*3+0]-vIn[j*3+0])*s; - //vOut[m*3+1] = vIn[j*3+1] + (vIn[i*3+1]-vIn[j*3+1])*s; - //vOut[m*3+2] = vIn[j*3+2] + (vIn[i*3+2]-vIn[j*3+2])*s; - - m++; - } - - if (curr) { - int m3 = m*3; - int i3 = i*3; - - vOut[m3+0] = vIn[i3+0]; - vOut[m3+1] = vIn[i3+1]; - vOut[m3+2] = vIn[i3+2]; - - m++; - } - } - - return m; - } - - public int ClipPolygonY (float[] vIn, int n, float[] vOut, float multi, float offset, int axis) { - Init(); - - float[] d = clipPolygonCache; - - for (int i = 0; i < n; i++) { - d[i] = multi*vIn[i*3+axis]+offset; - } - - //Number of resulting vertices - int m = 0; - - for (int i = 0, j = n-1; i < n; j = i, i++) { - bool prev = d[j] >= 0; - bool curr = d[i] >= 0; - - if (prev != curr) { - vOut[m*3+1] = vIn[j*3+1] + (vIn[i*3+1]-vIn[j*3+1]) * (d[j] / (d[j] - d[i])); - - m++; - } - - if (curr) { - vOut[m*3+1] = vIn[i*3+1]; - - m++; - } - } - - return m; - } - - /** Clips a polygon against an axis aligned half plane. - * \param vIn Input vertices - * \param n Number of input vertices (may be less than the length of the vIn array) - * \param vOut Output vertices, needs to be large enough - * \param multi Scale factor for the input vertices - * \param offset Offset to move the input vertices with before cutting - * \param axis Axis to cut along, either x=0, y=1, z=2 - * - * \returns Number of output vertices - * - * The vertices will be scaled and then offset, after that they will be cut using either the - * x axis, y axis or the z axis as the cutting line. The resulting vertices will be added to the - * vOut array in their original space (i.e before scaling and offsetting). - */ - public int ClipPolygon (Int3[] vIn, int n, Int3[] vOut, int multi, int offset, int axis) { - Init(); - - int[] d = clipPolygonIntCache; - - for (int i = 0; i < n; i++) { - d[i] = multi*vIn[i][axis]+offset; - } - - // Number of resulting vertices - int m = 0; - - for (int i = 0, j = n-1; i < n; j = i, i++) { - bool prev = d[j] >= 0; - bool curr = d[i] >= 0; - - if (prev != curr) { - double s = (double)d[j] / (d[j] - d[i]); - - vOut[m] = vIn[j] + (vIn[i]-vIn[j])*s; - m++; - } - - if (curr) { - vOut[m] = vIn[i]; - m++; - } - } - - return m; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelPolygonClipper.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelPolygonClipper.cs.meta deleted file mode 100644 index 6ab0fa59cc4f8659001181adf4715248bc43a16c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelPolygonClipper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 10347e1eaceee428fa14386ccbaffde5 -timeCreated: 1454161567 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRasterization.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRasterization.cs deleted file mode 100644 index c7cc5352c1f56789d28d7ee4b0a67cc1afb1f913..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRasterization.cs +++ /dev/null @@ -1,895 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Mathf = UnityEngine.Mathf; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding.Voxels { - /** Voxelizer for recast graphs. - * - * In comments: units wu are World Units, vx are Voxels - * - * \astarpro - */ - public partial class Voxelize { - public List inputMeshes; - - /** Maximum ledge height that is considered to still be traversable. [Limit: >=0] [Units: vx] */ - public readonly int voxelWalkableClimb; - - /** Minimum floor to 'ceiling' height that will still allow the floor area to - * be considered walkable. [Limit: >= 3] [Units: vx] */ - public readonly uint voxelWalkableHeight; - - /** The xz-plane cell size to use for fields. [Limit: > 0] [Units: wu] */ - public readonly float cellSize = 0.2F; - - /** The y-axis cell size to use for fields. [Limit: > 0] [Units: wu] */ - public readonly float cellHeight = 0.1F; - - public int minRegionSize = 100; - - /** The size of the non-navigable border around the heightfield. [Limit: >=0] [Units: vx] */ - public int borderSize = 0; - - /** The maximum allowed length for contour edges along the border of the mesh. [Limit: >= 0] [Units: vx] */ - public float maxEdgeLength = 20; - - /** The maximum slope that is considered walkable. [Limits: 0 <= value < 90] [Units: Degrees] */ - public float maxSlope = 30; - - public RecastGraph.RelevantGraphSurfaceMode relevantGraphSurfaceMode; - - /** The world AABB to rasterize */ - public Bounds forcedBounds; - - public VoxelArea voxelArea; - public VoxelContourSet countourSet; - - /** Transform from voxel space to world space */ - GraphTransform transform; - - /** Transform from voxel space to graph space */ - public GraphTransform transformVoxel2Graph { get; private set; } - - /** Utility for clipping polygons to rectangles. - * Implemented as a struct and not a bunch of static methods - * because it needs some buffer arrays that are best cached - * to avoid excessive allocations - */ - VoxelPolygonClipper clipper; - - /** Width in voxels. - * Must match the #forcedBounds - */ - public int width; - - /** Depth in voxels. - * Must match the #forcedBounds - */ - public int depth; - - #region Debug - - Vector3 voxelOffset = Vector3.zero; - - public Vector3 CompactSpanToVector (int x, int z, int i) { - return voxelOffset+new Vector3((x+0.5f)*cellSize, voxelArea.compactSpans[i].y*cellHeight, (z+0.5f)*cellSize); - } - - public void VectorToIndex (Vector3 p, out int x, out int z) { - p -= voxelOffset; - x = Mathf.RoundToInt((p.x / cellSize) - 0.5f); - z = Mathf.RoundToInt((p.z / cellSize) - 0.5f); - } - - #endregion - - #region Constants /** @name Constants @{ */ - - public const uint NotConnected = 0x3f; - - /** Unmotivated variable, but let's clamp the layers at 65535 */ - const int MaxLayers = 65535; - - /** \todo : Check up on this variable */ - const int MaxRegions = 500; - - const int UnwalkableArea = 0; - - /** If heightfield region ID has the following bit set, the region is on border area - * and excluded from many calculations. */ - const ushort BorderReg = 0x8000; - - /** If contour region ID has the following bit set, the vertex will be later - * removed in order to match the segments and vertices at tile boundaries. */ - const int RC_BORDER_VERTEX = 0x10000; - - const int RC_AREA_BORDER = 0x20000; - - const int VERTEX_BUCKET_COUNT = 1<<12; - - /** Tessellate wall edges */ - public const int RC_CONTOUR_TESS_WALL_EDGES = 1 << 0; - - /** Tessellate edges between areas */ - public const int RC_CONTOUR_TESS_AREA_EDGES = 1 << 1; - - /** Tessellate edges at the border of the tile */ - public const int RC_CONTOUR_TESS_TILE_EDGES = 1 << 2; - - /** Mask used with contours to extract region id. */ - const int ContourRegMask = 0xffff; - - #endregion /** @} */ - - readonly Vector3 cellScale; - - public Voxelize (float ch, float cs, float walkableClimb, float walkableHeight, float maxSlope, float maxEdgeLength) { - cellSize = cs; - cellHeight = ch; - this.maxSlope = maxSlope; - - cellScale = new Vector3(cellSize, cellHeight, cellSize); - - voxelWalkableHeight = (uint)(walkableHeight/cellHeight); - voxelWalkableClimb = Mathf.RoundToInt(walkableClimb/cellHeight); - this.maxEdgeLength = maxEdgeLength; - } - - public void Init () { - // Initialize the voxel area - if (voxelArea == null || voxelArea.width != width || voxelArea.depth != depth) - voxelArea = new VoxelArea(width, depth); - else voxelArea.Reset(); - } - - public void VoxelizeInput (GraphTransform graphTransform, Bounds graphSpaceBounds) { - AstarProfiler.StartProfile("Build Navigation Mesh"); - - AstarProfiler.StartProfile("Voxelizing - Step 1"); - - // Transform from voxel space to graph space. - // then scale from voxel space (one unit equals one voxel) - // Finally add min - Matrix4x4 voxelMatrix = Matrix4x4.TRS(graphSpaceBounds.min, Quaternion.identity, Vector3.one) * Matrix4x4.Scale(new Vector3(cellSize, cellHeight, cellSize)); - transformVoxel2Graph = new GraphTransform(voxelMatrix); - - // Transform from voxel space to world space - // add half a voxel to fix rounding - transform = graphTransform * voxelMatrix * Matrix4x4.TRS(new Vector3(0.5f, 0, 0.5f), Quaternion.identity, Vector3.one); - - int maximumVoxelYCoord = (int)(graphSpaceBounds.size.y / cellHeight); - - AstarProfiler.EndProfile("Voxelizing - Step 1"); - - AstarProfiler.StartProfile("Voxelizing - Step 2 - Init"); - - // Cosine of the slope limit in voxel space (some tweaks are needed because the voxel space might be stretched out along the y axis) - float slopeLimit = Mathf.Cos(Mathf.Atan(Mathf.Tan(maxSlope*Mathf.Deg2Rad)*(cellSize/cellHeight))); - - // Temporary arrays used for rasterization - float[] vTris = new float[3*3]; - float[] vOut = new float[7*3]; - float[] vRow = new float[7*3]; - float[] vCellOut = new float[7*3]; - float[] vCell = new float[7*3]; - - if (inputMeshes == null) throw new System.NullReferenceException("inputMeshes not set"); - - // Find the largest lengths of vertex arrays and check for meshes which can be skipped - int maxVerts = 0; - for (int m = 0; m < inputMeshes.Count; m++) { - maxVerts = System.Math.Max(inputMeshes[m].vertices.Length, maxVerts); - } - - // Create buffer, here vertices will be stored multiplied with the local-to-voxel-space matrix - var verts = new Vector3[maxVerts]; - - AstarProfiler.EndProfile("Voxelizing - Step 2 - Init"); - - AstarProfiler.StartProfile("Voxelizing - Step 2"); - - // This loop is the hottest place in the whole rasterization process - // it usually accounts for around 50% of the time - for (int m = 0; m < inputMeshes.Count; m++) { - RasterizationMesh mesh = inputMeshes[m]; - var meshMatrix = mesh.matrix; - - // Flip the orientation of all faces if the mesh is scaled in such a way - // that the face orientations would change - // This happens for example if a mesh has a negative scale along an odd number of axes - // e.g it happens for the scale (-1, 1, 1) but not for (-1, -1, 1) or (1,1,1) - var flipOrientation = UnityHelper.ReversesFaceOrientations(meshMatrix); - - Vector3[] vs = mesh.vertices; - int[] tris = mesh.triangles; - int trisLength = mesh.numTriangles; - - // Transform vertices first to world space and then to voxel space - for (int i = 0; i < vs.Length; i++) verts[i] = transform.InverseTransform(meshMatrix.MultiplyPoint3x4(vs[i])); - - int mesharea = mesh.area; - - for (int i = 0; i < trisLength; i += 3) { - Vector3 p1 = verts[tris[i]]; - Vector3 p2 = verts[tris[i+1]]; - Vector3 p3 = verts[tris[i+2]]; - - if (flipOrientation) { - var tmp = p1; - p1 = p3; - p3 = tmp; - } - - int minX = (int)(Utility.Min(p1.x, p2.x, p3.x)); - int minZ = (int)(Utility.Min(p1.z, p2.z, p3.z)); - - int maxX = (int)System.Math.Ceiling(Utility.Max(p1.x, p2.x, p3.x)); - int maxZ = (int)System.Math.Ceiling(Utility.Max(p1.z, p2.z, p3.z)); - - minX = Mathf.Clamp(minX, 0, voxelArea.width-1); - maxX = Mathf.Clamp(maxX, 0, voxelArea.width-1); - minZ = Mathf.Clamp(minZ, 0, voxelArea.depth-1); - maxZ = Mathf.Clamp(maxZ, 0, voxelArea.depth-1); - - // Check if the mesh is completely out of bounds - if (minX >= voxelArea.width || minZ >= voxelArea.depth || maxX <= 0 || maxZ <= 0) continue; - - Vector3 normal; - - int area; - - //AstarProfiler.StartProfile ("Rasterize..."); - - normal = Vector3.Cross(p2-p1, p3-p1); - - float cosSlopeAngle = Vector3.Dot(normal.normalized, Vector3.up); - - if (cosSlopeAngle < slopeLimit) { - area = UnwalkableArea; - } else { - area = 1 + mesharea; - } - - Utility.CopyVector(vTris, 0, p1); - Utility.CopyVector(vTris, 3, p2); - Utility.CopyVector(vTris, 6, p3); - - for (int x = minX; x <= maxX; x++) { - int nrow = clipper.ClipPolygon(vTris, 3, vOut, 1F, -x+0.5F, 0); - - if (nrow < 3) { - continue; - } - - nrow = clipper.ClipPolygon(vOut, nrow, vRow, -1F, x+0.5F, 0); - - if (nrow < 3) { - continue; - } - - float clampZ1 = vRow[2]; - float clampZ2 = vRow[2]; - for (int q = 1; q < nrow; q++) { - float val = vRow[q*3+2]; - clampZ1 = System.Math.Min(clampZ1, val); - clampZ2 = System.Math.Max(clampZ2, val); - } - - int clampZ1I = Mathf.Clamp((int)System.Math.Round(clampZ1), 0, voxelArea.depth-1); - int clampZ2I = Mathf.Clamp((int)System.Math.Round(clampZ2), 0, voxelArea.depth-1); - - - for (int z = clampZ1I; z <= clampZ2I; z++) { - //AstarProfiler.StartFastProfile(1); - int ncell = clipper.ClipPolygon(vRow, nrow, vCellOut, 1F, -z+0.5F, 2); - - if (ncell < 3) { - //AstarProfiler.EndFastProfile(1); - continue; - } - - ncell = clipper.ClipPolygonY(vCellOut, ncell, vCell, -1F, z+0.5F, 2); - - if (ncell < 3) { - //AstarProfiler.EndFastProfile(1); - continue; - } - - //AstarProfiler.EndFastProfile(1); - //AstarProfiler.StartFastProfile(2); - float sMin = vCell[1]; - float sMax = vCell[1]; - for (int q = 1; q < ncell; q++) { - float val = vCell[q*3+1]; - sMin = System.Math.Min(sMin, val); - sMax = System.Math.Max(sMax, val); - } - - //AstarProfiler.EndFastProfile(2); - int maxi = (int)System.Math.Ceiling(sMax); - - // Skip span if below or above the bounding box - if (maxi >= 0 && sMin <= maximumVoxelYCoord) { - // Make sure mini >= 0 - int mini = System.Math.Max(0, (int)sMin); - - // Make sure the span is at least 1 voxel high - maxi = System.Math.Max(mini+1, maxi); - - voxelArea.AddLinkedSpan(z*voxelArea.width+x, (uint)mini, (uint)maxi, area, voxelWalkableClimb); - } - } - } - } - //AstarProfiler.EndFastProfile(0); - //AstarProfiler.EndProfile ("Rasterize..."); - } - AstarProfiler.EndProfile("Voxelizing - Step 2"); - } - - public void DebugDrawSpans () { -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - int wd = voxelArea.width*voxelArea.depth; - var min = forcedBounds.min; - - LinkedVoxelSpan[] spans = voxelArea.linkedSpans; - for (int z = 0, pz = 0; z < wd; z += voxelArea.width, pz++) { - for (int x = 0; x < voxelArea.width; x++) { - for (int s = z+x; s != -1 && spans[s].bottom != VoxelArea.InvalidSpanValue; s = spans[s].next) { - uint bottom = spans[s].top; - uint top = spans[s].next != -1 ? spans[spans[s].next].bottom : VoxelArea.MaxHeight; - - if (bottom > top) { - Debug.Log(bottom + " " + top); - Debug.DrawLine(new Vector3(x*cellSize, bottom*cellHeight, pz*cellSize)+min, new Vector3(x*cellSize, top*cellHeight, pz*cellSize)+min, Color.yellow, 1); - } - //Debug.DrawRay (p,voxelArea.VectorDirection[d]*cellSize*0.5F,Color.red); - if (top - bottom < voxelWalkableHeight) { - //spans[s].area = UnwalkableArea; - } - } - } - } -#else - Debug.LogError("This debug method only works with !ASTAR_RECAST_CLASS_BASED_LINKED_LIST"); -#endif - } - - - public void BuildCompactField () { - AstarProfiler.StartProfile("Build Compact Voxel Field"); - - //Build compact representation - int spanCount = voxelArea.GetSpanCount(); - - voxelArea.compactSpanCount = spanCount; - if (voxelArea.compactSpans == null || voxelArea.compactSpans.Length < spanCount) { - voxelArea.compactSpans = new CompactVoxelSpan[spanCount]; - voxelArea.areaTypes = new int[spanCount]; - } - - uint idx = 0; - - int w = voxelArea.width; - int d = voxelArea.depth; - int wd = w*d; - - if (this.voxelWalkableHeight >= 0xFFFF) { - Debug.LogWarning("Too high walkable height to guarantee correctness. Increase voxel height or lower walkable height."); - } - -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - LinkedVoxelSpan[] spans = voxelArea.linkedSpans; -#endif - - //Parallel.For (0, voxelArea.depth, delegate (int pz) { - for (int z = 0, pz = 0; z < wd; z += w, pz++) { - for (int x = 0; x < w; x++) { -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - int spanIndex = x+z; - if (spans[spanIndex].bottom == VoxelArea.InvalidSpanValue) { - voxelArea.compactCells[x+z] = new CompactVoxelCell(0, 0); - continue; - } - - uint index = idx; - uint count = 0; - - //Vector3 p = new Vector3(x,0,pz)*cellSize+voxelOffset; - - while (spanIndex != -1) { - if (spans[spanIndex].area != UnwalkableArea) { - int bottom = (int)spans[spanIndex].top; - int next = spans[spanIndex].next; - int top = next != -1 ? (int)spans[next].bottom : VoxelArea.MaxHeightInt; - - voxelArea.compactSpans[idx] = new CompactVoxelSpan((ushort)(bottom > 0xFFFF ? 0xFFFF : bottom), (uint)(top-bottom > 0xFFFF ? 0xFFFF : top-bottom)); - voxelArea.areaTypes[idx] = spans[spanIndex].area; - idx++; - count++; - } - spanIndex = spans[spanIndex].next; - } - - voxelArea.compactCells[x+z] = new CompactVoxelCell(index, count); -#else - VoxelSpan s = voxelArea.cells[x+z].firstSpan; - - if (s == null) { - voxelArea.compactCells[x+z] = new CompactVoxelCell(0, 0); - continue; - } - - uint index = idx; - uint count = 0; - - //Vector3 p = new Vector3(x,0,pz)*cellSize+voxelOffset; - - while (s != null) { - if (s.area != UnwalkableArea) { - int bottom = (int)s.top; - int top = s.next != null ? (int)s.next.bottom : VoxelArea.MaxHeightInt; - - voxelArea.compactSpans[idx] = new CompactVoxelSpan((ushort)Mathf.Clamp(bottom, 0, 0xffff), (uint)Mathf.Clamp(top-bottom, 0, 0xffff)); - voxelArea.areaTypes[idx] = s.area; - idx++; - count++; - } - s = s.next; - } - - voxelArea.compactCells[x+z] = new CompactVoxelCell(index, count); -#endif - } - } - - AstarProfiler.EndProfile("Build Compact Voxel Field"); - } - - public void BuildVoxelConnections () { - AstarProfiler.StartProfile("Build Voxel Connections"); - - int wd = voxelArea.width*voxelArea.depth; - - CompactVoxelSpan[] spans = voxelArea.compactSpans; - CompactVoxelCell[] cells = voxelArea.compactCells; - - // Build voxel connections - for (int z = 0, pz = 0; z < wd; z += voxelArea.width, pz++) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell c = cells[x+z]; - - for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; i++) { - CompactVoxelSpan s = spans[i]; - - spans[i].con = 0xFFFFFFFF; - - for (int d = 0; d < 4; d++) { - int nx = x+voxelArea.DirectionX[d]; - int nz = z+voxelArea.DirectionZ[d]; - - if (nx < 0 || nz < 0 || nz >= wd || nx >= voxelArea.width) { - continue; - } - - CompactVoxelCell nc = cells[nx+nz]; - - for (int k = (int)nc.index, nk = (int)(nc.index+nc.count); k < nk; k++) { - CompactVoxelSpan ns = spans[k]; - - int bottom = System.Math.Max(s.y, ns.y); - - int top = System.Math.Min((int)s.y+(int)s.h, (int)ns.y+(int)ns.h); - - if ((top-bottom) >= voxelWalkableHeight && System.Math.Abs((int)ns.y - (int)s.y) <= voxelWalkableClimb) { - uint connIdx = (uint)k - nc.index; - - if (connIdx > MaxLayers) { - Debug.LogError("Too many layers"); - continue; - } - - spans[i].SetConnection(d, connIdx); - break; - } - } - } - } - } - } - - AstarProfiler.EndProfile("Build Voxel Connections"); - } - - void DrawLine (int a, int b, int[] indices, int[] verts, Color color) { - int p1 = (indices[a] & 0x0fffffff) * 4; - int p2 = (indices[b] & 0x0fffffff) * 4; - - Debug.DrawLine(VoxelToWorld(verts[p1+0], verts[p1+1], verts[p1+2]), VoxelToWorld(verts[p2+0], verts[p2+1], verts[p2+2]), color); - } - -#if ASTARDEBUG - Vector3 ConvertPos (int x, int y, int z) { - Vector3 p = Vector3.Scale( - new Vector3( - x+0.5F, - y, - (z/(float)voxelArea.width)+0.5F - ) - , cellScale) - +voxelOffset; - - return p; - } -#endif - - /** Convert from voxel coordinates to world coordinates. - * (0,0,0) in voxel coordinates is a bottom corner of the bounding box. - * (1,0,0) is one voxel in the +X direction of that. - */ - public Vector3 VoxelToWorld (int x, int y, int z) { - Vector3 p = Vector3.Scale( - new Vector3( - x, - y, - z - ) - , cellScale) - +voxelOffset; - - return p; - } - - /** Convert from voxel coordinates to world coordinates. - * (0,0,0) in voxel coordinates is a bottom corner of the bounding box. - * (1,0,0) is one voxel in the +X direction of that. - */ - public Int3 VoxelToWorldInt3 (Int3 voxelPosition) { - var pos = voxelPosition * Int3.Precision; - - pos = new Int3(Mathf.RoundToInt(pos.x * cellScale.x), Mathf.RoundToInt(pos.y * cellScale.y), Mathf.RoundToInt(pos.z * cellScale.z)); - return pos +(Int3)voxelOffset; - } - - Vector3 ConvertPosWithoutOffset (int x, int y, int z) { - Vector3 p = Vector3.Scale( - new Vector3( - x, - y, - (z/(float)voxelArea.width) - ) - , cellScale) - +voxelOffset; - - return p; - } - - Vector3 ConvertPosition (int x, int z, int i) { - CompactVoxelSpan s = voxelArea.compactSpans[i]; - - return new Vector3(x*cellSize, s.y*cellHeight, (z/(float)voxelArea.width)*cellSize)+voxelOffset; - } - - - public void ErodeWalkableArea (int radius) { - AstarProfiler.StartProfile("Erode Walkable Area"); - - ushort[] src = voxelArea.tmpUShortArr; - if (src == null || src.Length < voxelArea.compactSpanCount) { - src = voxelArea.tmpUShortArr = new ushort[voxelArea.compactSpanCount]; - } - - // Set all elements in src to 0xffff - Memory.MemSet(src, 0xffff, sizeof(ushort)); - - CalculateDistanceField(src); - - for (int i = 0; i < src.Length; i++) { - //Note multiplied with 2 because the distance field increments distance by 2 for each voxel (and 3 for diagonal) - if (src[i] < radius*2) { - voxelArea.areaTypes[i] = UnwalkableArea; - } - } - - AstarProfiler.EndProfile("Erode Walkable Area"); - } - - public void BuildDistanceField () { - AstarProfiler.StartProfile("Build Distance Field"); - - ushort[] src = voxelArea.tmpUShortArr; - if (src == null || src.Length < voxelArea.compactSpanCount) { - src = voxelArea.tmpUShortArr = new ushort[voxelArea.compactSpanCount]; - } - - // Set all elements in src to 0xffff - Memory.MemSet(src, 0xffff, sizeof(ushort)); - - voxelArea.maxDistance = CalculateDistanceField(src); - - ushort[] dst = voxelArea.dist; - if (dst == null || dst.Length < voxelArea.compactSpanCount) { - dst = new ushort[voxelArea.compactSpanCount]; - } - - dst = BoxBlur(src, dst); - voxelArea.dist = dst; - - AstarProfiler.EndProfile("Build Distance Field"); - } - - /** \todo Complete the ErodeVoxels function translation */ - [System.Obsolete("This function is not complete and should not be used")] - public void ErodeVoxels (int radius) { - if (radius > 255) { - Debug.LogError("Max Erode Radius is 255"); - radius = 255; - } - - int wd = voxelArea.width*voxelArea.depth; - - int[] dist = new int[voxelArea.compactSpanCount]; - - for (int i = 0; i < dist.Length; i++) { - dist[i] = 0xFF; - } - - for (int z = 0; z < wd; z += voxelArea.width) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell c = voxelArea.compactCells[x+z]; - - for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; i++) { - if (voxelArea.areaTypes[i] != UnwalkableArea) { - CompactVoxelSpan s = voxelArea.compactSpans[i]; - int nc = 0; - for (int dir = 0; dir < 4; dir++) { - if (s.GetConnection(dir) != NotConnected) - nc++; - } - //At least one missing neighbour - if (nc != 4) { - dist[i] = 0; - } - } - } - } - } - - //int nd = 0; - - //Pass 1 - - /*for (int z=0;z < wd;z += voxelArea.width) { - * for (int x=0;x < voxelArea.width;x++) { - * - * CompactVoxelCell c = voxelArea.compactCells[x+z]; - * - * for (int i= (int)c.index, ci = (int)(c.index+c.count); i < ci; i++) { - * CompactVoxelSpan s = voxelArea.compactSpans[i]; - * - * if (s.GetConnection (0) != NotConnected) { - * // (-1,0) - * int nx = x+voxelArea.DirectionX[0]; - * int nz = z+voxelArea.DirectionZ[0]; - * - * int ni = (int)(voxelArea.compactCells[nx+nz].index+s.GetConnection (0)); - * CompactVoxelSpan ns = voxelArea.compactSpans[ni]; - * - * if (dist[ni]+2 < dist[i]) { - * dist[i] = (ushort)(dist[ni]+2); - * } - * - * if (ns.GetConnection (3) != NotConnected) { - * // (-1,0) + (0,-1) = (-1,-1) - * int nnx = nx+voxelArea.DirectionX[3]; - * int nnz = nz+voxelArea.DirectionZ[3]; - * - * int nni = (int)(voxelArea.compactCells[nnx+nnz].index+ns.GetConnection (3)); - * - * if (src[nni]+3 < src[i]) { - * src[i] = (ushort)(src[nni]+3); - * } - * } - * } - * - * if (s.GetConnection (3) != NotConnected) { - * // (0,-1) - * int nx = x+voxelArea.DirectionX[3]; - * int nz = z+voxelArea.DirectionZ[3]; - * - * int ni = (int)(voxelArea.compactCells[nx+nz].index+s.GetConnection (3)); - * - * if (src[ni]+2 < src[i]) { - * src[i] = (ushort)(src[ni]+2); - * } - * - * CompactVoxelSpan ns = voxelArea.compactSpans[ni]; - * - * if (ns.GetConnection (2) != NotConnected) { - * - * // (0,-1) + (1,0) = (1,-1) - * int nnx = nx+voxelArea.DirectionX[2]; - * int nnz = nz+voxelArea.DirectionZ[2]; - * - * voxelOffset nni = (int)(voxelArea.compactCells[nnx+nnz].index+ns.GetConnection (2)); - * - * if (src[nni]+3 < src[i]) { - * src[i] = (ushort)(src[nni]+3); - * } - * } - * } - * } - * } - * }*/ - } - - public void FilterLowHeightSpans (uint voxelWalkableHeight, float cs, float ch) { - int wd = voxelArea.width*voxelArea.depth; - - //Filter all ledges -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - LinkedVoxelSpan[] spans = voxelArea.linkedSpans; - for (int z = 0, pz = 0; z < wd; z += voxelArea.width, pz++) { - for (int x = 0; x < voxelArea.width; x++) { - for (int s = z+x; s != -1 && spans[s].bottom != VoxelArea.InvalidSpanValue; s = spans[s].next) { - uint bottom = spans[s].top; - uint top = spans[s].next != -1 ? spans[spans[s].next].bottom : VoxelArea.MaxHeight; - - if (top - bottom < voxelWalkableHeight) { - spans[s].area = UnwalkableArea; - } - } - } - } -#else - for (int z = 0, pz = 0; z < wd; z += voxelArea.width, pz++) { - for (int x = 0; x < voxelArea.width; x++) { - for (VoxelSpan s = voxelArea.cells[z+x].firstSpan; s != null; s = s.next) { - uint bottom = s.top; - uint top = s.next != null ? s.next.bottom : VoxelArea.MaxHeight; - - if (top - bottom < voxelWalkableHeight) { - s.area = UnwalkableArea; - } - } - } - } -#endif - } - - //Code almost completely ripped from Recast - public void FilterLedges (uint voxelWalkableHeight, int voxelWalkableClimb, float cs, float ch) { - int wd = voxelArea.width*voxelArea.depth; - -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - LinkedVoxelSpan[] spans = voxelArea.linkedSpans; - int[] DirectionX = voxelArea.DirectionX; - int[] DirectionZ = voxelArea.DirectionZ; -#endif - int width = voxelArea.width; - - //Filter all ledges - for (int z = 0, pz = 0; z < wd; z += width, pz++) { - for (int x = 0; x < width; x++) { -#if !ASTAR_RECAST_CLASS_BASED_LINKED_LIST - if (spans[x+z].bottom == VoxelArea.InvalidSpanValue) continue; - - for (int s = x+z; s != -1; s = spans[s].next) { - //Skip non-walkable spans - if (spans[s].area == UnwalkableArea) { - continue; - } - - int bottom = (int)spans[s].top; - int top = spans[s].next != -1 ? (int)spans[spans[s].next].bottom : VoxelArea.MaxHeightInt; - - int minHeight = VoxelArea.MaxHeightInt; - - int aMinHeight = (int)spans[s].top; - int aMaxHeight = aMinHeight; - - for (int d = 0; d < 4; d++) { - int nx = x+DirectionX[d]; - int nz = z+DirectionZ[d]; - - //Skip out-of-bounds points - if (nx < 0 || nz < 0 || nz >= wd || nx >= width) { - spans[s].area = UnwalkableArea; - break; - } - - int nsx = nx+nz; - - int nbottom = -voxelWalkableClimb; - - int ntop = spans[nsx].bottom != VoxelArea.InvalidSpanValue ? (int)spans[nsx].bottom : VoxelArea.MaxHeightInt; - - if (System.Math.Min(top, ntop) - System.Math.Max(bottom, nbottom) > voxelWalkableHeight) { - minHeight = System.Math.Min(minHeight, nbottom - bottom); - } - - //Loop through spans - if (spans[nsx].bottom != VoxelArea.InvalidSpanValue) { - for (int ns = nsx; ns != -1; ns = spans[ns].next) { - nbottom = (int)spans[ns].top; - ntop = spans[ns].next != -1 ? (int)spans[spans[ns].next].bottom : VoxelArea.MaxHeightInt; - - if (System.Math.Min(top, ntop) - System.Math.Max(bottom, nbottom) > voxelWalkableHeight) { - minHeight = System.Math.Min(minHeight, nbottom - bottom); - - if (System.Math.Abs(nbottom - bottom) <= voxelWalkableClimb) { - if (nbottom < aMinHeight) { aMinHeight = nbottom; } - if (nbottom > aMaxHeight) { aMaxHeight = nbottom; } - } - } - } - } - } - - if (minHeight < -voxelWalkableClimb || (aMaxHeight - aMinHeight) > voxelWalkableClimb) { - spans[s].area = UnwalkableArea; - } - } -#else - for (VoxelSpan s = voxelArea.cells[z+x].firstSpan; s != null; s = s.next) { - //Skip non-walkable spans - if (s.area == UnwalkableArea) { - continue; - } - - int bottom = (int)s.top; - int top = s.next != null ? (int)s.next.bottom : VoxelArea.MaxHeightInt; - - int minHeight = VoxelArea.MaxHeightInt; - - int aMinHeight = (int)s.top; - int aMaxHeight = (int)s.top; - - for (int d = 0; d < 4; d++) { - int nx = x+voxelArea.DirectionX[d]; - int nz = z+voxelArea.DirectionZ[d]; - - //Skip out-of-bounds points - if (nx < 0 || nz < 0 || nz >= wd || nx >= voxelArea.width) { - s.area = UnwalkableArea; - break; - } - - VoxelSpan nsx = voxelArea.cells[nx+nz].firstSpan; - - int nbottom = -voxelWalkableClimb; - - int ntop = nsx != null ? (int)nsx.bottom : VoxelArea.MaxHeightInt; - - if (System.Math.Min(top, ntop) - System.Math.Max(bottom, nbottom) > voxelWalkableHeight) { - minHeight = System.Math.Min(minHeight, nbottom - bottom); - } - - //Loop through spans - for (VoxelSpan ns = nsx; ns != null; ns = ns.next) { - nbottom = (int)ns.top; - ntop = ns.next != null ? (int)ns.next.bottom : VoxelArea.MaxHeightInt; - - if (System.Math.Min(top, ntop) - System.Math.Max(bottom, nbottom) > voxelWalkableHeight) { - minHeight = System.Math.Min(minHeight, nbottom - bottom); - - if (System.Math.Abs(nbottom - bottom) <= voxelWalkableClimb) { - if (nbottom < aMinHeight) { aMinHeight = nbottom; } - if (nbottom > aMaxHeight) { aMaxHeight = nbottom; } - } - } - } - } - - if (minHeight < -voxelWalkableClimb || (aMaxHeight - aMinHeight) > voxelWalkableClimb) { - s.area = UnwalkableArea; - } - } -#endif - } - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRasterization.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRasterization.cs.meta deleted file mode 100644 index 9b3aee71a5b453387652d438209cfe38c0d96028..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRasterization.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: d0d1f28f02bb44332a1705b450727571 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRegion.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRegion.cs deleted file mode 100644 index b05c6a768cef56d44701b6f0241c8e8a3378a35c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRegion.cs +++ /dev/null @@ -1,1024 +0,0 @@ -using System.Collections.Generic; -using PF; - -namespace Pathfinding.Voxels { - public partial class Voxelize { - public ushort[] ExpandRegions (int maxIterations, uint level, ushort[] srcReg, ushort[] srcDist, ushort[] dstReg, ushort[] dstDist, List stack) { - AstarProfiler.StartProfile("---Expand 1"); - int w = voxelArea.width; - int d = voxelArea.depth; - - int wd = w*d; - -#if ASTAR_RECAST_BFS && FALSE - List st1 = new List(); - List st2 = new List(); - - for (int z = 0, pz = 0; z < wd; z += w, pz++) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell c = voxelArea.compactCells[z+x]; - - for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; i++) { - if (voxelArea.dist[i] >= level && srcReg[i] == 0 && voxelArea.areaTypes[i] != UnwalkableArea) { - st2.Add(x); - st2.Add(z); - st2.Add(i); - //Debug.DrawRay (ConvertPosition(x,z,i),Vector3.up*0.5F,Color.cyan); - } - } - } - } - throw new System.NotImplementedException(); - return null; -#else - // Find cells revealed by the raised level. - stack.Clear(); - - for (int z = 0, pz = 0; z < wd; z += w, pz++) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell c = voxelArea.compactCells[z+x]; - - for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; i++) { - if (voxelArea.dist[i] >= level && srcReg[i] == 0 && voxelArea.areaTypes[i] != UnwalkableArea) { - stack.Add(x); - stack.Add(z); - stack.Add(i); - //Debug.DrawRay (ConvertPosition(x,z,i),Vector3.up*0.5F,Color.cyan); - } - } - } - } - - AstarProfiler.EndProfile("---Expand 1"); - AstarProfiler.StartProfile("---Expand 2"); - - int iter = 0; - - int stCount = stack.Count; - - if (stCount > 0) while (true) { - int failed = 0; - - AstarProfiler.StartProfile("---- Copy"); - - // Copy srcReg and srcDist to dstReg and dstDist (but faster than a normal loop) - System.Buffer.BlockCopy(srcReg, 0, dstReg, 0, srcReg.Length*sizeof(ushort)); - System.Buffer.BlockCopy(srcDist, 0, dstDist, 0, dstDist.Length*sizeof(ushort)); - - AstarProfiler.EndProfile("---- Copy"); - - for (int j = 0; j < stCount; j += 3) { - if (j >= stCount) break; - - int x = stack[j]; - int z = stack[j+1]; - int i = stack[j+2]; - - if (i < 0) { - //Debug.DrawRay (ConvertPosition(x,z,i),Vector3.up*2,Color.blue); - failed++; - continue; - } - - ushort r = srcReg[i]; - ushort d2 = 0xffff; - - CompactVoxelSpan s = voxelArea.compactSpans[i]; - int area = voxelArea.areaTypes[i]; - - for (int dir = 0; dir < 4; dir++) { - if (s.GetConnection(dir) == NotConnected) { continue; } - - int nx = x + voxelArea.DirectionX[dir]; - int nz = z + voxelArea.DirectionZ[dir]; - - int ni = (int)voxelArea.compactCells[nx+nz].index + s.GetConnection(dir); - - if (area != voxelArea.areaTypes[ni]) { continue; } - - if (srcReg[ni] > 0 && (srcReg[ni] & BorderReg) == 0) { - if ((int)srcDist[ni]+2 < (int)d2) { - r = srcReg[ni]; - d2 = (ushort)(srcDist[ni]+2); - } - } - } - - if (r != 0) { - stack[j+2] = -1; // mark as used - dstReg[i] = r; - dstDist[i] = d2; - } else { - failed++; - //Debug.DrawRay (ConvertPosition(x,z,i),Vector3.up*2,Color.red); - } - } - - // Swap source and dest. - ushort[] tmp = srcReg; - srcReg = dstReg; - dstReg = tmp; - - tmp = srcDist; - srcDist = dstDist; - dstDist = tmp; - - if (failed*3 >= stCount) { - //Debug.Log("Failed count broke "+failed); - break; - } - - if (level > 0) { - iter++; - - if (iter >= maxIterations) { - //Debug.Log("Iterations broke"); - break; - } - } - } - - AstarProfiler.EndProfile("---Expand 2"); - - return srcReg; -#endif - } - - public bool FloodRegion (int x, int z, int i, uint level, ushort r, ushort[] srcReg, ushort[] srcDist, List stack) { - int area = voxelArea.areaTypes[i]; - - // Flood fill mark region. - stack.Clear(); - - stack.Add(x); - stack.Add(z); - stack.Add(i); - - srcReg[i] = r; - srcDist[i] = 0; - - int lev = (int)(level >= 2 ? level-2 : 0); - - int count = 0; - - - - while (stack.Count > 0) { - //Similar to the Pop operation of an array, but Pop is not implemented in List<> - int ci = stack[stack.Count-1]; stack.RemoveAt(stack.Count-1); - int cz = stack[stack.Count-1]; stack.RemoveAt(stack.Count-1); - int cx = stack[stack.Count-1]; stack.RemoveAt(stack.Count-1); - - - CompactVoxelSpan cs = voxelArea.compactSpans[ci]; - - //Debug.DrawRay (ConvertPosition(cx,cz,ci),Vector3.up, Color.cyan); - - // Check if any of the neighbours already have a valid region set. - ushort ar = 0; - - // Loop through four neighbours - // then check one neighbour of the neighbour - // to get the diagonal neighbour - for (int dir = 0; dir < 4; dir++) { - // 8 connected - if (cs.GetConnection(dir) != NotConnected) { - int ax = cx + voxelArea.DirectionX[dir]; - int az = cz + voxelArea.DirectionZ[dir]; - - int ai = (int)voxelArea.compactCells[ax+az].index + cs.GetConnection(dir); - - if (voxelArea.areaTypes[ai] != area) - continue; - - ushort nr = srcReg[ai]; - - if ((nr & BorderReg) == BorderReg) // Do not take borders into account. - continue; - - if (nr != 0 && nr != r) { - ar = nr; - // Found a valid region, skip checking the rest - break; - } - - CompactVoxelSpan aspan = voxelArea.compactSpans[ai]; - - // Rotate dir 90 degrees - int dir2 = (dir+1) & 0x3; - // Check the diagonal connection - if (aspan.GetConnection(dir2) != NotConnected) { - int ax2 = ax + voxelArea.DirectionX[dir2]; - int az2 = az + voxelArea.DirectionZ[dir2]; - - int ai2 = (int)voxelArea.compactCells[ax2+az2].index + aspan.GetConnection(dir2); - - if (voxelArea.areaTypes[ai2] != area) - continue; - - ushort nr2 = srcReg[ai2]; - if (nr2 != 0 && nr2 != r) { - ar = nr2; - // Found a valid region, skip checking the rest - break; - } - } - } - } - - if (ar != 0) { - srcReg[ci] = 0; - continue; - } - count++; - - // Expand neighbours. - for (int dir = 0; dir < 4; ++dir) { - if (cs.GetConnection(dir) != NotConnected) { - int ax = cx + voxelArea.DirectionX[dir]; - int az = cz + voxelArea.DirectionZ[dir]; - int ai = (int)voxelArea.compactCells[ax+az].index + cs.GetConnection(dir); - - if (voxelArea.areaTypes[ai] != area) - continue; - - if (voxelArea.dist[ai] >= lev && srcReg[ai] == 0) { - srcReg[ai] = r; - srcDist[ai] = 0; - - stack.Add(ax); - stack.Add(az); - stack.Add(ai); - } - } - } - } - - - return count > 0; - } - - - public void MarkRectWithRegion (int minx, int maxx, int minz, int maxz, ushort region, ushort[] srcReg) { - int md = maxz * voxelArea.width; - - for (int z = minz*voxelArea.width; z < md; z += voxelArea.width) { - for (int x = minx; x < maxx; x++) { - CompactVoxelCell c = voxelArea.compactCells[z+x]; - - for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; i++) { - if (voxelArea.areaTypes[i] != UnwalkableArea) { - srcReg[i] = region; - } - } - } - } - } - - public ushort CalculateDistanceField (ushort[] src) { - int wd = voxelArea.width*voxelArea.depth; - - //Mark boundary cells - for (int z = 0; z < wd; z += voxelArea.width) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell c = voxelArea.compactCells[x+z]; - - for (int i = (int)c.index, ci = (int)(c.index+c.count); i < ci; i++) { - CompactVoxelSpan s = voxelArea.compactSpans[i]; - - int nc = 0; - for (int d = 0; d < 4; d++) { - if (s.GetConnection(d) != NotConnected) { - //This function (CalculateDistanceField) is used for both ErodeWalkableArea and by itself. - //The C++ recast source uses different code for those two cases, but I have found it works with one function - //the voxelArea.areaTypes[ni] will actually only be one of two cases when used from ErodeWalkableArea - //so it will have the same effect as - // if (area != UnwalkableArea) { - //This line is the one where the differ most - - nc++; -#if FALSE - if (area == voxelArea.areaTypes[ni]) { - nc++; - } else { - //No way we can reach 4 - break; - } -#endif - } else { - break; - } - } - - if (nc != 4) { - src[i] = 0; - } - } - } - } - - //Pass 1 - - for (int z = 0; z < wd; z += voxelArea.width) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell c = voxelArea.compactCells[x+z]; - - for (int i = (int)c.index, ci = (int)(c.index+c.count); i < ci; i++) { - CompactVoxelSpan s = voxelArea.compactSpans[i]; - - if (s.GetConnection(0) != NotConnected) { - // (-1,0) - int nx = x+voxelArea.DirectionX[0]; - int nz = z+voxelArea.DirectionZ[0]; - - int ni = (int)(voxelArea.compactCells[nx+nz].index+s.GetConnection(0)); - - if (src[ni]+2 < src[i]) { - src[i] = (ushort)(src[ni]+2); - } - - CompactVoxelSpan ns = voxelArea.compactSpans[ni]; - - if (ns.GetConnection(3) != NotConnected) { - // (-1,0) + (0,-1) = (-1,-1) - int nnx = nx+voxelArea.DirectionX[3]; - int nnz = nz+voxelArea.DirectionZ[3]; - - int nni = (int)(voxelArea.compactCells[nnx+nnz].index+ns.GetConnection(3)); - - if (src[nni]+3 < src[i]) { - src[i] = (ushort)(src[nni]+3); - } - } - } - - if (s.GetConnection(3) != NotConnected) { - // (0,-1) - int nx = x+voxelArea.DirectionX[3]; - int nz = z+voxelArea.DirectionZ[3]; - - int ni = (int)(voxelArea.compactCells[nx+nz].index+s.GetConnection(3)); - - if (src[ni]+2 < src[i]) { - src[i] = (ushort)(src[ni]+2); - } - - CompactVoxelSpan ns = voxelArea.compactSpans[ni]; - - if (ns.GetConnection(2) != NotConnected) { - // (0,-1) + (1,0) = (1,-1) - int nnx = nx+voxelArea.DirectionX[2]; - int nnz = nz+voxelArea.DirectionZ[2]; - - int nni = (int)(voxelArea.compactCells[nnx+nnz].index+ns.GetConnection(2)); - - if (src[nni]+3 < src[i]) { - src[i] = (ushort)(src[nni]+3); - } - } - } - } - } - } - - //Pass 2 - - for (int z = wd-voxelArea.width; z >= 0; z -= voxelArea.width) { - for (int x = voxelArea.width-1; x >= 0; x--) { - CompactVoxelCell c = voxelArea.compactCells[x+z]; - - for (int i = (int)c.index, ci = (int)(c.index+c.count); i < ci; i++) { - CompactVoxelSpan s = voxelArea.compactSpans[i]; - - if (s.GetConnection(2) != NotConnected) { - // (-1,0) - int nx = x+voxelArea.DirectionX[2]; - int nz = z+voxelArea.DirectionZ[2]; - - int ni = (int)(voxelArea.compactCells[nx+nz].index+s.GetConnection(2)); - - if (src[ni]+2 < src[i]) { - src[i] = (ushort)(src[ni]+2); - } - - CompactVoxelSpan ns = voxelArea.compactSpans[ni]; - - if (ns.GetConnection(1) != NotConnected) { - // (-1,0) + (0,-1) = (-1,-1) - int nnx = nx+voxelArea.DirectionX[1]; - int nnz = nz+voxelArea.DirectionZ[1]; - - int nni = (int)(voxelArea.compactCells[nnx+nnz].index+ns.GetConnection(1)); - - if (src[nni]+3 < src[i]) { - src[i] = (ushort)(src[nni]+3); - } - } - } - - if (s.GetConnection(1) != NotConnected) { - // (0,-1) - int nx = x+voxelArea.DirectionX[1]; - int nz = z+voxelArea.DirectionZ[1]; - - int ni = (int)(voxelArea.compactCells[nx+nz].index+s.GetConnection(1)); - - if (src[ni]+2 < src[i]) { - src[i] = (ushort)(src[ni]+2); - } - - CompactVoxelSpan ns = voxelArea.compactSpans[ni]; - - if (ns.GetConnection(0) != NotConnected) { - // (0,-1) + (1,0) = (1,-1) - int nnx = nx+voxelArea.DirectionX[0]; - int nnz = nz+voxelArea.DirectionZ[0]; - - int nni = (int)(voxelArea.compactCells[nnx+nnz].index+ns.GetConnection(0)); - - if (src[nni]+3 < src[i]) { - src[i] = (ushort)(src[nni]+3); - } - } - } - } - } - } - - ushort maxDist = 0; - - for (int i = 0; i < voxelArea.compactSpanCount; i++) { - maxDist = System.Math.Max(src[i], maxDist); - } - - - return maxDist; - } - - public ushort[] BoxBlur (ushort[] src, ushort[] dst) { - ushort thr = 20; - - int wd = voxelArea.width*voxelArea.depth; - - for (int z = wd-voxelArea.width; z >= 0; z -= voxelArea.width) { - for (int x = voxelArea.width-1; x >= 0; x--) { - CompactVoxelCell c = voxelArea.compactCells[x+z]; - - for (int i = (int)c.index, ci = (int)(c.index+c.count); i < ci; i++) { - CompactVoxelSpan s = voxelArea.compactSpans[i]; - - ushort cd = src[i]; - - if (cd < thr) { - dst[i] = cd; - continue; - } - - int total = (int)cd; - - for (int d = 0; d < 4; d++) { - if (s.GetConnection(d) != NotConnected) { - int nx = x+voxelArea.DirectionX[d]; - int nz = z+voxelArea.DirectionZ[d]; - - int ni = (int)(voxelArea.compactCells[nx+nz].index+s.GetConnection(d)); - - total += (int)src[ni]; - - CompactVoxelSpan ns = voxelArea.compactSpans[ni]; - - int d2 = (d+1) & 0x3; - - if (ns.GetConnection(d2) != NotConnected) { - int nnx = nx+voxelArea.DirectionX[d2]; - int nnz = nz+voxelArea.DirectionZ[d2]; - - int nni = (int)(voxelArea.compactCells[nnx+nnz].index+ns.GetConnection(d2)); - total += (int)src[nni]; - } else { - total += cd; - } - } else { - total += cd*2; - } - } - dst[i] = (ushort)((total+5)/9F); - } - } - } - return dst; - } - - void FloodOnes (List st1, ushort[] regs, uint level, ushort reg) { - for (int j = 0; j < st1.Count; j++) { - int x = st1[j].x; - int i = st1[j].y; - int z = st1[j].z; - regs[i] = reg; - - CompactVoxelSpan s = voxelArea.compactSpans[i]; - int area = voxelArea.areaTypes[i]; - - for (int dir = 0; dir < 4; dir++) { - if (s.GetConnection(dir) == NotConnected) { continue; } - - int nx = x + voxelArea.DirectionX[dir]; - int nz = z + voxelArea.DirectionZ[dir]; - - int ni = (int)voxelArea.compactCells[nx+nz].index + s.GetConnection(dir); - - if (area != voxelArea.areaTypes[ni]) { continue; } - - - if (regs[ni] == 1) { - regs[ni] = reg; - st1.Add(new Int3(nx, ni, nz)); - } - } - } - } - - public void BuildRegions () { - AstarProfiler.StartProfile("Build Regions"); - - int w = voxelArea.width; - int d = voxelArea.depth; - - int wd = w*d; - - int spanCount = voxelArea.compactSpanCount; - - -#if ASTAR_RECAST_BFS - ushort[] srcReg = voxelArea.tmpUShortArr; - if (srcReg.Length < spanCount) { - srcReg = voxelArea.tmpUShortArr = new ushort[spanCount]; - } - Pathfinding.Util.Memory.MemSet(srcReg, 0, sizeof(ushort)); -#else - int expandIterations = 8; - - List stack = ListPool.Claim(1024); - ushort[] srcReg = new ushort[spanCount]; - ushort[] srcDist = new ushort[spanCount]; - ushort[] dstReg = new ushort[spanCount]; - ushort[] dstDist = new ushort[spanCount]; -#endif - - ushort regionId = 2; - MarkRectWithRegion(0, borderSize, 0, d, (ushort)(regionId | BorderReg), srcReg); regionId++; - MarkRectWithRegion(w-borderSize, w, 0, d, (ushort)(regionId | BorderReg), srcReg); regionId++; - MarkRectWithRegion(0, w, 0, borderSize, (ushort)(regionId | BorderReg), srcReg); regionId++; - MarkRectWithRegion(0, w, d-borderSize, d, (ushort)(regionId | BorderReg), srcReg); regionId++; - - - - - -#if ASTAR_RECAST_BFS - uint level = 0; - - List basins = Pathfinding.Util.ListPool.Claim(100); - - // Find "basins" - for (int z = 0, pz = 0; z < wd; z += w, pz++) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell c = voxelArea.compactCells[z+x]; - - for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; i++) { - CompactVoxelSpan s = voxelArea.compactSpans[i]; - bool anyBelow = false; - - if (voxelArea.areaTypes[i] == UnwalkableArea || srcReg[i] != 0) continue; - - for (int dir = 0; dir < 4; dir++) { - if (s.GetConnection(dir) != NotConnected) { - int nx = x+voxelArea.DirectionX[dir]; - int nz = z+voxelArea.DirectionZ[dir]; - - int ni2 = (int)(voxelArea.compactCells[nx+nz].index+s.GetConnection(dir)); - - if (voxelArea.dist[i] < voxelArea.dist[ni2]) { - anyBelow = true; - break; - } - - - //CompactVoxelSpan ns = voxelArea.compactSpans[ni]; - } - } - if (!anyBelow) { - basins.Add(new Int3(x, i, z)); - level = System.Math.Max(level, voxelArea.dist[i]); - } - } - } - } - - //Start at maximum possible distance. & ~1 is rounding down to an even value - level = (uint)((level+1) & ~1); - - - List st1 = Pathfinding.Util.ListPool.Claim(300); - List st2 = Pathfinding.Util.ListPool.Claim(300); - - // Some debug code - //bool visited = new bool[voxelArea.compactSpanCount]; - - for (;; level -= 2) { - int ocount = st1.Count; - int expandCount = 0; - - if (ocount == 0) { - //int c = 0; - for (int q = 0; q < basins.Count; q++) { - if (srcReg[basins[q].y] == 0 && voxelArea.dist[basins[q].y] >= level) { - srcReg[basins[q].y] = 1; - st1.Add(basins[q]); - - // Some debug code - //c++; - //visited[basins[i].y] = true; - } - } - } - - for (int j = 0; j < st1.Count; j++) { - int x = st1[j].x; - int i = st1[j].y; - int z = st1[j].z; - - ushort r = srcReg[i]; - - CompactVoxelSpan s = voxelArea.compactSpans[i]; - int area = voxelArea.areaTypes[i]; - - - bool anyAbove = false; - for (int dir = 0; dir < 4; dir++) { - if (s.GetConnection(dir) == NotConnected) { continue; } - - int nx = x + voxelArea.DirectionX[dir]; - int nz = z + voxelArea.DirectionZ[dir]; - - int ni = (int)voxelArea.compactCells[nx+nz].index + s.GetConnection(dir); - - if (area != voxelArea.areaTypes[ni]) { continue; } - - if (voxelArea.dist[ni] < level) { - anyAbove = true; - continue; - } - - - if (srcReg[ni] == 0) { - bool same = false; - for (int v = (int)voxelArea.compactCells[nx+nz].index, vt = (int)voxelArea.compactCells[nx+nz].index+(int)voxelArea.compactCells[nx+nz].count; v < vt; v++) { - if (srcReg[v] == srcReg[i]) { - same = true; - break; - } - } - - if (!same) { - srcReg[ni] = r; - //Debug.DrawRay (ConvertPosition(x,z,i),Vector3.up,AstarMath.IntToColor((int)level,0.6f)); - - st1.Add(new Int3(nx, ni, nz)); - } - } - } - - //Still on the edge - if (anyAbove) { - st2.Add(st1[j]); - } - - if (j == ocount-1) { - expandCount++; - ocount = st1.Count; - - if (expandCount == 8 || j == st1.Count-1) { - //int c = 0; - for (int q = 0; q < basins.Count; q++) { - if (srcReg[basins[q].y] == 0 && voxelArea.dist[basins[q].y] >= level) { - srcReg[basins[q].y] = 1; - st1.Add(basins[q]); - - // Debug code - //c++; - //visited[basins[i].y] = true; - } - } - } - } - } - - - - List tmpList = st1; - st1 = st2; - st2 = tmpList; - st2.Clear(); - - //System.Console.WriteLine ("Flooding basins"); - - for (int i = 0; i < basins.Count; i++) { - if (srcReg[basins[i].y] == 1) { - st2.Add(basins[i]); - FloodOnes(st2, srcReg, level, regionId); regionId++; - st2.Clear(); - } - } - - - if (level == 0) break; - } - - - Pathfinding.Util.ListPool.Release(st1); - Pathfinding.Util.ListPool.Release(st2); - Pathfinding.Util.ListPool.Release(basins); - // Filter out small regions. - voxelArea.maxRegions = regionId; - - FilterSmallRegions(srcReg, minRegionSize, voxelArea.maxRegions); - - - // Write the result out. - for (int i = 0; i < voxelArea.compactSpanCount; i++) { - voxelArea.compactSpans[i].reg = srcReg[i]; - } -#else /// ====== Use original recast code ====== // - //Start at maximum possible distance. & ~1 is rounding down to an even value - uint level = (uint)((voxelArea.maxDistance+1) & ~1); - - int count = 0; - - - - while (level > 0) { - level = level >= 2 ? level-2 : 0; - - AstarProfiler.StartProfile("--Expand Regions"); - if (ExpandRegions(expandIterations, level, srcReg, srcDist, dstReg, dstDist, stack) != srcReg) { - ushort[] tmp = srcReg; - srcReg = dstReg; - dstReg = tmp; - - tmp = srcDist; - srcDist = dstDist; - dstDist = tmp; - } - - AstarProfiler.EndProfile("--Expand Regions"); - - AstarProfiler.StartProfile("--Mark Regions"); - - - // Mark new regions with IDs. - // Find "basins" - for (int z = 0, pz = 0; z < wd; z += w, pz++) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell c = voxelArea.compactCells[z+x]; - - for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; i++) { - if (voxelArea.dist[i] < level || srcReg[i] != 0 || voxelArea.areaTypes[i] == UnwalkableArea) - continue; - - if (FloodRegion(x, z, i, level, regionId, srcReg, srcDist, stack)) - regionId++; - } - } - } - - - AstarProfiler.EndProfile("--Mark Regions"); - - count++; - } - - if (ExpandRegions(expandIterations*8, 0, srcReg, srcDist, dstReg, dstDist, stack) != srcReg) { - ushort[] tmp = srcReg; - srcReg = dstReg; - dstReg = tmp; - - tmp = srcDist; - srcDist = dstDist; - dstDist = tmp; - } - - // Filter out small regions. - voxelArea.maxRegions = regionId; - - FilterSmallRegions(srcReg, minRegionSize, voxelArea.maxRegions); - - // Write the result out. - for (int i = 0; i < voxelArea.compactSpanCount; i++) { - voxelArea.compactSpans[i].reg = srcReg[i]; - } - - ListPool.Release(ref stack); - - - // Some debug code not currently used - /* - * int sCount = voxelArea.GetSpanCount (); - * Vector3[] debugPointsTop = new Vector3[sCount]; - * Vector3[] debugPointsBottom = new Vector3[sCount]; - * Color[] debugColors = new Color[sCount]; - * - * int debugPointsCount = 0; - * //int wd = voxelArea.width*voxelArea.depth; - * - * for (int z=0, pz = 0;z < wd;z += voxelArea.width, pz++) { - * for (int x=0;x < voxelArea.width;x++) { - * - * Vector3 p = new Vector3(x,0,pz)*cellSize+forcedBounds.min; - * - * //CompactVoxelCell c = voxelArea.compactCells[x+z]; - * CompactVoxelCell c = voxelArea.compactCells[x+z]; - * //if (c.count == 0) { - * // Debug.DrawRay (p,Vector3.up,Color.red); - * //} - * - * //for (int i=(int)c.index, ni = (int)(c.index+c.count);i arr[b]) { - int tmp = a; - a = b; - b = tmp; - } - arr[a] += arr[b]; - arr[b] = a; - } - - /** Filters out or merges small regions. - */ - public void FilterSmallRegions (ushort[] reg, int minRegionSize, int maxRegions) { - RelevantGraphSurface c = RelevantGraphSurface.Root; - // Need to use ReferenceEquals because it might be called from another thread - bool anySurfaces = !RelevantGraphSurface.ReferenceEquals(c, null) && (relevantGraphSurfaceMode != RecastGraph.RelevantGraphSurfaceMode.DoNotRequire); - - // Nothing to do here - if (!anySurfaces && minRegionSize <= 0) { - return; - } - - int[] counter = new int[maxRegions]; - - ushort[] bits = voxelArea.tmpUShortArr; - if (bits == null || bits.Length < maxRegions) { - bits = voxelArea.tmpUShortArr = new ushort[maxRegions]; - } - - Memory.MemSet(counter, -1, sizeof(int)); - Memory.MemSet(bits, (ushort)0, maxRegions, sizeof(ushort)); - - - int nReg = counter.Length; - - int wd = voxelArea.width*voxelArea.depth; - - const int RelevantSurfaceSet = 1 << 1; - const int BorderBit = 1 << 0; - - // Mark RelevantGraphSurfaces - - // If they can also be adjacent to tile borders, this will also include the BorderBit - int RelevantSurfaceCheck = RelevantSurfaceSet | ((relevantGraphSurfaceMode == RecastGraph.RelevantGraphSurfaceMode.OnlyForCompletelyInsideTile) ? BorderBit : 0x0); - - if (anySurfaces) { - // Need to use ReferenceEquals because it might be called from another thread - while (!RelevantGraphSurface.ReferenceEquals(c, null)) { - int x, z; - this.VectorToIndex(c.Position, out x, out z); - - // Check for out of bounds - if (x >= 0 && z >= 0 && x < voxelArea.width && z < voxelArea.depth) { - int y = (int)((c.Position.y - voxelOffset.y)/cellHeight); - int rad = (int)(c.maxRange / cellHeight); - - CompactVoxelCell cell = voxelArea.compactCells[x+z*voxelArea.width]; - for (int i = (int)cell.index; i < cell.index+cell.count; i++) { - CompactVoxelSpan s = voxelArea.compactSpans[i]; - if (System.Math.Abs(s.y - y) <= rad && reg[i] != 0) { - bits[union_find_find(counter, (int)reg[i] & ~BorderReg)] |= RelevantSurfaceSet; - } - } - } - - c = c.Next; - } - } - - for (int z = 0, pz = 0; z < wd; z += voxelArea.width, pz++) { - for (int x = 0; x < voxelArea.width; x++) { - CompactVoxelCell cell = voxelArea.compactCells[x+z]; - - for (int i = (int)cell.index; i < cell.index+cell.count; i++) { - CompactVoxelSpan s = voxelArea.compactSpans[i]; - - int r = (int)reg[i]; - - if ((r & ~BorderReg) == 0) continue; - - if (r >= nReg) { //Probably border - bits[union_find_find(counter, r & ~BorderReg)] |= BorderBit; - continue; - } - - int k = union_find_find(counter, r); - // Count this span - counter[k]--; - - for (int dir = 0; dir < 4; dir++) { - if (s.GetConnection(dir) == NotConnected) { continue; } - - int nx = x + voxelArea.DirectionX[dir]; - int nz = z + voxelArea.DirectionZ[dir]; - - int ni = (int)voxelArea.compactCells[nx+nz].index + s.GetConnection(dir); - - int r2 = (int)reg[ni]; - - if (r != r2 && (r2 & ~BorderReg) != 0) { - if ((r2 & BorderReg) != 0) { - bits[k] |= BorderBit; - } else { - union_find_union(counter, k, r2); - } - //counter[r] = minRegionSize; - } - } - //counter[r]++; - } - } - } - - // Propagate bits - for (int i = 0; i < counter.Length; i++) bits[union_find_find(counter, i)] |= bits[i]; - - for (int i = 0; i < counter.Length; i++) { - int ctr = union_find_find(counter, i); - - // Adjacent to border - if ((bits[ctr] & BorderBit) != 0) counter[ctr] = -minRegionSize-2; - - // Not in any relevant surface - // or it is adjacent to a border (see RelevantSurfaceCheck) - if (anySurfaces && (bits[ctr] & RelevantSurfaceCheck) == 0) counter[ctr] = -1; - } - - for (int i = 0; i < voxelArea.compactSpanCount; i++) { - int r = (int)reg[i]; - if (r >= nReg) { - continue; - } - - if (counter[union_find_find(counter, r)] >= -minRegionSize-1) { - reg[i] = 0; - } - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRegion.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRegion.cs.meta deleted file mode 100644 index f0c99b30117afdcab854bf7cba0099fdd3ae765c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelRegion.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 4111a824dba404c17b6d020ffd41c487 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelUtility.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelUtility.cs deleted file mode 100644 index 5e8643951bd716d18777b1f2d95ee2484e950860..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelUtility.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System.Collections.Generic; -using PF; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding.Voxels { - using Pathfinding.Util; - - /** Various utilities for voxel rasterization. - * \astarpro - */ - public class Utility { - public static float Min (float a, float b, float c) { - a = a < b ? a : b; - return a < c ? a : c; - } - - public static float Max (float a, float b, float c) { - a = a > b ? a : b; - return a > c ? a : c; - } - - public static int Max (int a, int b, int c, int d) { - a = a > b ? a : b; - a = a > c ? a : c; - return a > d ? a : d; - } - - public static int Min (int a, int b, int c, int d) { - a = a < b ? a : b; - a = a < c ? a : c; - return a < d ? a : d; - } - - public static float Max (float a, float b, float c, float d) { - a = a > b ? a : b; - a = a > c ? a : c; - return a > d ? a : d; - } - - public static float Min (float a, float b, float c, float d) { - a = a < b ? a : b; - a = a < c ? a : c; - return a < d ? a : d; - } - - public static void CopyVector (float[] a, int i, Vector3 v) { - a[i] = v.x; - a[i+1] = v.y; - a[i+2] = v.z; - } - - /** Removes duplicate vertices from the array and updates the triangle array. - * \returns The new array of vertices - */ - public static Int3[] RemoveDuplicateVertices (Int3[] vertices, int[] triangles) { - // Get a dictionary from an object pool to avoid allocating a new one - var firstVerts = ObjectPoolSimple >.Claim(); - - firstVerts.Clear(); - - // Remove duplicate vertices - var compressedPointers = new int[vertices.Length]; - - int count = 0; - for (int i = 0; i < vertices.Length; i++) { - if (!firstVerts.ContainsKey(vertices[i])) { - firstVerts.Add(vertices[i], count); - compressedPointers[i] = count; - vertices[count] = vertices[i]; - count++; - } else { - // There are some cases, rare but still there, that vertices are identical - compressedPointers[i] = firstVerts[vertices[i]]; - } - } - - firstVerts.Clear(); - ObjectPoolSimple >.Release(ref firstVerts); - - for (int i = 0; i < triangles.Length; i++) { - triangles[i] = compressedPointers[triangles[i]]; - } - - var compressed = new Int3[count]; - for (int i = 0; i < count; i++) compressed[i] = vertices[i]; - return compressed; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelUtility.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelUtility.cs.meta deleted file mode 100644 index 7306bcb8cf40aafe9a5cfb3a701fa138c6b35827..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Generators/Utilities/Voxels/VoxelUtility.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 323b25b9574384857a659b80fb8c1678 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/MathHelper.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/MathHelper.cs deleted file mode 100644 index 6ce981609859248ba326d2b6359c31dc60acc0f6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/MathHelper.cs +++ /dev/null @@ -1,34 +0,0 @@ -using UnityEngine; - -namespace Pathfinding -{ - public static class MathHelper - { - public static Vector3 ToUnityV3(this Vector3 v3) - { - return new Vector3(v3.x, v3.y, v3.z); - } - - public static Vector3 ToPFV3(this Vector3 v3) - { - return new Vector3(v3.x, v3.y, v3.z); - } - - public static Vector2 ToV2(this Vector3 v3) - { - return new Vector2(v3.x, v3.y); - } - - public static Vector2 ToUnityV2(this Vector2 v2) - { - return new Vector3(v2.x, v2.y); - } - - public static Vector2 ToPFV2(this Vector2 v2) - { - return new Vector2(v2.x, v2.y); - } - - - } -} \ No newline at end of file diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/MathHelper.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/MathHelper.cs.meta deleted file mode 100644 index c52b62edd115475308466df7ed86a219f05a7f00..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/MathHelper.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 733441ad942bd3641b43bb0c6e2cdd1f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers.meta deleted file mode 100644 index ed16c1176fbffc23169cec49a04006e88a27160f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 84ddcf8027956574885b1e333655da4d -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AdvancedSmooth.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AdvancedSmooth.cs deleted file mode 100644 index b5ed527ac703b445afa16ee127936eb0b059fe50..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AdvancedSmooth.cs +++ /dev/null @@ -1,563 +0,0 @@ -using System; -using System.Collections.Generic; -using PF; -using UnityEngine; -using Mathf = UnityEngine.Mathf; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - [AddComponentMenu("Pathfinding/Modifiers/Advanced Smooth")] - [System.Serializable] - /** \ingroup modifiers - * Smoothing by dividing path into turns and straight segments. - * - * \astarpro */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_advanced_smooth.php")] - public class AdvancedSmooth : MonoModifier { - public override int Order { get { return 40; } } - - public float turningRadius = 1.0F; - - public MaxTurn turnConstruct1 = new MaxTurn(); - public ConstantTurn turnConstruct2 = new ConstantTurn(); - - public override void Apply (Path p) { - Vector3[] vectorPath = p.vectorPath.ToArray(); - - if (vectorPath == null || vectorPath.Length <= 2) { - return; - } - - List newPath = new List(); - newPath.Add(vectorPath[0]); - - TurnConstructor.turningRadius = turningRadius; - - for (int i = 1; i < vectorPath.Length-1; i++) { - List turnList = new List(); - - TurnConstructor.Setup(i, vectorPath); - turnConstruct1.Prepare(i, vectorPath); - turnConstruct2.Prepare(i, vectorPath); - - TurnConstructor.PostPrepare(); - - if (i == 1) { - turnConstruct1.PointToTangent(turnList); - turnConstruct2.PointToTangent(turnList); - } else { - turnConstruct1.TangentToTangent(turnList); - turnConstruct2.TangentToTangent(turnList); - } - - EvaluatePaths(turnList, newPath); - - //Last point - if (i == vectorPath.Length-2) { - turnConstruct1.TangentToPoint(turnList); - turnConstruct2.TangentToPoint(turnList); - } - - EvaluatePaths(turnList, newPath); - } - - newPath.Add(vectorPath[vectorPath.Length-1]); - p.vectorPath = newPath; - } - - void EvaluatePaths (List turnList, List output) { - turnList.Sort(); - - for (int j = 0; j < turnList.Count; j++) { - if (j == 0) { - turnList[j].GetPath(output); - } - } - - turnList.Clear(); - - if (TurnConstructor.changedPreviousTangent) { - turnConstruct1.OnTangentUpdate(); - turnConstruct2.OnTangentUpdate(); - } - } - - [System.Serializable] - /** Type of turn. - * \astarpro */ - public class MaxTurn : TurnConstructor { - Vector3 preRightCircleCenter = Vector3.zero; - Vector3 preLeftCircleCenter = Vector3.zero; - - Vector3 rightCircleCenter; - Vector3 leftCircleCenter; - - double vaRight, vaLeft, preVaLeft, preVaRight; - - double gammaLeft, gammaRight; - - double betaRightRight, betaRightLeft, betaLeftRight, betaLeftLeft; - - double deltaRightLeft, deltaLeftRight; - - double alfaRightRight, alfaLeftLeft, alfaRightLeft, alfaLeftRight; - - public override void OnTangentUpdate () { - rightCircleCenter = current + normal * turningRadius; - leftCircleCenter = current - normal * turningRadius; - - vaRight = Atan2(current-rightCircleCenter); - vaLeft = vaRight + Math.PI; - } - - public override void Prepare (int i, Vector3[] vectorPath) { - preRightCircleCenter = rightCircleCenter; - preLeftCircleCenter = leftCircleCenter; - - rightCircleCenter = current + normal * turningRadius; - leftCircleCenter = current - normal * turningRadius; - - preVaRight = vaRight; - preVaLeft = vaLeft; - - vaRight = Atan2(current-rightCircleCenter); - vaLeft = vaRight + Math.PI; - } - - public override void TangentToTangent (List turnList) { - alfaRightRight = Atan2(rightCircleCenter - preRightCircleCenter); // + Math.PI*0.5; //Angle tangent to the angle the previous circle (from the current circle) - alfaLeftLeft = Atan2(leftCircleCenter - preLeftCircleCenter); // + Math.PI*0.5; - alfaRightLeft = Atan2(leftCircleCenter - preRightCircleCenter); // + Math.PI*0.5; //RightLeft means: from the previous right circle to the current left circle - alfaLeftRight = Atan2(rightCircleCenter - preLeftCircleCenter); // + Math.PI*0.5; //LeftRight means: from the previous left circle to the current right circle - - double magnRightLeft = (leftCircleCenter - preRightCircleCenter).magnitude; - double magnLeftRight = (rightCircleCenter - preLeftCircleCenter).magnitude; - - bool noRightLeft = false; - bool noLeftRight = false; - - //Discard RightLeft and LeftRight paths if the circles lie to close to each other - if (magnRightLeft < turningRadius*2) { - magnRightLeft = turningRadius*2; - noRightLeft = true; - } - - if (magnLeftRight < turningRadius*2) { - magnLeftRight = turningRadius*2; - noLeftRight = true; - } - - deltaRightLeft = noRightLeft ? 0 : (ThreeSixtyRadians * 0.25) - Math.Asin(turningRadius*2 / magnRightLeft); //turn*2 should be r1 + r2 for circles with different radiis - deltaLeftRight = noLeftRight ? 0 : (ThreeSixtyRadians * 0.25) - Math.Asin(turningRadius*2 / magnLeftRight); //turn*2 should be r1 + r2 for circles with different radiis - - - //Length for the first turn - betaRightRight = ClockwiseAngle(preVaRight, alfaRightRight - ThreeSixtyRadians*0.25); // ThreeSixtyRadians * 0.25 = 90 degrees - betaRightLeft = ClockwiseAngle(preVaRight, alfaRightLeft - deltaRightLeft); - betaLeftRight = CounterClockwiseAngle(preVaLeft, alfaLeftRight + deltaLeftRight); - betaLeftLeft = CounterClockwiseAngle(preVaLeft, alfaLeftLeft + ThreeSixtyRadians*0.25); - - - //Add length for the second turn - betaRightRight += ClockwiseAngle(alfaRightRight - ThreeSixtyRadians*0.25, vaRight); - betaRightLeft += CounterClockwiseAngle(alfaRightLeft + deltaRightLeft, vaLeft); - betaLeftRight += ClockwiseAngle(alfaLeftRight - deltaLeftRight, vaRight); - betaLeftLeft += CounterClockwiseAngle(alfaLeftLeft + ThreeSixtyRadians*0.25, vaLeft); - - betaRightRight = GetLengthFromAngle(betaRightRight, turningRadius); - betaRightLeft = GetLengthFromAngle(betaRightLeft, turningRadius); - betaLeftRight = GetLengthFromAngle(betaLeftRight, turningRadius); - betaLeftLeft = GetLengthFromAngle(betaLeftLeft, turningRadius); - - Vector3 - pRightRight1, pRightRight2, - pRightLeft1, pRightLeft2, - pLeftRight1, pLeftRight2, - pLeftLeft1, pLeftLeft2; - - //Debug.Log ("=== DELTA VALUES===\nRightLeft "+ToDegrees (deltaRightLeft)+" - LeftRight "+ToDegrees (deltaLeftRight)); - //Set up points where the straigh segments starts and ends (between the turns) - pRightRight1 = AngleToVector(alfaRightRight - ThreeSixtyRadians*0.25)*turningRadius + preRightCircleCenter; - pRightLeft1 = AngleToVector(alfaRightLeft - deltaRightLeft)*turningRadius + preRightCircleCenter; - pLeftRight1 = AngleToVector(alfaLeftRight + deltaLeftRight)*turningRadius + preLeftCircleCenter; - pLeftLeft1 = AngleToVector(alfaLeftLeft + ThreeSixtyRadians*0.25)*turningRadius + preLeftCircleCenter; - - pRightRight2 = AngleToVector(alfaRightRight - ThreeSixtyRadians*0.25)*turningRadius + rightCircleCenter; - pRightLeft2 = AngleToVector(alfaRightLeft - deltaRightLeft + Math.PI)*turningRadius + leftCircleCenter; - pLeftRight2 = AngleToVector(alfaLeftRight + deltaLeftRight + Math.PI)*turningRadius + rightCircleCenter; - pLeftLeft2 = AngleToVector(alfaLeftLeft + ThreeSixtyRadians*0.25)*turningRadius + leftCircleCenter; - betaRightRight += (pRightRight1 - pRightRight2).magnitude; - betaRightLeft += (pRightLeft1 - pRightLeft2).magnitude; - betaLeftRight += (pLeftRight1 - pLeftRight2).magnitude; - betaLeftLeft += (pLeftLeft1 - pLeftLeft2).magnitude; - - if (noRightLeft) { - betaRightLeft += 10000000; - } - if (noLeftRight) { - betaLeftRight += 10000000; - } - - turnList.Add(new Turn((float)betaRightRight, this, 2)); - turnList.Add(new Turn((float)betaRightLeft, this, 3)); - turnList.Add(new Turn((float)betaLeftRight, this, 4)); - turnList.Add(new Turn((float)betaLeftLeft, this, 5)); - } - - public override void PointToTangent (List turnList) { - bool noRight = false, noLeft = false; - - float rightMagn = (prev-rightCircleCenter).magnitude; - float leftMagn = (prev-leftCircleCenter).magnitude; - - if (rightMagn < turningRadius) - noRight = true; - if (leftMagn < turningRadius) - noLeft = true; - - double alfa = noRight ? 0 : Atan2(prev-rightCircleCenter); - double delta = noRight ? 0 : (ThreeSixtyRadians * 0.25) - Math.Asin(turningRadius / (prev-rightCircleCenter).magnitude); - - //Angle to the point where turning ends on the right circle - gammaRight = alfa + delta; - - double betaRight = noRight ? 0 : ClockwiseAngle(gammaRight, vaRight); - - double alfaLeft = noLeft ? 0 : Atan2(prev-leftCircleCenter); - double deltaLeft = noLeft ? 0 : (ThreeSixtyRadians * 0.25) - Math.Asin(turningRadius / (prev-leftCircleCenter).magnitude); - - //Angle to the point where turning ends - gammaLeft = alfaLeft - deltaLeft; - - double betaLeft = noLeft ? 0 : CounterClockwiseAngle(gammaLeft, vaLeft); - - if (!noRight) - turnList.Add(new Turn((float)betaRight, this, 0)); - if (!noLeft) - turnList.Add(new Turn((float)betaLeft, this, 1)); - } - - public override void TangentToPoint (List turnList) { - bool noRight = false, noLeft = false; - - float rightMagn = (next-rightCircleCenter).magnitude; - float leftMagn = (next-leftCircleCenter).magnitude; - - if (rightMagn < turningRadius) - noRight = true; - if (leftMagn < turningRadius) - noLeft = true; - - if (!noRight) { - double alfa = Atan2(next-rightCircleCenter); - double delta = (ThreeSixtyRadians * 0.25) - Math.Asin(turningRadius / rightMagn); - - //Angle to the point where turning ends on the right circle - gammaRight = alfa - delta; - double betaRight = ClockwiseAngle(vaRight, gammaRight); - - turnList.Add(new Turn((float)betaRight, this, 6)); - } - - if (!noLeft) { - double alfaLeft = Atan2(next-leftCircleCenter); - double deltaLeft = (ThreeSixtyRadians * 0.25) - Math.Asin(turningRadius / leftMagn); - - //Angle to the point where turning ends - gammaLeft = alfaLeft + deltaLeft; - - double betaLeft = CounterClockwiseAngle(vaLeft, gammaLeft); - - - turnList.Add(new Turn((float)betaLeft, this, 7)); - } - } - - public override void GetPath (Turn turn, List output) { - switch (turn.id) { - case 0: - //Right - Point to tangent - AddCircleSegment(gammaRight, vaRight, true, rightCircleCenter, output, turningRadius); - break; - case 1: - //Left - Point to tangent - AddCircleSegment(gammaLeft, vaLeft, false, leftCircleCenter, output, turningRadius); - break; - case 2: - //Right Right - Tangent to tangent - AddCircleSegment(preVaRight, alfaRightRight - ThreeSixtyRadians*0.25, true, preRightCircleCenter, output, turningRadius); - AddCircleSegment(alfaRightRight - ThreeSixtyRadians*0.25, vaRight, true, rightCircleCenter, output, turningRadius); - break; - case 3: - //Right Left - Tangent to tangent - AddCircleSegment(preVaRight, alfaRightLeft - deltaRightLeft, true, preRightCircleCenter, output, turningRadius); - AddCircleSegment(alfaRightLeft - deltaRightLeft + Math.PI, vaLeft, false, leftCircleCenter, output, turningRadius); - break; - case 4: - //Left Right - Tangent to tangent - AddCircleSegment(preVaLeft, alfaLeftRight + deltaLeftRight, false, preLeftCircleCenter, output, turningRadius); - AddCircleSegment(alfaLeftRight + deltaLeftRight + Math.PI, vaRight, true, rightCircleCenter, output, turningRadius); - break; - case 5: - //Left Left - Tangent to tangent - AddCircleSegment(preVaLeft, alfaLeftLeft + ThreeSixtyRadians*0.25, false, preLeftCircleCenter, output, turningRadius); - AddCircleSegment(alfaLeftLeft + ThreeSixtyRadians*0.25, vaLeft, false, leftCircleCenter, output, turningRadius); - break; - case 6: - //Right - Tangent to point - AddCircleSegment(vaRight, gammaRight, true, rightCircleCenter, output, turningRadius); - break; - case 7: - //Left - Tangent to point - AddCircleSegment(vaLeft, gammaLeft, false, leftCircleCenter, output, turningRadius); - break; - } - } - } - - [System.Serializable] - /** Constant turning speed. - * \astarpro */ - public class ConstantTurn : TurnConstructor { - Vector3 circleCenter; - double gamma1; - double gamma2; - - bool clockwise; - - public override void Prepare (int i, Vector3[] vectorPath) {} - - public override void TangentToTangent (List turnList) { - Vector3 preNormal = Vector3.Cross(t1, Vector3.up); - - Vector3 dir = (current-prev); - Vector3 pos = dir*0.5F + prev; - - dir = Vector3.Cross(dir, Vector3.up); - - bool didIntersect; - circleCenter = VectorMath.LineDirIntersectionPointXZ(prev, preNormal, pos, dir, out didIntersect); - - if (!didIntersect) { - return; - } - - gamma1 = Atan2(prev-circleCenter); - gamma2 = Atan2(current-circleCenter); - - clockwise = !VectorMath.RightOrColinearXZ(circleCenter, prev, prev+t1); - - double beta = clockwise ? ClockwiseAngle(gamma1, gamma2) : CounterClockwiseAngle(gamma1, gamma2); - - beta = GetLengthFromAngle(beta, (circleCenter - current).magnitude); - - turnList.Add(new Turn((float)beta, this, 0)); - } - - public override void GetPath (Turn turn, List output) { - AddCircleSegment(gamma1, gamma2, clockwise, circleCenter, output, (circleCenter - current).magnitude); - - normal = (current - circleCenter).normalized; - t2 = Vector3.Cross(normal, Vector3.up).normalized; - normal = -normal; - - if (!clockwise) { - t2 = -t2; - normal = -normal; - } - - changedPreviousTangent = true; - } - } - - /** Abstract turn constructor. - * \astarpro */ - public abstract class TurnConstructor { - /** Constant bias to add to the path lengths. - * This can be used to favor certain turn types before others.\n - * By for example setting this to -5, paths from this path constructor will be chosen - * if there are no other paths more than 5 world units shorter than this one (as opposed to just any shorter path) */ - public float constantBias = 0; - - /** Bias to multiply the path lengths with. This can be used to favor certain turn types before others. - * \see #constantBias */ - public float factorBias = 1; - - public static float turningRadius = 1.0F; - - public const double ThreeSixtyRadians = Math.PI * 2; - - public static Vector3 prev, current, next; //The current points - public static Vector3 t1, t2; //The current tangents - t2 is at 'current', t1 is at 'prev' - public static Vector3 normal, prevNormal; //Normal at 'current' - - public static bool changedPreviousTangent = false; - - public abstract void Prepare (int i, Vector3[] vectorPath); - public virtual void OnTangentUpdate () {} - public virtual void PointToTangent (List turnList) {} - public virtual void TangentToPoint (List turnList) {} - public virtual void TangentToTangent (List turnList) {} - public abstract void GetPath (Turn turn, List output); - //abstract void Evaluate (Turn turn); - - public static void Setup (int i, Vector3[] vectorPath) { - current = vectorPath[i]; - prev = vectorPath[i-1]; - next = vectorPath[i+1]; - - prev.y = current.y; - next.y = current.y; - - t1 = t2; - - t2 = (next-current).normalized - (prev-current).normalized; - t2 = t2.normalized; - - prevNormal = normal; - - normal = Vector3.Cross(t2, Vector3.up); - normal = normal.normalized; - } - - public static void PostPrepare () { - changedPreviousTangent = false; - } - - //Utilities - - public void AddCircleSegment (double startAngle, double endAngle, bool clockwise, Vector3 center, List output, float radius) { - double step = ThreeSixtyRadians / 100; - - if (clockwise) { - while (endAngle > startAngle+ThreeSixtyRadians) { - endAngle -= ThreeSixtyRadians; - } - - while (endAngle < startAngle) { - endAngle += ThreeSixtyRadians; - } - } else { - while (endAngle < startAngle-ThreeSixtyRadians) { - endAngle += ThreeSixtyRadians; - } - - while (endAngle > startAngle) { - endAngle -= ThreeSixtyRadians; - } - } - - //Add curve - if (clockwise) { - for (double i = startAngle; i < endAngle; i += step) { - output.Add(AngleToVector(i)*radius+center); - } - } else { - for (double i = startAngle; i > endAngle; i -= step) { - output.Add(AngleToVector(i)*radius+center); - } - } - - //Add last point - output.Add(AngleToVector(endAngle)*radius+center); - } - - public void DebugCircleSegment (Vector3 center, double startAngle, double endAngle, double radius, Color color) { - double step = ThreeSixtyRadians / 100; - - while (endAngle < startAngle) { - endAngle += ThreeSixtyRadians; - } - - Vector3 prev = AngleToVector(startAngle)*(float)radius+center; - for (double i = startAngle+step; i < endAngle; i += step) { - Debug.DrawLine(prev, AngleToVector(i)*(float)radius+center); - } - - Debug.DrawLine(prev, AngleToVector(endAngle)*(float)radius+center); - } - - public void DebugCircle (Vector3 center, double radius, Color color) { - double step = ThreeSixtyRadians / 100; - Vector3 prePos = AngleToVector(-step)*(float)radius+center; - - for (double i = 0; i < ThreeSixtyRadians; i += step) { - Vector3 pos = AngleToVector(i)*(float)radius+center; - Debug.DrawLine(prePos, pos, color); - prePos = pos; - } - } - - /** Returns the length of an circular arc with a radius and angle. Angle is specified in radians */ - public double GetLengthFromAngle (double angle, double radius) { - return radius * angle; - } - - /** Returns the angle between \a from and \a to in a clockwise direction */ - public double ClockwiseAngle (double from, double to) { - return ClampAngle(to - from); - } - - /** Returns the angle between \a from and \a to in a counter-clockwise direction */ - public double CounterClockwiseAngle (double from, double to) { - return ClampAngle(from - to); - } - - public Vector3 AngleToVector (double a) { - return new Vector3((float)Math.Cos(a), 0, (float)Math.Sin(a)); - } - - public double ToDegrees (double rad) { - return rad * Mathf.Rad2Deg; - } - - public double ClampAngle (double a) { - while (a < 0) { a += ThreeSixtyRadians; } - while (a > ThreeSixtyRadians) { a -= ThreeSixtyRadians; } - return a; - } - - public double Atan2 (Vector3 v) { - return Math.Atan2(v.z, v.x); - } - } - - //Turn class - /** Represents a turn in a path. - * \astarpro */ - public struct Turn : IComparable { - public float length; - public int id; - - public TurnConstructor constructor; - - public float score { - get { - return length*constructor.factorBias+constructor.constantBias; - } - } - - public Turn (float length, TurnConstructor constructor, int id = 0) { - this.length = length; - this.id = id; - this.constructor = constructor; - } - - public void GetPath (List output) { - constructor.GetPath(this, output); - } - - public int CompareTo (Turn t) { - return t.score > score ? -1 : (t.score < score ? 1 : 0); - } - - public static bool operator < (Turn lhs, Turn rhs) { - return lhs.score < rhs.score; - } - - public static bool operator > (Turn lhs, Turn rhs) { - return lhs.score > rhs.score; - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AdvancedSmooth.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AdvancedSmooth.cs.meta deleted file mode 100644 index 3a109d41baec4301aa11fe45e24e6f606f48eeb5..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AdvancedSmooth.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a74058756f0df4e668a0e2226e7cfcea -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AlternativePath.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AlternativePath.cs deleted file mode 100644 index 90379cc5eb4400d235364160bf1eee57e7159caf..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AlternativePath.cs +++ /dev/null @@ -1,96 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; - -namespace Pathfinding { - [AddComponentMenu("Pathfinding/Modifiers/Alternative Path")] - [System.Serializable] - /** Applies penalty to the paths it processes telling other units to avoid choosing the same path. - * - * Note that this might not work properly if penalties are modified by other actions as well (e.g graph update objects which reset the penalty to zero). - * It will only work when all penalty modifications are relative, i.e adding or subtracting penalties, but not when setting penalties - * to specific values. - * - * When destroyed, it will correctly remove any added penalty. - * - * \ingroup modifiers - */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_alternative_path.php")] - public class AlternativePath : MonoModifier { - #if UNITY_EDITOR - [UnityEditor.MenuItem("CONTEXT/Seeker/Add Alternative Path Modifier")] - public static void AddComp (UnityEditor.MenuCommand command) { - (command.context as Component).gameObject.AddComponent(typeof(AlternativePath)); - } - #endif - - public override int Order { get { return 10; } } - - /** How much penalty (weight) to apply to nodes */ - public int penalty = 1000; - - /** Max number of nodes to skip in a row */ - public int randomStep = 10; - - /** The previous path */ - List prevNodes = new List(); - - /** The previous penalty used. Stored just in case it changes during operation */ - int prevPenalty; - - /** A random object */ - readonly System.Random rnd = new System.Random(); - - bool destroyed; - - public override void Apply (Path p) { - if (this == null) return; - - ApplyNow(p.path); - } - - protected void OnDestroy () { - destroyed = true; - ClearOnDestroy(); - } - - void ClearOnDestroy () { - InversePrevious(); - } - - void InversePrevious () { - // Remove previous penalty - if (prevNodes != null) { - bool warnPenalties = false; - for (int i = 0; i < prevNodes.Count; i++) { - if (prevNodes[i].Penalty < prevPenalty) { - warnPenalties = true; - prevNodes[i].Penalty = 0; - } else { - prevNodes[i].Penalty = (uint)(prevNodes[i].Penalty-prevPenalty); - } - } - if (warnPenalties) { - Debug.LogWarning("Penalty for some nodes has been reset while the AlternativePath modifier was active (possibly because of a graph update). Some penalties might be incorrect (they may be lower than expected for the affected nodes)"); - } - } - } - - void ApplyNow (List nodes) { - InversePrevious(); - prevNodes.Clear(); - - if (destroyed) return; - - if (nodes != null) { - int rndStart = rnd.Next(randomStep); - for (int i = rndStart; i < nodes.Count; i += rnd.Next(1, randomStep)) { - nodes[i].Penalty = (uint)(nodes[i].Penalty+penalty); - prevNodes.Add(nodes[i]); - } - } - - prevPenalty = penalty; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AlternativePath.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AlternativePath.cs.meta deleted file mode 100644 index 3bb120af261873f94cb076705fe2f2aba99f4bee..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/AlternativePath.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a537d958aa5bb4f35b0d7b40d72278f2 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/FunnelModifier.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/FunnelModifier.cs deleted file mode 100644 index 044a30884e89a6317dd7e1257719d55cb0cced08..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/FunnelModifier.cs +++ /dev/null @@ -1,106 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using Pathfinding.Util; -using PF; - -namespace Pathfinding { - [AddComponentMenu("Pathfinding/Modifiers/Funnel")] - [System.Serializable] - /** Simplifies paths on navmesh graphs using the funnel algorithm. - * The funnel algorithm is an algorithm which can, given a path corridor with nodes in the path where the nodes have an area, like triangles, it can find the shortest path inside it. - * This makes paths on navmeshes look much cleaner and smoother. - * \shadowimage{funnelModifier_on.png} - * - * The funnel modifier also works on grid graphs however since it only simplifies the paths within the nodes which the original path visited it may not always - * simplify the path as much as you would like it to. The \link Pathfinding.RaycastModifier RaycastModifier\endlink can be a better fit for grid graphs. - * \shadowimage{funnel_on_grid.png} - * - * \ingroup modifiers - * \see http://digestingduck.blogspot.se/2010/03/simple-stupid-funnel-algorithm.html - */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_funnel_modifier.php")] - public class FunnelModifier : MonoModifier { - /** Determines if twists and bends should be straightened out before running the funnel algorithm. - * If the unwrap option is disabled the funnel will simply be projected onto the XZ plane. - * If the unwrap option is enabled then the funnel may be oriented arbitrarily and may have twists and bends. - * This makes it possible to support the funnel algorithm in XY space as well as in more complicated cases, such - * as on curved worlds. - * - * \note This has a performance overhead, so if you do not need it you can disable it to improve - * performance. - * - * \shadowimage{funnel_unwrap_illustration.png} - * - * \see #Pathfinding.Funnel.Unwrap for more example images. - * - * \note This is required if you want to use the funnel modifier for 2D games (i.e in the XY plane). - */ - public bool unwrap = true; - - /** Insert a vertex every time the path crosses a portal instead of only at the corners of the path. - * The resulting path will have exactly one vertex per portal if this is enabled. - * This may introduce vertices with the same position in the output (esp. in corners where many portals meet). - * \shadowimage{funnel_split_at_every_portal.png} - */ - public bool splitAtEveryPortal; - - #if UNITY_EDITOR - [UnityEditor.MenuItem("CONTEXT/Seeker/Add Funnel Modifier")] - public static void AddComp (UnityEditor.MenuCommand command) { - (command.context as Component).gameObject.AddComponent(typeof(FunnelModifier)); - } - #endif - - public override int Order { get { return 10; } } - - public override void Apply (Path p) { - if (p.path == null || p.path.Count == 0 || p.vectorPath == null || p.vectorPath.Count == 0) { - return; - } - - List funnelPath = ListPool.Claim(); - - // Split the path into different parts (separated by custom links) - // and run the funnel algorithm on each of them in turn - var parts = Funnel.SplitIntoParts(p); - - if (parts.Count == 0) { - // As a really special case, it might happen that the path contained only a single node - // and that node was part of a custom link (e.g added by the NodeLink2 component). - // In that case the SplitIntoParts method will not know what to do with it because it is - // neither a link (as only 1 of the 2 nodes of the link was part of the path) nor a normal - // path part. So it will skip it. This will cause it to return an empty list. - // In that case we want to simply keep the original path, which is just a single point. - return; - } - - for (int i = 0; i < parts.Count; i++) { - var part = parts[i]; - if (!part.isLink) { - var portals = Funnel.ConstructFunnelPortals(p.path, part); - var result = Funnel.Calculate(portals, unwrap, splitAtEveryPortal); - funnelPath.AddRange(result); - ListPool.Release(ref portals.left); - ListPool.Release(ref portals.right); - ListPool.Release(ref result); - } else { - // non-link parts will add the start/end points for the adjacent parts. - // So if there is no non-link part before this one, then we need to add the start point of the link - // and if there is no non-link part after this one, then we need to add the end point. - if (i == 0 || parts[i-1].isLink) { - funnelPath.Add(part.startPoint); - } - if (i == parts.Count - 1 || parts[i+1].isLink) { - funnelPath.Add(part.endPoint); - } - } - } - - UnityEngine.Assertions.Assert.IsTrue(funnelPath.Count >= 1); - ListPool.Release(ref parts); - // Pool the previous vectorPath - ListPool.Release(ref p.vectorPath); - p.vectorPath = funnelPath; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/FunnelModifier.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/FunnelModifier.cs.meta deleted file mode 100644 index a25184a4cb1c47de4b5064c4a55264da466d8de8..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/FunnelModifier.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 77f586f285b3847808d79083bd19ef1f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/Modifiers.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/Modifiers.cs deleted file mode 100644 index abcf8b0f407702103a6c6cd51dd933ddd120b6ad..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/Modifiers.cs +++ /dev/null @@ -1,83 +0,0 @@ -using PF; -using UnityEngine; - -namespace Pathfinding { - /** Base for all path modifiers. - * \see MonoModifier - * Modifier */ - public interface IPathModifier { - int Order { get; } - - void Apply (Path path); - void PreProcess (Path path); - } - - /** Base class for path modifiers which are not attached to GameObjects. - * \see MonoModifier */ - [System.Serializable] - public abstract class PathModifier : IPathModifier { - [System.NonSerialized] - public Seeker seeker; - - /** Modifiers will be executed from lower order to higher order. - * This value is assumed to stay constant. - */ - public abstract int Order { get; } - - public void Awake (Seeker seeker) { - this.seeker = seeker; - if (seeker != null) { - seeker.RegisterModifier(this); - } - } - - public void OnDestroy (Seeker seeker) { - if (seeker != null) { - seeker.DeregisterModifier(this); - } - } - - public virtual void PreProcess (Path path) { - // Required by IPathModifier - } - - /** Main Post-Processing function */ - public abstract void Apply (Path path); - } - - /** Base class for path modifiers which can be attached to GameObjects. - * \see Menubar -> Component -> Pathfinding -> Modifiers - */ - [System.Serializable] - public abstract class MonoModifier : VersionedMonoBehaviour, IPathModifier { - [System.NonSerialized] - public Seeker seeker; - - /** Alerts the Seeker that this modifier exists */ - protected virtual void OnEnable () { - seeker = GetComponent(); - - if (seeker != null) { - seeker.RegisterModifier(this); - } - } - - protected virtual void OnDisable () { - if (seeker != null) { - seeker.DeregisterModifier(this); - } - } - - /** Modifiers will be executed from lower order to higher order. - * This value is assumed to stay constant. - */ - public abstract int Order { get; } - - public virtual void PreProcess (Path path) { - // Required by IPathModifier - } - - /** Called for each path that the Seeker calculates after the calculation has finished */ - public abstract void Apply (Path path); - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/Modifiers.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/Modifiers.cs.meta deleted file mode 100644 index 8f9e22eb59d884502673c53eaba7a698afc62314..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/Modifiers.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ce1f812d122764ce7a45f2dd03915e46 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RadiusModifier.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RadiusModifier.cs deleted file mode 100644 index 1a4100e2457fafcb6c98bdb630002c6c78f89127..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RadiusModifier.cs +++ /dev/null @@ -1,283 +0,0 @@ -using UnityEngine; -using System; -using System.Collections.Generic; -using PF; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - /** Radius path modifier for offsetting paths. - * \ingroup modifiers - * - * The radius modifier will offset the path to create the effect - * of adjusting it to the characters radius. - * It gives good results on navmeshes which have not been offset with the - * character radius during scan. Especially useful when characters with different - * radiuses are used on the same navmesh. It is also useful when using - * rvo local avoidance with the RVONavmesh since the RVONavmesh assumes the - * navmesh has not been offset with the character radius. - * - * This modifier assumes all paths are in the XZ plane (i.e Y axis is up). - * - * It is recommended to use the Funnel Modifier on the path as well. - * - * \shadowimage{radius_modifier.png} - * - * \see RVONavmesh - * \see modifiers - * - * Also check out the howto page "Using Modifiers". - * - * \astarpro - * - * \since Added in 3.2.6 - */ - [AddComponentMenu("Pathfinding/Modifiers/Radius Offset")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_radius_modifier.php")] - public class RadiusModifier : MonoModifier { - #if UNITY_EDITOR - [UnityEditor.MenuItem("CONTEXT/Seeker/Add Radius Modifier")] - public static void AddComp (UnityEditor.MenuCommand command) { - (command.context as Component).gameObject.AddComponent(typeof(RadiusModifier)); - } - #endif - - public override int Order { get { return 41; } } - - /** Radius of the circle segments generated. - * Usually similar to the character radius. - */ - public float radius = 1f; - - /** Detail of generated circle segments. - * Measured as steps per full circle. - * - * It is more performant to use a low value. - * For movement, using a high value will barely improve path quality. - */ - public float detail = 10; - - /** Calculates inner tangents for a pair of circles. - * \param p1 Position of first circle - * \param p2 Position of the second circle - * \param r1 Radius of the first circle - * \param r2 Radius of the second circle - * \param a Angle from the line joining the centers of the circles to the inner tangents. - * \param sigma World angle from p1 to p2 (in XZ space) - * - * Add \a a to \a sigma to get the first tangent angle, subtract \a a from \a sigma to get the second tangent angle. - * - * \returns True on success. False when the circles are overlapping. - */ - bool CalculateCircleInner (Vector3 p1, Vector3 p2, float r1, float r2, out float a, out float sigma) { - float dist = (p1-p2).magnitude; - - if (r1+r2 > dist) { - a = 0; - sigma = 0; - return false; - } - - a = (float)Math.Acos((r1+r2)/dist); - - sigma = (float)Math.Atan2(p2.z-p1.z, p2.x-p1.x); - return true; - } - - /** Calculates outer tangents for a pair of circles. - * \param p1 Position of first circle - * \param p2 Position of the second circle - * \param r1 Radius of the first circle - * \param r2 Radius of the second circle - * \param a Angle from the line joining the centers of the circles to the inner tangents. - * \param sigma World angle from p1 to p2 (in XZ space) - * - * Add \a a to \a sigma to get the first tangent angle, subtract \a a from \a sigma to get the second tangent angle. - * - * \returns True on success. False on failure (more specifically when |r1-r2| > |p1-p2| ) - */ - bool CalculateCircleOuter (Vector3 p1, Vector3 p2, float r1, float r2, out float a, out float sigma) { - float dist = (p1-p2).magnitude; - - if (Math.Abs(r1 - r2) > dist) { - a = 0; - sigma = 0; - return false; - } - a = (float)Math.Acos((r1-r2)/dist); - sigma = (float)Math.Atan2(p2.z-p1.z, p2.x-p1.x); - return true; - } - - [System.Flags] - enum TangentType { - OuterRight = 1 << 0, - InnerRightLeft = 1 << 1, - InnerLeftRight = 1 << 2, - OuterLeft = 1 << 3, - Outer = OuterRight | OuterLeft, - Inner = InnerRightLeft | InnerLeftRight - } - - TangentType CalculateTangentType (Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4) { - bool l1 = VectorMath.RightOrColinearXZ(p1, p2, p3); - bool l2 = VectorMath.RightOrColinearXZ(p2, p3, p4); - - return (TangentType)(1 << ((l1 ? 2 : 0) + (l2 ? 1 : 0))); - } - - TangentType CalculateTangentTypeSimple (Vector3 p1, Vector3 p2, Vector3 p3) { - bool l2 = VectorMath.RightOrColinearXZ(p1, p2, p3); - bool l1 = l2; - - return (TangentType)(1 << ((l1 ? 2 : 0) + (l2 ? 1 : 0))); - } - - public override void Apply (Path p) { - List vs = p.vectorPath; - - List res = Apply(vs); - - if (res != vs) { - ListPool.Release(ref p.vectorPath); - p.vectorPath = res; - } - } - - float[] radi = new float[10]; - float[] a1 = new float[10]; - float[] a2 = new float[10]; - bool[] dir = new bool[10]; - - /** Apply this modifier on a raw Vector3 list */ - public List Apply (List vs) { - if (vs == null || vs.Count < 3) return vs; - - /** \todo Do something about these allocations */ - if (radi.Length < vs.Count) { - radi = new float[vs.Count]; - a1 = new float[vs.Count]; - a2 = new float[vs.Count]; - dir = new bool[vs.Count]; - } - - for (int i = 0; i < vs.Count; i++) { - radi[i] = radius; - } - - radi[0] = 0; - radi[vs.Count-1] = 0; - - int count = 0; - for (int i = 0; i < vs.Count-1; i++) { - count++; - if (count > 2*vs.Count) { - Debug.LogWarning("Could not resolve radiuses, the path is too complex. Try reducing the base radius"); - break; - } - - TangentType tt; - - if (i == 0) { - tt = CalculateTangentTypeSimple(vs[i], vs[i+1], vs[i+2]); - } else if (i == vs.Count-2) { - tt = CalculateTangentTypeSimple(vs[i-1], vs[i], vs[i+1]); - } else { - tt = CalculateTangentType(vs[i-1], vs[i], vs[i+1], vs[i+2]); - } - - //DrawCircle (vs[i], radi[i], Color.yellow); - - if ((tt & TangentType.Inner) != 0) { - //Angle to tangent - float a; - //Angle to other circle - float sigma; - - //Calculate angles to the next circle and angles for the inner tangents - if (!CalculateCircleInner(vs[i], vs[i+1], radi[i], radi[i+1], out a, out sigma)) { - //Failed, try modifying radiuses - float magn = (vs[i+1]-vs[i]).magnitude; - radi[i] = magn*(radi[i]/(radi[i]+radi[i+1])); - radi[i+1] = magn - radi[i]; - radi[i] *= 0.99f; - radi[i+1] *= 0.99f; - i -= 2; - continue; - } - - if (tt == TangentType.InnerRightLeft) { - a2[i] = sigma-a; - a1[i+1] = sigma-a + (float)Math.PI; - dir[i] = true; - } else { - a2[i] = sigma+a; - a1[i+1] = sigma+a + (float)Math.PI; - dir[i] = false; - } - } else { - float sigma; - float a; - - //Calculate angles to the next circle and angles for the outer tangents - if (!CalculateCircleOuter(vs[i], vs[i+1], radi[i], radi[i+1], out a, out sigma)) { - //Failed, try modifying radiuses - if (i == vs.Count-2) { - //The last circle has a fixed radius at 0, don't modify it - radi[i] = (vs[i+1]-vs[i]).magnitude; - radi[i] *= 0.99f; - i -= 1; - } else { - if (radi[i] > radi[i+1]) { - radi[i+1] = radi[i] - (vs[i+1]-vs[i]).magnitude; - } else { - radi[i+1] = radi[i] + (vs[i+1]-vs[i]).magnitude; - } - radi[i+1] *= 0.99f; - } - - - - i -= 1; - continue; - } - - if (tt == TangentType.OuterRight) { - a2[i] = sigma-a; - a1[i+1] = sigma-a; - dir[i] = true; - } else { - a2[i] = sigma+a; - a1[i+1] = sigma+a; - dir[i] = false; - } - } - } - - List res = ListPool.Claim(); - res.Add(vs[0]); - if (detail < 1) detail = 1; - float step = (float)(2*Math.PI)/detail; - for (int i = 1; i < vs.Count-1; i++) { - float start = a1[i]; - float end = a2[i]; - float rad = radi[i]; - - if (dir[i]) { - if (end < start) end += (float)Math.PI*2; - for (float t = start; t < end; t += step) { - res.Add(new Vector3((float)Math.Cos(t), 0, (float)Math.Sin(t)).ToPFV3()*rad + vs[i]); - } - } else { - if (start < end) start += (float)Math.PI*2; - for (float t = start; t > end; t -= step) { - res.Add(new Vector3((float)Math.Cos(t), 0, (float)Math.Sin(t)).ToPFV3()*rad + vs[i]); - } - } - } - - res.Add(vs[vs.Count-1]); - - return res; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RadiusModifier.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RadiusModifier.cs.meta deleted file mode 100644 index 6a921c05961b3438256a03671c4954678474be3f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RadiusModifier.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 64ffa084e9f3d48b59e691352d40eb68 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RaycastModifier.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RaycastModifier.cs deleted file mode 100644 index c8c6de10fbbf00d49570484d4059dfd785a5eaa4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RaycastModifier.cs +++ /dev/null @@ -1,285 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - using Pathfinding.Util; - - /** Simplifies a path using raycasting. - * \ingroup modifiers - * This modifier will try to remove as many nodes as possible from the path using raycasting (linecasting) to validate the node removal. - * You can use either graph raycasting or Physics.Raycast. - * When using graph raycasting, the graph will be traversed and checked for obstacles. When physics raycasting is used, the Unity physics system - * will be asked if there are any colliders which intersect the line that is currently being checked. - * - * \see https://docs.unity3d.com/ScriptReference/Physics.html - * \see #Pathfinding.IRaycastableGraph - * - * This modifier is primarily intended for grid graphs and layered grid graphs. Though depending on your game it may also be - * useful for point graphs. However note that point graphs do not have any built-in raycasting so you need to use physics raycasting for that graph. - * - * For navmesh/recast graphs the #Pathfinding.FunnelModifier is a much better and faster alternative. - * - * On grid graphs you can combine the FunnelModifier with this modifier by simply attaching both of them to a GameObject with a Seeker. - * This may or may not give you better results. It will usually follow the border of the graph more closely when they are both used - * however it more often misses some simplification opportunities. - * When both modifiers are used then the funnel modifier will run first and simplify the path, and then this modifier will take - * the output from the funnel modifier and try to simplify that even more. - * - * This modifier has several different quality levels. The highest quality is significantly slower than the - * lowest quality level (10 times slower is not unusual). So make sure you pick the lowest quality that your game can get away with. - * You can use the Unity profiler to see if it takes up any significant amount of time. It will show up under the heading "Running Path Modifiers". - * - * \shadowimage{raycast_modifier_quality.gif} - * - * \see \ref modifiers - */ - [AddComponentMenu("Pathfinding/Modifiers/Raycast Modifier")] - [RequireComponent(typeof(Seeker))] - [System.Serializable] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_raycast_modifier.php")] - public class RaycastModifier : MonoModifier { - #if UNITY_EDITOR - [UnityEditor.MenuItem("CONTEXT/Seeker/Add Raycast Simplifier Modifier")] - public static void AddComp (UnityEditor.MenuCommand command) { - (command.context as Component).gameObject.AddComponent(typeof(RaycastModifier)); - } - #endif - - public override int Order { get { return 40; } } - - /** Use Physics.Raycast to simplify the path */ - public bool useRaycasting = true; - - /** Layer mask used for physics raycasting. - * All objects with layers that are included in this mask will be treated as obstacles. - * If you are using a grid graph you usually want this to be the same as the mask in the grid graph's 'Collision Testing' settings. - */ - public LayerMask mask = -1; - - /** Checks around the line between two points, not just the exact line. - * Make sure the ground is either too far below or is not inside the mask since otherwise the raycast might always hit the ground. - * - * \see https://docs.unity3d.com/ScriptReference/Physics.SphereCast.html - */ - [Tooltip("Checks around the line between two points, not just the exact line.\nMake sure the ground is either too far below or is not inside the mask since otherwise the raycast might always hit the ground.")] - public bool thickRaycast; - - /** Distance from the ray which will be checked for colliders */ - [Tooltip("Distance from the ray which will be checked for colliders")] - public float thickRaycastRadius; - - /** Check for intersections with 2D colliders instead of 3D colliders. - * Useful for 2D games. - * - * \see https://docs.unity3d.com/ScriptReference/Physics2D.html - */ - [Tooltip("Check for intersections with 2D colliders instead of 3D colliders.")] - public bool use2DPhysics; - - /** Offset from the original positions to perform the raycast. - * Can be useful to avoid the raycast intersecting the ground or similar things you do not want to it intersect - */ - [Tooltip("Offset from the original positions to perform the raycast.\nCan be useful to avoid the raycast intersecting the ground or similar things you do not want to it intersect")] - public Vector3 raycastOffset = Vector3.zero; - - /** Use raycasting on the graphs. Only currently works with GridGraph and NavmeshGraph and RecastGraph. \astarpro */ - [Tooltip("Use raycasting on the graphs. Only currently works with GridGraph and NavmeshGraph and RecastGraph. This is a pro version feature.")] - public bool useGraphRaycasting; - - /** Higher quality modes will try harder to find a shorter path. - * Higher qualities may be significantly slower than low quality. - * \shadowimage{raycast_modifier_quality.gif} - */ - [Tooltip("When using the high quality mode the script will try harder to find a shorter path. This is significantly slower than the greedy low quality approach.")] - public Quality quality = Quality.Medium; - - public enum Quality { - /** One iteration using a greedy algorithm */ - Low, - /** Two iterations using a greedy algorithm */ - Medium, - /** One iteration using a dynamic programming algorithm */ - High, - /** Three iterations using a dynamic programming algorithm */ - Highest - } - - static readonly int[] iterationsByQuality = new [] { 1, 2, 1, 3 }; - static List buffer = new List(); - static float[] DPCosts = new float[16]; - static int[] DPParents = new int[16]; - - public override void Apply (Path p) { - if (!useRaycasting && !useGraphRaycasting) return; - - var points = p.vectorPath; - - if (ValidateLine(null, null, p.vectorPath[0], p.vectorPath[p.vectorPath.Count-1])) { - // A very common case is that there is a straight line to the target. - var s = p.vectorPath[0]; - var e = p.vectorPath[p.vectorPath.Count-1]; - points.ClearFast(); - points.Add(s); - points.Add(e); - } else { - int iterations = iterationsByQuality[(int)quality]; - for (int it = 0; it < iterations; it++) { - if (it != 0) { - Polygon.Subdivide(points, buffer, 3); - Memory.Swap(ref buffer, ref points); - buffer.ClearFast(); - points.Reverse(); - } - - points = quality >= Quality.High ? ApplyDP(p, points) : ApplyGreedy(p, points); - } - if ((iterations % 2) == 0) points.Reverse(); - } - - p.vectorPath = points; - } - - List ApplyGreedy (Path p, List points) { - bool canBeOriginalNodes = points.Count == p.path.Count; - int startIndex = 0; - - while (startIndex < points.Count) { - Vector3 start = points[startIndex]; - var startNode = canBeOriginalNodes && points[startIndex] == (Vector3)p.path[startIndex].position ? p.path[startIndex] : null; - buffer.Add(start); - - // Do a binary search to find the furthest node we can see from this node - int mn = 1, mx = 2; - while (true) { - int endIndex = startIndex + mx; - if (endIndex >= points.Count) { - mx = points.Count - startIndex; - break; - } - Vector3 end = points[endIndex]; - var endNode = canBeOriginalNodes && end == (Vector3)p.path[endIndex].position ? p.path[endIndex] : null; - if (!ValidateLine(startNode, endNode, start, end)) break; - mn = mx; - mx *= 2; - } - - while (mn + 1 < mx) { - int mid = (mn + mx)/2; - int endIndex = startIndex + mid; - Vector3 end = points[endIndex]; - var endNode = canBeOriginalNodes && end == (Vector3)p.path[endIndex].position ? p.path[endIndex] : null; - - if (ValidateLine(startNode, endNode, start, end)) { - mn = mid; - } else { - mx = mid; - } - } - startIndex += mn; - } - - Memory.Swap(ref buffer, ref points); - buffer.ClearFast(); - return points; - } - - List ApplyDP (Path p, List points) { - if (DPCosts.Length < points.Count) { - DPCosts = new float[points.Count]; - DPParents = new int[points.Count]; - } - for (int i = 0; i < DPParents.Length; i++) DPCosts[i] = DPParents[i] = -1; - bool canBeOriginalNodes = points.Count == p.path.Count; - - for (int i = 0; i < points.Count; i++) { - float d = DPCosts[i]; - Vector3 start = points[i]; - var startIsOriginalNode = canBeOriginalNodes && start == (Vector3)p.path[i].position; - for (int j = i+1; j < points.Count; j++) { - // Total distance from the start to this point using the best simplified path - // The small additive constant is to make sure that the number of points is kept as small as possible - // even when the total distance is the same (which can happen with e.g multiple colinear points). - float d2 = d + (points[j] - start).magnitude + 0.0001f; - if (DPParents[j] == -1 || d2 < DPCosts[j]) { - var endIsOriginalNode = canBeOriginalNodes && points[j] == (Vector3)p.path[j].position; - if (j == i+1 || ValidateLine(startIsOriginalNode ? p.path[i] : null, endIsOriginalNode ? p.path[j] : null, start, points[j])) { - DPCosts[j] = d2; - DPParents[j] = i; - } else { - break; - } - } - } - } - - int c = points.Count - 1; - while (c != -1) { - buffer.Add(points[c]); - c = DPParents[c]; - } - buffer.Reverse(); - Memory.Swap(ref buffer, ref points); - buffer.ClearFast(); - return points; - } - - /** Check if a straight path between v1 and v2 is valid. - * If both \a n1 and \a n2 are supplied it is assumed that the line goes from the center of \a n1 to the center of \a n2 and a more optimized graph linecast may be done. - */ - protected bool ValidateLine (GraphNode n1, GraphNode n2, Vector3 v1, Vector3 v2) { - if (useRaycasting) { - // Use raycasting to check if a straight path between v1 and v2 is valid - if (use2DPhysics) { - if (thickRaycast && thickRaycastRadius > 0 && Physics2D.CircleCast(v1 + raycastOffset, thickRaycastRadius, v2 - v1, (v2 - v1).magnitude, mask)) { - return false; - } - - if (Physics2D.Linecast(v1+raycastOffset, v2+raycastOffset, mask)) { - return false; - } - } else { - // Perform a thick raycast (if enabled) - if (thickRaycast && thickRaycastRadius > 0 && Physics.SphereCast(new Ray(v1+raycastOffset, v2-v1), thickRaycastRadius, (v2-v1).magnitude, mask)) { - return false; - } - - // Perform a normal raycast - // This is done even if a thick raycast is also done because thick raycasts do not report collisions for - // colliders that overlapped the (imaginary) sphere at the origin of the thick raycast. - // If this raycast was not done then some obstacles could be missed. - if (Physics.Linecast(v1+raycastOffset, v2+raycastOffset, mask)) { - return false; - } - } - } - - if (useGraphRaycasting) { -#if !AstarFree && !ASTAR_NO_GRID_GRAPH - bool betweenNodeCenters = n1 != null && n2 != null; -#endif - if (n1 == null) n1 = PathFindHelper.GetNearest(v1).node; - if (n2 == null) n2 = PathFindHelper.GetNearest(v2).node; - - if (n1 != null && n2 != null) { - // Use graph raycasting to check if a straight path between v1 and v2 is valid - NavGraph graph = UnityHelper.GetGraph(n1); - NavGraph graph2 = UnityHelper.GetGraph(n2); - - if (graph != graph2) { - return false; - } - - var rayGraph = graph as IRaycastableGraph; - - if (rayGraph != null) { - return !rayGraph.Linecast(v1, v2, n1); - } - } - } - return true; - } - - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RaycastModifier.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RaycastModifier.cs.meta deleted file mode 100644 index fe525ef807458932ffb483ee1bbe730eb38e773b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/RaycastModifier.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b090bec917bbe4c3bbc612ef13f7c4a1 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/SimpleSmoothModifier.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/SimpleSmoothModifier.cs deleted file mode 100644 index 15aadf0439d78604a7c9ad62b2236eb37e778b67..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/SimpleSmoothModifier.cs +++ /dev/null @@ -1,365 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; - -using Pathfinding.Util; -using PF; -using Mathf = UnityEngine.Mathf; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - [AddComponentMenu("Pathfinding/Modifiers/Simple Smooth")] - [System.Serializable] - [RequireComponent(typeof(Seeker))] - /** Modifier which smooths the path. This modifier can smooth a path by either moving the points closer together (Simple) or using Bezier curves (Bezier).\n - * \ingroup modifiers - * Attach this component to the same GameObject as a Seeker component. - * \n - * This component will hook in to the Seeker's path post-processing system and will post process any paths it searches for. - * Take a look at the Modifier Priorities settings on the Seeker component to determine where in the process this modifier should process the path. - * \n - * \n - * Several smoothing types are available, here follows a list of them and a short description of what they do, and how they work. - * But the best way is really to experiment with them yourself.\n - * - * - Simple Smooths the path by drawing all points close to each other. This results in paths that might cut corners if you are not careful. - * It will also subdivide the path to create more more points to smooth as otherwise it would still be quite rough. - * \shadowimage{smooth_simple.png} - * - Bezier Smooths the path using Bezier curves. This results a smooth path which will always pass through all points in the path, but make sure it doesn't turn too quickly. - * \shadowimage{smooth_bezier.png} - * - OffsetSimple An alternative to Simple smooth which will offset the path outwards in each step to minimize the corner-cutting. - * But be careful, if too high values are used, it will turn into loops and look really ugly. - * - Curved Non Uniform \shadowimage{smooth_curved_nonuniform.png} - * - * \note Modifies vectorPath array - * \todo Make the smooth modifier take the world geometry into account when smoothing - * */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_simple_smooth_modifier.php")] - public class SimpleSmoothModifier : MonoModifier { - #if UNITY_EDITOR - [UnityEditor.MenuItem("CONTEXT/Seeker/Add Simple Smooth Modifier")] - public static void AddComp (UnityEditor.MenuCommand command) { - (command.context as Component).gameObject.AddComponent(typeof(SimpleSmoothModifier)); - } - #endif - - public override int Order { get { return 50; } } - - /** Type of smoothing to use */ - public SmoothType smoothType = SmoothType.Simple; - - /** Number of times to subdivide when not using a uniform length */ - [Tooltip("The number of times to subdivide (divide in half) the path segments. [0...inf] (recommended [1...10])")] - public int subdivisions = 2; - - /** Number of times to apply smoothing */ - [Tooltip("Number of times to apply smoothing")] - public int iterations = 2; - - /** Determines how much smoothing to apply in each smooth iteration. 0.5 usually produces the nicest looking curves. */ - [Tooltip("Determines how much smoothing to apply in each smooth iteration. 0.5 usually produces the nicest looking curves")] - [Range(0, 1)] - public float strength = 0.5F; - - /** Toggle to divide all lines in equal length segments. - * \see #maxSegmentLength - */ - [Tooltip("Toggle to divide all lines in equal length segments")] - public bool uniformLength = true; - - /** The length of the segments in the smoothed path when using #uniformLength. - * A high value yields rough paths and low value yields very smooth paths, but is slower */ - [Tooltip("The length of each segment in the smoothed path. A high value yields rough paths and low value yields very smooth paths, but is slower")] - public float maxSegmentLength = 2F; - - /** Length factor of the bezier curves' tangents' */ - [Tooltip("Length factor of the bezier curves' tangents")] - public float bezierTangentLength = 0.4F; - - /** Offset to apply in each smoothing iteration when using Offset Simple. \see #smoothType */ - [Tooltip("Offset to apply in each smoothing iteration when using Offset Simple")] - public float offset = 0.2F; - - /** Roundness factor used for CurvedNonuniform */ - [Tooltip("How much to smooth the path. A higher value will give a smoother path, but might take the character far off the optimal path.")] - public float factor = 0.1F; - - public enum SmoothType { - Simple, - Bezier, - OffsetSimple, - CurvedNonuniform - } - - public override void Apply (Path p) { - // This should never trigger unless some other modifier has messed stuff up - if (p.vectorPath == null) { - Debug.LogWarning("Can't process NULL path (has another modifier logged an error?)"); - return; - } - - List path = null; - - switch (smoothType) { - case SmoothType.Simple: - path = SmoothSimple(p.vectorPath); break; - case SmoothType.Bezier: - path = SmoothBezier(p.vectorPath); break; - case SmoothType.OffsetSimple: - path = SmoothOffsetSimple(p.vectorPath); break; - case SmoothType.CurvedNonuniform: - path = CurvedNonuniform(p.vectorPath); break; - } - - if (path != p.vectorPath) { - ListPool.Release(ref p.vectorPath); - p.vectorPath = path; - } - } - - public List CurvedNonuniform (List path) { - if (maxSegmentLength <= 0) { - Debug.LogWarning("Max Segment Length is <= 0 which would cause DivByZero-exception or other nasty errors (avoid this)"); - return path; - } - - int pointCounter = 0; - for (int i = 0; i < path.Count-1; i++) { - //pointCounter += Mathf.FloorToInt ((path[i]-path[i+1]).magnitude / maxSegmentLength)+1; - - float dist = (path[i]-path[i+1]).magnitude; - //In order to avoid floating point errors as much as possible, and in lack of a better solution - //loop through it EXACTLY as the other code further down will - for (float t = 0; t <= dist; t += maxSegmentLength) { - pointCounter++; - } - } - - List subdivided = ListPool.Claim(pointCounter); - - // Set first velocity - Vector3 preEndVel = (path[1]-path[0]).normalized; - - for (int i = 0; i < path.Count-1; i++) { - float dist = (path[i]-path[i+1]).magnitude; - - Vector3 startVel1 = preEndVel; - Vector3 endVel1 = i < path.Count-2 ? ((path[i+2]-path[i+1]).normalized - (path[i]-path[i+1]).normalized).normalized : (path[i+1]-path[i]).normalized; - - Vector3 startVel = startVel1 * dist * factor; - Vector3 endVel = endVel1 * dist * factor; - - Vector3 start = path[i]; - Vector3 end = path[i+1]; - - float onedivdist = 1F / dist; - - for (float t = 0; t <= dist; t += maxSegmentLength) { - float t2 = t * onedivdist; - - subdivided.Add(GetPointOnCubic(start, end, startVel, endVel, t2)); - } - - preEndVel = endVel1; - } - - subdivided[subdivided.Count-1] = path[path.Count-1]; - - return subdivided; - } - - public static Vector3 GetPointOnCubic (Vector3 a, Vector3 b, Vector3 tan1, Vector3 tan2, float t) { - float t2 = t*t, t3 = t2*t; - - float h1 = 2*t3 - 3*t2 + 1; // calculate basis function 1 - float h2 = -2*t3 + 3*t2; // calculate basis function 2 - float h3 = t3 - 2*t2 + t; // calculate basis function 3 - float h4 = t3 - t2; // calculate basis function 4 - - return h1*a + // multiply and sum all funtions - h2*b + // together to build the interpolated - h3*tan1 + // point along the curve. - h4*tan2; - } - - public List SmoothOffsetSimple (List path) { - if (path.Count <= 2 || iterations <= 0) { - return path; - } - - if (iterations > 12) { - Debug.LogWarning("A very high iteration count was passed, won't let this one through"); - return path; - } - - int maxLength = (path.Count-2)*(int)Mathf.Pow(2, iterations)+2; - - List subdivided = ListPool.Claim(maxLength); - List subdivided2 = ListPool.Claim(maxLength); - - for (int i = 0; i < maxLength; i++) { subdivided.Add(Vector3.zero); subdivided2.Add(Vector3.zero); } - - for (int i = 0; i < path.Count; i++) { - subdivided[i] = path[i]; - } - - for (int iteration = 0; iteration < iterations; iteration++) { - int currentPathLength = (path.Count-2)*(int)Mathf.Pow(2, iteration)+2; - - //Switch the arrays - List tmp = subdivided; - subdivided = subdivided2; - subdivided2 = tmp; - - const float nextMultiplier = 1F; - - for (int i = 0; i < currentPathLength-1; i++) { - Vector3 current = subdivided2[i]; - Vector3 next = subdivided2[i+1]; - - Vector3 normal = Vector3.Cross(next-current, Vector3.up); - normal = normal.normalized; - - bool firstRight = false; - bool secondRight = false; - bool setFirst = false; - bool setSecond = false; - if (i != 0 && !VectorMath.IsColinearXZ(current, next, subdivided2[i-1])) { - setFirst = true; - firstRight = VectorMath.RightOrColinearXZ(current, next, subdivided2[i-1]); - } - if (i < currentPathLength-1 && !VectorMath.IsColinearXZ(current, next, subdivided2[i+2])) { - setSecond = true; - secondRight = VectorMath.RightOrColinearXZ(current, next, subdivided2[i+2]); - } - - if (setFirst) { - subdivided[i*2] = current + (firstRight ? normal*offset*nextMultiplier : -normal*offset*nextMultiplier); - } else { - subdivided[i*2] = current; - } - - if (setSecond) { - subdivided[i*2+1] = next + (secondRight ? normal*offset*nextMultiplier : -normal*offset*nextMultiplier); - } else { - subdivided[i*2+1] = next; - } - } - - subdivided[(path.Count-2)*(int)Mathf.Pow(2, iteration+1)+2-1] = subdivided2[currentPathLength-1]; - } - - ListPool.Release(ref subdivided2); - - return subdivided; - } - - public List SmoothSimple (List path) { - if (path.Count < 2) return path; - - List subdivided; - - if (uniformLength) { - // Clamp to a small value to avoid the path being divided into a huge number of segments - maxSegmentLength = Mathf.Max(maxSegmentLength, 0.005f); - - float pathLength = 0; - for (int i = 0; i < path.Count-1; i++) { - pathLength += Vector3.Distance(path[i], path[i+1]); - } - - int estimatedNumberOfSegments = Mathf.FloorToInt(pathLength / maxSegmentLength); - // Get a list with an initial capacity high enough so that we can add all points - subdivided = ListPool.Claim(estimatedNumberOfSegments+2); - - float distanceAlong = 0; - - // Sample points every [maxSegmentLength] world units along the path - for (int i = 0; i < path.Count-1; i++) { - var start = path[i]; - var end = path[i+1]; - - float length = Vector3.Distance(start, end); - - while (distanceAlong < length) { - subdivided.Add(Vector3.Lerp(start, end, distanceAlong / length)); - distanceAlong += maxSegmentLength; - } - - distanceAlong -= length; - } - - // Make sure we get the exact position of the last point - subdivided.Add(path[path.Count-1]); - } else { - subdivisions = Mathf.Max(subdivisions, 0); - - if (subdivisions > 10) { - Debug.LogWarning("Very large number of subdivisions. Cowardly refusing to subdivide every segment into more than " + (1 << subdivisions) + " subsegments"); - subdivisions = 10; - } - - int steps = 1 << subdivisions; - subdivided = ListPool.Claim((path.Count-1)*steps + 1); - Polygon.Subdivide(path, subdivided, steps); - } - - if (strength > 0) { - for (int it = 0; it < iterations; it++) { - Vector3 prev = subdivided[0]; - - for (int i = 1; i < subdivided.Count-1; i++) { - Vector3 tmp = subdivided[i]; - - // prev is at this point set to the value that subdivided[i-1] had before this loop started - // Move the point closer to the average of the adjacent points - subdivided[i] = Vector3.Lerp(tmp, (prev+subdivided[i+1].ToUnityV3())/2F, strength); - - prev = tmp; - } - } - } - - return subdivided; - } - - public List SmoothBezier (List path) { - if (subdivisions < 0) subdivisions = 0; - - int subMult = 1 << subdivisions; - List subdivided = ListPool.Claim(); - - for (int i = 0; i < path.Count-1; i++) { - Vector3 tangent1; - Vector3 tangent2; - if (i == 0) { - tangent1 = path[i+1]-path[i]; - } else { - tangent1 = path[i+1]-path[i-1]; - } - - if (i == path.Count-2) { - tangent2 = path[i]-path[i+1]; - } else { - tangent2 = path[i]-path[i+2]; - } - - tangent1 *= bezierTangentLength; - tangent2 *= bezierTangentLength; - - Vector3 v1 = path[i]; - Vector3 v2 = v1+tangent1; - Vector3 v4 = path[i+1]; - Vector3 v3 = v4+tangent2; - - for (int j = 0; j < subMult; j++) { - subdivided.Add(AstarSplines.CubicBezier(v1, v2, v3, v4, (float)j/subMult)); - } - } - - // Assign the last point - subdivided.Add(path[path.Count-1]); - - return subdivided; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/SimpleSmoothModifier.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/SimpleSmoothModifier.cs.meta deleted file mode 100644 index fc16196e2814dd141fae8e2f7f1f6b11380abf57..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/SimpleSmoothModifier.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: cb6a34d769a1e4ac7b0b30e433aa443c -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/StartEndModifier.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/StartEndModifier.cs deleted file mode 100644 index 9b5c67ad94a8189d33883844a3708d16bf9744bf..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/StartEndModifier.cs +++ /dev/null @@ -1,245 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Mathf = UnityEngine.Mathf; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - [System.Serializable] - /** Adjusts start and end points of a path. - * - * This modifier is included in the \link Pathfinding.Seeker Seeker\endlink component and is always used if you are using a Seeker. - * When a path is calculated the resulting path will only be the positions of the nodes it passes through. - * However often you may not want to navigate to the center of a specific node but instead to a point on the surface of a node. - * This modifier will adjust the endpoints of the path. - * - * \shadowimage{startendmodifier.png} - * - * \ingroup modifiers - * - */ - public class StartEndModifier : PathModifier { - public override int Order { get { return 0; } } - - /** Add points to the path instead of replacing them. - * If for example #exactEndPoint is set to ClosestOnNode then the path will be modified so that - * the path goes first to the center of the last node in the path and then goes to the closest point - * on the node to the end point in the path request. - * - * If this is false however then the relevant points in the path will simply be replaced. - * In the above example the path would go directly to the closest point on the node without passing - * through the center of the node. - */ - public bool addPoints; - - /** How the start point of the path will be determined. - * \see #Exactness - */ - public Exactness exactStartPoint = Exactness.ClosestOnNode; - - /** How the end point of the path will be determined. - * \see #Exactness - */ - public Exactness exactEndPoint = Exactness.ClosestOnNode; - - /** Will be called when a path is processed. - * The value which is returned will be used as the start point of the path - * and potentially clamped depending on the value of the #exactStartPoint field. - * Only used for the Original, Interpolate and NodeConnection modes. - */ - public System.Func adjustStartPoint; - - /** Sets where the start and end points of a path should be placed. - * - * Here is a legend showing what the different items in the above images represent. - * The images above show a path coming in from the top left corner and ending at a node next to an obstacle as well as 2 different possible end points of the path and how they would be modified. - * \shadowimage{startend/exactness_legend.png} - */ - public enum Exactness { - /** The point is snapped to the position of the first/last node in the path. - * Use this if your game is very tile based and you want your agents to stop precisely at the center of the nodes. - * If you recalculate the path while the agent is moving you may want the start point snapping to be ClosestOnNode and the end point snapping to be SnapToNode however - * as while an agent is moving it will likely not be right at the center of a node. - * - * \shadowimage{startend/exactness_snap_to_node.png} - */ - SnapToNode, - /** The point is set to the exact point which was passed when creating the path request. - * Note that if a path was for example requested to a point inside an obstacle, then the last point of the path will be inside that obstacle, which is usually not what you want. - * Consider using the #ClosestOnNode option instead. - * - * \shadowimage{startend/exactness_original.png} - */ - Original, - /** The point is set to the closest point on the line between either the two first points or the two last points. - * Usually you will want to use the NodeConnection mode instead since that is usually the behaviour that you really want. - * This mode exists mostly for compatibility reasons. - * \shadowimage{startend/exactness_interpolate.png} - * \deprecated Use NodeConnection instead. - */ - Interpolate, - /** The point is set to the closest point on the surface of the node. Note that some node types (point nodes) do not have a surface, so the "closest point" is simply the node's position which makes this identical to #Exactness.SnapToNode. - * This is the mode that you almost always want to use in a free movement 3D world. - * \shadowimage{startend/exactness_closest_on_node.png} - */ - ClosestOnNode, - /** The point is set to the closest point on one of the connections from the start/end node. - * This mode may be useful in a grid based or point graph based world when using the AILerp script. - * - * \shadowimage{startend/exactness_connection.png} - */ - NodeConnection, - } - - /** Do a straight line check from the node's center to the point determined by the #Exactness. - * There are very few cases where you will want to use this. It is mostly here for - * backwards compatibility reasons. - * - * \version Since 4.1 this field only has an effect for the #Exactness mode Original because that's the only one where it makes sense. - */ - public bool useRaycasting; - public LayerMask mask = -1; - - /** Do a straight line check from the node's center to the point determined by the #Exactness. - * \see #useRaycasting - * - * \version Since 4.1 this field only has an effect for the #Exactness mode Original because that's the only one where it makes sense. - */ - public bool useGraphRaycasting; - - List connectionBuffer; - System.Action connectionBufferAddDelegate; - - public override void Apply (Path _p) { - var p = _p as ABPath; - - // This modifier only supports ABPaths (doesn't make much sense for other paths anyway) - if (p == null || p.vectorPath.Count == 0) return; - - if (p.vectorPath.Count == 1 && !addPoints) { - // Duplicate first point - p.vectorPath.Add(p.vectorPath[0]); - } - - // Add instead of replacing points - bool forceAddStartPoint, forceAddEndPoint; - - Vector3 pStart = Snap(p, exactStartPoint, true, out forceAddStartPoint); - Vector3 pEnd = Snap(p, exactEndPoint, false, out forceAddEndPoint); - - // Add or replace the start point - // Disable adding of points if the mode is SnapToNode since then - // the first item in vectorPath will very likely be the same as the - // position of the first node - if ((forceAddStartPoint || addPoints) && exactStartPoint != Exactness.SnapToNode) { - p.vectorPath.Insert(0, pStart); - } else { - p.vectorPath[0] = pStart; - } - - if ((forceAddEndPoint || addPoints) && exactEndPoint != Exactness.SnapToNode) { - p.vectorPath.Add(pEnd); - } else { - p.vectorPath[p.vectorPath.Count-1] = pEnd; - } - } - - Vector3 Snap (ABPath path, Exactness mode, bool start, out bool forceAddPoint) { - var index = start ? 0 : path.path.Count - 1; - var node = path.path[index]; - var nodePos = (Vector3)node.position; - - forceAddPoint = false; - - switch (mode) { - case Exactness.ClosestOnNode: - return start ? path.startPoint : path.endPoint; - case Exactness.SnapToNode: - return nodePos; - case Exactness.Original: - case Exactness.Interpolate: - case Exactness.NodeConnection: - Vector3 relevantPoint; - if (start) { - relevantPoint = adjustStartPoint != null ? adjustStartPoint().ToPFV3() : path.originalStartPoint; - } else { - relevantPoint = path.originalEndPoint; - } - - switch (mode) { - case Exactness.Original: - return GetClampedPoint(nodePos, relevantPoint, node); - case Exactness.Interpolate: - // Adjacent node to either the start node or the end node in the path - var adjacentNode = path.path[Mathf.Clamp(index + (start ? 1 : -1), 0, path.path.Count-1)]; - return VectorMath.ClosestPointOnSegment(nodePos, (Vector3)adjacentNode.position, relevantPoint); - case Exactness.NodeConnection: - // This code uses some tricks to avoid allocations - // even though it uses delegates heavily - // The connectionBufferAddDelegate delegate simply adds whatever node - // it is called with to the connectionBuffer - connectionBuffer = connectionBuffer ?? new List(); - connectionBufferAddDelegate = connectionBufferAddDelegate ?? (System.Action)connectionBuffer.Add; - - // Adjacent node to either the start node or the end node in the path - adjacentNode = path.path[Mathf.Clamp(index + (start ? 1 : -1), 0, path.path.Count-1)]; - - // Add all neighbours of #node to the connectionBuffer - node.GetConnections(connectionBufferAddDelegate); - var bestPos = nodePos; - var bestDist = float.PositiveInfinity; - - // Loop through all neighbours - // Do it in reverse order because the length of the connectionBuffer - // will change during iteration - for (int i = connectionBuffer.Count - 1; i >= 0; i--) { - var neighbour = connectionBuffer[i]; - - // Find the closest point on the connection between the nodes - // and check if the distance to that point is lower than the previous best - var closest = VectorMath.ClosestPointOnSegment(nodePos, (Vector3)neighbour.position, relevantPoint); - - var dist = (closest.ToUnityV3() - relevantPoint).sqrMagnitude; - if (dist < bestDist) { - bestPos = closest; - bestDist = dist; - - // If this node is not the adjacent node - // then the path should go through the start node as well - forceAddPoint = neighbour != adjacentNode; - } - } - - connectionBuffer.Clear(); - return bestPos; - default: - throw new System.ArgumentException("Cannot reach this point, but the compiler is not smart enough to realize that."); - } - default: - throw new System.ArgumentException("Invalid mode"); - } - } - - protected Vector3 GetClampedPoint (Vector3 from, Vector3 to, GraphNode hint) { - Vector3 point = to; - RaycastHit hit; - - if (useRaycasting && Physics.Linecast(from, to, out hit, mask)) { - point = hit.point; - } - - if (useGraphRaycasting && hint != null) { - var rayGraph = UnityHelper.GetGraph(hint) as IRaycastableGraph; - - if (rayGraph != null) { - GraphHitInfo graphHit; - if (rayGraph.Linecast(from, point, hint, out graphHit)) { - point = graphHit.point; - } - } - } - - return point; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/StartEndModifier.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/StartEndModifier.cs.meta deleted file mode 100644 index 382950c00bd5b20cde1c1d738f74f5ef6326d42c..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Modifiers/StartEndModifier.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f72dd5db0de344ea19ae250ac5b68903 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Navmesh.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Navmesh.meta deleted file mode 100644 index 0d99fc3458f2ccc41b569ae497a15aadcf7c8e4d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Navmesh.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 195f35ff965f6e94095cc85bd73af7cf -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Navmesh/RelevantGraphSurface.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Navmesh/RelevantGraphSurface.cs deleted file mode 100644 index 41d26936fb1f4ec8150650ad88818c92e8faf88e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Navmesh/RelevantGraphSurface.cs +++ /dev/null @@ -1,93 +0,0 @@ -using UnityEngine; - -namespace Pathfinding { - /** Pruning of recast navmesh regions. - * A RelevantGraphSurface component placed in the scene specifies that - * the navmesh region it is inside should be included in the navmesh. - * - * \see Pathfinding.RecastGraph.relevantGraphSurfaceMode - * - */ - [AddComponentMenu("Pathfinding/Navmesh/RelevantGraphSurface")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_relevant_graph_surface.php")] - public class RelevantGraphSurface : VersionedMonoBehaviour { - private static RelevantGraphSurface root; - - public float maxRange = 1; - - private RelevantGraphSurface prev; - private RelevantGraphSurface next; - private Vector3 position; - - public Vector3 Position { - get { return position; } - } - - public RelevantGraphSurface Next { - get { return next; } - } - - public RelevantGraphSurface Prev { - get { return prev; } - } - - public static RelevantGraphSurface Root { - get { return root; } - } - - public void UpdatePosition () { - position = transform.position; - } - - void OnEnable () { - UpdatePosition(); - if (root == null) { - root = this; - } else { - next = root; - root.prev = this; - root = this; - } - } - - void OnDisable () { - if (root == this) { - root = next; - if (root != null) root.prev = null; - } else { - if (prev != null) prev.next = next; - if (next != null) next.prev = prev; - } - prev = null; - next = null; - } - - /** Updates the positions of all relevant graph surface components. - * Required to be able to use the position property reliably. - */ - public static void UpdateAllPositions () { - RelevantGraphSurface c = root; - - while (c != null) { c.UpdatePosition(); c = c.Next; } - } - - public static void FindAllGraphSurfaces () { - var srf = GameObject.FindObjectsOfType(typeof(RelevantGraphSurface)) as RelevantGraphSurface[]; - - for (int i = 0; i < srf.Length; i++) { - srf[i].OnDisable(); - srf[i].OnEnable(); - } - } - - public void OnDrawGizmos () { - Gizmos.color = new Color(57/255f, 211/255f, 46/255f, 0.4f); - Gizmos.DrawLine(transform.position - Vector3.up*maxRange, transform.position + Vector3.up*maxRange); - } - - public void OnDrawGizmosSelected () { - Gizmos.color = new Color(57/255f, 211/255f, 46/255f); - Gizmos.DrawLine(transform.position - Vector3.up*maxRange, transform.position + Vector3.up*maxRange); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Navmesh/RelevantGraphSurface.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Navmesh/RelevantGraphSurface.cs.meta deleted file mode 100644 index 8f2de843aaddeae3d61d9ca19f483a34a51b31d2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Navmesh/RelevantGraphSurface.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d064c7cb576144978a3535f4c71ac247 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools.meta deleted file mode 100644 index 1f0048fff964167698a68062766855b9a99b0fe3..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 2305596df35e55b4ca735c9642af1c8c -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/EnumFlagAttribute.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/EnumFlagAttribute.cs deleted file mode 100644 index b9b0d764b0cdc689fc66a656fdd7ede8dea63d42..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/EnumFlagAttribute.cs +++ /dev/null @@ -1,7 +0,0 @@ -using UnityEngine; - -namespace Pathfinding { - /** \author http://wiki.unity3d.com/index.php/EnumFlagPropertyDrawer */ - public class EnumFlagAttribute : PropertyAttribute { - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/EnumFlagAttribute.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/EnumFlagAttribute.cs.meta deleted file mode 100644 index 3188a05836ac64d5f0a155bb3cb89b5198241ebb..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/EnumFlagAttribute.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e1a464aa9d87d439d9b54e2ed9027f5f -timeCreated: 1500392257 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/UniqueComponentAttribute.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/UniqueComponentAttribute.cs deleted file mode 100644 index 68edb3915b9d31c36c0a01827de391e60efc95c4..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/UniqueComponentAttribute.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Pathfinding { - [System.AttributeUsage(System.AttributeTargets.Class, AllowMultiple = true)] - public class UniqueComponentAttribute : System.Attribute { - public string tag; - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/UniqueComponentAttribute.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/UniqueComponentAttribute.cs.meta deleted file mode 100644 index ee1bcefd6a6402d58c0aa9c11f517cf5f0191e49..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/UniqueComponentAttribute.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e256d5533142c4434897b4da38791511 -timeCreated: 1513613274 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/VersionedMonoBehaviour.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/VersionedMonoBehaviour.cs deleted file mode 100644 index 417987ed306035afab9303b0212f3fed8f3d9e5d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/VersionedMonoBehaviour.cs +++ /dev/null @@ -1,47 +0,0 @@ -using UnityEngine; - -namespace Pathfinding { - /** Exposes internal methods from #Pathfinding.VersionedMonoBehaviour */ - public interface IVersionedMonoBehaviourInternal { - int OnUpgradeSerializedData (int version, bool unityThread); - } - - /** Base class for all components in the package */ - public abstract class VersionedMonoBehaviour : MonoBehaviour, ISerializationCallbackReceiver, IVersionedMonoBehaviourInternal { - /** Version of the serialized data. Used for script upgrades. */ - [SerializeField] - [HideInInspector] - int version = 0; - - protected virtual void Awake () { - // Make sure the version field is up to date for components created during runtime. - // Reset is not called when in play mode. - // If the data had to be upgraded then OnAfterDeserialize would have been called earlier. - if (Application.isPlaying) version = OnUpgradeSerializedData(int.MaxValue, true); - } - - /** Handle serialization backwards compatibility */ - void Reset () { - // Set initial version when adding the component for the first time - version = OnUpgradeSerializedData(int.MaxValue, true); - } - - /** Handle serialization backwards compatibility */ - void ISerializationCallbackReceiver.OnBeforeSerialize () { - } - - /** Handle serialization backwards compatibility */ - void ISerializationCallbackReceiver.OnAfterDeserialize () { - version = OnUpgradeSerializedData(version, false); - } - - /** Handle serialization backwards compatibility */ - protected virtual int OnUpgradeSerializedData (int version, bool unityThread) { - return 1; - } - - int IVersionedMonoBehaviourInternal.OnUpgradeSerializedData (int version, bool unityThread) { - return OnUpgradeSerializedData(version, unityThread); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/VersionedMonoBehaviour.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/VersionedMonoBehaviour.cs.meta deleted file mode 100644 index bcfc0a371e9bc66baa5de49ad04f55835bde0d5e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/PackageTools/VersionedMonoBehaviour.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6cce6945a1cc843b997a7abeb3a5013e -timeCreated: 1491213149 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO.meta deleted file mode 100644 index 420e8037666bbad0bbaf80b87d4d82b216faf4ce..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ab7e7b7e83371ce4cb4375fa3f3114cb -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOController.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOController.cs deleted file mode 100644 index f7cb0a81eee34a9805c99de755b9991c57dcda63..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOController.cs +++ /dev/null @@ -1,413 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; - -namespace Pathfinding.RVO { - using Pathfinding.Util; - - /** RVO Character Controller. - * Similar to Unity's CharacterController. It handles movement calculations and takes other agents into account. - * It does not handle movement itself, but allows the calling script to get the calculated velocity and - * use that to move the object using a method it sees fit (for example using a CharacterController, using - * transform.Translate or using a rigidbody). - * - * \code - * public void Update () { - * // Just some point far away - * var targetPoint = transform.position + transform.forward * 100; - * - * // Set the desired point to move towards using a desired speed of 10 and a max speed of 12 - * controller.SetTarget(targetPoint, 10, 12); - * - * // Calculate how much to move during this frame - * // This information is based on movement commands from earlier frames - * // as local avoidance is calculated globally at regular intervals by the RVOSimulator component - * var delta = controller.CalculateMovementDelta(transform.position, Time.deltaTime); - * transform.position = transform.position + delta; - * } - * \endcode - * - * For documentation of many of the variables of this class: refer to the Pathfinding.RVO.IAgent interface. - * - * \note Requires a single RVOSimulator component in the scene - * - * \see Pathfinding.RVO.IAgent - * \see RVOSimulator - * \see \ref local-avoidance - * - * \astarpro - */ - [AddComponentMenu("Pathfinding/Local Avoidance/RVO Controller")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_r_v_o_1_1_r_v_o_controller.php")] - public class RVOController : VersionedMonoBehaviour { - /** Radius of the agent in world units */ - [Tooltip("Radius of the agent")] - public float radius = 0.5f; - - /** Height of the agent in world units */ - [Tooltip("Height of the agent. In world units")] - public float height = 2; - - /** A locked unit cannot move. Other units will still avoid it but avoidance quality is not the best. */ - [Tooltip("A locked unit cannot move. Other units will still avoid it. But avoidance quality is not the best")] - public bool locked; - - /** Automatically set #locked to true when desired velocity is approximately zero. - * This prevents other units from pushing them away when they are supposed to e.g block a choke point. - * - * When this is true every call to #SetTarget or #Move will set the #locked field to true if the desired velocity - * was non-zero or false if it was zero. - */ - [Tooltip("Automatically set #locked to true when desired velocity is approximately zero")] - public bool lockWhenNotMoving = false; - - /** How far into the future to look for collisions with other agents (in seconds) */ - [Tooltip("How far into the future to look for collisions with other agents (in seconds)")] - public float agentTimeHorizon = 2; - - /** How far into the future to look for collisions with obstacles (in seconds) */ - [Tooltip("How far into the future to look for collisions with obstacles (in seconds)")] - public float obstacleTimeHorizon = 2; - - /** Max number of other agents to take into account. - * Decreasing this value can lead to better performance, increasing it can lead to better quality of the simulation. - */ - [Tooltip("Max number of other agents to take into account.\n" + - "A smaller value can reduce CPU load, a higher value can lead to better local avoidance quality.")] - public int maxNeighbours = 10; - - /** Specifies the avoidance layer for this agent. - * The #collidesWith mask on other agents will determine if they will avoid this agent. - */ - public RVOLayer layer = RVOLayer.DefaultAgent; - - /** Layer mask specifying which layers this agent will avoid. - * You can set it as CollidesWith = RVOLayer.DefaultAgent | RVOLayer.Layer3 | RVOLayer.Layer6 ... - * - * This can be very useful in games which have multiple teams of some sort. For example you usually - * want the agents in one team to avoid each other, but you do not want them to avoid the enemies. - * - * This field only affects which other agents that this agent will avoid, it does not affect how other agents - * react to this agent. - * - * \see http://en.wikipedia.org/wiki/Mask_(computing) - */ - [Pathfinding.EnumFlag] - public RVOLayer collidesWith = (RVOLayer)(-1); - - /** An extra force to avoid walls. - * This can be good way to reduce "wall hugging" behaviour. - * - * \deprecated This feature is currently disabled as it didn't work that well and was tricky to support after some changes to the RVO system. It may be enabled again in a future version. - */ - [HideInInspector] - [System.Obsolete] - public float wallAvoidForce = 1; - - /** How much the wallAvoidForce decreases with distance. - * The strenght of avoidance is: - * \code str = 1/dist*wallAvoidFalloff \endcode - * - * \see wallAvoidForce - * - * \deprecated This feature is currently disabled as it didn't work that well and was tricky to support after some changes to the RVO system. It may be enabled again in a future version. - */ - [HideInInspector] - [System.Obsolete] - public float wallAvoidFalloff = 1; - - /** \copydoc Pathfinding::RVO::IAgent::Priority */ - [Tooltip("How strongly other agents will avoid this agent")] - [UnityEngine.Range(0, 1)] - public float priority = 0.5f; - - /** Center of the agent relative to the pivot point of this game object */ - [Tooltip("Center of the agent relative to the pivot point of this game object")] - public float center = 1f; - - /** \details \deprecated */ - [System.Obsolete("This field is obsolete in version 4.0 and will not affect anything. Use the LegacyRVOController if you need the old behaviour")] - public LayerMask mask { get { return 0; } set {} } - - /** \details \deprecated */ - [System.Obsolete("This field is obsolete in version 4.0 and will not affect anything. Use the LegacyRVOController if you need the old behaviour")] - public bool enableRotation { get { return false; } set {} } - - /** \details \deprecated */ - [System.Obsolete("This field is obsolete in version 4.0 and will not affect anything. Use the LegacyRVOController if you need the old behaviour")] - public float rotationSpeed { get { return 0; } set {} } - - /** \details \deprecated */ - [System.Obsolete("This field is obsolete in version 4.0 and will not affect anything. Use the LegacyRVOController if you need the old behaviour")] - public float maxSpeed { get { return 0; } set {} } - - /** Determines if the XY (2D) or XZ (3D) plane is used for movement */ - public MovementPlane movementPlane { - get { - if (simulator != null) return simulator.movementPlane; - else if (RVOSimulator.active) return RVOSimulator.active.movementPlane; - else return MovementPlane.XZ; - } - } - - /** Reference to the internal agent */ - public IAgent rvoAgent { get; private set; } - - /** Reference to the rvo simulator */ - public Simulator simulator { get; private set; } - - /** Cached tranform component */ - protected Transform tr; - - /** Cached reference to a movement script (if one is used) */ - protected IAstarAI ai; - - /** Enables drawing debug information in the scene view */ - public bool debug; - - /** Current position of the agent. - * Note that this is only updated every local avoidance simulation step, not every frame. - */ - public Vector3 position { - get { - return To3D(rvoAgent.Position, rvoAgent.ElevationCoordinate); - } - } - - /** Current calculated velocity of the agent. - * This is not necessarily the velocity the agent is actually moving with - * (that is up to the movement script to decide) but it is the velocity - * that the RVO system has calculated is best for avoiding obstacles and - * reaching the target. - * - * \see CalculateMovementDelta - * - * You can also set the velocity of the agent. This will override the local avoidance input completely. - * It is useful if you have a player controlled character and want other agents to avoid it. - * - * Setting the velocity using this property will mark the agent as being externally controlled for 1 simulation step. - * Local avoidance calculations will be skipped for the next simulation step but will be resumed - * after that unless this property is set again. - * - * Note that if you set the velocity the value that can be read from this property will not change until - * the next simulation step. - * - * \see \link Pathfinding::RVO::IAgent::ForceSetVelocity IAgent.ForceSetVelocity\endlink - * \see \ref ManualRVOAgent.cs - */ - public Vector3 velocity { - get { - // For best accuracy and to allow other code to do things like Move(agent.velocity * Time.deltaTime) - // the code bases the velocity on how far the agent should move during this frame. - // Unless the game is paused (timescale is zero) then just use a very small dt. - var dt = Time.deltaTime > 0.0001f ? Time.deltaTime : 0.02f; - return CalculateMovementDelta(dt) / dt; - } - set { - rvoAgent.ForceSetVelocity(To2D(value)); - } - } - - /** Direction and distance to move in a single frame to avoid obstacles. - * \param deltaTime How far to move [seconds]. - * Usually set to Time.deltaTime. - */ - public Vector3 CalculateMovementDelta (float deltaTime) { - if (rvoAgent == null) return Vector3.zero; - return To3D(Vector2.ClampMagnitude(rvoAgent.CalculatedTargetPoint - To2D(ai != null ? ai.position : tr.position), rvoAgent.CalculatedSpeed * deltaTime), 0); - } - - /** Direction and distance to move in a single frame to avoid obstacles. - * \param position Position of the agent. - * \param deltaTime How far to move [seconds]. - * Usually set to Time.deltaTime. - */ - public Vector3 CalculateMovementDelta (Vector3 position, float deltaTime) { - return To3D(Vector2.ClampMagnitude(rvoAgent.CalculatedTargetPoint - To2D(position), rvoAgent.CalculatedSpeed * deltaTime), 0); - } - - /** \copydoc Pathfinding::RVO::IAgent::SetCollisionNormal */ - public void SetCollisionNormal (Vector3 normal) { - rvoAgent.SetCollisionNormal(To2D(normal)); - } - - /** \copydoc Pathfinding::RVO::IAgent::ForceSetVelocity. - * \deprecated Set the #velocity property instead - */ - [System.Obsolete("Set the 'velocity' property instead")] - public void ForceSetVelocity (Vector3 velocity) { - this.velocity = velocity; - } - - /** Converts a 3D vector to a 2D vector in the movement plane. - * If movementPlane is XZ it will be projected onto the XZ plane - * otherwise it will be projected onto the XY plane. - */ - public Vector2 To2D (Vector3 p) { - float dummy; - - return To2D(p, out dummy); - } - - /** Converts a 3D vector to a 2D vector in the movement plane. - * If movementPlane is XZ it will be projected onto the XZ plane - * and the elevation coordinate will be the Y coordinate - * otherwise it will be projected onto the XY plane and elevation - * will be the Z coordinate. - */ - public Vector2 To2D (Vector3 p, out float elevation) { - if (movementPlane == MovementPlane.XY) { - elevation = -p.z; - return new Vector2(p.x, p.y); - } else { - elevation = p.y; - return new Vector2(p.x, p.z); - } - } - - /** Converts a 2D vector in the movement plane as well as an elevation to a 3D coordinate. - * \see To2D - * \see movementPlane - */ - public Vector3 To3D (Vector2 p, float elevationCoordinate) { - if (movementPlane == MovementPlane.XY) { - return new Vector3(p.x, p.y, -elevationCoordinate); - } else { - return new Vector3(p.x, elevationCoordinate, p.y); - } - } - - void OnDisable () { - if (simulator == null) return; - - // Remove the agent from the simulation but keep the reference - // this component might get enabled and then we can simply - // add it to the simulation again - simulator.RemoveAgent(rvoAgent); - } - - void OnEnable () { - tr = transform; - ai = GetComponent(); - - if (RVOSimulator.active == null) { - Debug.LogError("No RVOSimulator component found in the scene. Please add one."); - enabled = false; - } else { - simulator = RVOSimulator.active.GetSimulator(); - - // We might already have an rvoAgent instance which was disabled previously - // if so, we can simply add it to the simulation again - if (rvoAgent != null) { - simulator.AddAgent(rvoAgent); - } else { - rvoAgent = simulator.AddAgent(Vector2.zero, 0); - rvoAgent.PreCalculationCallback = UpdateAgentProperties; - } - } - } - - protected void UpdateAgentProperties () { - rvoAgent.Radius = Mathf.Max(0.001f, radius); - rvoAgent.AgentTimeHorizon = agentTimeHorizon; - rvoAgent.ObstacleTimeHorizon = obstacleTimeHorizon; - rvoAgent.Locked = locked; - rvoAgent.MaxNeighbours = maxNeighbours; - rvoAgent.DebugDraw = debug; - rvoAgent.Layer = layer; - rvoAgent.CollidesWith = collidesWith; - rvoAgent.Priority = priority; - - float elevation; - // Use the position from the movement script if one is attached - // as the movement script's position may not be the same as the transform's position - // (in particular if IAstarAI.updatePosition is false). - rvoAgent.Position = To2D(ai != null ? ai.position : tr.position, out elevation); - - if (movementPlane == MovementPlane.XZ) { - rvoAgent.Height = height; - rvoAgent.ElevationCoordinate = elevation + center - 0.5f * height; - } else { - rvoAgent.Height = 1; - rvoAgent.ElevationCoordinate = 0; - } - } - - /** Set the target point for the agent to move towards. - * Similar to the #Move method but this is more flexible. - * It is also better to use near the end of the path as when using the Move - * method the agent does not know where to stop, so it may overshoot the target. - * When using this method the agent will not overshoot the target. - * The agent will assume that it will stop when it reaches the target so make sure that - * you don't place the point too close to the agent if you actually just want to move in a - * particular direction. - * - * The target point is assumed to stay the same until something else is requested (as opposed to being reset every frame). - * - * \param pos Point in world space to move towards. - * \param speed Desired speed in world units per second. - * \param maxSpeed Maximum speed in world units per second. - * The agent will use this speed if it is necessary to avoid collisions with other agents. - * Should be at least as high as speed, but it is recommended to use a slightly higher value than speed (for example speed*1.2). - * - * \see Also take a look at the documentation for #IAgent.SetTarget which has a few more details. - * \see #Move - */ - public void SetTarget (Vector3 pos, float speed, float maxSpeed) { - if (simulator == null) return; - - rvoAgent.SetTarget(To2D(pos), speed, maxSpeed); - - if (lockWhenNotMoving) { - locked = speed < 0.001f; - } - } - - /** Set the desired velocity for the agent. - * Note that this is a velocity (units/second), not a movement delta (units/frame). - * - * This is assumed to stay the same until something else is requested (as opposed to being reset every frame). - * - * \note In most cases the SetTarget method is better to use. - * What this will actually do is call SetTarget with (position + velocity). - * See the note in the documentation for IAgent.SetTarget about the potential - * issues that this can cause (in particular that it might be hard to get the agent - * to stop at a precise point). - * - * \see #SetTarget - */ - public void Move (Vector3 vel) { - if (simulator == null) return; - - var velocity2D = To2D(vel); - var speed = velocity2D.magnitude; - - rvoAgent.SetTarget(To2D(ai != null ? ai.position : tr.position) + velocity2D, speed, speed); - - if (lockWhenNotMoving) { - locked = speed < 0.001f; - } - } - - /** Teleport the agent to a new position. - * \deprecated Use transform.position instead, the RVOController can now handle that without any issues. - */ - [System.Obsolete("Use transform.position instead, the RVOController can now handle that without any issues.")] - public void Teleport (Vector3 pos) { - tr.position = pos; - } - - private static readonly Color GizmoColor = new Color(240/255f, 213/255f, 30/255f); - - void OnDrawGizmos () { - var color = GizmoColor * (locked ? 0.5f : 1.0f); - - var pos = ai != null ? ai.position : transform.position; - - if (movementPlane == MovementPlane.XY) { - Draw.Gizmos.Cylinder(pos, Vector3.forward, 0, radius, color); - } else { - Draw.Gizmos.Cylinder(pos + To3D(Vector2.zero, center - height * 0.5f), To3D(Vector2.zero, 1), height, radius, color); - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOController.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOController.cs.meta deleted file mode 100644 index 4e7e7917fb72c5e509c7be4e126e1cb1f22fd6e3..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOController.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 560112f876f5746c780eca0d404e7139 -timeCreated: 1490876162 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: -200 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVONavmesh.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVONavmesh.cs deleted file mode 100644 index d1c0d6ebed56892bc7374fb0fed65daa47f08fe6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVONavmesh.cs +++ /dev/null @@ -1,104 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Vector3 = UnityEngine.Vector3; -#if UNITY_5_5_OR_NEWER -using UnityEngine.Profiling; -#endif - -namespace Pathfinding.RVO { - using Pathfinding.Util; - - /** Adds a navmesh as RVO obstacles. - * Add this to a scene in which has a navmesh or grid based graph, when scanning (or loading from cache) the graph - * it will be added as RVO obstacles to the RVOSimulator (which must exist in the scene). - * - * \warning You should only have a single instance of this script in the scene, otherwise it will add duplicate - * obstacles and thereby increasing the CPU usage. - * - * If you update a graph during runtime the obstacles need to be recalculated which has a performance penalty. - * This can be quite significant for larger graphs. - * - * In the screenshot the generated obstacles are visible in red. - * \shadowimage{rvo/rvo_navmesh_obstacle.png} - * - * \astarpro - */ - [AddComponentMenu("Pathfinding/Local Avoidance/RVO Navmesh")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_r_v_o_1_1_r_v_o_navmesh.php")] - public class RVONavmesh : GraphModifier { - /** Height of the walls added for each obstacle edge. - * If a graph contains overlapping regions (e.g multiple floor in a building) - * you should set this low enough so that edges on different levels do not interfere, - * but high enough so that agents cannot move over them by mistake. - */ - public float wallHeight = 5; - - /** Obstacles currently added to the simulator */ - readonly List obstacles = new List(); - - /** Last simulator used */ - Simulator lastSim; - - public override void OnPostCacheLoad () { - OnLatePostScan(); - } - - public override void OnGraphsPostUpdate () { - OnLatePostScan(); - } - - public override void OnLatePostScan () { - if (!Application.isPlaying) return; - - Profiler.BeginSample("Update RVO Obstacles From Graphs"); - RemoveObstacles(); - NavGraph[] graphs = PathFindHelper.graphs; - RVOSimulator rvosim = RVOSimulator.active; - if (rvosim == null) throw new System.NullReferenceException("No RVOSimulator could be found in the scene. Please add one to any GameObject"); - - // Remember which simulator these obstacles were added to - lastSim = rvosim.GetSimulator(); - - for (int i = 0; i < graphs.Length; i++) { - RecastGraph recast = graphs[i] as RecastGraph; - INavmesh navmesh = graphs[i] as INavmesh; - if (recast != null) { - foreach (var tile in recast.GetTiles()) { - AddGraphObstacles(lastSim, tile); - } - } else if (navmesh != null) - { - AddGraphObstacles(lastSim, navmesh); - } - } - Profiler.EndSample(); - } - - protected override void OnDisable () { - base.OnDisable(); - RemoveObstacles(); - } - - /** Removes all obstacles which have been added by this component */ - public void RemoveObstacles () { - if (lastSim != null) { - for (int i = 0; i < obstacles.Count; i++) lastSim.RemoveObstacle(obstacles[i]); - lastSim = null; - } - - obstacles.Clear(); - } - - /** Adds obstacles for a navmesh/recast graph */ - void AddGraphObstacles (Pathfinding.RVO.Simulator simulator, INavmesh navmesh) { - GraphUtilities.GetContours(navmesh, (vertices, cycle) => { - var verticesV3 = new Vector3[vertices.Count]; - for (int i = 0; i < verticesV3.Length; i++) verticesV3[i] = (Vector3)vertices[i]; - // Pool the 'vertices' list to reduce allocations - ListPool.Release(vertices); - obstacles.Add(simulator.AddObstacle(verticesV3, wallHeight, cycle)); - }); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVONavmesh.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVONavmesh.cs.meta deleted file mode 100644 index 76deb4129efb2efc52647288144fbd4719c169eb..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVONavmesh.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 52e10183f1ec74d27ba5e19d5a2242c0 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOObstacle.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOObstacle.cs deleted file mode 100644 index e8bec26a59d8257a0cfba4fd3999571c2734c558..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOObstacle.cs +++ /dev/null @@ -1,298 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding.RVO { - /** Base class for simple RVO colliders. - * - * This is a helper base class for RVO colliders. It provides automatic gizmos - * and helps with the winding order of the vertices as well as automatically updating the obstacle when moved. - * - * Extend this class to create custom RVO obstacles. - * - * \see writing-rvo-colliders - * \see RVOSquareObstacle - * - * \astarpro - */ - public abstract class RVOObstacle : VersionedMonoBehaviour { - /** Mode of the obstacle. - * Determines winding order of the vertices */ - public ObstacleVertexWinding obstacleMode; - - public RVOLayer layer = RVOLayer.DefaultObstacle; - - /** RVO Obstacle Modes. - * Determines winding order of obstacle vertices */ - public enum ObstacleVertexWinding { - /** Keeps agents from entering the obstacle */ - KeepOut, - /** Keeps agents inside the obstacle */ - KeepIn, - } - - /** Reference to simulator */ - protected Pathfinding.RVO.Simulator sim; - - /** All obstacles added */ - private List addedObstacles; - - /** Original vertices for the obstacles */ - private List sourceObstacles; - - /** Create Obstacles. - * Override this and add logic for creating obstacles. - * You should not use the simulator's function calls directly. - * - * \see AddObstacle - */ - protected abstract void CreateObstacles (); - - /** Enable executing in editor to draw gizmos. - * If enabled, the CreateObstacles function will be executed in the editor as well - * in order to draw gizmos. - */ - protected abstract bool ExecuteInEditor { get; } - - /** If enabled, all coordinates are handled as local. - */ - protected abstract bool LocalCoordinates { get; } - - /** Static or dynamic. - * This determines if the obstacle can be updated by e.g moving the transform - * around in the scene. - */ - protected abstract bool StaticObstacle { get; } - - protected abstract float Height { get; } - /** Called in the editor. - * This function should return true if any variables which can change the shape or position of the obstacle - * has changed since the last call to this function. Take a look at the RVOSquareObstacle for an example. - */ - protected abstract bool AreGizmosDirty (); - - /** Enabled if currently in OnDrawGizmos */ - private bool gizmoDrawing = false; - - /** Vertices for gizmos */ - private List gizmoVerts; - - /** Last obstacle mode. - * Used to check if the gizmos should be updated - */ - private ObstacleVertexWinding _obstacleMode; - - /** Last matrix the obstacle was updated with. - * Used to check if the obstacle should be updated */ - private Matrix4x4 prevUpdateMatrix; - - /** Draws Gizmos */ - public void OnDrawGizmos () { - OnDrawGizmos(false); - } - - /** Draws Gizmos */ - public void OnDrawGizmosSelected () { - OnDrawGizmos(true); - } - - /** Draws Gizmos */ - public void OnDrawGizmos (bool selected) { - gizmoDrawing = true; - - Gizmos.color = new Color(0.615f, 1, 0.06f, selected ? 1.0f : 0.7f); - var movementPlane = RVOSimulator.active != null ? RVOSimulator.active.movementPlane : MovementPlane.XZ; - var up = movementPlane == MovementPlane.XZ ? Vector3.up : -Vector3.forward; - - if (gizmoVerts == null || AreGizmosDirty() || _obstacleMode != obstacleMode) { - _obstacleMode = obstacleMode; - - if (gizmoVerts == null) gizmoVerts = new List(); - else gizmoVerts.Clear(); - - CreateObstacles(); - } - - Matrix4x4 m = GetMatrix(); - - for (int i = 0; i < gizmoVerts.Count; i++) { - Vector3[] verts = gizmoVerts[i]; - for (int j = 0, q = verts.Length-1; j < verts.Length; q = j++) { - Gizmos.DrawLine(m.MultiplyPoint3x4(verts[j]), m.MultiplyPoint3x4(verts[q])); - } - - if (selected) { - for (int j = 0, q = verts.Length-1; j < verts.Length; q = j++) { - Vector3 a = m.MultiplyPoint3x4(verts[q]); - Vector3 b = m.MultiplyPoint3x4(verts[j]); - - if (movementPlane != MovementPlane.XY) { - Gizmos.DrawLine(a + up*Height, b + up*Height); - Gizmos.DrawLine(a, a + up*Height); - } - - Vector3 avg = (a + b) * 0.5f; - Vector3 tang = (b - a).normalized; - if (tang == Vector3.zero) continue; - - Vector3 normal = Vector3.Cross(up, tang); - - Gizmos.DrawLine(avg, avg+normal); - Gizmos.DrawLine(avg+normal, avg+normal*0.5f+tang*0.5f); - Gizmos.DrawLine(avg+normal, avg+normal*0.5f-tang*0.5f); - } - } - } - - gizmoDrawing = false; - } - - /** Get's the matrix to use for vertices. - * Can be overriden for custom matrices. - * \returns transform.localToWorldMatrix if LocalCoordinates is true, otherwise Matrix4x4.identity - */ - protected virtual Matrix4x4 GetMatrix () { - return LocalCoordinates ? transform.localToWorldMatrix : Matrix4x4.identity; - } - - /** Disables the obstacle. - * Do not override this function - */ - public void OnDisable () { - if (addedObstacles != null) { - if (sim == null) throw new System.Exception("This should not happen! Make sure you are not overriding the OnEnable function"); - - for (int i = 0; i < addedObstacles.Count; i++) { - sim.RemoveObstacle(addedObstacles[i]); - } - } - } - - /** Enabled the obstacle. - * Do not override this function - */ - public void OnEnable () { - if (addedObstacles != null) { - if (sim == null) throw new System.Exception("This should not happen! Make sure you are not overriding the OnDisable function"); - - for (int i = 0; i < addedObstacles.Count; i++) { - // Update height and layer - var vertex = addedObstacles[i]; - var start = vertex; - do { - vertex.layer = layer; - vertex = vertex.next; - } while (vertex != start); - - sim.AddObstacle(addedObstacles[i]); - } - } - } - - /** Creates obstacles */ - public void Start () { - addedObstacles = new List(); - sourceObstacles = new List(); - prevUpdateMatrix = GetMatrix(); - CreateObstacles(); - } - - /** Updates obstacle if required. - * Checks for if the obstacle should be updated (e.g if it has moved) */ - public void Update () { - Matrix4x4 m = GetMatrix(); - - if (m != prevUpdateMatrix) { - for (int i = 0; i < addedObstacles.Count; i++) { - sim.UpdateObstacle(addedObstacles[i], sourceObstacles[i], m); - } - prevUpdateMatrix = m; - } - } - - - /** Finds a simulator in the scene. - * - * Saves found simulator in #sim. - * - * \throws System.InvalidOperationException When no RVOSimulator could be found. - */ - protected void FindSimulator () { - if (RVOSimulator.active == null) throw new System.InvalidOperationException("No RVOSimulator could be found in the scene. Please add one to any GameObject"); - sim = RVOSimulator.active.GetSimulator(); - } - - /** Adds an obstacle with the specified vertices. - * The vertices array might be changed by this function. */ - protected void AddObstacle (Vector3[] vertices, float height) { - if (vertices == null) throw new System.ArgumentNullException("Vertices Must Not Be Null"); - if (height < 0) throw new System.ArgumentOutOfRangeException("Height must be non-negative"); - if (vertices.Length < 2) throw new System.ArgumentException("An obstacle must have at least two vertices"); - if (sim == null) FindSimulator(); - - if (gizmoDrawing) { - var v = new Vector3[vertices.Length]; - WindCorrectly(vertices); - System.Array.Copy(vertices, v, vertices.Length); - gizmoVerts.Add(v); - return; - } - - - if (vertices.Length == 2) { - AddObstacleInternal(vertices, height); - return; - } - - WindCorrectly(vertices); - AddObstacleInternal(vertices, height); - } - - /** Adds an obstacle. - * Winding is assumed to be correct and very little error checking is done. - */ - private void AddObstacleInternal (Vector3[] vertices, float height) { - addedObstacles.Add(sim.AddObstacle(vertices, height, GetMatrix(), layer)); - sourceObstacles.Add(vertices); - } - - /** Winds the vertices correctly. - * Winding order is determined from #obstacleMode. - */ - private void WindCorrectly (Vector3[] vertices) { - int leftmost = 0; - float leftmostX = float.PositiveInfinity; - - var matrix = GetMatrix(); - - for (int i = 0; i < vertices.Length; i++) { - var x = matrix.MultiplyPoint3x4(vertices[i]).x; - if (x < leftmostX) { - leftmost = i; - leftmostX = x; - } - } - - var p1 = matrix.MultiplyPoint3x4(vertices[(leftmost-1 + vertices.Length) % vertices.Length]); - var p2 = matrix.MultiplyPoint3x4(vertices[leftmost]); - var p3 = matrix.MultiplyPoint3x4(vertices[(leftmost+1) % vertices.Length]); - - MovementPlane movementPlane; - if (sim != null) movementPlane = sim.movementPlane; - else if (RVOSimulator.active) movementPlane = RVOSimulator.active.movementPlane; - else movementPlane = MovementPlane.XZ; - - if (movementPlane == MovementPlane.XY) { - p1.z = p1.y; - p2.z = p2.y; - p3.z = p3.y; - } - - if (VectorMath.IsClockwiseXZ(p1, p2, p3) != (obstacleMode == ObstacleVertexWinding.KeepIn)) { - System.Array.Reverse(vertices); - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOObstacle.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOObstacle.cs.meta deleted file mode 100644 index 57af4076163ab46be9b03d445779895dbca98b7e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOObstacle.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b5c46b71c11fa41a08c1d9b79aabd500 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSimulator.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSimulator.cs deleted file mode 100644 index d26fff26a0c1f677f47e42bb5ad0c5377aa6eef8..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSimulator.cs +++ /dev/null @@ -1,190 +0,0 @@ -using PF; -using UnityEngine; -using Vector3 = UnityEngine.Vector3; -#if UNITY_5_5_OR_NEWER -using UnityEngine.Profiling; -#endif - -namespace Pathfinding.RVO { - using Pathfinding.Util; - - /** Unity front end for an RVO simulator. - * Attached to any GameObject in a scene, scripts such as the RVOController will use the - * simulator exposed by this class to handle their movement. - * In pretty much all cases you should only have a single RVOSimulator in the scene. - * - * You can have more than one of these, however most scripts which make use of the RVOSimulator - * will use the #active property which just returns the first simulator in the scene. - * - * This is only a wrapper class for a Pathfinding.RVO.Simulator which simplifies exposing it - * for a unity scene. - * - * \see Pathfinding.RVO.Simulator - * \see \ref local-avoidance - * - * \astarpro - */ - [ExecuteInEditMode] - [AddComponentMenu("Pathfinding/Local Avoidance/RVO Simulator")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_r_v_o_1_1_r_v_o_simulator.php")] - public class RVOSimulator : VersionedMonoBehaviour { - /** First RVOSimulator in the scene (usually there is only one) */ - public static RVOSimulator active { get; private set; } - - /** Desired FPS for rvo simulation. - * It is usually not necessary to run a crowd simulation at a very high fps. - * Usually 10-30 fps is enough, but it can be increased for better quality. - * The rvo simulation will never run at a higher fps than the game - */ - [Tooltip("Desired FPS for rvo simulation. It is usually not necessary to run a crowd simulation at a very high fps.\n" + - "Usually 10-30 fps is enough, but can be increased for better quality.\n"+ - "The rvo simulation will never run at a higher fps than the game")] - public int desiredSimulationFPS = 20; - - /** Number of RVO worker threads. - * If set to None, no multithreading will be used. - * Using multithreading can significantly improve performance by offloading work to other CPU cores. - */ - [Tooltip("Number of RVO worker threads. If set to None, no multithreading will be used.")] - public ThreadCount workerThreads = ThreadCount.Two; - - /** Calculate local avoidance in between frames. - * If this is enabled and multithreading is used, the local avoidance calculations will continue to run - * until the next frame instead of waiting for them to be done the same frame. This can increase the performance - * but it can make the agents seem a little less responsive. - * - * This will only be read at Awake. - * \see Pathfinding.RVO.Simulator.DoubleBuffering - */ - [Tooltip("Calculate local avoidance in between frames.\nThis can increase jitter in the agents' movement so use it only if you really need the performance boost. " + - "It will also reduce the responsiveness of the agents to the commands you send to them.")] - public bool doubleBuffering; - - /** \copydoc Pathfinding::RVO::Simulator::symmetryBreakingBias */ - [Tooltip("Bias agents to pass each other on the right side.\n" + - "If the desired velocity of an agent puts it on a collision course with another agent or an obstacle " + - "its desired velocity will be rotated this number of radians (1 radian is approximately 57°) to the right. " + - "This helps to break up symmetries and makes it possible to resolve some situations much faster.\n\n" + - "When many agents have the same goal this can however have the side effect that the group " + - "clustered around the target point may as a whole start to spin around the target point.")] - [Range(0, 0.2f)] - public float symmetryBreakingBias = 0.1f; - - /** Determines if the XY (2D) or XZ (3D) plane is used for movement. - * For 2D games you would set this to XY and for 3D games you would usually set it to XZ. - */ - [Tooltip("Determines if the XY (2D) or XZ (3D) plane is used for movement")] - public MovementPlane movementPlane = MovementPlane.XZ; - - /** Draw obstacle gizmos to aid with debugging. - * - * In the screenshot the obstacles are visible in red. - * \shadowimage{rvo/rvo_navmesh_obstacle.png} - */ - public bool drawObstacles; - - /** Reference to the internal simulator */ - Pathfinding.RVO.Simulator simulator; - - /** Get the internal simulator. - * Will never be null when the game is running - */ - public Simulator GetSimulator () { - if (simulator == null) { - Awake(); - } - return simulator; - } - - void OnEnable () { - active = this; - } - - protected override void Awake () { - base.Awake(); - if (simulator == null && Application.isPlaying) { - int threadCount = AstarPath.CalculateThreadCount(workerThreads); - simulator = new Pathfinding.RVO.Simulator(threadCount, doubleBuffering, movementPlane); - } - } - - /** Update the simulation */ - void Update () { - if (!Application.isPlaying) return; - - if (desiredSimulationFPS < 1) desiredSimulationFPS = 1; - - var sim = GetSimulator(); - sim.DesiredDeltaTime = 1.0f / desiredSimulationFPS; - sim.symmetryBreakingBias = symmetryBreakingBias; - sim.Update(); - } - - void OnDestroy () { - active = null; - if (simulator != null) simulator.OnDestroy(); - } - -#if UNITY_EDITOR - [System.NonSerialized] - RetainedGizmos gizmos = new RetainedGizmos(); - - static Color ObstacleColor = new Color(255/255f, 60/255f, 15/255f, 1.0f); - void OnDrawGizmos () { - // Prevent interfering with scene view picking - if (Event.current.type != EventType.Repaint) return; - - if (drawObstacles && simulator != null && simulator.obstacles != null) { - var hasher = new RetainedGizmos.Hasher(); - var obstacles = simulator.obstacles; - int numEdges = 0; - for (int i = 0; i < obstacles.Count; i++) { - var vertex = obstacles[i]; - do { - hasher.AddHash(vertex.position.GetHashCode() ^ vertex.height.GetHashCode()); - numEdges++; - vertex = vertex.next; - } while (vertex != obstacles[i] && vertex != null); - } - - if (!gizmos.Draw(hasher)) { - Profiler.BeginSample("Rebuild RVO Obstacle Gizmos"); - using (var helper = gizmos.GetGizmoHelper(hasher)) { - var up = movementPlane == MovementPlane.XY ? Vector3.back : Vector3.up; - var vertices = new Vector3[numEdges*6]; - var colors = new Color[numEdges*6]; - int edgeIndex = 0; - for (int i = 0; i < obstacles.Count; i++) { - var start = obstacles[i]; - var c = start; - do { - vertices[edgeIndex*6 + 0] = c.position; - vertices[edgeIndex*6 + 1] = c.next.position; - vertices[edgeIndex*6 + 2] = c.next.position + up*c.next.height; - vertices[edgeIndex*6 + 3] = c.position; - vertices[edgeIndex*6 + 4] = c.next.position + up*c.next.height; - vertices[edgeIndex*6 + 5] = c.position + up*c.height; - edgeIndex++; - c = c.next; - } while (c != start && c != null && c.next != null); - } - - for (int i = 0; i < colors.Length; i++) { - colors[i] = ObstacleColor; - } - - helper.DrawTriangles(vertices, colors, numEdges * 2); - } - Profiler.EndSample(); - } - - gizmos.FinalizeDraw(); - } - } - - void OnDisable () { - gizmos.ClearCache(); - } -#endif - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSimulator.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSimulator.cs.meta deleted file mode 100644 index e0ed733a5126247e95e0f2973a62b78cee77d932..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSimulator.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1764de1de43cc4d19af52679d3eaae06 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: -201 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSquareObstacle.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSquareObstacle.cs deleted file mode 100644 index 994e5383dde68732f16f64ea31971320c0426171..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSquareObstacle.cs +++ /dev/null @@ -1,59 +0,0 @@ -using UnityEngine; - -namespace Pathfinding.RVO { - /** - * Square Obstacle for RVO Simulation. - * - * \astarpro - */ - [AddComponentMenu("Pathfinding/Local Avoidance/Square Obstacle")] - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_r_v_o_1_1_r_v_o_square_obstacle.php")] - public class RVOSquareObstacle : RVOObstacle { - /** Height of the obstacle */ - public float height = 1; - - /** Size of the square */ - public Vector2 size = Vector3.one; - - /** Center of the square */ - public Vector2 center = Vector3.zero; - - protected override bool StaticObstacle { get { return false; } } - protected override bool ExecuteInEditor { get { return true; } } - protected override bool LocalCoordinates { get { return true; } } - protected override float Height { get { return height; } } - - //If UNITY_EDITOR to save a few bytes, these are only needed in the editor - #if UNITY_EDITOR - private Vector2 _size; - private Vector2 _center; - private float _height; - #endif - - protected override bool AreGizmosDirty () { - #if UNITY_EDITOR - bool ret = _size != size || _height != height || _center != center; - _size = size; - _center = center; - _height = height; - return ret; - #else - return false; - #endif - } - - protected override void CreateObstacles () { - size.x = Mathf.Abs(size.x); - size.y = Mathf.Abs(size.y); - height = Mathf.Abs(height); - - var verts = new [] { new Vector3(1, 0, -1), new Vector3(1, 0, 1), new Vector3(-1, 0, 1), new Vector3(-1, 0, -1) }; - for (int i = 0; i < verts.Length; i++) { - verts[i].Scale(new Vector3(size.x * 0.5f, 0, size.y * 0.5f)); - verts[i] += new Vector3(center.x, 0, center.y); - } - - AddObstacle(verts, height); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSquareObstacle.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSquareObstacle.cs.meta deleted file mode 100644 index 691ac6048ad97f5900686e4578e17b22af7e7c67..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/RVO/RVOSquareObstacle.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 21ffa94b775f54641bd8c73c930db320 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme.txt b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme.txt deleted file mode 100644 index d0dd9ea7b2d30132949fe6878cf9e312ec7227e9..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme.txt +++ /dev/null @@ -1,24 +0,0 @@ - -========= The A* Pathfinding Project ========= - -The A* Pathfinding Project is an out-of-the-box pathfinding system -which along with ease of use has a large amount of features and blazing fast pathfinding. - -The system has a Free version and a Pro version, both can found on my website (see below) and the Pro version can also be found in the Unity Asset Store - -Documentation for the system can be found at: - http://www.arongranberg.com/astar/docs/ - -A Get Started Guide can be found here: - http://www.arongranberg.com/astar/docs/getstarted.php - -If you have a question you can search for earlier posts in the forum or start a new thread: - http://forum.arongranberg.com - -The A* Pathfinding Project was made by Aron Granberg - http://www.arongranberg.com - -The license is the AssetStore Free License and the AssetStore Commercial License respectively for the Free and Pro versions of the project. - -Using: - DotNetZip - For creating zip files from serialized data (also modified to get rid of System.File calls which are not allowed in the webplayer) diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme.txt.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme.txt.meta deleted file mode 100644 index 1d9ccdf38a122ad48c1ab3587045ce6047f14ef2..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme.txt.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 37e2b7ba5db684426ab22f42ef266b76 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme_upgrading.txt b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme_upgrading.txt deleted file mode 100644 index 91e075feaf5cd7d039e24f75ffde160769d43679..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme_upgrading.txt +++ /dev/null @@ -1,5 +0,0 @@ -If you have upgraded from an older version and you are suddenly seeing compiler errors. -Please read this guide: http://arongranberg.com/astar/docs/upgrading.php - -If you still cannot find a solution search the forum: http://forum.arongranberg.com. -If you cannot find a solution after that, then post a question in the forum. \ No newline at end of file diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme_upgrading.txt.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme_upgrading.txt.meta deleted file mode 100644 index 4e39444de3dcd5e5c3c129efd11e36ede394591b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Readme_upgrading.txt.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 893b17192239c453594fc4d8e250d5e8 diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased.meta deleted file mode 100644 index 6814140d1e7f163e41e5087f0954501ccbe0232d..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: c4fc49753efd20044b5b571f9681d2f1 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/BlockManager.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/BlockManager.cs deleted file mode 100644 index 28638414e37af60a30c5e16b1210f6d861c687cc..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/BlockManager.cs +++ /dev/null @@ -1,164 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; - -namespace Pathfinding { - using Pathfinding.Util; - - /** Manager for blocker scripts such as SingleNodeBlocker. - * - * This is part of the turn based utilities. It can be used for - * any game, but it is primarily intended for turn based games. - * - * \see TurnBasedAI - * \see \ref turnbased - */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_block_manager.php")] - public class BlockManager : VersionedMonoBehaviour { - /** Contains info on which SingleNodeBlocker objects have blocked a particular node */ - Dictionary > blocked = new Dictionary >(); - - public enum BlockMode { - /** All blockers except those in the TraversalProvider.selector list will block */ - AllExceptSelector, - /** Only elements in the TraversalProvider.selector list will block */ - OnlySelector - } - - /** Blocks nodes according to a BlockManager */ - public class TraversalProvider : ITraversalProvider { - /** Holds information about which nodes are occupied */ - readonly BlockManager blockManager; - - /** Affects which nodes are considered blocked */ - public BlockMode mode { get; private set; } - - /** Blockers for this path. - * The effect depends on #mode. - * - * Note that having a large selector has a performance cost. - * - * \see mode - */ - readonly List selector; - - public TraversalProvider (BlockManager blockManager, BlockMode mode, List selector) { - if (blockManager == null) throw new System.ArgumentNullException("blockManager"); - if (selector == null) throw new System.ArgumentNullException("selector"); - - this.blockManager = blockManager; - this.mode = mode; - this.selector = selector; - } - - #region ITraversalProvider implementation - - public bool CanTraverse (Path path, GraphNode node) { - // This first IF is the default implementation that is used when no traversal provider is used - if (!node.Walkable || (path.enabledTags >> (int)node.Tag & 0x1) == 0) { - return false; - } else if (mode == BlockMode.OnlySelector) { - return !blockManager.NodeContainsAnyOf(node, selector); - } else { - // assume mode == BlockMode.AllExceptSelector - return !blockManager.NodeContainsAnyExcept(node, selector); - } - } - - public uint GetTraversalCost (Path path, GraphNode node) { - // Same as default implementation - return path.GetTagPenalty((int)node.Tag) + node.Penalty; - } - - #endregion - } - - void Start () { - if (!AstarPath.active) - throw new System.Exception("No AstarPath object in the scene"); - } - - /** True if the node contains any blocker which is included in the \a selector list */ - public bool NodeContainsAnyOf (GraphNode node, List selector) { - List blockersInNode; - if (!blocked.TryGetValue(node, out blockersInNode)) { - return false; - } - - for (int i = 0; i < blockersInNode.Count; i++) { - var inNode = blockersInNode[i]; - for (int j = 0; j < selector.Count; j++) { - // Need to use ReferenceEquals because this code may be called from a separate thread - // and the equality comparison that Unity provides is not thread safe - if (System.Object.ReferenceEquals(inNode, selector[j])) { - return true; - } - } - } - return false; - } - - /** True if the node contains any blocker which is not included in the \a selector list */ - public bool NodeContainsAnyExcept (GraphNode node, List selector) { - List blockersInNode; - if (!blocked.TryGetValue(node, out blockersInNode)) { - return false; - } - - for (int i = 0; i < blockersInNode.Count; i++) { - var inNode = blockersInNode[i]; - bool found = false; - for (int j = 0; j < selector.Count; j++) { - // Need to use ReferenceEquals because this code may be called from a separate thread - // and the equality comparison that Unity provides is not thread safe - if (System.Object.ReferenceEquals(inNode, selector[j])) { - found = true; - break; - } - } - if (!found) return true; - } - return false; - } - - /** Register \a blocker as being present at the specified node. - * Calling this method multiple times will add multiple instances of the blocker to the node. - * - * \note The node will not be blocked immediately. Instead the pathfinding - * threads will be paused and then the update will be applied. It is however - * guaranteed to be applied before the next path request is started. - */ - public void InternalBlock (GraphNode node, SingleNodeBlocker blocker) { - AstarPath.active.AddWorkItem(new AstarWorkItem(() => { - List blockersInNode; - if (!blocked.TryGetValue(node, out blockersInNode)) { - blockersInNode = blocked[node] = ListPool.Claim(); - } - - blockersInNode.Add(blocker); - })); - } - - /** Remove \a blocker from the specified node. - * Will only remove a single instance, calling this method multiple - * times will remove multiple instances of the blocker from the node. - * - * \note The node will not be unblocked immediately. Instead the pathfinding - * threads will be paused and then the update will be applied. It is however - * guaranteed to be applied before the next path request is started. - */ - public void InternalUnblock (GraphNode node, SingleNodeBlocker blocker) { - AstarPath.active.AddWorkItem(new AstarWorkItem(() => { - List blockersInNode; - if (blocked.TryGetValue(node, out blockersInNode)) { - blockersInNode.Remove(blocker); - - if (blockersInNode.Count == 0) { - blocked.Remove(node); - ListPool.Release(ref blockersInNode); - } - } - })); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/BlockManager.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/BlockManager.cs.meta deleted file mode 100644 index ff85dc998b8f4f3daeb5ce4975ed8646b54b0467..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/BlockManager.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: df8c077ca577944689559bb9e97f9576 -timeCreated: 1453722739 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/SingleNodeBlocker.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/SingleNodeBlocker.cs deleted file mode 100644 index a4b7d4ae930cda575b41209f07fdd6d5be4a4520..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/SingleNodeBlocker.cs +++ /dev/null @@ -1,67 +0,0 @@ -using PF; -using UnityEngine; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - /** Blocks single nodes in a graph. - * - * This is useful in turn based games where you want - * units to avoid all other units while pathfinding - * but not be blocked by itself. - * - * \note This cannot be used together with any movement script - * as the nodes are not blocked in the normal way. - * \see TurnBasedAI for example usage - * - * \see BlockManager - * \see \ref turnbased - */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_single_node_blocker.php")] - public class SingleNodeBlocker : VersionedMonoBehaviour { - public GraphNode lastBlocked { get; private set; } - public BlockManager manager; - - /** Block node closest to the position of this object. - * - * Will unblock the last node that was reserved (if any) - */ - public void BlockAtCurrentPosition () { - BlockAt(transform.position); - } - - /** Block node closest to the specified position. - * - * Will unblock the last node that was reserved (if any) - */ - public void BlockAt (Vector3 position) { - Unblock(); - var node = PathFindHelper.GetNearest(position, NNConstraint.None).node; - if (node != null) { - Block(node); - } - } - - /** Block specified node. - * - * Will unblock the last node that was reserved (if any) - */ - public void Block (GraphNode node) { - if (node == null) - throw new System.ArgumentNullException("node"); - - manager.InternalBlock(node, this); - lastBlocked = node; - } - - /** Unblock the last node that was blocked (if any) */ - public void Unblock () { - if (lastBlocked == null || lastBlocked.Destroyed) { - lastBlocked = null; - return; - } - - manager.InternalUnblock(lastBlocked, this); - lastBlocked = null; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/SingleNodeBlocker.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/SingleNodeBlocker.cs.meta deleted file mode 100644 index bdd19e7d480a76811d20b908257d5265daf5640a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/TurnBased/SingleNodeBlocker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b45e20632f1604fc6bb73e0e79cd7368 -timeCreated: 1451482127 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/UnityHelper.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/UnityHelper.cs deleted file mode 100644 index 5528a3dd79a9ddf57fecaff646378507a8ee32f6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/UnityHelper.cs +++ /dev/null @@ -1,758 +0,0 @@ -using System; -using System.Collections.Generic; -using Pathfinding.Recast; -using Pathfinding.Util; -using Pathfinding.Voxels; -using PF; -using UnityEngine; -using UnityEngine.Profiling; -using Mathf = UnityEngine.Mathf; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding -{ - public static class UnityHelper - { - /** Called for each graph before they are scanned */ - public static OnGraphDelegate OnGraphPreScan; - - /** Called for each graph after they have been scanned. All other graphs might not have been scanned yet. */ - public static OnGraphDelegate OnGraphPostScan; - - - /** Called before starting the scanning */ - public static OnScanDelegate OnPreScan; - - /** Called after scanning. This is called before applying links, flood-filling the graphs and other post processing. */ - public static OnScanDelegate OnPostScan; - - /** Called after scanning has completed fully. This is called as the last thing in the Scan function. */ - public static OnScanDelegate OnLatePostScan; - - /** Called when any graphs are updated. Register to for example recalculate the path whenever a graph changes. */ - public static OnScanDelegate OnGraphsUpdated; - - - public static void Close() - { - OnGraphPreScan = null; - OnGraphPostScan = null; - OnPreScan = null; - OnPostScan = null; - OnLatePostScan = null; - OnGraphsUpdated = null; - } - - public static void OnDrawGizmos (this EuclideanEmbedding embedding) { - if (embedding.pivots != null) { - for (int i = 0; i < embedding.pivots.Length; i++) { - Gizmos.color = new Color(159/255.0f, 94/255.0f, 194/255.0f, 0.8f); - - if (embedding.pivots[i] != null && !embedding.pivots[i].Destroyed) { - Gizmos.DrawCube((Vector3)embedding.pivots[i].position, Vector3.one); - } - } - } - } - - /** Returns the graph which contains the specified node. -* The graph must be in the #graphs array. -* -* \returns Returns the graph which contains the node. Null if the graph wasn't found -*/ - public static NavGraph GetGraph (GraphNode node) { - if (node.Destroyed) - { - return null; - } - if (node == null) return null; - - AstarPath script = AstarPath.active; - if (script == null) return null; - - AstarData data = script.data; - if (data == null || data.graphs == null) return null; - - uint graphIndex = node.GraphIndex; - - if (graphIndex >= data.graphs.Length) { - return null; - } - - return data.graphs[(int)graphIndex]; - } - - - /** Returns a bounds object with the bounding box of a group of tiles. - * The bounding box is defined in world space. - */ - public static Bounds GetTileBounds (this NavmeshBase navmeshBase, IntRect rect) { - return navmeshBase.GetTileBounds(rect.xmin, rect.ymin, rect.Width, rect.Height); - } - - /** Returns a bounds object with the bounding box of a group of tiles. - * The bounding box is defined in world space. - */ - public static Bounds GetTileBounds (this NavmeshBase navmeshBase, int x, int z, int width = 1, int depth = 1) { - return navmeshBase.transform.Transform(navmeshBase.GetTileBoundsInGraphSpace(x, z, width, depth)); - } - - public static Bounds GetTileBoundsInGraphSpace (this NavmeshBase navmeshBase, IntRect rect) { - return navmeshBase.GetTileBoundsInGraphSpace(rect.xmin, rect.ymin, rect.Width, rect.Height); - } - - /** Returns an XZ bounds object with the bounds of a group of tiles in graph space */ - public static Bounds GetTileBoundsInGraphSpace (this NavmeshBase navmeshBase, int x, int z, int width = 1, int depth = 1) { - var b = new Bounds(); - - b.SetMinMax( - new Vector3(x*navmeshBase.TileWorldSizeX, 0, z*navmeshBase.TileWorldSizeZ), - new Vector3((x+width)*navmeshBase.TileWorldSizeX, navmeshBase.forcedBoundsSize.y, (z+depth)*navmeshBase.TileWorldSizeZ) - ); - return b; - } - - public static void OnDrawGizmos (this NavmeshBase navmeshBase, Pathfinding.Util.RetainedGizmos gizmos, bool drawNodes) { - if (!drawNodes) { - return; - } - - using (var helper = gizmos.GetSingleFrameGizmoHelper()) { - var bounds = new Bounds(); - bounds.SetMinMax(Vector3.zero, navmeshBase.forcedBoundsSize); - // Draw a write cube using the latest transform - // (this makes the bounds update immediately if some field is changed in the editor) - helper.builder.DrawWireCube(navmeshBase.CalculateTransform(), bounds, Color.white); - } - - if (navmeshBase.tiles != null) { - // Update navmesh vizualizations for - // the tiles that have been changed - for (int i = 0; i < navmeshBase.tiles.Length; i++) { - // This may happen if an exception has been thrown when the graph was scanned. - // We don't want the gizmo code to start to throw exceptions as well then as - // that would obscure the actual source of the error. - if (navmeshBase.tiles[i] == null) continue; - - // Calculate a hash of the tile - var hasher = new RetainedGizmos.Hasher(AstarPath.active); - hasher.AddHash(navmeshBase.showMeshOutline ? 1 : 0); - hasher.AddHash(navmeshBase.showMeshSurface ? 1 : 0); - hasher.AddHash(navmeshBase.showNodeConnections ? 1 : 0); - - var nodes = navmeshBase.tiles[i].nodes; - for (int j = 0; j < nodes.Length; j++) { - hasher.HashNode(nodes[j]); - } - - if (!gizmos.Draw(hasher)) { - using (var helper = gizmos.GetGizmoHelper(hasher)) { - if (navmeshBase.showMeshSurface || navmeshBase.showMeshOutline) - navmeshBase.CreateNavmeshSurfaceVisualization(navmeshBase.tiles[i], helper); - if (navmeshBase.showMeshSurface || navmeshBase.showMeshOutline) - CreateNavmeshOutlineVisualization(navmeshBase.tiles[i], helper); - - if (navmeshBase.showNodeConnections) { - for (int j = 0; j < nodes.Length; j++) { - helper.DrawConnections(nodes[j]); - } - } - } - } - - gizmos.Draw(hasher); - } - } - - if (AstarPath.active.showUnwalkableNodes) - navmeshBase.DrawUnwalkableNodes(AstarPath.active.unwalkableNodeDebugSize); - } - - /** Creates a mesh of the surfaces of the navmesh for use in OnDrawGizmos in the editor */ - public static void CreateNavmeshSurfaceVisualization (this NavmeshBase navmeshBase, NavmeshTile tile, GraphGizmoHelper helper) { - // Vertex array might be a bit larger than necessary, but that's ok - var vertices = ArrayPool.Claim(tile.nodes.Length*3); - var colors = ArrayPool.Claim(tile.nodes.Length*3); - - for (int j = 0; j < tile.nodes.Length; j++) { - var node = tile.nodes[j]; - Int3 v0, v1, v2; - node.GetVertices(out v0, out v1, out v2); - vertices[j*3 + 0] = (Vector3)v0; - vertices[j*3 + 1] = (Vector3)v1; - vertices[j*3 + 2] = (Vector3)v2; - - var color = helper.NodeColor(node); - colors[j*3 + 0] = colors[j*3 + 1] = colors[j*3 + 2] = color; - } - - if (navmeshBase.showMeshSurface) helper.DrawTriangles(vertices, colors, tile.nodes.Length); - if (navmeshBase.showMeshOutline) helper.DrawWireTriangles(vertices, colors, tile.nodes.Length); - - // Return lists to the pool - ArrayPool.Release(ref vertices); - ArrayPool.Release(ref colors); - } - - /** Creates an outline of the navmesh for use in OnDrawGizmos in the editor */ - public static void CreateNavmeshOutlineVisualization (NavmeshTile tile, GraphGizmoHelper helper) { - var sharedEdges = new bool[3]; - - for (int j = 0; j < tile.nodes.Length; j++) { - sharedEdges[0] = sharedEdges[1] = sharedEdges[2] = false; - - var node = tile.nodes[j]; - for (int c = 0; c < node.connections.Length; c++) { - var other = node.connections[c].node as TriangleMeshNode; - - // Loop through neighbours to figure out which edges are shared - if (other != null && other.GraphIndex == node.GraphIndex) { - for (int v = 0; v < 3; v++) { - for (int v2 = 0; v2 < 3; v2++) { - if (node.GetVertexIndex(v) == other.GetVertexIndex((v2+1)%3) && node.GetVertexIndex((v+1)%3) == other.GetVertexIndex(v2)) { - // Found a shared edge with the other node - sharedEdges[v] = true; - v = 3; - break; - } - } - } - } - } - - var color = helper.NodeColor(node); - for (int v = 0; v < 3; v++) { - if (!sharedEdges[v]) { - helper.builder.DrawLine((Vector3)node.GetVertex(v), (Vector3)node.GetVertex((v+1)%3), color); - } - } - } - } - - public static void DrawUnwalkableNodes (this NavmeshBase navmeshBase, float size) { - Gizmos.color = AstarColor.UnwalkableNode; - navmeshBase.GetNodes(node => { - if (!node.Walkable) Gizmos.DrawCube((Vector3)node.position, Vector3.one*size); - }); - } - - - public static IEnumerable ScanAllTiles (this RecastGraph self) { - self.transform = self.CalculateTransform(); - self.InitializeTileInfo(); - - // If this is true, just fill the graph with empty tiles - if (self.scanEmptyGraph) { - self.FillWithEmptyTiles(); - yield break; - } - - // A walkableClimb higher than walkableHeight can cause issues when generating the navmesh since then it can in some cases - // Both be valid for a character to walk under an obstacle and climb up on top of it (and that cannot be handled with navmesh without links) - // The editor scripts also enforce this but we enforce it here too just to be sure - self.walkableClimb = Mathf.Min(self.walkableClimb, self.walkableHeight); - - yield return new Progress(0, "Finding Meshes"); - var bounds = self.transform.Transform(new Bounds(self.forcedBoundsSize*0.5f, self.forcedBoundsSize)); - var meshes = self.CollectMeshes(bounds); - var buckets = self.PutMeshesIntoTileBuckets(meshes); - - Queue tileQueue = new Queue(); - - // Put all tiles in the queue - for (int z = 0; z < self.tileZCount; z++) { - for (int x = 0; x < self.tileXCount; x++) { - tileQueue.Enqueue(new Int2(x, z)); - } - } - - var workQueue = new ParallelWorkQueue(tileQueue); - // Create the voxelizers and set all settings (one for each thread) - var voxelizers = new Voxelize[workQueue.threadCount]; - for (int i = 0; i < voxelizers.Length; i++) voxelizers[i] = new Voxelize(self.CellHeight, self.cellSize, self.walkableClimb, self.walkableHeight, self.maxSlope, self.maxEdgeLength); - workQueue.action = (tile, threadIndex) => { - voxelizers[threadIndex].inputMeshes = buckets[tile.x + tile.y*self.tileXCount]; - self.tiles[tile.x + tile.y*self.tileXCount] = self.BuildTileMesh(voxelizers[threadIndex], tile.x, tile.y, threadIndex); - }; - - // Prioritize responsiveness while playing - // but when not playing prioritize throughput - // (the Unity progress bar is also pretty slow to update) - int timeoutMillis = Application.isPlaying ? 1 : 200; - - // Scan all tiles in parallel - foreach (var done in workQueue.Run(timeoutMillis)) { - yield return new Progress(Mathf.Lerp(0.1f, 0.9f, done / (float)self.tiles.Length), "Calculated Tiles: " + done + "/" + self.tiles.Length); - } - - yield return new Progress(0.9f, "Assigning Graph Indices"); - - // Assign graph index to nodes - uint graphIndex = (uint)AstarPath.active.data.GetGraphIndex(self); - - self.GetNodes(node => node.GraphIndex = graphIndex); - - // First connect all tiles with an EVEN coordinate sum - // This would be the white squares on a chess board. - // Then connect all tiles with an ODD coordinate sum (which would be all black squares on a chess board). - // This will prevent the different threads that do all - // this in parallel from conflicting with each other. - // The directions are also done separately - // first they are connected along the X direction and then along the Z direction. - // Looping over 0 and then 1 - for (int coordinateSum = 0; coordinateSum <= 1; coordinateSum++) { - for (int direction = 0; direction <= 1; direction++) { - for (int i = 0; i < self.tiles.Length; i++) { - if ((self.tiles[i].x + self.tiles[i].z) % 2 == coordinateSum) { - tileQueue.Enqueue(new Int2(self.tiles[i].x, self.tiles[i].z)); - } - } - - workQueue = new ParallelWorkQueue(tileQueue); - workQueue.action = (tile, threadIndex) => { - // Connect with tile at (x+1,z) and (x,z+1) - if (direction == 0 && tile.x < self.tileXCount - 1) - self.ConnectTiles(self.tiles[tile.x + tile.y * self.tileXCount], self.tiles[tile.x + 1 + tile.y * self.tileXCount]); - if (direction == 1 && tile.y < self.tileZCount - 1) - self.ConnectTiles(self.tiles[tile.x + tile.y * self.tileXCount], self.tiles[tile.x + (tile.y + 1) * self.tileXCount]); - }; - - var numTilesInQueue = tileQueue.Count; - // Connect all tiles in parallel - foreach (var done in workQueue.Run(timeoutMillis)) { - yield return new Progress(0.95f, "Connected Tiles " + (numTilesInQueue - done) + "/" + numTilesInQueue + " (Phase " + (direction + 1 + 2*coordinateSum) + " of 4)"); - } - } - } - - for (int i = 0; i < meshes.Count; i++) meshes[i].Pool(); - ListPool.Release(ref meshes); - - // This may be used by the TileHandlerHelper script to update the tiles - // while taking NavmeshCuts into account after the graph has been completely recalculated. - if (self.OnRecalculatedTiles != null) { - self.OnRecalculatedTiles(self.tiles.Clone() as NavmeshTile[]); - } - } - - /** Creates a list for every tile and adds every mesh that touches a tile to the corresponding list */ - public static List[] PutMeshesIntoTileBuckets (this RecastGraph self, List meshes) { - var result = new List[self.tiles.Length]; - var borderExpansion = new Vector3(1, 0, 1)*self.TileBorderSizeInWorldUnits*2; - - for (int i = 0; i < result.Length; i++) { - result[i] = ListPool.Claim(); - } - - for (int i = 0; i < meshes.Count; i++) { - var mesh = meshes[i]; - var bounds = mesh.bounds; - // Expand borderSize voxels on each side - bounds.Expand(borderExpansion); - - var rect = self.GetTouchingTiles(bounds); - for (int z = rect.ymin; z <= rect.ymax; z++) { - for (int x = rect.xmin; x <= rect.xmax; x++) { - result[x + z*self.tileXCount].Add(mesh); - } - } - } - - return result; - } - - public static List CollectMeshes (this RecastGraph self, Bounds bounds) { - Profiler.BeginSample("Find Meshes for rasterization"); - var result = ListPool.Claim(); - - var meshGatherer = new RecastMeshGatherer(bounds, self.terrainSampleSize, self.mask, self.tagMask, self.colliderRasterizeDetail); - - if (self.rasterizeMeshes) { - Profiler.BeginSample("Find meshes"); - meshGatherer.CollectSceneMeshes(result); - Profiler.EndSample(); - } - - Profiler.BeginSample("Find RecastMeshObj components"); - meshGatherer.CollectRecastMeshObjs(result); - Profiler.EndSample(); - - if (self.rasterizeTerrain) { - Profiler.BeginSample("Find terrains"); - // Split terrains up into meshes approximately the size of a single chunk - var desiredTerrainChunkSize = self.cellSize*Math.Max(self.tileSizeX, self.tileSizeZ); - meshGatherer.CollectTerrainMeshes(self.rasterizeTrees, desiredTerrainChunkSize, result); - Profiler.EndSample(); - } - - if (self.rasterizeColliders) { - Profiler.BeginSample("Find colliders"); - meshGatherer.CollectColliderMeshes(result); - Profiler.EndSample(); - } - - if (result.Count == 0) { - Debug.LogWarning("No MeshFilters were found contained in the layers specified by the 'mask' variables"); - } - - Profiler.EndSample(); - return result; - } - - - public static Bounds CalculateTileBoundsWithBorder (this RecastGraph self, int x, int z) { - var bounds = new Bounds(); - - bounds.SetMinMax(new Vector3(x*self.TileWorldSizeX, 0, z*self.TileWorldSizeZ), - new Vector3((x+1)*self.TileWorldSizeX, self.forcedBoundsSize.y, (z+1)*self.TileWorldSizeZ) - ); - - // Expand borderSize voxels on each side - bounds.Expand(new Vector3(1, 0, 1)*self.TileBorderSizeInWorldUnits*2); - return bounds; - } - - public static NavmeshTile BuildTileMesh (this RecastGraph self, Voxelize vox, int x, int z, int threadIndex = 0) { - AstarProfiler.StartProfile("Build Tile"); - AstarProfiler.StartProfile("Init"); - - vox.borderSize = self.TileBorderSizeInVoxels; - vox.forcedBounds = self.CalculateTileBoundsWithBorder(x, z); - vox.width = self.tileSizeX + vox.borderSize*2; - vox.depth = self.tileSizeZ + vox.borderSize*2; - - if (!self.useTiles && self.relevantGraphSurfaceMode == RecastGraph.RelevantGraphSurfaceMode.OnlyForCompletelyInsideTile) { - // This best reflects what the user would actually want - vox.relevantGraphSurfaceMode = RecastGraph.RelevantGraphSurfaceMode.RequireForAll; - } else { - vox.relevantGraphSurfaceMode = self.relevantGraphSurfaceMode; - } - - vox.minRegionSize = Mathf.RoundToInt(self.minRegionSize / (self.cellSize*self.cellSize)); - - AstarProfiler.EndProfile("Init"); - - - // Init voxelizer - vox.Init(); - vox.VoxelizeInput(self.transform, self.CalculateTileBoundsWithBorder(x, z)); - - AstarProfiler.StartProfile("Filter Ledges"); - - - vox.FilterLedges(vox.voxelWalkableHeight, vox.voxelWalkableClimb, vox.cellSize, vox.cellHeight); - - AstarProfiler.EndProfile("Filter Ledges"); - - AstarProfiler.StartProfile("Filter Low Height Spans"); - vox.FilterLowHeightSpans(vox.voxelWalkableHeight, vox.cellSize, vox.cellHeight); - AstarProfiler.EndProfile("Filter Low Height Spans"); - - vox.BuildCompactField(); - vox.BuildVoxelConnections(); - vox.ErodeWalkableArea(self.CharacterRadiusInVoxels); - vox.BuildDistanceField(); - vox.BuildRegions(); - - var cset = new VoxelContourSet(); - vox.BuildContours(self.contourMaxError, 1, cset, Voxelize.RC_CONTOUR_TESS_WALL_EDGES | Voxelize.RC_CONTOUR_TESS_TILE_EDGES); - - VoxelMesh mesh; - vox.BuildPolyMesh(cset, 3, out mesh); - - AstarProfiler.StartProfile("Build Nodes"); - - // Position the vertices correctly in graph space (all tiles are laid out on the xz plane with the (0,0) tile at the origin) - for (int i = 0; i < mesh.verts.Length; i++) { - mesh.verts[i] *= Int3.Precision; - } - vox.transformVoxel2Graph.Transform(mesh.verts); - - NavmeshTile tile = self.CreateTile(vox, mesh, x, z, threadIndex); - - AstarProfiler.EndProfile("Build Nodes"); - - AstarProfiler.EndProfile("Build Tile"); - return tile; - } - - /** Create a tile at tile index \a x, \a z from the mesh. - * \version Since version 3.7.6 the implementation is thread safe - */ - public static NavmeshTile CreateTile (this RecastGraph self, Voxelize vox, VoxelMesh mesh, int x, int z, int threadIndex) { - if (mesh.tris == null) throw new System.ArgumentNullException("mesh.tris"); - if (mesh.verts == null) throw new System.ArgumentNullException("mesh.verts"); - if (mesh.tris.Length % 3 != 0) throw new System.ArgumentException("Indices array's length must be a multiple of 3 (mesh.tris)"); - if (mesh.verts.Length >= NavmeshBase.VertexIndexMask) { - if (self.tileXCount*self.tileZCount == 1) { - throw new System.ArgumentException("Too many vertices per tile (more than " + NavmeshBase.VertexIndexMask + ")." + - "\nTry enabling tiling in the recast graph settings.\n"); - } else { - throw new System.ArgumentException("Too many vertices per tile (more than " + NavmeshBase.VertexIndexMask + ")." + - "\nTry reducing tile size or enabling ASTAR_RECAST_LARGER_TILES under the 'Optimizations' tab in the A* Inspector"); - } - } - - // Create a new navmesh tile and assign its settings - var tile = new NavmeshTile { - x = x, - z = z, - w = 1, - d = 1, - tris = mesh.tris, - bbTree = new BBTree(), - graph = self, - }; - - tile.vertsInGraphSpace = Utility.RemoveDuplicateVertices(mesh.verts, tile.tris); - tile.verts = (Int3[])tile.vertsInGraphSpace.Clone(); - self.transform.Transform(tile.verts); - - // Here we are faking a new graph - // The tile is not added to any graphs yet, but to get the position queries from the nodes - // to work correctly (not throw exceptions because the tile is not calculated) we fake a new graph - // and direct the position queries directly to the tile - // The thread index is added to make sure that if multiple threads are calculating tiles at the same time - // they will not use the same temporary graph index - uint temporaryGraphIndex = (uint)(AstarPath.active.data.graphs.Length + threadIndex); - - if (temporaryGraphIndex > GraphNode.MaxGraphIndex) { - // Multithreaded tile calculations use fake graph indices, see above. - throw new System.Exception("Graph limit reached. Multithreaded recast calculations cannot be done because a few scratch graph indices are required."); - } - - TriangleMeshNode.SetNavmeshHolder((int)temporaryGraphIndex, tile); - // We need to lock here because creating nodes is not thread safe - // and we may be doing this from multiple threads at the same time - tile.nodes = new TriangleMeshNode[tile.tris.Length/3]; - lock (AstarPath.active) { - self.CreateNodes(tile.nodes, tile.tris, x + z*self.tileXCount, temporaryGraphIndex); - } - - tile.bbTree.RebuildFrom(tile.nodes); - NavmeshBase.CreateNodeConnections(tile.nodes); - // Remove the fake graph - TriangleMeshNode.SetNavmeshHolder((int)temporaryGraphIndex, null); - - return tile; - } - - /** Changes the bounds of the graph to precisely encapsulate all objects in the scene that can be included in the scanning process based on the settings. - * Which objects are used depends on the settings. If an object would have affected the graph with the current settings if it would have - * been inside the bounds of the graph, it will be detected and the bounds will be expanded to contain that object. - * - * This method corresponds to the 'Snap bounds to scene' button in the inspector. - * - * \see rasterizeMeshes - * \see rasterizeTerrain - * \see rasterizeColliders - * \see mask - * \see tagMask - * - * \see forcedBoundsCenter - * \see forcedBoundsSize - */ - public static void SnapForceBoundsToScene (this RecastGraph self) { - var meshes = self.CollectMeshes(new Bounds(Vector3.zero, new Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity))); - - if (meshes.Count == 0) { - return; - } - - var bounds = meshes[0].bounds; - - for (int i = 1; i < meshes.Count; i++) { - bounds.Encapsulate(meshes[i].bounds); - meshes[i].Pool(); - } - - self.forcedBoundsCenter = bounds.center; - self.forcedBoundsSize = bounds.size; - } - - - public static Bounds Transform (this GraphTransform self, Bounds bounds) { - if (self.onlyTranslational) return new Bounds(bounds.center + self.translation.ToUnityV3(), bounds.size); - - var corners = ArrayPool.Claim(8); - var extents = bounds.extents; - corners[0] = self.Transform(bounds.center + new Vector3(extents.x, extents.y, extents.z)); - corners[1] = self.Transform(bounds.center + new Vector3(extents.x, extents.y, -extents.z)); - corners[2] = self.Transform(bounds.center + new Vector3(extents.x, -extents.y, extents.z)); - corners[3] = self.Transform(bounds.center + new Vector3(extents.x, -extents.y, -extents.z)); - corners[4] = self.Transform(bounds.center + new Vector3(-extents.x, extents.y, extents.z)); - corners[5] = self.Transform(bounds.center + new Vector3(-extents.x, extents.y, -extents.z)); - corners[6] = self.Transform(bounds.center + new Vector3(-extents.x, -extents.y, extents.z)); - corners[7] = self.Transform(bounds.center + new Vector3(-extents.x, -extents.y, -extents.z)); - - var min = corners[0]; - var max = corners[0]; - for (int i = 1; i < 8; i++) { - min = Vector3.Min(min, corners[i]); - max = Vector3.Max(max, corners[i]); - } - ArrayPool.Release(ref corners); - return new Bounds((min+max)*0.5f, max - min); - } - - public static Bounds InverseTransform (this GraphTransform self, Bounds bounds) { - if (self.onlyTranslational) return new Bounds(bounds.center - self.translation.ToUnityV3(), bounds.size); - - var corners = ArrayPool.Claim(8); - var extents = bounds.extents; - corners[0] = self.InverseTransform(bounds.center + new Vector3(extents.x, extents.y, extents.z)); - corners[1] = self.InverseTransform(bounds.center + new Vector3(extents.x, extents.y, -extents.z)); - corners[2] = self.InverseTransform(bounds.center + new Vector3(extents.x, -extents.y, extents.z)); - corners[3] = self.InverseTransform(bounds.center + new Vector3(extents.x, -extents.y, -extents.z)); - corners[4] = self.InverseTransform(bounds.center + new Vector3(-extents.x, extents.y, extents.z)); - corners[5] = self.InverseTransform(bounds.center + new Vector3(-extents.x, extents.y, -extents.z)); - corners[6] = self.InverseTransform(bounds.center + new Vector3(-extents.x, -extents.y, extents.z)); - corners[7] = self.InverseTransform(bounds.center + new Vector3(-extents.x, -extents.y, -extents.z)); - - var min = corners[0]; - var max = corners[0]; - for (int i = 1; i < 8; i++) { - min = Vector3.Min(min, corners[i]); - max = Vector3.Max(max, corners[i]); - } - ArrayPool.Release(ref corners); - return new Bounds((min+max)*0.5f, max - min); - } - - /** Returns a rect containing the indices of all tiles touching the specified bounds */ - public static IntRect GetTouchingTiles (this NavmeshBase self, Bounds bounds) { - bounds = self.transform.InverseTransform(bounds); - - // Calculate world bounds of all affected tiles - var r = new IntRect(Mathf.FloorToInt(bounds.min.x / self.TileWorldSizeX), Mathf.FloorToInt(bounds.min.z / self.TileWorldSizeZ), Mathf.FloorToInt(bounds.max.x / self.TileWorldSizeX), Mathf.FloorToInt(bounds.max.z / self.TileWorldSizeZ)); - // Clamp to bounds - r = IntRect.Intersection(r, new IntRect(0, 0, self.tileXCount-1, self.tileZCount-1)); - return r; - } - - /** Returns a rect containing the indices of all tiles touching the specified bounds. - * \param rect Graph space rectangle (in graph space all tiles are on the XZ plane regardless of graph rotation and other transformations, the first tile has a corner at the origin) - */ - public static IntRect GetTouchingTilesInGraphSpace (this NavmeshBase self, Rect rect) { - // Calculate world bounds of all affected tiles - var r = new IntRect(Mathf.FloorToInt(rect.xMin / self.TileWorldSizeX), Mathf.FloorToInt(rect.yMin / self.TileWorldSizeZ), Mathf.FloorToInt(rect.xMax / self.TileWorldSizeX), Mathf.FloorToInt(rect.yMax / self.TileWorldSizeZ)); - - // Clamp to bounds - r = IntRect.Intersection(r, new IntRect(0, 0, self.tileXCount-1, self.tileZCount-1)); - return r; - } - - /** True if the matrix will reverse orientations of faces. - * - * Scaling by a negative value along an odd number of axes will reverse - * the orientation of e.g faces on a mesh. This must be counter adjusted - * by for example the recast rasterization system to be able to handle - * meshes with negative scales properly. - * - * We can find out if they are flipped by finding out how the signed - * volume of a unit cube is transformed when applying the matrix - * - * If the (signed) volume turns out to be negative - * that also means that the orientation of it has been reversed. - * - * \see https://en.wikipedia.org/wiki/Normal_(geometry) - * \see https://en.wikipedia.org/wiki/Parallelepiped - */ - public static bool ReversesFaceOrientations (Matrix4x4 matrix) { - var dX = matrix.MultiplyVector(new Vector3(1, 0, 0)); - var dY = matrix.MultiplyVector(new Vector3(0, 1, 0)); - var dZ = matrix.MultiplyVector(new Vector3(0, 0, 1)); - - // Calculate the signed volume of the parallelepiped - var volume = Vector3.Dot(Vector3.Cross(dX, dY), dZ); - - return volume < 0; - } - - /** True if the matrix will reverse orientations of faces in the XZ plane. - * Almost the same as ReversesFaceOrientations, but this method assumes - * that scaling a face with a negative scale along the Y axis does not - * reverse the orientation of the face. - * - * This is used for navmesh cuts. - * - * Scaling by a negative value along one axis or rotating - * it so that it is upside down will reverse - * the orientation of the cut, so we need to be reverse - * it again as a countermeasure. - * However if it is flipped along two axes it does not need to - * be reversed. - * We can handle all these cases by finding out how a unit square formed - * by our forward axis and our rightward axis is transformed in XZ space - * when applying the local to world matrix. - * If the (signed) area of the unit square turns out to be negative - * that also means that the orientation of it has been reversed. - * The signed area is calculated using a cross product of the vectors. - */ - public static bool ReversesFaceOrientationsXZ (Matrix4x4 matrix) { - var dX = matrix.MultiplyVector(new Vector3(1, 0, 0)); - var dZ = matrix.MultiplyVector(new Vector3(0, 0, 1)); - - // Take the cross product of the vectors projected onto the XZ plane - var cross = (dX.x*dZ.z - dZ.x*dX.z); - - return cross < 0; - } - - static int Bit (int a, int b) { - return (a >> b) & 1; - } - - public static Color IntToColor (int i, float a) { - int r = Bit(i, 2) + Bit(i, 3) * 2 + 1; - int g = Bit(i, 1) + Bit(i, 4) * 2 + 1; - int b = Bit(i, 0) + Bit(i, 5) * 2 + 1; - - return new Color(r*0.25F, g*0.25F, b*0.25F, a); - } - - /** - * Converts an HSV color to an RGB color. - * According to the algorithm described at http://en.wikipedia.org/wiki/HSL_and_HSV - * - * @author Wikipedia - * @return the RGB representation of the color. - */ - public static Color HSVToRGB (float h, float s, float v) { - float r = 0, g = 0, b = 0; - - float Chroma = s * v; - float Hdash = h / 60.0f; - float X = Chroma * (1.0f - System.Math.Abs((Hdash % 2.0f) - 1.0f)); - - if (Hdash < 1.0f) { - r = Chroma; - g = X; - } else if (Hdash < 2.0f) { - r = X; - g = Chroma; - } else if (Hdash < 3.0f) { - g = Chroma; - b = X; - } else if (Hdash < 4.0f) { - g = X; - b = Chroma; - } else if (Hdash < 5.0f) { - r = X; - b = Chroma; - } else if (Hdash < 6.0f) { - r = Chroma; - b = X; - } - - float Min = v - Chroma; - - r += Min; - g += Min; - b += Min; - - return new Color(r, g, b); - } - } -} \ No newline at end of file diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/UnityHelper.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/UnityHelper.cs.meta deleted file mode 100644 index 23694a636b7b56409089e69f1b8cf40a9f3dbe5a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/UnityHelper.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 080c3416d36e4b52880996820746a175 -timeCreated: 1539053462 \ No newline at end of file diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities.meta deleted file mode 100644 index 7871ca98cef5fc3b7d6811b8e4b1ae8f3f694f1f..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 44efb6d147dccae4fb3a780798f83d94 -folderAsset: yes -timeCreated: 1536749367 -licenseType: Pro -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarParallel.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarParallel.cs deleted file mode 100644 index 66ba6426ae1ab543a1dd6b51bace14bfd07d56e0..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarParallel.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using PF; - -namespace Pathfinding.Util { - /** Helper for parallelizing tasks. - * More specifically this class is useful if the tasks need some large and slow to initialize 'scratch pad'. - * Using this class you can initialize a scratch pad per thread and then use the appropriate one in the task - * callback (which includes a thread index). - * - * Any exception that is thrown in the worker threads will be propagated out to the caller of the #Run method. - */ - public class ParallelWorkQueue { - /** Callback to run for each item in the queue. - * The callback takes the item as the first parameter and the thread index as the second parameter. - */ - public System.Action action; - - /** Number of threads to use */ - public readonly int threadCount; - - /** Queue of items */ - readonly Queue queue; - readonly int initialCount; -#if !(UNITY_WEBGL && !UNITY_EDITOR) - ManualResetEvent[] waitEvents; - System.Exception innerException; -#endif - - public ParallelWorkQueue (Queue queue) { - this.queue = queue; - initialCount = queue.Count; - #if (UNITY_WEBGL && !UNITY_EDITOR) - threadCount = 1; - #else - threadCount = System.Math.Min(initialCount, System.Math.Max(1, AstarPath.CalculateThreadCount(ThreadCount.AutomaticHighLoad))); - #endif - } - - /** Execute the tasks. - * \param progressTimeoutMillis This iterator will yield approximately every \a progressTimeoutMillis milliseconds. - * This can be used to e.g show a progress bar. - */ - public IEnumerable Run (int progressTimeoutMillis) { - if (initialCount != queue.Count) throw new System.InvalidOperationException("Queue has been modified since the constructor"); - - // Return early if there are no items in the queue. - // This is important because WaitHandle.WaitAll with an array of length zero - // results in weird behaviour (Microsoft's .Net returns false, Mono returns true - // and the documentation says it should throw an exception). - if (initialCount == 0) yield break; - -#if (UNITY_WEBGL && !UNITY_EDITOR) - // WebGL does not support multithreading so we will do everything on the main thread instead - for (int i = 0; i < initialCount; i++) { - action(queue.Dequeue(), 0); - yield return i + 1; - } -#else - // Fire up a bunch of threads to scan the graph in parallel - waitEvents = new ManualResetEvent[threadCount]; - for (int i = 0; i < waitEvents.Length; i++) { - waitEvents[i] = new ManualResetEvent(false); - #if NETFX_CORE - // Need to make a copy here, otherwise it may refer to some other index when the task actually runs. - int threadIndex = i; - System.Threading.Tasks.Task.Run(() => RunTask(threadIndex)); - #else - ThreadPool.QueueUserWorkItem(threadIndex => RunTask((int)threadIndex), i); - #endif - } - - while (!WaitHandle.WaitAll(waitEvents, progressTimeoutMillis)) { - int count; - lock (queue) count = queue.Count; - yield return initialCount - count; - } - - if (innerException != null) throw innerException; -#endif - } - -#if !(UNITY_WEBGL && !UNITY_EDITOR) - void RunTask (int threadIndex) { - try { - while (true) { - T tile; - lock (queue) { - if (queue.Count == 0) return; - tile = queue.Dequeue(); - } - action(tile, threadIndex); - } - } catch (System.Exception e) { - innerException = e; - // Stop the remaining threads - lock (queue) queue.Clear(); - } finally { - waitEvents[threadIndex].Set(); - } - } -#endif - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarParallel.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarParallel.cs.meta deleted file mode 100644 index 493831eaa0e6c1639ef592d0650816e91a8b80eb..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarParallel.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: fa95ccba91f5c4ab8922aa7859f0a300 -timeCreated: 1500049783 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarProfiler.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarProfiler.cs deleted file mode 100644 index fd05121c0efd58aefa259ca0865ec9474b5e0a82..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarProfiler.cs +++ /dev/null @@ -1,226 +0,0 @@ -//Uncomment the next line to enable debugging (also uncomment it in AstarPath.cs) -//#define ProfileAstar //@SHOWINEDITOR -//#define ASTAR_UNITY_PRO_PROFILER //@SHOWINEDITOR Requires ProfileAstar, profiles section of astar code which will show up in the Unity Pro Profiler. - -using System.Collections.Generic; -using System; -using PF; -using UnityEngine; -#if UNITY_5_5_OR_NEWER -using UnityEngine.Profiling; -#endif - -namespace Pathfinding { - public class AstarProfiler { - public class ProfilePoint { - //public DateTime lastRecorded; - //public TimeSpan totalTime; - public System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); - public int totalCalls; - public long tmpBytes; - public long totalBytes; - } - - static readonly Dictionary profiles = new Dictionary(); - static DateTime startTime = DateTime.UtcNow; - - public static ProfilePoint[] fastProfiles; - public static string[] fastProfileNames; - - private AstarProfiler() { - } - - [System.Diagnostics.Conditional("ProfileAstar")] - public static void InitializeFastProfile (string[] profileNames) { - fastProfileNames = new string[profileNames.Length+2]; - Array.Copy(profileNames, fastProfileNames, profileNames.Length); - fastProfileNames[fastProfileNames.Length-2] = "__Control1__"; - fastProfileNames[fastProfileNames.Length-1] = "__Control2__"; - fastProfiles = new ProfilePoint[fastProfileNames.Length]; - for (int i = 0; i < fastProfiles.Length; i++) fastProfiles[i] = new ProfilePoint(); - } - - [System.Diagnostics.Conditional("ProfileAstar")] - public static void StartFastProfile (int tag) { - //profiles.TryGetValue(tag, out point); - fastProfiles[tag].watch.Start();//lastRecorded = DateTime.UtcNow; - } - - [System.Diagnostics.Conditional("ProfileAstar")] - public static void EndFastProfile (int tag) { - /*if (!profiles.ContainsKey(tag)) - * { - * Debug.LogError("Can only end profiling for a tag which has already been started (tag was " + tag + ")"); - * return; - * }*/ - ProfilePoint point = fastProfiles[tag]; - - point.totalCalls++; - point.watch.Stop(); - //DateTime now = DateTime.UtcNow; - //point.totalTime += now - point.lastRecorded; - //fastProfiles[tag] = point; - } - - [System.Diagnostics.Conditional("ASTAR_UNITY_PRO_PROFILER")] - public static void EndProfile () { - Profiler.EndSample(); - } - - [System.Diagnostics.Conditional("ProfileAstar")] - public static void StartProfile (string tag) { - #if ASTAR_UNITY_PRO_PROFILER - Profiler.BeginSample(tag); - #else - //Console.WriteLine ("Profile Start - " + tag); - ProfilePoint point; - - profiles.TryGetValue(tag, out point); - if (point == null) { - point = new ProfilePoint(); - profiles[tag] = point; - } - point.tmpBytes = GC.GetTotalMemory(false); - point.watch.Start(); - //point.lastRecorded = DateTime.UtcNow; - //Debug.Log ("Starting " + tag); - #endif - } - - [System.Diagnostics.Conditional("ProfileAstar")] - public static void EndProfile (string tag) { - #if !ASTAR_UNITY_PRO_PROFILER - if (!profiles.ContainsKey(tag)) { - Debug.LogError("Can only end profiling for a tag which has already been started (tag was " + tag + ")"); - return; - } - //Console.WriteLine ("Profile End - " + tag); - //DateTime now = DateTime.UtcNow; - ProfilePoint point = profiles[tag]; - //point.totalTime += now - point.lastRecorded; - ++point.totalCalls; - point.watch.Stop(); - point.totalBytes += GC.GetTotalMemory(false) - point.tmpBytes; - //profiles[tag] = point; - //Debug.Log ("Ending " + tag); - #else - EndProfile(); - #endif - } - - [System.Diagnostics.Conditional("ProfileAstar")] - public static void Reset () { - profiles.Clear(); - startTime = DateTime.UtcNow; - - if (fastProfiles != null) { - for (int i = 0; i < fastProfiles.Length; i++) { - fastProfiles[i] = new ProfilePoint(); - } - } - } - - [System.Diagnostics.Conditional("ProfileAstar")] - public static void PrintFastResults () { - if (fastProfiles == null) - return; - - StartFastProfile(fastProfiles.Length-2); - for (int i = 0; i < 1000; i++) { - StartFastProfile(fastProfiles.Length-1); - EndFastProfile(fastProfiles.Length-1); - } - EndFastProfile(fastProfiles.Length-2); - - double avgOverhead = fastProfiles[fastProfiles.Length-2].watch.Elapsed.TotalMilliseconds / 1000.0; - - TimeSpan endTime = DateTime.UtcNow - startTime; - var output = new System.Text.StringBuilder(); - output.Append("============================\n\t\t\t\tProfile results:\n============================\n"); - output.Append("Name | Total Time | Total Calls | Avg/Call | Bytes"); - //foreach(KeyValuePair pair in profiles) - for (int i = 0; i < fastProfiles.Length; i++) { - string name = fastProfileNames[i]; - ProfilePoint value = fastProfiles[i]; - - int totalCalls = value.totalCalls; - double totalTime = value.watch.Elapsed.TotalMilliseconds - avgOverhead*totalCalls; - - if (totalCalls < 1) continue; - - - output.Append("\n").Append(name.PadLeft(10)).Append("| "); - output.Append(totalTime.ToString("0.0 ").PadLeft(10)).Append(value.watch.Elapsed.TotalMilliseconds.ToString("(0.0)").PadLeft(10)).Append("| "); - output.Append(totalCalls.ToString().PadLeft(10)).Append("| "); - output.Append((totalTime / totalCalls).ToString("0.000").PadLeft(10)); - - - /* output.Append("\nProfile"); - * output.Append(name); - * output.Append(" took \t"); - * output.Append(totalTime.ToString("0.0")); - * output.Append(" ms to complete over "); - * output.Append(totalCalls); - * output.Append(" iteration"); - * if (totalCalls != 1) output.Append("s"); - * output.Append(", averaging \t"); - * output.Append((totalTime / totalCalls).ToString("0.000")); - * output.Append(" ms per call"); */ - } - output.Append("\n\n============================\n\t\tTotal runtime: "); - output.Append(endTime.TotalSeconds.ToString("F3")); - output.Append(" seconds\n============================"); - Debug.Log(output.ToString()); - } - - [System.Diagnostics.Conditional("ProfileAstar")] - public static void PrintResults () { - TimeSpan endTime = DateTime.UtcNow - startTime; - var output = new System.Text.StringBuilder(); - - output.Append("============================\n\t\t\t\tProfile results:\n============================\n"); - - int maxLength = 5; - foreach (KeyValuePair pair in profiles) { - maxLength = Math.Max(pair.Key.Length, maxLength); - } - - output.Append(" Name ".PadRight(maxLength)). - Append("|").Append(" Total Time ".PadRight(20)). - Append("|").Append(" Total Calls ".PadRight(20)). - Append("|").Append(" Avg/Call ".PadRight(20)); - - - - foreach (var pair in profiles) { - double totalTime = pair.Value.watch.Elapsed.TotalMilliseconds; - int totalCalls = pair.Value.totalCalls; - if (totalCalls < 1) continue; - - string name = pair.Key; - - output.Append("\n").Append(name.PadRight(maxLength)).Append("| "); - output.Append(totalTime.ToString("0.0").PadRight(20)).Append("| "); - output.Append(totalCalls.ToString().PadRight(20)).Append("| "); - output.Append((totalTime / totalCalls).ToString("0.000").PadRight(20)); - output.Append(AstarMath.FormatBytesBinary((int)pair.Value.totalBytes).PadLeft(10)); - - /*output.Append("\nProfile "); - * output.Append(pair.Key); - * output.Append(" took "); - * output.Append(totalTime.ToString("0")); - * output.Append(" ms to complete over "); - * output.Append(totalCalls); - * output.Append(" iteration"); - * if (totalCalls != 1) output.Append("s"); - * output.Append(", averaging "); - * output.Append((totalTime / totalCalls).ToString("0.0")); - * output.Append(" ms per call");*/ - } - output.Append("\n\n============================\n\t\tTotal runtime: "); - output.Append(endTime.TotalSeconds.ToString("F3")); - output.Append(" seconds\n============================"); - Debug.Log(output.ToString()); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarProfiler.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarProfiler.cs.meta deleted file mode 100644 index 11004f200bf2bf4ec7bd84fa71673f5dcb8f305b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/AstarProfiler.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0d7c020300da24330bbc70ec30fee5d5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphGizmoHelper.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphGizmoHelper.cs deleted file mode 100644 index 718f24d91693ee8fdcc506b0ed5d06049d5b35ee..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphGizmoHelper.cs +++ /dev/null @@ -1,159 +0,0 @@ -using PF; -using UnityEngine; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding.Util { - public class GraphGizmoHelper : IAstarPooledObject, System.IDisposable { - public RetainedGizmos.Hasher hasher { get; private set; } - Pathfinding.Util.RetainedGizmos gizmos; - PathHandler debugData; - ushort debugPathID; - GraphDebugMode debugMode; - bool showSearchTree; - float debugFloor; - float debugRoof; - public RetainedGizmos.Builder builder { get; private set; } - Vector3 drawConnectionStart; - Color drawConnectionColor; - readonly System.Action drawConnection; - - public GraphGizmoHelper () { - // Cache a delegate to avoid allocating memory for it every time - drawConnection = DrawConnection; - } - - public void Init (RetainedGizmos.Hasher hasher, RetainedGizmos gizmos) { - debugData = PathFindHelper.debugPathData; - debugPathID = PathFindHelper.debugPathID; - debugMode = AstarPath.active.debugMode; - debugFloor = AstarPath.active.debugFloor; - debugRoof = AstarPath.active.debugRoof; - showSearchTree = AstarPath.active.showSearchTree && debugData != null; - this.gizmos = gizmos; - this.hasher = hasher; - builder = ObjectPool.Claim(); - } - - public void OnEnterPool () { - // Will cause pretty much all calls to throw null ref exceptions until Init is called - var bld = builder; - - ObjectPool.Release(ref bld); - builder = null; - debugData = null; - } - - public void DrawConnections (GraphNode node) { - if (showSearchTree) { - if (InSearchTree(node, debugData, debugPathID)) { - var pnode = debugData.GetPathNode(node); - if (pnode.parent != null) { - builder.DrawLine((Vector3)node.position, (Vector3)this.debugData.GetPathNode(node).parent.node.position, NodeColor(node)); - } - } - } else { - // Calculate which color to use for drawing the node - // based on the settings specified in the editor - drawConnectionColor = NodeColor(node); - // Get the node position - // Cast it here to avoid doing it for every neighbour - drawConnectionStart = ((Vector3)node.position).ToUnityV3(); - node.GetConnections(drawConnection); - } - } - - void DrawConnection (GraphNode other) { - builder.DrawLine(drawConnectionStart, Vector3.Lerp((Vector3)other.position, drawConnectionStart, 0.5f), drawConnectionColor); - } - - /** Color to use for gizmos. - * Returns a color to be used for the specified node with the current debug settings (editor only). - * - * \version Since 3.6.1 this method will not handle null nodes - */ - public Color NodeColor (GraphNode node) { - if (showSearchTree && !InSearchTree(node, debugData, debugPathID)) return Color.clear; - - Color color; - - if (node.Walkable) { - switch (debugMode) { - case GraphDebugMode.Areas: - color = AstarColor.GetAreaColor(node.Area); - break; - case GraphDebugMode.Penalty: - color = Color.Lerp(AstarColor.ConnectionLowLerp, AstarColor.ConnectionHighLerp, ((float)node.Penalty-debugFloor) / (debugRoof-debugFloor)); - break; - case GraphDebugMode.Tags: - color = AstarColor.GetAreaColor(node.Tag); - break; - case GraphDebugMode.Connections: - color = AstarColor.NodeConnection; - break; - default: - if (debugData == null) { - color = AstarColor.NodeConnection; - break; - } - - PathNode pathNode = debugData.GetPathNode(node); - float value; - if (debugMode == GraphDebugMode.G) { - value = pathNode.G; - } else if (debugMode == GraphDebugMode.H) { - value = pathNode.H; - } else { - // mode == F - value = pathNode.F; - } - - color = Color.Lerp(AstarColor.ConnectionLowLerp, AstarColor.ConnectionHighLerp, (value-debugFloor) / (debugRoof-debugFloor)); - break; - } - } else { - color = AstarColor.UnwalkableNode; - } - - return color; - } - - /** Returns if the node is in the search tree of the path. - * Only guaranteed to be correct if \a path is the latest path calculated. - * Use for gizmo drawing only. - */ - public static bool InSearchTree (GraphNode node, PathHandler handler, ushort pathID) { - return handler.GetPathNode(node).pathID == pathID; - } - - public void DrawWireTriangle (Vector3 a, Vector3 b, Vector3 c, Color color) { - builder.DrawLine(a, b, color); - builder.DrawLine(b, c, color); - builder.DrawLine(c, a, color); - } - - public void DrawTriangles (Vector3[] vertices, Color[] colors, int numTriangles) { - var triangles = ListPool.Claim(numTriangles); - - for (int i = 0; i < numTriangles*3; i++) triangles.Add(i); - builder.DrawMesh(gizmos, vertices, triangles, colors); - ListPool.Release(ref triangles); - } - - public void DrawWireTriangles (Vector3[] vertices, Color[] colors, int numTriangles) { - for (int i = 0; i < numTriangles; i++) { - DrawWireTriangle(vertices[i*3+0], vertices[i*3+1], vertices[i*3+2], colors[i*3+0]); - } - } - - public void Submit () { - builder.Submit(gizmos, hasher); - } - - void System.IDisposable.Dispose () { - var tmp = this; - - Submit(); - ObjectPool.Release(ref tmp); - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphGizmoHelper.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphGizmoHelper.cs.meta deleted file mode 100644 index 5994041409ef8171aa59cd3e0a6dd3b8971409eb..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphGizmoHelper.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 20ed0bf48b2a14d78b8aa2ebe33f0069 -timeCreated: 1473875958 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphUpdateUtilities.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphUpdateUtilities.cs deleted file mode 100644 index 22dd5589060a2479bb034a4b10b8345995766df6..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphUpdateUtilities.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System.Collections.Generic; -using Pathfinding.Util; -using PF; - -namespace Pathfinding { - /** Contains useful functions for updating graphs. - * This class works a lot with the GraphNode class, a useful function to get nodes is #AstarPath.GetNearest. - * - * \see #AstarPath.GetNearest - * \see #Pathfinding.PathUtilities - * - * \since Added in 3.1 - * - * \ingroup utils - */ - public static class GraphUpdateUtilities { - /** Updates graphs and checks if all nodes are still reachable from each other. - * Graphs are updated, then a check is made to see if the nodes are still reachable from each other. - * If they are not, the graphs are reverted to before the update and \a false is returned.\n - * This is slower than a normal graph update. - * All queued graph updates and thread safe callbacks will be flushed during this function. - * - * \note This might return true for small areas even if there is no possible path if AstarPath.minAreaSize is greater than zero (0). - * So when using this, it is recommended to set AstarPath.minAreaSize to 0 (A* Inspector -> Settings -> Pathfinding) - * - * \param guo The GraphUpdateObject to update the graphs with - * \param node1 Node which should have a valid path to \a node2. All nodes should be walkable or \a false will be returned. - * \param node2 Node which should have a valid path to \a node1. All nodes should be walkable or \a false will be returned. - * \param alwaysRevert If true, reverts the graphs to the old state even if no blocking occurred - * - * \returns True if the given nodes are still reachable from each other after the \a guo has been applied. False otherwise. - * - * \snippet MiscSnippets.cs GraphUpdateUtilities.UpdateGraphsNoBlock - */ - public static bool UpdateGraphsNoBlock (GraphUpdateObject guo, GraphNode node1, GraphNode node2, bool alwaysRevert = false) { - List buffer = ListPool.Claim(); - buffer.Add(node1); - buffer.Add(node2); - - bool worked = UpdateGraphsNoBlock(guo, buffer, alwaysRevert); - ListPool.Release(ref buffer); - return worked; - } - - /** Updates graphs and checks if all nodes are still reachable from each other. - * Graphs are updated, then a check is made to see if the nodes are still reachable from each other. - * If they are not, the graphs are reverted to before the update and \a false is returned. - * This is slower than a normal graph update. - * All queued graph updates will be flushed during this function. - * - * \note This might return true for small areas even if there is no possible path if AstarPath.minAreaSize is greater than zero (0). - * So when using this, it is recommended to set AstarPath.minAreaSize to 0. (A* Inspector -> Settings -> Pathfinding) - * - * \param guo The GraphUpdateObject to update the graphs with - * \param nodes Nodes which should have valid paths between them. All nodes should be walkable or \a false will be returned. - * \param alwaysRevert If true, reverts the graphs to the old state even if no blocking occurred - * - * \returns True if the given nodes are still reachable from each other after the \a guo has been applied. False otherwise. - */ - public static bool UpdateGraphsNoBlock (GraphUpdateObject guo, List nodes, bool alwaysRevert = false) { - // Make sure all nodes are walkable - for (int i = 0; i < nodes.Count; i++) if (!nodes[i].Walkable) return false; - - // Track changed nodes to enable reversion of the guo - guo.trackChangedNodes = true; - bool worked; - - // Pause pathfinding while modifying the graphs - var graphLock = AstarPath.active.PausePathfinding(); - try { - // Update the graphs immediately - AstarPath.active.FlushGraphUpdates(); - - // Check if all nodes are in the same area and that they are walkable, i.e that there are paths between all of them - worked = PathUtilities.IsPathPossible(nodes); - - // If it did not work, revert the GUO - if (!worked || alwaysRevert) { - guo.RevertFromBackup(); - - // The revert operation does not revert ALL nodes' area values, so we must flood fill again - AstarPath.active.FloodFill(); - } - } finally { - graphLock.Release(); - } - - // Disable tracking nodes, not strictly necessary, but will slightly reduce the cance that some user causes errors - guo.trackChangedNodes = false; - - return worked; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphUpdateUtilities.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphUpdateUtilities.cs.meta deleted file mode 100644 index 58f3863f1770473f3be60072e3afeda14f17c484..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/GraphUpdateUtilities.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b5818f65b5e1449c1ae6f20de9f75ff5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/PathUtilities.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/PathUtilities.cs deleted file mode 100644 index 463aa04080c6f762bd3711983313c3b465039d36..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/PathUtilities.cs +++ /dev/null @@ -1,426 +0,0 @@ -using Pathfinding.Util; -using System.Collections.Generic; -using PF; -using UnityEngine; -using Mathf = UnityEngine.Mathf; -using Vector3 = UnityEngine.Vector3; - -namespace Pathfinding { - /** Contains useful functions for working with paths and nodes. - * This class works a lot with the \link Pathfinding.GraphNode GraphNode\endlink class, a useful function to get nodes is AstarPath.GetNearest. - * \see #AstarPath.GetNearest - * \see #Pathfinding.GraphUpdateUtilities - * \see #Pathfinding.GraphUtilities - * \ingroup utils - * - */ - public static class PathUtilities { - /** Returns if there is a walkable path from \a node1 to \a node2. - * This method is extremely fast because it only uses precalculated information. - * - * \snippet MiscSnippets.cs PathUtilities.IsPathPossible - * - * \note If you are making changes to the graph without using e.g #AstarPath.UpdateGraphs or the \link Pathfinding.GraphUpdateScene GraphUpdateScene\endlink component, areas must first be recaculated using AstarPath.FloodFill(). - * \see \ref graph-updates - * \see #AstarPath.GetNearest - */ - public static bool IsPathPossible (GraphNode node1, GraphNode node2) { - return node1.Walkable && node2.Walkable && node1.Area == node2.Area; - } - - /** Returns if there are walkable paths between all nodes. - * - * \note If you are making changes to the graph without using e.g #AstarPath.UpdateGraphs or the \link Pathfinding.GraphUpdateScene GraphUpdateScene\endlink component, areas must first be recaculated using e.g AstarPath.FloodFill(). - * \see \ref graph-updates - * - * Returns true for empty lists. - * - * \see #AstarPath.GetNearest - */ - public static bool IsPathPossible (List nodes) { - if (nodes.Count == 0) return true; - - uint area = nodes[0].Area; - for (int i = 0; i < nodes.Count; i++) if (!nodes[i].Walkable || nodes[i].Area != area) return false; - return true; - } - - /** Returns if there are walkable paths between all nodes. - * \note If you are making changes to the graph without using e.g #AstarPath.UpdateGraphs or the \link Pathfinding.GraphUpdateScene GraphUpdateScene\endlink component, areas must first be recaculated using e.g AstarPath.FloodFill(). - * \see \ref graph-updates - * - * This method will actually only check if the first node can reach all other nodes. However this is - * equivalent in 99% of the cases since almost always the graph connections are bidirectional. - * If you are not aware of any cases where you explicitly create unidirectional connections - * this method can be used without worries. - * - * Returns true for empty lists - * - * \warning This method is significantly slower than the IsPathPossible method which does not take a tagMask - * - * \see #AstarPath.GetNearest - */ - public static bool IsPathPossible (List nodes, int tagMask) { - if (nodes.Count == 0) return true; - - // Make sure that the first node has a valid tag - if (((tagMask >> (int)nodes[0].Tag) & 1) == 0) return false; - - // Fast check first - if (!IsPathPossible(nodes)) return false; - - // Make sure that the first node can reach all other nodes - var reachable = GetReachableNodes(nodes[0], tagMask); - bool result = true; - - // Make sure that the first node can reach all other nodes - for (int i = 1; i < nodes.Count; i++) { - if (!reachable.Contains(nodes[i])) { - result = false; - break; - } - } - - // Pool the temporary list - ListPool.Release(ref reachable); - - return result; - } - - /** Returns all nodes reachable from the seed node. - * This function performs a DFS (depth-first-search) or flood fill of the graph and returns all nodes which can be reached from - * the seed node. In almost all cases this will be identical to returning all nodes which have the same area as the seed node. - * In the editor areas are displayed as different colors of the nodes. - * The only case where it will not be so is when there is a one way path from some part of the area to the seed node - * but no path from the seed node to that part of the graph. - * - * The returned list is not sorted in any particular way. - * - * Depending on the number of reachable nodes, this function can take quite some time to calculate - * so don't use it too often or it might affect the framerate of your game. - * - * \param seed The node to start the search from. - * \param tagMask Optional mask for tags. This is a bitmask. \see \ref bitmasks. - * \param filter Optional filter for which nodes to search. You can combine this with \a tagMask = -1 to make the filter determine everything. - * Only walkable nodes are searched regardless of the filter. If the filter function returns false the node will be treated as unwalkable. - * - * \returns A List containing all nodes reachable from the seed node. - * For better memory management the returned list should be pooled, see Pathfinding.Util.ListPool. - */ - public static List GetReachableNodes (GraphNode seed, int tagMask = -1, System.Func filter = null) { - Stack dfsStack = StackPool.Claim(); - List reachable = ListPool.Claim(); - - /** \todo Pool */ - var map = new HashSet(); - - System.Action callback; - // Check if we can use the fast path - if (tagMask == -1 && filter == null) { - callback = (GraphNode node) => { - if (node.Walkable && map.Add(node)) { - reachable.Add(node); - dfsStack.Push(node); - } - }; - } else { - callback = (GraphNode node) => { - if (node.Walkable && ((tagMask >> (int)node.Tag) & 0x1) != 0 && map.Add(node)) { - if (filter != null && !filter(node)) return; - - reachable.Add(node); - dfsStack.Push(node); - } - }; - } - - callback(seed); - - while (dfsStack.Count > 0) { - dfsStack.Pop().GetConnections(callback); - } - - StackPool.Release(dfsStack); - return reachable; - } - - static Queue BFSQueue; - static Dictionary BFSMap; - - /** Returns all nodes up to a given node-distance from the seed node. - * This function performs a BFS (breadth-first search) or flood fill of the graph and returns all nodes within a specified node distance which can be reached from - * the seed node. In almost all cases when \a depth is large enough this will be identical to returning all nodes which have the same area as the seed node. - * In the editor areas are displayed as different colors of the nodes. - * The only case where it will not be so is when there is a one way path from some part of the area to the seed node - * but no path from the seed node to that part of the graph. - * - * The returned list is sorted by node distance from the seed node - * i.e distance is measured in the number of nodes the shortest path from \a seed to that node would pass through. - * Note that the distance measurement does not take heuristics, penalties or tag penalties. - * - * Depending on the number of nodes, this function can take quite some time to calculate - * so don't use it too often or it might affect the framerate of your game. - * - * \param seed The node to start the search from. - * \param depth The maximum node-distance from the seed node. - * \param tagMask Optional mask for tags. This is a bitmask. - * \param filter Optional filter for which nodes to search. You can combine this with \a depth = int.MaxValue and \a tagMask = -1 to make the filter determine everything. - * Only walkable nodes are searched regardless of the filter. If the filter function returns false the node will be treated as unwalkable. - * \returns A List containing all nodes reachable up to a specified node distance from the seed node. - * For better memory management the returned list should be pooled, see Pathfinding.Util.ListPool - * - * \warning This method is not thread safe. Only use it from the Unity thread (i.e normal game code). - * - * The video below shows the BFS result with varying values of \a depth. Points are sampled on the nodes using #GetPointsOnNodes. - * \video{bfs.mp4} - */ - public static List BFS (GraphNode seed, int depth, int tagMask = -1, System.Func filter = null) { - #if ASTAR_PROFILE - System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); - watch.Start(); - #endif - - BFSQueue = BFSQueue ?? new Queue(); - var que = BFSQueue; - - BFSMap = BFSMap ?? new Dictionary(); - var map = BFSMap; - - // Even though we clear at the end of this function, it is good to - // do it here as well in case the previous invocation of the method - // threw an exception for some reason - // and didn't clear the que and map - que.Clear(); - map.Clear(); - - List result = ListPool.Claim(); - - int currentDist = -1; - System.Action callback; - if (tagMask == -1) { - callback = node => { - if (node.Walkable && !map.ContainsKey(node)) { - if (filter != null && !filter(node)) return; - - map.Add(node, currentDist+1); - result.Add(node); - que.Enqueue(node); - } - }; - } else { - callback = node => { - if (node.Walkable && ((tagMask >> (int)node.Tag) & 0x1) != 0 && !map.ContainsKey(node)) { - if (filter != null && !filter(node)) return; - - map.Add(node, currentDist+1); - result.Add(node); - que.Enqueue(node); - } - }; - } - - callback(seed); - - while (que.Count > 0) { - GraphNode n = que.Dequeue(); - currentDist = map[n]; - - if (currentDist >= depth) break; - - n.GetConnections(callback); - } - - que.Clear(); - map.Clear(); - - #if ASTAR_PROFILE - watch.Stop(); - Debug.Log((1000*watch.Elapsed.TotalSeconds).ToString("0.0 ms")); - #endif - return result; - } - - /** Returns points in a spiral centered around the origin with a minimum clearance from other points. - * The points are laid out on the involute of a circle - * \see http://en.wikipedia.org/wiki/Involute - * Which has some nice properties. - * All points are separated by \a clearance world units. - * This method is O(n), yes if you read the code you will see a binary search, but that binary search - * has an upper bound on the number of steps, so it does not yield a log factor. - * - * \note Consider recycling the list after usage to reduce allocations. - * \see Pathfinding.Util.ListPool - */ - public static List GetSpiralPoints (int count, float clearance) { - List pts = ListPool.Claim(count); - - // The radius of the smaller circle used for generating the involute of a circle - // Calculated from the separation distance between the turns - float a = clearance/(2*Mathf.PI); - float t = 0; - - - pts.Add(InvoluteOfCircle(a, t)); - - for (int i = 0; i < count; i++) { - Vector3 prev = pts[pts.Count-1]; - - // d = -t0/2 + sqrt( t0^2/4 + 2d/a ) - // Minimum angle (radians) which would create an arc distance greater than clearance - float d = -t/2 + Mathf.Sqrt(t*t/4 + 2*clearance/a); - - // Binary search for separating this point and the previous one - float mn = t + d; - float mx = t + 2*d; - while (mx - mn > 0.01f) { - float mid = (mn + mx)/2; - Vector3 p = InvoluteOfCircle(a, mid); - if ((p - prev).sqrMagnitude < clearance*clearance) { - mn = mid; - } else { - mx = mid; - } - } - - pts.Add(InvoluteOfCircle(a, mx)); - t = mx; - } - - return pts; - } - - /** Returns the XZ coordinate of the involute of circle. - * \see http://en.wikipedia.org/wiki/Involute - */ - private static Vector3 InvoluteOfCircle (float a, float t) { - return new Vector3(a*(Mathf.Cos(t) + t*Mathf.Sin(t)), 0, a*(Mathf.Sin(t) - t*Mathf.Cos(t))); - } - - /** Will calculate a number of points around \a p which are on the graph and are separated by \a clearance from each other. - * This is like GetPointsAroundPoint except that \a previousPoints are treated as being in world space. - * The average of the points will be found and then that will be treated as the group center. - * - * \param p The point to generate points around - * \param g The graph to use for linecasting. If you are only using one graph, you can get this by AstarPath.active.graphs[0] as IRaycastableGraph. - * Note that not all graphs are raycastable, recast, navmesh and grid graphs are raycastable. On recast and navmesh it works the best. - * \param previousPoints The points to use for reference. Note that these are in world space. - * The new points will overwrite the existing points in the list. The result will be in world space. - * \param radius The final points will be at most this distance from \a p. - * \param clearanceRadius The points will if possible be at least this distance from each other. - */ - public static void GetPointsAroundPointWorld (Vector3 p, IRaycastableGraph g, List previousPoints, float radius, float clearanceRadius) { - if (previousPoints.Count == 0) return; - - Vector3 avg = Vector3.zero; - for (int i = 0; i < previousPoints.Count; i++) avg += previousPoints[i]; - avg /= previousPoints.Count; - - for (int i = 0; i < previousPoints.Count; i++) previousPoints[i] -= avg; - - GetPointsAroundPoint(p, g, previousPoints, radius, clearanceRadius); - } - - /** Will calculate a number of points around \a center which are on the graph and are separated by \a clearance from each other. - * The maximum distance from \a center to any point will be \a radius. - * Points will first be tried to be laid out as \a previousPoints and if that fails, random points will be selected. - * This is great if you want to pick a number of target points for group movement. If you pass all current agent points from e.g the group's average position - * this method will return target points so that the units move very little within the group, this is often aesthetically pleasing and reduces jitter if using - * some kind of local avoidance. - * - * \param center The point to generate points around - * \param g The graph to use for linecasting. If you are only using one graph, you can get this by AstarPath.active.graphs[0] as IRaycastableGraph. - * Note that not all graphs are raycastable, recast, navmesh and grid graphs are raycastable. On recast and navmesh it works the best. - * \param previousPoints The points to use for reference. Note that these should not be in world space. They are treated as relative to \a center. - * The new points will overwrite the existing points in the list. The result will be in world space, not relative to \a center. - * \param radius The final points will be at most this distance from \a center. - * \param clearanceRadius The points will if possible be at least this distance from each other. - * - * \todo Write unit tests - */ - public static void GetPointsAroundPoint (Vector3 center, IRaycastableGraph g, List previousPoints, float radius, float clearanceRadius) { - if (g == null) throw new System.ArgumentNullException("g"); - - var graph = g as NavGraph; - - if (graph == null) throw new System.ArgumentException("g is not a NavGraph"); - - NNInfoInternal nn = graph.GetNearestForce(center, NNConstraint.Default); - center = nn.clampedPosition; - - if (nn.node == null) { - // No valid point to start from - return; - } - - - // Make sure the enclosing circle has a radius which can pack circles with packing density 0.5 - radius = Mathf.Max(radius, 1.4142f*clearanceRadius*Mathf.Sqrt(previousPoints.Count)); //Mathf.Sqrt(previousPoints.Count*clearanceRadius*2)); - clearanceRadius *= clearanceRadius; - - for (int i = 0; i < previousPoints.Count; i++) { - Vector3 dir = previousPoints[i]; - float magn = dir.magnitude; - - if (magn > 0) dir /= magn; - - float newMagn = radius;//magn > radius ? radius : magn; - dir *= newMagn; - - GraphHitInfo hit; - - int tests = 0; - while (true) { - Vector3 pt = center + dir; - - if (g.Linecast(center, pt, nn.node, out hit)) { - if (hit.point == Vector3.zero) { - // Oops, linecast actually failed completely - // try again unless we have tried lots of times - // then we just continue anyway - tests++; - if (tests > 8) { - previousPoints[i] = pt; - break; - } - } else { - pt = hit.point; - } - } - - bool worked = false; - - for (float q = 0.1f; q <= 1.0f; q += 0.05f) { - Vector3 qt = Vector3.Lerp(center, pt, q); - worked = true; - for (int j = 0; j < i; j++) { - if ((previousPoints[j] - qt).sqrMagnitude < clearanceRadius) { - worked = false; - break; - } - } - - // Abort after 8 tests or when we have found a valid point - if (worked || tests > 8) { - worked = true; - previousPoints[i] = qt; - break; - } - } - - // Break out of nested loop - if (worked) { - break; - } - - // If we could not find a valid point, reduce the clearance radius slightly to improve - // the chances next time - clearanceRadius *= 0.9f; - // This will pick points in 2D closer to the edge of the circle with a higher probability - dir = Random.onUnitSphere * Mathf.Lerp(newMagn, radius, tests / 5); - dir.y = 0; - tests++; - } - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/PathUtilities.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/PathUtilities.cs.meta deleted file mode 100644 index 7803e88111a5ed35f05492778b640df6d77a7234..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/PathUtilities.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 7d93ae7d64ab84e23819ac5754065f34 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/ProfileHelper.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/ProfileHelper.cs deleted file mode 100644 index f1b47d39739f1f48d978f319877e4e63ba5c2087..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/ProfileHelper.cs +++ /dev/null @@ -1,123 +0,0 @@ -// Disable some warnings since this class compiles out large parts of the code depending on compiler directives -#pragma warning disable 0162 -#pragma warning disable 0414 -#pragma warning disable 0429 -//#define PROFILE // Uncomment to enable profiling -//#define KEEP_SAMPLES -using System; -using System.Collections.Generic; - -namespace Pathfinding { - public class Profile { - const bool PROFILE_MEM = false; - - public readonly string name; - readonly System.Diagnostics.Stopwatch watch; - int counter; - long mem; - long smem; - -#if KEEP_SAMPLES - List samples = new List(); -#endif - - int control = 1 << 30; - const bool dontCountFirst = false; - - public int ControlValue () { - return control; - } - - public Profile (string name) { - this.name = name; - watch = new System.Diagnostics.Stopwatch(); - } - - public static void WriteCSV (string path, params Profile[] profiles) { -#if KEEP_SAMPLES - var s = new System.Text.StringBuilder(); - s.AppendLine("x, y"); - foreach (var profile in profiles) { - for (int i = 0; i < profile.samples.Count; i++) { - s.AppendLine(profile.name + ", " + profile.samples[i].ToString("R")); - } - } - System.IO.File.WriteAllText(path, s.ToString()); -#endif - } - - public void Run (System.Action action) { - Start(); - action(); - Stop(); - } - - [System.Diagnostics.ConditionalAttribute("PROFILE")] - public void Start () { - if (PROFILE_MEM) { - smem = GC.GetTotalMemory(false); - } - if (dontCountFirst && counter == 1) return; - watch.Start(); - } - - [System.Diagnostics.ConditionalAttribute("PROFILE")] - public void Stop () { - counter++; - if (dontCountFirst && counter == 1) return; - - watch.Stop(); - if (PROFILE_MEM) { - mem += GC.GetTotalMemory(false)-smem; - } -#if KEEP_SAMPLES - samples.Add((float)watch.Elapsed.TotalMilliseconds); - watch.Reset(); -#endif - } - - [System.Diagnostics.ConditionalAttribute("PROFILE")] - /** Log using Debug.Log */ - public void Log () { - UnityEngine.Debug.Log(ToString()); - } - - [System.Diagnostics.ConditionalAttribute("PROFILE")] - /** Log using System.Console */ - public void ConsoleLog () { -#if !NETFX_CORE || UNITY_EDITOR - System.Console.WriteLine(ToString()); -#endif - } - - [System.Diagnostics.ConditionalAttribute("PROFILE")] - public void Stop (int control) { - counter++; - if (dontCountFirst && counter == 1) return; - - watch.Stop(); - if (PROFILE_MEM) { - mem += GC.GetTotalMemory(false)-smem; - } - - if (this.control == 1 << 30) this.control = control; - else if (this.control != control) throw new Exception("Control numbers do not match " + this.control + " != " + control); - } - - [System.Diagnostics.ConditionalAttribute("PROFILE")] - public void Control (Profile other) { - if (ControlValue() != other.ControlValue()) { - throw new Exception("Control numbers do not match ("+name + " " + other.name + ") " + ControlValue() + " != " + other.ControlValue()); - } - } - - public override string ToString () { - string s = name + " #" + counter + " " + watch.Elapsed.TotalMilliseconds.ToString("0.0 ms") + " avg: " + (watch.Elapsed.TotalMilliseconds/counter).ToString("0.00 ms"); - - if (PROFILE_MEM) { - s += " avg mem: " + (mem/(1.0*counter)).ToString("0 bytes"); - } - return s; - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/ProfileHelper.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/ProfileHelper.cs.meta deleted file mode 100644 index 8754491c4aac902249c68409492433129b1b5a92..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/ProfileHelper.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8ec9029c797ec471fa8b5640e1829fc0 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/RetainedGizmos.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/RetainedGizmos.cs deleted file mode 100644 index a621538e34d0f9bbed2d1d943c2641959b34efdb..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/RetainedGizmos.cs +++ /dev/null @@ -1,374 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using PF; -using Color32 = UnityEngine.Color32; -using Mathf = UnityEngine.Mathf; -using Matrix4x4 = UnityEngine.Matrix4x4; -using Vector2 = UnityEngine.Vector2; -using Vector3 = UnityEngine.Vector3; -#if UNITY_5_5_OR_NEWER -using UnityEngine.Profiling; -#endif - -namespace Pathfinding.Util { - /** Helper for drawing Gizmos in a performant way. - * This is a replacement for the Unity Gizmos class as that is not very performant - * when drawing very large amounts of geometry (for example a large grid graph). - * These gizmos can be persistent, so if the data does not change, the gizmos - * do not need to be updated. - * - * How to use - * - Create a Hasher object and hash whatever data you will be using to draw the gizmos - * Could be for example the positions of the vertices or something. Just as long as - * if the gizmos should change, then the hash changes as well. - * - Check if a cached mesh exists for that hash - * - If not, then create a Builder object and call the drawing methods until you are done - * and then call Finalize with a reference to a gizmos class and the hash you calculated before. - * - Call gizmos.Draw with the hash. - * - When you are done with drawing gizmos for this frame, call gizmos.FinalizeDraw - * - * \code - * var a = Vector3.zero; - * var b = Vector3.one; - * var color = Color.red; - * var hasher = new RetainedGizmos.Hasher(); - * hasher.AddHash(a.GetHashCode()); - * hasher.AddHash(b.GetHashCode()); - * hasher.AddHash(color.GetHashCode()); - * if (!gizmos.Draw(hasher)) { - * using (var helper = gizmos.GetGizmoHelper(active, hasher)) { - * builder.DrawLine(a, b, color); - * builder.Finalize(gizmos, hasher); - * } - * } - * \endcode - */ - public class RetainedGizmos { - /** Combines hashes into a single hash value */ - public struct Hasher { - ulong hash; - bool includePathSearchInfo; - PathHandler debugData; - - public Hasher (AstarPath active) { - hash = 0; - this.debugData = active.debugPathData; - includePathSearchInfo = debugData != null && (active.debugMode == GraphDebugMode.F || active.debugMode == GraphDebugMode.G || active.debugMode == GraphDebugMode.H || active.showSearchTree); - AddHash((int)active.debugMode); - AddHash(active.debugFloor.GetHashCode()); - AddHash(active.debugRoof.GetHashCode()); - } - - public void AddHash (int hash) { - this.hash = (1572869UL * this.hash) ^ (ulong)hash; - } - - public void HashNode (GraphNode node) { - AddHash(node.GetGizmoHashCode()); - - if (includePathSearchInfo) { - var pathNode = debugData.GetPathNode(node.NodeIndex); - AddHash((int)pathNode.pathID); - AddHash(pathNode.pathID == debugData.PathID ? 1 : 0); - AddHash((int) pathNode.F); - } - } - - public ulong Hash { - get { - return hash; - } - } - } - - /** Helper for drawing gizmos */ - public class Builder : IAstarPooledObject { - List lines = new List(); - List lineColors = new List(); - List meshes = new List(); - - public void DrawMesh (RetainedGizmos gizmos, Vector3[] vertices, List triangles, Color[] colors) { - var mesh = gizmos.GetMesh(); - - // Set all data on the mesh - mesh.vertices = vertices; - mesh.SetTriangles(triangles, 0); - mesh.colors = colors; - - // Upload all data and mark the mesh as unreadable - mesh.UploadMeshData(true); - meshes.Add(mesh); - } - - /** Draws a wire cube after being transformed the specified transformation */ - public void DrawWireCube (GraphTransform tr, Bounds bounds, Color color) { - var min = bounds.min; - var max = bounds.max; - - DrawLine(tr.Transform(new Vector3(min.x, min.y, min.z)), tr.Transform(new Vector3(max.x, min.y, min.z)), color); - DrawLine(tr.Transform(new Vector3(max.x, min.y, min.z)), tr.Transform(new Vector3(max.x, min.y, max.z)), color); - DrawLine(tr.Transform(new Vector3(max.x, min.y, max.z)), tr.Transform(new Vector3(min.x, min.y, max.z)), color); - DrawLine(tr.Transform(new Vector3(min.x, min.y, max.z)), tr.Transform(new Vector3(min.x, min.y, min.z)), color); - - DrawLine(tr.Transform(new Vector3(min.x, max.y, min.z)), tr.Transform(new Vector3(max.x, max.y, min.z)), color); - DrawLine(tr.Transform(new Vector3(max.x, max.y, min.z)), tr.Transform(new Vector3(max.x, max.y, max.z)), color); - DrawLine(tr.Transform(new Vector3(max.x, max.y, max.z)), tr.Transform(new Vector3(min.x, max.y, max.z)), color); - DrawLine(tr.Transform(new Vector3(min.x, max.y, max.z)), tr.Transform(new Vector3(min.x, max.y, min.z)), color); - - DrawLine(tr.Transform(new Vector3(min.x, min.y, min.z)), tr.Transform(new Vector3(min.x, max.y, min.z)), color); - DrawLine(tr.Transform(new Vector3(max.x, min.y, min.z)), tr.Transform(new Vector3(max.x, max.y, min.z)), color); - DrawLine(tr.Transform(new Vector3(max.x, min.y, max.z)), tr.Transform(new Vector3(max.x, max.y, max.z)), color); - DrawLine(tr.Transform(new Vector3(min.x, min.y, max.z)), tr.Transform(new Vector3(min.x, max.y, max.z)), color); - } - - public void DrawLine (Vector3 start, Vector3 end, Color color) { - lines.Add(start); - lines.Add(end); - var col32 = (Color32)color; - lineColors.Add(col32); - lineColors.Add(col32); - } - - public void Submit (RetainedGizmos gizmos, Hasher hasher) { - SubmitLines(gizmos, hasher.Hash); - SubmitMeshes(gizmos, hasher.Hash); - } - - void SubmitMeshes (RetainedGizmos gizmos, ulong hash) { - for (int i = 0; i < meshes.Count; i++) { - gizmos.meshes.Add(new MeshWithHash { hash = hash, mesh = meshes[i], lines = false }); - gizmos.existingHashes.Add(hash); - } - } - - void SubmitLines (RetainedGizmos gizmos, ulong hash) { - // Unity only supports 65535 vertices per mesh. 65532 used because MaxLineEndPointsPerBatch needs to be even. - const int MaxLineEndPointsPerBatch = 65532/2; - int batches = (lines.Count + MaxLineEndPointsPerBatch - 1)/MaxLineEndPointsPerBatch; - - for (int batch = 0; batch < batches; batch++) { - int startIndex = MaxLineEndPointsPerBatch * batch; - int endIndex = Mathf.Min(startIndex + MaxLineEndPointsPerBatch, lines.Count); - int lineEndPointCount = endIndex - startIndex; - UnityEngine.Assertions.Assert.IsTrue(lineEndPointCount % 2 == 0); - - // Use pooled lists to avoid excessive allocations - var vertices = ListPool.Claim(lineEndPointCount*2); - var colors = ListPool.Claim(lineEndPointCount*2); - var normals = ListPool.Claim(lineEndPointCount*2); - var uv = ListPool.Claim(lineEndPointCount*2); - var tris = ListPool.Claim(lineEndPointCount*3); - // Loop through each endpoint of the lines - // and add 2 vertices for each - for (int j = startIndex; j < endIndex; j++) { - var vertex = (Vector3)lines[j]; - vertices.Add(vertex); - vertices.Add(vertex); - - var color = (Color32)lineColors[j]; - colors.Add(color); - colors.Add(color); - uv.Add(new Vector2(0, 0)); - uv.Add(new Vector2(1, 0)); - } - - // Loop through each line and add - // one normal for each vertex - for (int j = startIndex; j < endIndex; j += 2) { - var lineDir = (Vector3)(lines[j+1] - lines[j]); - // Store the line direction in the normals. - // A line consists of 4 vertices. The line direction will be used to - // offset the vertices to create a line with a fixed pixel thickness - normals.Add(lineDir); - normals.Add(lineDir); - normals.Add(lineDir); - normals.Add(lineDir); - } - - // Setup triangle indices - // A triangle consists of 3 indices - // A line (4 vertices) consists of 2 triangles, so 6 triangle indices - for (int j = 0, v = 0; j < lineEndPointCount*3; j += 6, v += 4) { - // First triangle - tris.Add(v+0); - tris.Add(v+1); - tris.Add(v+2); - - // Second triangle - tris.Add(v+1); - tris.Add(v+3); - tris.Add(v+2); - } - - var mesh = gizmos.GetMesh(); - - // Set all data on the mesh - mesh.SetVertices(vertices); - mesh.SetTriangles(tris, 0); - mesh.SetColors(colors); - mesh.SetNormals(normals); - mesh.SetUVs(0, uv); - - // Upload all data and mark the mesh as unreadable - mesh.UploadMeshData(true); - - // Release the lists back to the pool - ListPool.Release(ref vertices); - ListPool.Release(ref colors); - ListPool.Release(ref normals); - ListPool.Release(ref uv); - ListPool.Release(ref tris); - - gizmos.meshes.Add(new MeshWithHash { hash = hash, mesh = mesh, lines = true }); - gizmos.existingHashes.Add(hash); - } - } - - void IAstarPooledObject.OnEnterPool () { - lines.Clear(); - lineColors.Clear(); - meshes.Clear(); - } - } - - struct MeshWithHash { - public ulong hash; - public Mesh mesh; - public bool lines; - } - - List meshes = new List(); - HashSet usedHashes = new HashSet(); - HashSet existingHashes = new HashSet(); - Stack cachedMeshes = new Stack(); - - public GraphGizmoHelper GetSingleFrameGizmoHelper () { - var uniqHash = new RetainedGizmos.Hasher(); - - uniqHash.AddHash(Time.realtimeSinceStartup.GetHashCode()); - Draw(uniqHash); - return GetGizmoHelper(uniqHash); - } - - public GraphGizmoHelper GetGizmoHelper (Hasher hasher) { - var helper = ObjectPool.Claim(); - - helper.Init(hasher, this); - return helper; - } - - void PoolMesh (Mesh mesh) { - mesh.Clear(); - cachedMeshes.Push(mesh); - } - - Mesh GetMesh () { - if (cachedMeshes.Count > 0) { - return cachedMeshes.Pop(); - } else { - return new Mesh { - hideFlags = HideFlags.DontSave - }; - } - } - - /** Material to use for the navmesh in the editor */ - public Material surfaceMaterial; - - /** Material to use for the navmesh outline in the editor */ - public Material lineMaterial; - - /** True if there already is a mesh with the specified hash */ - public bool HasCachedMesh (Hasher hasher) { - return existingHashes.Contains(hasher.Hash); - } - - /** Schedules the meshes for the specified hash to be drawn. - * \returns False if there is no cached mesh for this hash, you may want to - * submit one in that case. The draw command will be issued regardless of the return value. - */ - public bool Draw (Hasher hasher) { - usedHashes.Add(hasher.Hash); - return HasCachedMesh(hasher); - } - - /** Schedules all meshes that were drawn the last frame (last time FinalizeDraw was called) to be drawn again. - * Also draws any new meshes that have been added since FinalizeDraw was last called. - */ - public void DrawExisting () { - for (int i = 0; i < meshes.Count; i++) { - usedHashes.Add(meshes[i].hash); - } - } - - /** Call after all #Draw commands for the frame have been done to draw everything */ - public void FinalizeDraw () { - RemoveUnusedMeshes(meshes); - -#if UNITY_EDITOR - // Make sure the material references are correct - if (surfaceMaterial == null) surfaceMaterial = UnityEditor.AssetDatabase.LoadAssetAtPath(EditorResourceHelper.editorAssets + "/Materials/Navmesh.mat", typeof(Material)) as Material; - if (lineMaterial == null) lineMaterial = UnityEditor.AssetDatabase.LoadAssetAtPath(EditorResourceHelper.editorAssets + "/Materials/NavmeshOutline.mat", typeof(Material)) as Material; -#endif - - var cam = Camera.current; - var planes = GeometryUtility.CalculateFrustumPlanes(cam); - - // Silently do nothing if the materials are not set - if (surfaceMaterial == null || lineMaterial == null) return; - - Profiler.BeginSample("Draw Retained Gizmos"); - // First surfaces, then lines - for (int matIndex = 0; matIndex <= 1; matIndex++) { - var mat = matIndex == 0 ? surfaceMaterial : lineMaterial; - for (int pass = 0; pass < mat.passCount; pass++) { - mat.SetPass(pass); - for (int i = 0; i < meshes.Count; i++) { - if (meshes[i].lines == (mat == lineMaterial) && GeometryUtility.TestPlanesAABB(planes, meshes[i].mesh.bounds)) { - Graphics.DrawMeshNow(meshes[i].mesh, Matrix4x4.identity); - } - } - } - } - - usedHashes.Clear(); - Profiler.EndSample(); - } - - /** Destroys all cached meshes. - * Used to make sure that no memory leaks happen in the Unity Editor. - */ - public void ClearCache () { - usedHashes.Clear(); - RemoveUnusedMeshes(meshes); - - while (cachedMeshes.Count > 0) { - Mesh.DestroyImmediate(cachedMeshes.Pop()); - } - - UnityEngine.Assertions.Assert.IsTrue(meshes.Count == 0); - } - - void RemoveUnusedMeshes (List meshList) { - // Walk the array with two pointers - // i pointing to the entry that should be filled with something - // and j pointing to the entry that is a potential candidate for - // filling the entry at i. - // When j reaches the end of the list it will be reduced in size - for (int i = 0, j = 0; i < meshList.Count; ) { - if (j == meshList.Count) { - j--; - meshList.RemoveAt(j); - } else if (usedHashes.Contains(meshList[j].hash)) { - meshList[i] = meshList[j]; - i++; - j++; - } else { - PoolMesh(meshList[j].mesh); - existingHashes.Remove(meshList[j].hash); - j++; - } - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/RetainedGizmos.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/RetainedGizmos.cs.meta deleted file mode 100644 index 5b42fe522cbce25121ac79030ba5cdd1e0c4c812..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/RetainedGizmos.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7a3cd109c93704c7ba499b8653f402ac -timeCreated: 1472980867 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/UnityReferenceHelper.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/UnityReferenceHelper.cs deleted file mode 100644 index 667cabf6fa73f3b2765e1aba1b2bfb167c7e421a..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/UnityReferenceHelper.cs +++ /dev/null @@ -1,38 +0,0 @@ -using PF; -using UnityEngine; - -namespace Pathfinding { - [ExecuteInEditMode] - /** Helper class to keep track of references to GameObjects. - * Does nothing more than to hold a GUID value. - */ - [HelpURL("http://arongranberg.com/astar/docs/class_pathfinding_1_1_unity_reference_helper.php")] - public class UnityReferenceHelper : MonoBehaviour { - [HideInInspector] - [SerializeField] - private string guid; - - public string GetGUID () { - return guid; - } - - public void Awake () { - Reset(); - } - - public void Reset () { - if (string.IsNullOrEmpty(guid)) { - guid = Guid.NewGuid().ToString(); - Debug.Log("Created new GUID - "+guid); - } else { - foreach (UnityReferenceHelper urh in FindObjectsOfType(typeof(UnityReferenceHelper)) as UnityReferenceHelper[]) { - if (urh != this && guid == urh.guid) { - guid = Guid.NewGuid().ToString(); - Debug.Log("Created new GUID - "+guid); - return; - } - } - } - } - } -} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/UnityReferenceHelper.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/UnityReferenceHelper.cs.meta deleted file mode 100644 index 27a89210b174a9d33b7448d560416c232643c35e..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/Utilities/UnityReferenceHelper.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 632ae7eb1d4ce49d38a1e38ee7efe7c5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/changelog.cs b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/changelog.cs deleted file mode 100644 index df616c6ba8b4fd1e9e8e13ace9091099d5022f29..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/changelog.cs +++ /dev/null @@ -1,1697 +0,0 @@ -/** \page changelog Changelog -\order{-10} - -- 4.1.16 (2018-04-26) - - Fixed PointNode.ContainsConnection could throw an exception if the node didn't have any connections. - - Fixed AILerp's started out with a destination set to (0,0,0) instead of not having a destination set. - So if you did not set a destination for it, it would try to move to the world origin. - -- 4.1.15 (2018-04-06) - - Fixed RichAI.desiredVelocity always being zero. Thanks sukrit1234 for finding the bug. - - Added some video examples to \link Pathfinding.AIPath.pickNextWaypointDist AIPath.pickNextWaypointDist\endlink. - - Fixed a bug introduced in 4.1.14 which caused scanning recast graphs in the Unity editor to fail with an error sometimes. - - Fixed the position returned from querying the closest point on the graph to a point (AstarPath.GetNearest) on layered grid graphs would always be the node center, not the closest point on the node's surface. Thanks Kevin_Jenkins for reporting this. - This caused among other things the ClosestOnNode option for the Seeker's StartEndModifier to be identical to the SnapToNode option. - - Fixed RVOController.velocity being zero when the game was paused (Time.timeScale = 0). - -- 4.1.14 (2018-03-06) - - Fixed Pathfinding.GridNode.ClosestPointOnNode being completely broken. Thanks Ivan for reporting this. - This was used internally in some cases when pathfinding on grid graphs. So this fixes a few cases of strange pathfinding results too. - - It is now possible to use pathfinding from editor scripts. See \ref editor-mode. - -- 4.1.13 (2018-03-06) - - Fixed LayerGridGraph.GetNode not performing out of bounds checks. - - Exposed a public method \link Pathfinding.PointGraph.ConnectNodes PointGraph.ConnectNodes\endlink which can be useful if you are creating a graph from scratch using e.g PointGraph.AddNode. - - Improved the \ref multiple-agent-types tutorial. - - Improved the \ref custom_movement_script tutorial, among other things it can now also be followed if you are creating a 2D game. - The movement script that you write has also been improved. - - Improved how the RichAI movement script keeps track of the node it is on. It should now be more stable in some cases, especially when the ground's y-coordinate lines up badly with the y-coordinate of the navmesh. - - Added an \link Pathfinding.AIPath.constrainInsideGraph option\endlink to AIPath for constraining the agent to be inside the traversable surface of the graph at all times. - I think it should work everywhere without any issues, but please post in the forum if anything seems to break. - - Fixed the proper fonts were not imported in the documentation html, so for many browsers it fell back to some other less pretty font. - -- 4.1.12 (2018-02-27) - - Fixed right clicking on array elements in the Unity inspector would bring up the 'Show in online documentation' context menu instead of the Unity built-in context menu (which is very useful). - - Navmesh assets used in the navmesh graph no longer have to be at the root of the Resources folder, they can be in any subfolder to the Resources folder. - -- 4.1.11 (2018-02-22) - - You can now set which graphs an agent should use directly on the Seeker component instead of having to do it through code. - \shadowimage{multiple_agents/seeker.png} - - Added tutorial for how to deal with agents of different sizes: \ref multiple-agent-types. - - Fixed scanning recast graphs could in rare cases throw an exception due to a multithreading race condition. Thanks emrys90 for reporting the bug. - - Fixed a regression in 4.0.6 which caused position based penalty to stop working for layered grid graphs. Thanks DougW for reporting the bug. - - Rotation speed and acceleration are now decoupled for AIPath and RichAI. Previously the acceleration limited how quickly the agents could rotate due to how the math for centripetal acceleration works out. - - Acceleration can now be set to a custom value on the AIPath class. It defaults to a 'Default' mode which calculates an acceleration such that the agent reaches its top speed in about 0.4 seconds. This is the same behaviour that was hardcoded in earlier versions. - - Fixed a bug in \link Pathfinding.GraphUtilities.GetContours GraphUtilities.GetContours\endlink for grid graphs when the nodes parameter was explicitly passed as non null that could cause some contours not to be generated. Thanks andrewBeers for reporting the bug. - - Improved documentation for \link Pathfinding.StartEndModifier.Exactness StartEndModifier.Exactness\endlink. - -- 4.1.10 (2018-01-21) - - 4.1.0 through 4.1.9 were beta versions, all their changelogs have been merged into this one. - - Upgrade notes - - Fixed the AIPath script with rotationIn2D would rotate so that the Z axis pointed in the -Z direction instead of as is common for Unity 2D objects: to point in the +Z direction. - - ALL classes are now inside the Pathfinding namespace to reduce potential naming collisions with other packages. - Make sure you have "using Pathfinding;" at the top of your scripts. - Previously most scripts have been inside the Pathfinding namespace, but not all of them. - The exception is the AstarPath script to avoid breaking too much existing code (and it has a very distinctive name so name collisions are not likely). - - Since the API for several movement scripts have been unified (see below), many members of the movement scripts have been deprecated. - Your code should continue to work exactly as before (except bugs of course, but if some other behaviour is broken, please start a thread in the forum) but you may get deprecation warnings. - In most cases the changes should be very easy to make as the visible changes mostly consist of renames. - - A method called \link Pathfinding.IAstarAI.SetPath SetPath\endlink has been added to all movement scripts. This replaces some hacks you could achieve by calling the OnPathComplete method on the movement scripts - from other scripts. If you have been doing that you should now call SetPath instead. - - Paths calculated with a heuristic scale greater than 1 (the default is 1) might be slightly less optimal compared to before. - See below for more information. - - The StartEndModifier's raycasting options are now only used if the 'Original' snapping option is used as that's the only one it makes sense for. - - The RaycastModifier has changed a bit, so your paths might look slightly different, however in all but very rare cases it should be at least as good as in previous versions. - - Linecast methods will now assign the #Pathfinding.GraphHitInfo.node field with the last node that was traversed in case no obstacle was hit, previously it was always null. - - Multithreading is now enabled by default (1 thread). This may affect you if you have been adding the AstarPath component during runtime using a script, though the change is most likely positive. - - The DynamicGridObstacle component will now properly update the graph when the object is deactivated since the object just disappeared and shouldn't block the graph anymore. - Previously it only did this if the object was destroyed, not if it was deactivated. - - If you have written a custom graph type you may have to change the access modifier on some methods. - For example the ScanInternal method has been changed from being public to being protected. - - Some internal methods on graphs have been hidden. They should never have been used by user code - but in case you have done that anyway you will have to access them using the IGraphInternals or IUpdatableGraph interface now. - - Removed some compatibility code for Seekers for when upgrading from version 3.6.7 and earlier (released about 2 years ago). - If you are upgrading from a version that old then the 'Valid Tags' field on the Seeker component may get reset to the default value. - If you did not use that field then you will not have to do anything. - - AIPath now rotates towards actual movement direction when RVO is used. - - Improvements - - Improved pathfinding performance by around 8% for grid graphs, possibly more for other graph types. - This involved removing a special case for when the pathfinding heuristic is not admissable (in short, when A* Inspector -> Settings -> Heuristic Scale was greater than 1). - Now paths calculated with the heuristic scale greater than 1 might be slightly less optimal compared to before. - If this is important I suggest you reduce the heuristic scale to compensate. - Note that as before: a heuristic scale of 1 is the default and if it is greater than 1 then the calculated paths may no longer be the shortest possible ones. - - Improved overall pathfinding performance by an additional 10-12% by heavily optimizing some core algorithms. - - Improved performance of querying for the closest node to a point when using the PointGraph and \link Pathfinding.PointGraph.optimizeForSparseGraph optimizeForSparseGraph\endlink. - The improvements are around 7%. - - Unified the API for the included movement scripts (AIPath, RichAI, AILerp) and added a large number of nice properties and functionality. - - The \link Pathfinding.IAstarAI IAstarAI\endlink interface can now be used with all movement scripts. - - To make it easier to migrate from Unity's navmesh system, this interface has been designed to be similar to Unity's NavmeshAgent API. - - The interface has several nice properties like: - \link Pathfinding.IAstarAI.remainingDistance remainingDistance\endlink, - \link Pathfinding.IAstarAI.reachedEndOfPath reachedEndOfPath\endlink, - \link Pathfinding.IAstarAI.pathPending pathPending\endlink, - \link Pathfinding.IAstarAI.steeringTarget steeringTarget\endlink, - \link Pathfinding.IAstarAI.isStopped isStopped\endlink, - \link Pathfinding.IAstarAI.destination destination\endlink, and many more. - - You no longer need to set the destination of an agent using a Transform object, instead you can simply set the \link Pathfinding.IAstarAI.destination destination\endlink property. - Note that when you upgrade, a new AIDestinationSetter component will be automatically created which has a 'target' field. So your existing code will continue to work. - - Improved behavior when AIPath/RichAI characters move down slopes. - Previously the way gravity was handled could sometimes lead to a 'bouncing' behavior unless the gravity was very high. Old behavior on the left, new behavior on the right. - \htmlonly \endhtmlonly - - Improved the grid graph inspector by adding preconfigured modes for different node shapes: square grids, isometric grids and hexagons. - This also reduces clutter in the inspector since irrelevant options can be hidden. - \shadowimage{changelog/grid_shape.png} - - For 2D grid graphs the inspector will now show a single rotation value instead of a full 3D rotation which makes it a lot easier to configure. - - Improved the performance of the \link Pathfinding.RaycastModifier RaycastModifier\endlink significantly. Common speedups on grid graphs range from 2x to 10x. - - The RaycastModifier now has a \link Pathfinding.RaycastModifier.Quality quality enum\endlink. The higher quality options use a new algorithm that is about the same performance (or slightly slower) compared to the RaycastModifier in previous versions - however it often manages to simplify the path a lot more. - The quality of the previous RaycastModifier with default settings corresponds to somewhere between the Low and Medium qualities. - - Improved support for HiDPI (retina) screens as well as improved visual coherency for some icons. - \shadowimage{changelog/retina_icons.png} - - Improved the 'eye' icon for when a graph's gizmos are disabled to make it easier to spot. - - Added \link Pathfinding.GridGraph.CalculateConnectionsForCellAndNeighbours GridGraph.CalculateConnectionsForCellAndNeighbours\endlink. - - AIPath now works with point graphs in 2D as well (assuming the 'rotate in 2D' checkbox is enabled). - - Improved the performance of the RVONavmesh component when used together with navmesh cutting, especially when many navmesh cuts are moving at the same time. - - A warning is now displayed in the editor if one tries to use both the AIDestinationSetter and Patrol components on an agent at the same time. - - Improved linecasts on recast/navmesh graphs. They are now more accurate (there were some edge cases that previously could cause it to fail) and faster. - Performance has been improved by by around 3x for longer linecasts and 1.4x for shorter ones. - - Linecast methods will now assign the #Pathfinding.GraphHitInfo.node field with the last node that was traversed in case no obstacle was hit. - - Linecast on graphs now set the hit point to the endpoint of the line if no obstacle was hit. Previously the endpoint would be set to Vector3.zero. Thanks borluse for suggesting this. - - Multithreading is now enabled by default (1 thread). - - The DynamicGridObstacle component now works with 2D colliders. - - Clicking on the graph name in the inspector will no longer focus the name text field. - To edit the graph name you will now have to click the Edit/Pen button to the right of the graph name. - Previously it was easy to focus the text field by mistake when you actually wanted to show the graph settings. - \shadowimage{changelog/edit_icon.png} - - Reduced memory usage of the PointGraph when using \link Pathfinding.PointGraph.optimizeForSparseGraph optimizeForSparseGraph\endlink. - - Improved the StartEndModifier inspector slightly. - - The Seeker inspector now has support for multi-editing. - - The AIPath and RichAI scripts now rotate to face the direction they are actually moving with when using local avoidance (RVO) - instead of always facing the direction they want to move with. At very low speeds they fall back to looking the direction they want to move with to avoid jitter. - - Improved the Seeker inspector. Unified the UI for setting tag penalties and determining if a tag should be traversable. - \shadowimage{changelog/seeker_tags.png} - - Reduced string allocations for error messages when paths fail. - - Added support for 2D physics to the #Pathfinding.RaycastModifier component. - - Improved performance of GraphUpdateObjects with updatePhysics=false on rotated navmesh/recast graphs. - - Improved the inspector for AILerp. - - RVO obstacles can now be visualized by enabling the 'Draw Obstacles' checkbox on the RVOSimulator component. - \shadowimage{changelog/rvo_navmesh_obstacle.png} - - Reduced allocations in the funnel modifier. - - Added a 'filter' parameter to \link Pathfinding.PathUtilities.BFS PathUtilities.BFS\endlink and \link Pathfinding.PathUtilities.GetReachableNodes PathUtilities.GetReachableNodes\endlink. - - Added a method called \link Pathfinding.IAstarAI.SetPath SetPath\endlink to all movement scripts. - - Added \link Pathfinding.GraphNode.Graph GraphNode.Graph\endlink. - - Added #Pathfinding.MeshNode.ContainsPoint(Vector3) in addition to the already existing MeshNode.ContainsPoint(Int3). - - Added #Pathfinding.MeshNode.ContainsPointInGraphSpace. - - Added #Pathfinding.TriangleMeshNode.GetVerticesInGraphSpace. - - Added Pathfinding.AstarData.FindGraph(predicate). - - Added Pathfinding.AstarData.FindGraphWhichInheritsFrom(type). - - Added a new class \link Pathfinding.GraphUtilities GraphUtilities\endlink which has some utilities for extracting contours of graphs. - - Added a new method \link Pathfinding.GridGraph.Linecast(GridNodeBase,GridNodeBase) Linecast(GridNodeBase,GridNodeBase)\endlink to the GridGraph class which is much faster than the normal Linecast methods. - - Added \link Pathfinding.GridGraph.GetNode(int,int) GridGraph.GetNode(int,int)\endlink. - - Added MeshNode.AddConnection(node,cost,edge) in addition to the already existing AddConnection(node,cost) method. - - Added a \link Pathfinding.NavMeshGraph.recalculateNormals\endlink setting to the navmesh graph for using the original mesh normals. This is useful for spherical/curved worlds. - - Documentation - - Added a documentation page on error messages: \ref error-messages. - - Added a tutorial on how to create a wandering AI: \ref wander. - - Added tutorial on bitmasks: \ref bitmasks. - - You can now right-click on most fields in the Unity Inspector to bring up a link to the online documentation. - \shadowimage{inspector_doc_links.png} - - Various other documentation improvements and fixes. - - Changes - - Height or collision testing for grid graphs now never hits triggers, regardless of the Unity Physics setting 'Queries Hit Triggers' - which has previously controlled this. - - Seeker.StartPath will no longer overwrite the path's graphMask unless it was explicitly passed as a parameter to the StartPath method. - - The built in movement scripts no longer uses a coroutine for scheduling path recalculations. - This shouldn't have any impact for you unless you have been modifying those scripts. - - Replaced the MineBotAI script that has been used in the tutorials with MineBotAnimation. - The new script does not inherit from AIPath so in the example scenes there is now one AIPath component and one MineBotAnimation script on each unit. - - Removed prompt to make the package support UnityScript which would show up the first time you used the package in a new project. - Few people use UnityScript nowadays so that prompt was mostly annoying. UnityScript support can still be enabled, see \ref javscript. - - If deserialization fails, the graph data will no longer be stored in a backup byte array to be able to be recovered later. - This was not very useful, but more importantly if the graph data was very large (several megabytes) then Unity's Undo system would choke on it - and essentially freeze the Unity editor. - - The StartEndModifier's raycasting options are now only used if the 'Original' snapping option is used as that's the only one it makes sense for. - - The RaycastModifier.subdivideEveryIter field has been removed, this is now always enabled except for the lowest quality setting. - - The RaycastModifier.iterations field has been removed. The number of iterations is now controlled by the quality field. - Unfortunately this setting cannot be directly mapped to a quality value, so if you are upgrading all RaycastModifier components will use the quality Medium after the upgrade. - - The default value for \link Pathfinding.RVOController.lockWhenNotMoving RVOController.lockWhenNotMoving\endlink is now false. - - Tiles are now enabled by default on recast graphs. - - Modifiers now register/unregister themselves with the Seeker component during OnEnable/OnDisable instead of Awake/OnDestroy. - If you have written any custom modifiers which defines those methods you may have to add the 'override' modifier to those methods and call base.OnEnable/OnDisable. - - When paths fail this is now always logged as a warning in the Unity console instead of a normal log message. - - Node connections now store which edge of the node shape that is used for that node. This is used for navmesh/recast graphs. - - The \link Pathfinding.RVOController.velocity velocity\endlink property on the RVOController can now be assigned to and that has the same effect as calling ForceSetVelocity. - - Deprecated the RVOController.ForceSetVelocity method. You should use the velocity property instead. - - All graphs now explicitly implement the IUpdatableGraph interface. - This is done to hide those methods (which should not be used directly) and thereby reduce confusion about which methods should be used to update graphs. - - Hid several internal methods behind the IGraphInternals interface to reduce clutter in the documentation and IntelliSense suggestions. - - Removed NavGraph.UnloadGizmoMeshes because it was not used for anything. - - Since 4.0 individual graphs can be scanned using AstarPath.Scan. The older NavGraph.Scan method now redirects to that method - which is more robust. This may cause slight changes in behavior, however the recommendation in the documentation has always been to use AstarPath.Scan anyway - so I do not expect many to have used the NavGraph.Scan method. - - Deprecated the NavGraph.ScanGraph method since it just does the same thing as NavGraph.Scan. - - Deprecated the internal methods Path.LogError and Path.Log. - - Added the new internal method Path.FailWithError which replaces LogError and Log. - - Made the AIPath.TrySearchPath method private, it should never have been public to begin with. - - Fixes - - Fixed AIPath/RichAI throwing exceptions in the Unity Editor when drawing gizmos if the game starts while they are enabled in a disabled gameObject. - - Fixed some typos in the documentation for PathUtilities.BFS and PathUtilities.GetReachableNodes. - - For some point graph settings, path requests to points that could not be reached would fail completely instead of going to the closest node that it could reach. Thanks BYELIK for reporting this bug. - If you for some reason have been relying on the old buggy behavior you can emulate it by setting A* Inspector -> Settings -> Max Nearest Node Distance to a very low value. - - Fixed connection costs were assumed to be equal in both directions for bidirectional connections. - - Fixed a compiler error when building for UWP/HoloLens. - - Fixed some cases where circles used for debugging could have a much lower resolution than intended (#Pathfinding.Util.Draw.Debug.CircleXZ). - - Fixed RVO agents which were locked but some script sent it movement commands would cause the RVO system to think it was moving - even though it was actually stationary, causing some odd behavior. Now locked agents are always treated as stationary. - - Fixed RVO obstacles generated from graph borders (using the RVONavmesh component) could be incorrect if a tiled recast graph and navmesh cutting was used. - The bug resulted in an RVO obstacle around the tile that was most recently updated by a navmesh cut even where there should be no obstacle. - - Fixed the RVONavmesh component could throw an exception in some cases when using tiled recast graphs. - - Fixed a regression in some 4.0.x version where setting \link Pathfinding.RVOController.velocity RVOController.velocity\endlink to make the agent's movement externally controlled - would not work properly (the system would always think the agent had a velocity of zero). - - Fixed the RichAI movement script could sometimes get stuck on the border between two tiles. - (due to a possibility of division by zero that would cause its velocity to become NaN). - - Fixed AIPath/RichAI movement not working properly with rigidbodies in Unity 2017.3+ when the new physics setting "Auto Sync Transforms" was disabled. Thanks DougW for reporting this and coming up with a fix. - - Fixed a few cases where \link Pathfinding.RichAI RichAI\endlink would automatically recalculate its path even though \link Pathfinding.RichAI.canSearch canSearch\endlink was disabled. - - Fixed some compiler warnings when using Unity 2017.3 or later. - - Fixed graphical artifacts in the graph visualization line drawing code which could show up at very large coordinate values or steep viewing angles. - Differential calculus can be really useful sometimes. - - Fixed the \ref MultiTargetPathExample.cs. - - Fixed the width/depth fields in the recast graph inspector causing warnings to be logged (introduced in 4.1.7). Thanks NoxMortem for reporting this. - - Fixed the Pathfinding.GraphHitInfo.tangentOrigin field was offset by half a node when using linecasting on grid graphs. - - Fixed the AIPath script with rotationIn2D would rotate so that the Z axis pointed in the -Z direction instead of as is common for Unity 2D objects: to point in the +Z direction. - - Fixed the AILerp script with rotationIn2D would rotate incorrectly if it started out with the Z axis pointed in the -Z direction. - - Clamp recast graph bounding box size to be non-zero on all axes. - - The DynamicGridObstacle component will now properly update the graph when the object is deactivated since the object just disappeared and shouldn't block the graph anymore. - Previously it only did this if the object was destroyed, not if it was deactivated. - - Fixed \link Pathfinding.AILerp AILerp\endlink ceasing to work properly if one of the paths it tries to calculate fails. - - Fixed the \link Pathfinding.FunnelModifier FunnelModifier\endlink could yield a zero length path in some rare circumstances when using custom node links. - This could lead to an exception in some of the movement scripts. Thanks DougW for reporting the bug. - - Fixed calling Seeker.CancelCurrentPathRequest could in some cases cause an exception to be thrown due to multithreading race conditions. - - Fixed a multithreading race condition which could cause a path canceled by Seeker.CancelCurrentPathRequest to not actually be canceled. - - Fixed a rare ArrayOutOfBoundsException when using the FunnelModifier with the 'unwrap' option enabled. - - Fixed Seeker -> Start End Modifier could not be expanded in the Unity inspector. Thanks Dee_Lucky for reporting this. - - Fixed a few compatiblity bugs relating to AIPath/RichAI that were introduced in 4.1.0. - - Fixed funnel modifier could sometimes fail if the agent started exactly on the border between two nodes. - - Fixed another bug which could cause the funnel modifier to produce incorrect results (it was checking for colinearity of points in 2D instead of in 3D). - - Fixed the funnel modifier would sometimes clip a corner near the end of the path. - - Fixed ProceduralGridMover would not detect user defined graphs that were subclasses of the GridGraph class. Thanks viveleroi for reporting this. - - Fixed enabling and disabling a AIPath or RichAI component a very large number of times could potentially have a negative performance impact. - - Fixed AIPath/RichAI would continue searching for paths even when the component had been disabled. - - MeshNode.ContainsPoint now supports rotated graphs properly. MeshNode is used in navmesh and recast graphs. - - Fixed Linecast for navmesh and recast graphs not working for rotated graphs. - - Fixed RVONavmesh component not working properly with grid graphs that had height differences. - - Fixed 2D RVO agents sometimes ignoring obstacles. - - Fixed RVONavmesh not removing the obstacles it had created when the component was disabled. - - Fixed RaycastModifier could miss obstacles when thick raycasting was used due to Unity's Physics.SphereCast method not - reporting hits very close to the start of the raycast. - - In the free version the inspector for RaycastModifier now displays a warning if graph raycasting is enabled since - for all built-in graphs raycasts are only supported in the pro version. - - Fixed some cases where the funnel modifier would produce incorrect results. - - Fixed typo in a private method in the AstarPath class. Renamed the UpdateGraphsInteral method to UpdateGraphsInternal. - - Fixed AIPath.remainingDistance and AIPath.targetReached could be incorrect for 1 frame when a new path had just been calculated (introduced in a previous beta release). - -- 4.0.11 (2017-09-09) - - Fixed paths would ignore the ITraversalProvider (used for the turn based utilities) on the first node of the path, resulting in successful paths where they should have failed. - - Fixed BlockManager.BlockMode.AllExceptSelector could often produce incorrect results. Thanks Cquels for spotting the bug. - - Fixed various bugs related to destroying/adding graphs that could cause exceptions. Thanks DougW for reporting this. - - Fixed destroying a grid graph would not correctly clear all custom connections. Thanks DougW for reporting this. - - Fixed the MultiTargetPath did not reset all fields to their default values when using path pooling. - - Added some additional error validation in the MultiTargetPath class. - - Fixed scanning a recast graph that was not using tiles using Unity 2017.1 or later on Windows could block indefinitely. Thanks David Drummond and ceebeee for reporting this. - - Improved compatibility with Nintendo Switch. Thanks Noogy for the help. - - Fixed GraphUpdateScene would not handle the GameObject's scale properly which could cause it to not update some nodes. - - Fixed a regression in 4.0 which could cause the error to be omitted from log messages when paths failed. - - Fixed several bugs relating to #Pathfinding.NNConstraint.distanceXZ and #Pathfinding.NavmeshBase.nearestSearchOnlyXZ. Thanks koirat for reporting this. - - Fixed scanning a graph that threw an error would prevent any future scans. Thanks Baste for reporting this. - - Added a new get started video tutorial. See \ref getstarted. - - The PointGraph.nodeCount property is now protected instead of private, which fixes some compatibility issues. - - Improved compatibility with Unity 2017.1, esp. when using the experimental .Net 4.6 target. Thanks Scott_Richmond for reporting the issues. - - Fixed DynamicGridObstacle trying to update the graphs even when outside of play mode. - - Fixed runtime error when targeting the Windows Store. Thanks cedtat for reporting the bug. - - Fixed compilation error when targeting the Windows Store. Introduced in 4.0.3. Thanks cedtat for reporting the bug. - -- 4.0.10 (2017-05-01) - - Fixed compiler errors in the free version because the ManualRVOAgent.cs script being included by mistake. Thanks hummerbummer for reporting the issue. - - Fixed Unity's scene view picking being blocked by graph gizmos. Thanks Scott_Richmond for reporting the bug. - -- 4.0.9 (2017-04-28) - - Significantly improved performance and reduced allocations when recalculating indivudal recast tiles during runtime and there are terrains in the scene. - - Fixed the GraphUpdateScene inspector showing a warning for one frame after the 'convex' field has been changed. - - Fixed a few compiler warnings in Unity 5.6. Thanks TotalXep for reporting the issue. - - Fixed graph drawing could generate large amounts of garbage due to a missing GetHashCode override which causes Mono to have to allocate some dummy objects. - - Fixed graph gizmo lines could be rendered incorrectly on Unity 5.6 on mac and possibly on Windows too. - -- 4.0.8 (2017-04-28) - - Added \link Pathfinding.AIBase.rotationIn2D rotationIn2D\endlink to the AIPath script. It makes it possible to use the Y axis as the forward axis of the character which is useful for 2D games. - - Exposed the GridGraph.LayerCount property which works for both grid graphs and layered grid graphs (for grid graphs it always returns 1). - - Made the LayerGridGraph.layerCount field internal to discourage its use outside the LayerGridGraph class. - - Fixed exception when destroying some graph types (introduced in 4.0.6). Thanks unfalco for reporting the bug. - - Fixed exception in GridGraph.GetNodesInRegion when being called with an invalid rectangle or a rectangle or bounds object that was completely outside the graph. Thanks WillG for finding the bug. - - Fixed AIPath/RichAI not rotating to the correct direction if they started in a rotation such that the forward axis was perpendicular to the movement plane. - -- 4.0.7 (2017-04-27) - - Fixed 2D example scenes had their grids rotated by (90,0,0) instead of (-90,0,0). - It doesn't matter for those scenes, but the (-90,0,0) leads to more intuitive axis rotations for most use cases. Thanks GeloMan for noticing this. - - Renamed AISimpleLerp to AILerp in the component menu as the documentation only refers to it by the name 'AILerp'. - - Added a new documentation page and video tutorial (\ref pathfinding-2d) showing how to configure pathfinding in 2D games. - -- 4.0.6 (2017-04-21) - - Fixed creating a RichAI and in the same frame setting the target and calling UpdatePath would always result in that path being canceled. - - Fixed a race condition which meant that if you called RichAI.UpdatePath, AILerp.SearchPath or AIPath.SearchPath during the same frame that the agent was created - then the callback for that path would sometimes be missed and the AI would wait indefinitely for it. This could cause the agents to sometimes never start moving. - - Fixed adding a new graph while graph updates were running at the same time could potentially cause errors. - - Added NavGraph.exists which will become false when a graph has been destroyed. - - Fixed TileHandlerHelper could throw exceptions if the graph it was tracking was destroyed. - - Fixed TileHandlerHelper not detecting new NavmeshCut or NavmeshAdd components that were created before the - TileHandlerHelper component was created or when it was disabled. - - TileHandlerHelper no longer logs an error if it is created before a recast/navmesh graph exists in the scene - and when one is created the TileHandlerHelper will automatically detect it and start to update it. - - Fixed TileHandlerHelper could throw exceptions if the graph it was tracking changed dimensions. - - Fixed recast graphs would always rasterize capsule colliders as if they had their 'direction' setting set to 'Y-axis'. Thanks emrys90 for reporting the bug. - - The package now contains a 'documentation.html' file which contains an offline version of the 'Get Started' tutorial. - -- 4.0.5 (2017-04-18) - - Improved compatibility with Opsive's Behavior Designer - Movement Pack (https://www.assetstore.unity3d.com/en/#!/content/16853). - - The 4.0 update combined with the Movement Pack caused some compiler errors previously. - -- 4.0.4 (2017-04-17) - - Fixed the funnel modifier not working if 'Add Points' on the Seeker's Start End Modifier was enabled. Thanks Blaze_Barclay for reporting it. - - Fixed code typo in the \ref write-modifiers tutorial as well as made a few smaller improvements to it. - - Fixed some cases where the LegacyRVOController would not behave like the RVOController before version 4.0. - - Fixed LegacyAIPath not using the same custom inspector as the AIPath component. - -- 4.0.3 (2017-04-16) - - Improved code style and improved documentation for some classes. - - Reduced memory allocations a bit when using the NavmeshAdd component. - - Fixed graph types not necessarily being initialized when scanning the graph outside of play mode. - - Fixed LayerGridGraph not reporting scanning progress properly. - This caused it to not work well with ScanAsync and when scanning the graph in the editor the progress bar would only update once the whole graph had been scanned. - - Removed the DebugUtility class which was only used for development when debugging the recast graph. - -- 4.0.2 (2017-04-16) - - Fixed a minor bug in the update checker. - - Deduplicated code for drawing circles and other shapes using Debug.Draw* or Gizmos.Draw* and moved this code to a new class Pathfinding.Util.Draw. - -- 4.0.1 (2017-04-15) - - Improved how AIPath and RichAI work with rigidbodies. - - Added option for gravity to AIPath. - - Removed the RichAI.raycastingForGroundPlacement field as it is automatically enabled now if any gravity is used. - - AIPath and RichAI now inherit from the same base class Pathfinding.AIBase. - -- 4.0 (2017-04-10) - - Upgrade Notes - - This release contains some significant changes. It is strongly recommended that you back up your - project before upgrading. - - If you get errors immediately after upgrading, try to delete the AstarPathfindingProject folder - and import the package again. Sometimes UnityPackages will leave old files which can cause issues. - - Moved some things to inside the Pathfinding namespace to avoid naming collisions with other packages. - Make sure you have the line 'using Pathfinding;' at the top of your scripts. - Some example scripts have been moved to the Pathfinding.Examples namespace. - - The RVOController component no longer handles movement as it turned out that was a bad idea. - Having multiple components that handled movement (e.g RichAI and RVOController) didn't turn out well - and it was very hard to configure the settings so that it worked well. - The RVOController now exposes the CalculateMovementDelta method which allows other scripts to - ask it how the local avoidance system thinks the character should move during this frame. - If you use the RichAI or AIPath components for movement, everything should work straight away. - If you use a custom movement script you may need to change your code to use the CalculateMovementDelta - method for movement. Some settings may need to be tweaked, but hopefully it should not be too hard. - - Node connections are now represented using an array of structs (of type \link Pathfinding.Connection Connection\endlink) instead of - one array for target nodes and one array for costs. - - When upgrading an existing project legacy versions of the RVOController, RichAI, AIPath and GraphUpdateScene components - will be used for compatibility reasons. You will have to click a button in the inspector to upgrade them to the latest versions. - I have tried to make sure that the movement scripts behave the same as they did before version 4.0, but it is possible that there are some minor differences. - If you have used a custom movement script which inherits from AIPath or RichAI then the legacy components cannot be used automatically, instead the new versions will be used from the start. - - New Features And Improvements - - Local Avoidance - - The RVO system has been cleaned up a lot. - - Agents will now always avoid walls and obstacles even if that would put them on a collision course with another agent. - This helps with a previous problem of agents being able to be pushed into walls and obstacles (note that RVONavmesh or RVOSquareObstacle still need to be used). - - The RVOSimulator can now be configured for XZ space or XY space (2D). - - The RVOController no longer handles movement itself as this turned out to be a really bad idea (see upgrade notes section). - - The RVOController can now be used to stop at a target much more precisely than before using the SetTarget method. - - Agents are now \link Pathfinding.RVO.RVOSimulator.symmetryBreakingBias biased slightly\endlink towards passing other agents on the right side, this helps resolve some situations - with a lot of symmetry much faster. - - All fuzzy and hard to adjust parameters from the \link Pathfinding.RVO.RVOSimulator RVOSimulator\endlink component have been removed. - It should now be much easier to configure. - - The RichAI movement script now works a lot better with the RVOController. - Previously the movement could be drastically different when the RVOController was used - and local avoidance didn't work well when the agent was at the edge of the navmesh. - - Improved gizmos for the RVOController. - - Added \link Pathfinding.RVO.RVOController.ForceSetVelocity RVOController.ForceSetVelocity\endlink to use when you want agents to avoid a player (or otherwise externally controlled) character. - - RVO agents can now have different priorities, lower priority agents will avoid higher priority agents more. - - The neighbour distance field is now automatically calculated. This makes it easier to configure the agents and it will - also improve performance slightly when the agents are moving slowly (for example in very crowded scenarios). - - Added support for grid graphs to \link Pathfinding.RVO.RVONavmesh RVONavmesh\endlink. - - Added a new example scene for RVO in 2D - \htmlonly \endhtmlonly - - General - - Huge increase in the performance of graph gizmos. - This was accomplished by bypassing the Unity Gizmos and creating a custom gizmo rendererer that is able to retain - the gizmo meshes instead of recreating them every frame (as well as using a lot fewer draw calls than Unity Gizmos). - Therefore the graphs usually only need to check if the nodes have changed, and only if they have changed they will - rebuild the gizmo meshes. This may cause graph updates to seem like they introduce more lag than they actually do - since a graph update will also trigger a gizmo rebuild. So make sure to always profile with gizmos disabled. - For a 1000*1000 graph, which previously almost froze the editor, the time per frame went from over 4200 ms to - around 90 ms when no nodes had changed. - \htmlonly \endhtmlonly - - Improved the style of graph gizmos. A solid surface is now rendered instead of only the connections between the nodes. - The previous mode of rendering only connections is of course still available. - \shadowimage{3vs4/gizmos.png} - - Added a new example scene showing how to configure hexagon graphs. - - Added gizmos for hexagon graphs (grid graphs with certain settings). - \shadowimage{3vs4/hexagon_thin.png} - - Implemented async scanning. \link AstarPath.ScanAsync AstarPath.active.ScanAsync \endlink is an IEnumerable that can be iterated over several frames - so that e.g a progress bar can be shown while calculating the graphs. Note that this does not guarantee - a good framerate, but at least you can show a progress bar. - - Improved behaviour of the AIPath movement script. - - AIPath now works in the XY plane as well. In fact it works with any graph rotation. - The Z axis is always the forward axis for the agent, so for 2D games with sprites you may have to attach the sprite - to a child object which is rotated for it to show up correctly. - - Previously the slowdownDistance had to be smaller than the forwardLook field otherwise the character - could slow down even when it had not reached the end of the path. - - The agent should stop much more precisely at the end of the path now. - - The agent now rotates with a fixed angular speed instead of a varying one as this is often more realistic. - - Reduced the likelihood of the agent spinning around when it reaches the end of the path. - - It no longer uses the forwardLook variable. - It was very tricky to set correctly, now the pickNextWaypointDist variable is used for everything instead - and generally this should give you smoother movement. - - Improved behaviour of the \link Pathfinding.RichAI RichAI \endlink movement script. - - The agent should stop much more precisely at the end of the path now. - - Reduced the likelihood of the agent spinning around when it reaches the end of the path. - - Scanning the graph using AstarPath.Scan will now profile the various parts of the graph scanning - process using the Unity profiler (Profiler.BeginSample and Profiler.EndSample). - - \link Pathfinding.DynamicGridObstacle DynamicGridObstacle \endlink will now update the graph immediately if an object with that component is created during runtime - instead of waiting until it was moved for the first time. - - \link Pathfinding.GraphUpdateScene GraphUpdateScene \endlink and \link Pathfinding.GraphUpdateShape GraphUpdateShape \endlink can now handle rotated graphs a lot better. - The rotation of the object the GraphUpdateScene component is attached to determines the 'up' direction for the shape - and thus which points will be considered to be inside the shape. - The world space option had to be removed from GraphUpdateScene because it didn't really work with rotated graphs. - The lockToY option for GraphUpdateScene has also been removed because it wasn't very useful and after this change it would only have had an impact - in rare cases. - - Improved \link Pathfinding.GraphUpdateScene GraphUpdateScene \endlink editor. When editing the points in the scene view it now shows helper lines - to indicate where a new point is going to be added and which other points it will connect to - as well as several other minor improvements. - \htmlonly \endhtmlonly - - \link Pathfinding.GraphUpdateScene GraphUpdateScene \endlink now supports using the bounds from 2D colliders and the shape from PolygonCollider2D. - - Added opaqueness slider for the gizmos under Inspector -> Settings -> Colors. - - Added \link Pathfinding.Path.BlockUntilCalculated Path.BlockUntilCalculated \endlink which is identical to AstarPath.BlockUntilCalculated. - - Added Seeker.CancelCurrentPathRequest. - - Added \link Pathfinding.NavGraph.GetNodes NavGraph.GetNodes(System.Action) \endlink which calls a delegate with each node in the graph. - Previously NavGraph.GetNodes(GraphNodeDelegateCancelable) existed which did the same thing but required the delegate - to return true if it wanted the graph to continue calling it with more nodes. It turns out this functionality was very rarely needed. - - Individual graphs can now be scanned using #AstarPath.Scan(NavGraph) and other related overloads. - - Improved \link Pathfinding.BinaryHeap priority queue \endlink performance. On average results in about a 2% overall pathfinding performance increase. - - ObjectPool now requires a ref parameter when calling Release with an object to help prevent silly bugs. - - 'Min Area Size' has been removed. The edge cases are now handled automatically. - - Added ObjectPoolSimple as a generic object pool (ObjectPool also exists, but for that T must implement IAstarPooledObject). - - \link Pathfinding.RaycastModifier RaycastModifier \endlink now supports multi editing. - - Added \link Pathfinding.GraphNode.RandomPointOnSurface GraphNode.RandomPointOnSurface \endlink. - - Added \link Pathfinding.GraphNode.SurfaceArea GraphNode.SurfaceArea \endlink. - - \link Pathfinding.Int2 Int2 \endlink and \link Pathfinding.Int3 Int3 \endlink now implement IEquatable for slightly better performance and fewer allocations in some places. - - \link Pathfinding.Examples.LocalSpaceRichAI LocalSpaceRichAI \endlink can now be used with any rotation (even things like moving on an object that is upside down). - - The \link Pathfinding.FunnelModifier funnel modifier \endlink can now handle arbitrary graphs (even graphs in the 2D plane) if the new \link Pathfinding.FunnelModifier.unwrap unwrap \endlink option is enabled. - - The \link Pathfinding.FunnelModifier funnel modifier \endlink can split the resulting path at each portal if the new \link Pathfinding.FunnelModifier.splitAtEveryPortal splitAtEveryPortal \endlink option is enabled. - - Recast/Navmesh Graphs - - Recast graph scanning is now multithreaded which can improve scan times significantly. - - Recast graph scanning now handles large worlds with lots of objects better. This can improve scan times significantly. - \htmlonly \endhtmlonly - - Improved performance of nearest node queries for Recast/navmesh graphs. - - Editing navmesh cut properties in the inspector now forces updates to happen immediately which makes editing easier. - - Long edges in recast graphs are now split at tile borders as well as at obstacle borders. - This can in particular help on terrain maps where the tile borders do not follow the elevation that well - so the max edge length can be reduced to allow the border to follow the elevation of the terrain better. - - Recast graphs can now be rotated arbitrarily. - - Navmesh cutting still works! - - The RichAI script currently does not support movement on rotated graphs, but the AIPath script does. - - Improved performance of navmesh cutting for large worlds with many tiles and NavmeshAdd components. - - Navmesh graphs and recast graphs now share the same base code which means that navmesh graphs - now support everything that previously only recast graphs could be used for, for example - navmesh cutting. - - The NavmeshCut inspector now shows a warning if no TileHandlerHelper component is present in the scene. - A TileHandlerHelper component is necessary for the NavmeshCuts to update the graphs. - - Recast graphs now use less memory due to the BBTree class now using around 70% less memory per node. - - Recast graphs now allocate slightly less memory when recalculating tiles or scanning the graph. - - Cell height on Recast graphs is now automatically set to a good value. - - Navmesh cutting is now a bit better at using object pooling to avoid allocations. - - TileHandlerHelper now updates the tiles properly when one or multiple tiles on the recast graph are recalculated - due to a graph update or because it was rescanned. - - Navmesh cutting now uses more pooling to reduce allocations slightly. - - Improved performance of loading and updating (using navmesh cutting) recast tiles with a large number of nodes. - - Grid Graphs - - Added LevelGridNode.XCoordinateInGrid, LevelGridNode.ZCoordinateInGrid, LevelGridNode.LayerCoordinateInGrid. - - Added GridGraph.GetNodesInRegion(IntRect). - Also works for layered grid graphs. - - Layered grid graphs now have support for 'Erosion Uses Tags'. - - Added GridGraph.CalculateConnections(GridNodeBase) which can be used for both grid graphs and layered grid graphs. - - Grid graphs can now draw the surface and outline of the graph instead of just the connections between the nodes. - The inspector now contains several toggles that can be used to switch between the different rendering modes. - - The ProceduralGridMover component now works with LayerGridGraph as well. - - Added GridGraph.RecalculateCell(x,y) which works both for grid graphs and layered grid graphs. - This replaces the UpdateNodePositionCollision method and that method is now deprecated. - - Improved GridGraph.RelocateNodes which is now a lot more resilient against floating point errors. - - Added dimetric (60°) to the list of default values for the isometric angle field on grid graphs. - - Changing the width/depth of a grid graph will now keep the current pivot point at the same position instead of always keeping the bottom left corner fixed. - (the pivot point can be changed to the center/bottom left/top left/top right/bottom right right next to the position field in the grid graph inspector) - - Improved fluidity and stability when resizing a grid graph in the scene view. - It now snaps to full node increments in size. - - Grid graphs now display a faint grid pattern in the scene view even when the graph is not scanned - to make it easier to position and resize the graph. - - Improved styling of some help boxes in the grid graph inspector when using the dark UI skin. - - The size of the unwalkable node gizmo (red cube) on grid graphs is now based on the node size to avoid the gizmos being much larger or much smaller than the nodes. - - Implemented \link Pathfinding.ABPath.EndPointGridGraphSpecialCase special case for paths on grid graphs \endlink so that if you request a path to an unwalkable node with several - walkable nodes around it, it will now not pick the closest walkable node to the requested target point and find a path to that - but it will find the shortest path which goes to any of the walkable nodes around the unwalkable node. - \htmlonly Before, After \endhtmlonly. - This is a special case of the MultiTargetPath, for more complicated configurations of targets the multi target path needs to be used to be able to handle it correctly. - - Changes - - Node connections are now represented using an array of structs (of type Connection) instead of - one array for target nodes and one array for costs. - - When scanning a graph in the editor, the progress bar is not displayed until at least 200 ms has passed. - Since displaying the progress bar is pretty slow, this makes scanning small graphs feel more snappy. - - GridGraph and LayerGridGraph classes now have a 'transform' field instead of a matrix and inverseMatrix fields. - The GraphTransform class also has various other nice utilities. - - Moved mesh collecting code for Recast graphs to a separate class to improve readability. - - Refactored out large parts of the AstarPath class to separate smaller classes to improve readability and increase encapsulation. - - AstarPath.RegisterSafeUpdate is now implemented using WorkItems. This yields a slightly different behavior (previously callbacks added using RegisterSafeUpdate would - always be executed before work items), but that should rarely be something that you would depend on. - - Replaced AstarPath.BlockUntilPathQueueBlocked with the more robust AstarPath.PausePathfinding method. - - The default radius, height and center for RVOControllers is now 0.5, 2 and 1 respectively. - - To reduce confusion. The second area color is now a greenish color instead of a red one. - The red color would often be mistaken as indicating unwalkable nodes instead of simply a different connected component. - Hopefully green will be a more neutral color. - - Renamed AstarPath.astarData to AstarPath.data. - - Renamed NavmeshCut.useRotation and NavmeshAdd.useRotation to useRotationAndScale (since they have always affected scale too). - - Renamed GridGraph.GenerateMatrix to GridGraph.UpdateTransform to be consistent with recast/navmesh graphs. - The GenerateMatrix method is now deprecated. - - Renamed AstarPath.WaitForPath to AstarPath.BlockUntilCalculated. - - Renamed GridNode.GetConnectionInternal to HasConnectionInDirection. - - Renamed NNInfo.clampedPosition to NNInfo.position. - - Renamed GridGraph.GetNodesInArea to GetNodesInRegion to avoid confusing the word 'area' for what is used to indicate different connected components in graphs. - - Renamed AIPath.turningSpeed to \link Pathfinding.AIPath.rotationSpeed rotationSpeed\endlink. - - Deprecated Seeker.GetNewPath. - - Deprecated NavGraph.matrix, NavGraph.inverseMatrix, NavGraph.SetMatrix and NavGraph.RelocateNodes(Matrix4x4,Matrix4x4). - They have been replaced with a single transform field only available on some graph types as well as a few other overloads of teh RelocateNodes method. - - Changed the signature of NavGraph.GetNodes(GraphNodeDelegateCancelable) to the equivalent NavGraph.GetNodes(System.Func). - - Replaced all instances of GraphNodeDelegate with the equivalent type System.Action. - - Made a large number of previously public methods internal to reduce confusion about which methods one should use in a class and make the documentation easier to read. - In particular the Path class has had its set of public methods reduced a lot. - - Made AstarData.AddGraph(NavGraph) private. Scripts should use AstarData.AddGraph(System.Type) instead. - - Moved internal fields of NNInfo into a new NNInfoInternal struct to make the API easier to use. Previously NNInfo contained some internal fields, but now they are only in NNInfoInternal. - - Moved GetNeighbourAlongDirection to GridNodeBase and made it public. - - An overload of the GridGraph.CalculateConnections method has been made non-static. - - LayerGridGraph.LinkedLevelNode and LayerGridGraph.LinkedLevelCell are now private classes since they are only used by the LayerGridGraph. - - MonoModifier.OnDestroy is now a virtual function. - - AstarPath.IsUsingMultithreading and NumbParallelThreads have been made non-static. - - AstarPath.inGameDebugPath is now private. - - AstarPath.lastScanTime is now read only. - - Removed the 'climb axis' field from grid graphs. The axis is now automatically set to the graph's UP direction (which is - the only direction that makes sense and all other directions can be transformed to this one anyway). - - Removed the 'worldSpace' parameter from RecastGraph.ReplaceTile, it is no longer possible to supply world space vertices to - that method since graph space vertices are required for some things. - - Removed BBTree.QueryCircle and BBTree.Query since they were not used anywhere. - - Removed the Path.searchIterations field because it wasn't very useful even as debug information. - - Removed the Path.maxFrameTime field because it was not used. - - Removed the Path.callTime property because it was not used. - - Removed the ABPath.startHint, ABPath.endHint fields because they were not used. - - Removed the ABPath.recalcStartEndCosts field because it was not used. - - Removed the RecursiveBinary and RecursiveTrinary modes for RichAI.funnelSimplification because the Iterative mode - was usually the best and fastest anyway (also the other two modes had a rare bug where they could get cought in infinite loops). - - Removed the Polygon.Subdivide method because it was not used anywhere. - - Removed the NavGraph.Awake method because it was not used for anything. - - Removed ASTAR_OPTIMIZE_POOLING from Optimization tab. It is now always enabled in standalone builds and always disabled in the Unity editor. - - Removed various unused Recast code. - - Removed support for forcing the inspector skin to be dark or light. The value provided by EditorGUIUtility.isProSkin is always used now. - - Removed multiplication operator for Int3 with a Vector3 because it is a nonstandard operation on vectors (and it is not that useful). - - Removed the since long deprecated example script AIFollow. - - Removed the AdaptiveSampling algorithm for local avoidance. Only GradientDescent is used now. - - Removed empty PostProcess method in NavMeshGraph. - - Fixes - - Fixed RichAI and AIPath trying to use CharacterControllers even if the CharacterController component was disabled. - - Fixed rotated recast/navmesh graphs would ensure each node's vertices were laid out clockwise in XZ space instead of in graph space which could cause parts of the graph to become disconnected from the rest. - - Fixed a bug where graphs could fail to be deserialized correctly if the graph list contained a null element - - Fixed a bug where the json serializer could emit True/False instead of true/false which is the proper json formatting. - - Fixed LayerGridGraphs' "max climb" setting not working properly with rotated graphs. - - Fixed LayerGridGraphs' "character height" setting not working properly with rotated graphs. - - Fixed LayerGridGraphs assuming there were no obstacles nearby if no ground was found. - - Fixed DynamicGridObstacle getting caught in an infinite loop if there was no AstarPath component in the scene when it was created. Thanks MeiChen for finding the bug. - - Fixed NodeLink2 deserialization causing exceptions if the node hadn't linked to anything when it was serialized. Thanks Skalev for finding the bug. - - Fixed the AlternativePath modifier could crash the pathfinding threads if it logged a warning since it used the Debug.Log(message,object) overload which - can only be used from the Unity thread. - - Fixed an issue where layer mask fields in graph editors would show 'Nothing' if they only included layers which had no name set. - - Fixed potential memory leak. - Paths in the path pool would still store the callback which is called when the path has been calculated - which that means it would implicitly hold a reference to the object which had the method that would be called. - Thanks sehee for pointing this out. - - Fixed GridNode.ClosestPointOnNode could sometimes return the wrong y coordinate relative to the graph (in particular when the graph was rotated) and the y coordinate would not snap to the node's surface. - - Fixed AstarData.AddGraph would fill *all* empty slots in the graph array with the graph instead of just the first. Thanks bitwise for finding the bug. - - Improved compatibility with Unity 5.5 which was need due to the newly introduced UnityEngine.Profiling namespace. - - Fixed graph updates on LayeredGridGraphs not respecting GraphUpdateObject.resetPenaltyOnPhysics. - - Fixed potential memory leak when calling RecalculateCell on a layered grid graph. - - LevelGridNode.ContainsConnection now reports correct values (previously it would only check - non-grid connections). - - Fixed not being able to deserialize settings saved with some old versions of the A* Pathfinding Project. - - Tweaked ListPool to avoid returning lists with a very large capacity when a small one was requested - as this could cause performance problems since Clear is O(n) where n is the capacity (not the size of the list). - - Fixed GraphUpdateScene causing 'The Grid Graph is not scanned, cannot update area' to be logged when exiting play mode. - - Fixed scanning a recast graph could in very rare circumstances throw a 'You are trying to pool a list twice' exception due to a multithreading - race condition. - - Fixed recast/navmesh graphs could return the wrong node as the closest one in rare cases, especially near tile borders. - - Fixed another case of recast/navmesh graphs in rare cases returning the wrong node as the closest one. - - Fixed gizmo drawing with 'Show Search Tree' enabled sometimes right after graph updates drawing nodes outside the - search tree as if they were included in it due to leftover data from graph updates. - - Fixed navmesh and recast graphs would unnecessarily be serialized by Unity which would slow down the inspector slightly. - - Fixed AstarEnumFlagDrawer not working with private fields that used the [SerializeField] attribute. - This does not impact anything that the A* Pathfinding Project used, but some users are using the AstarEnumFlagDrawer for - other fields in their projects. Thanks Skalev for the patch. - - Clicking 'Apply' in the Optimizations tab will now always refresh the UI instead of assuming that - a recompilation will happen (it will not happen if only defines for other platforms than the current one were modified). - - Fixed not being able to multi-edit RVOSquareObstacle components. - - Fixed GridNode.ClearConnections(true) not removing all reversed connections and could sometimes remove the wrong ones. - - Fixed TileHandlerHelper regularly checking for if an update needs to be done even if TileHandlerHelper.updateInterval was negative - even though the documentation specifies that it should not do that (it only disabled updates when updateInterval = -1). - - Fixed PathUtilities.GetPointsAroundPointWorld and PathUtilities.GetPointsAroundPoint returning incorrect results sometimes. - - Fixed Path.immediateCallback not being reset to null when using path pooling. - - TileHandlerHelper will now work even if Scan On Awake in A* Inspector -> Settings is false and you are scanning the graph later. - - Fixed AstarWorkItem.init could be called multiple times. - - Fixed some documentation typos. - - Fixed colliders being included twice in the recast rasterization if the GameObject had a RecastMeshObj attached to it which effectively made RecastMeshObj not work well at all with colliders. - - Fixed inspector for RecastMeshObj not updating if changes were done to the fields by a script or when an undo or redo was done. - - Fixed SimpleSmoothModifier custom editor would sometimes set all instances of a field to the same value - when editing multiple objects at the same time. - - Fixed division by zero when the TimeScale was zero in the AstarDebugger class. Thanks Booil Jung for reporting the issue. - - Various other small fixes in the AstarDebugger class. - - Fixed division by zero when generating a recast graph and the cell size was much larger than the bounds of the graph. - - Fixed the recast graph data structures could be invalid while a graph update was running in a separate thread. - This could cause API calls like AstarPath.GetNearest to throw exceptions. Now the affected tiles are recalculated - in a separate thread and then the updates are applied to the existing graph in the Unity thread. - - Fixed some cases where the AlternativePath modifier would apply penalties incorrectly and possibly crash the pathfinding thread. - - Fixed IAgent.NeighbourCount would sometimes not be reset to 0 when the agent was locked and thus takes into account no other agents. - - Fixed RVO threads would sometimes not be terminated which could lead to memory leaks if switching scenes a lot. - - Fixed GridGraph.GetNearest and NavGraph.GetNearest not handling constraint=null. - - Internal changes - - These are changes to the internals of the system and will most likely not have any significant externally visible effects. - - Removed some wrapper methods for the heap in the PathHandler class since they were just unnecessary. Exposed the heap field as readonly instead. - - Renamed BinaryHeapM to BinaryHeap. - - Renamed ExtraMesh to RasterizationMesh. - - Refactored TileHandler.CutPoly to reduce code messiness and also fixed some edge case bugs. - - Documentation - - Among other things: improved the \ref writing-graph-generators guide (among other things it no longer uses hard to understand calculations to get the index of each node). - -- 3.8.8.1 (2017-01-12) - - Fixes - - Fixed the 'Optimization' tab sometimes logging errors when clicking Apply on Unity 5.4 and higher. - - More UWP fixes (pro version only). - -- 3.8.8 (2017-01-11) - - Fixes - - Fixed errors when deploying for the Universal Windows Platform (UWP). - This includes the Hololens platform. - - It is no longer necessary to use the compiler directive ASTAR_NO_ZIP when deploying for UWP. - zipping will be handled by the System.IO.Compression.ZipArchive class on those platforms (ZipArchive is not available on other platforms). - If you have previously enabled ASTAR_NO_ZIP it will stay enabled to ensure compatibility. - - Changed some comments from the '/**<' format to '/**' since Monodevelop shows the wrong docs when using the '/**<' format. - -- 3.8.7 (2016-11-26) - - Fixes - - Improved compatibility with Unity 5.5 which was needed due to the newly introduced UnityEngine.Profiling namespace. - -- 3.8.6 (2016-10-31) - - Upgrade Notes - - Note that a few features and some fixes that have been available in the beta releases are not - included in this version because they were either not ready to be released or depended on other - changes that were not ready. - - Dropped support for Unity 5.1. - - Moved some things to inside the Pathfinding namespace to avoid naming collisions with other packages. - Make sure you have the line 'using Pathfinding;' at the top of your scripts. - - Seeker.StartMultiTargetPath will now also set the enabledTags and tagPenalties fields on the path. - Similar to what StartPath has done. This has been the intended behaviour from the start, but bugs happen. - See http://forum.arongranberg.com/t/multitargetpath-doesnt-support-tag-constraints/2561/3 - - The JsonFx library is no longer used, so the Pathfinding.JsonFx.dll file in the plugins folder - may be removed to reduce the build size a bit. UnityPackages cannot delete files, so you have to delete it manually. - - RecastGraph.UpdateArea (along with a few other functions) is now explicitly implemented for the IUpdatableGraph interface - as it is usually a bad idea to try to call those methods directly (use AstarPath.UpdateGraphs instead). - - AstarPath.FlushWorkItems previously had pretty bad default values for the optional parameters. - By default it would not necessarily complete all work items, it would just complete those that - took a single frame. This is pretty much never what you actually want so to avoid - confusion the default value has been changed. - - New Features and Improvements - - The JsonFx library is no longer used. Instead a very tiny json serializer and deserializer has been written. - In addition to reducing code size and being slightly faster, it also means that users using Windows Phone - no longer have to use the ASTAR_NO_JSON compiler directive. I do not have access to a windows phone - however, so I have not tested to build it for that platform. If any issues arise I would appreciate if - you post them in the forum. - - Improved inspector for NavmeshCut. - - NodeLink2 can now be used even when using cached startup or when loading serialized data in other ways just as long as the NodeLink2 components are still in the scene. - - LevelGridNode now has support for custom non-grid connections (just like GridNode has). - - Added GridNode.XCoordinateInGrid and GridNode.ZCoordinateInGrid. - - Improved documentation for GraphUpdateShape a bit. - - Changes - - Removed EditorUtilities.GetMd5Hash since it was not used anywhere. - - Deprecated TileHandler.GetTileType and TileHandler.GetTileTypeCount. - - Seeker.StartPath now properly handles MultiTargetPath objects as well. - - Seeker.StartMultiTargetPath is now deprecated. Note that it will now also set the - enabledTags and tagPenalties fields on the path. Similar to what StartPath has done. - - Removed GridGraph.bounds since it was not used or set anywhere. - - GraphNode.AddConnection will now throw an ArgumentNullException if you try to call it with a null target node. - - Made PointGraph.AddChildren and PointGraph.CountChildren protected since it makes no sense for them to be called by other scripts. - - Changed how the 'Save & Load' tab looks to make it easier to use. - - Renamed 'Path Debug Mode' to 'Graph Coloring' and 'Path Log Mode' to 'Path Logging' in the inspector. - - RecastGraph.UpdateArea (along with a few other functions) is now explicitly implemented for the IUpdatableGraph interface - as it is usually a bad idea to try to call those methods directly (use AstarPath.UpdateGraphs instead). - - Removed ConnectionType enum since it was not used anywhere. - - Removed NodeDelegate and GetNextTargetDelegate since they were not used anywhere. - - Fixes - - Fixed TinyJson not using culture invariant float parsing and printing. - This could cause deserialization errors on systems that formatted floats differently. - - Fixed the EndingCondition example script. - - Fixed speed being multiplied by Time.deltaTime in the AI script in the get started tutorial when it shouldn't have been. - - Fixed FunnelModifier could for some very short paths return a straight line even though a corner should have been inserted. - - Fixed typo. 'Descent' (as in 'Gradient Descent') was spelled as 'Decent' in some cases. Thanks Brad Grimm for finding the typo. - - Fixed some documentation typos. - - Fixed some edge cases in RandomPath and FleePath where a node outside the valid range of G scores could be picked in some cases (when it was not necessary to do so). - - Fixed editor scripts in some cases changing the editor gui styles instead of copying them which could result in headers in unrelated places in the Unity UI had the wrong sizes. Thanks HP for reporting the bug. - - Fixed NavmeshCut causing errors when cutting the navmesh if it was rotated upside down or scaled with a negative scale. - - Fixed TriangleMeshNode.ClosestPointOnNodeXZ could sometimes return the wrong point (still on the node surface however). - This could lead to characters (esp. when using the RichAI component) teleporting in rare cases. Thanks LordCecil for reporting the bug. - - Fixed GridNodes not serializing custom connections. - - Fixed nodes could potentially get incorrect graph indices assigned when additive loading was used. - - Added proper error message when trying to call RecastGraph.ReplaceTile with a vertex count higher than the upper limit. - - Known Bugs - - Calling GetNearest when a recast graph is currently being updated on another thread may in some cases result in a null reference exception - being thrown. This does not impact navmesh cutting. This bug has been present (but not discovered) in previous releases as well. - - Calling GetNearest on point graphs with 'optimizeForSparseGraph' enabled may in some edge cases return the wrong node as being the closest one. - It will not be widely off target though and the issue is pretty rare, so for real world use cases it should be fine. - This bug has been present (but not discovered) in previous releases as well. - -- 3.8.3 through 3.8.5 were beta versions - -- 3.8.2 (2016-02-29) - - Improvements - - DynamicGridObstacle now handles rotation and scaling better. - - Reduced allocations due to coroutines in DynamicGridObstacle. - - Fixes - - Fixed AstarPath.limitGraphUpdates not working properly most of the time. - In order to keep the most common behaviour after the upgrade, the value of this field will be reset to false when upgrading. - - Fixed DynamicGridObstacle not setting the correct bounds at start, so the first move of an object with the DynamicGridObstacle - component could leave some nodes unwalkable even though they should not be. Thanks Dima for reporting the bug. - - Fixed DynamicGridObstacle stopping to work after the GameObject it is attached to is deactivated and then activated again. - - Fixed RVOController not working after reloading the scene due to the C# '??' operator not being equivalent to checking - for '== null' (it doesn't use Unity's special comparison check). Thanks Khan-amil for reporting the bug. - - Fixed typo in documentation for ProceduralGridMover.floodFill. - - Changes - - Renamed 'Max Update Frequency' to 'Max Update Interval' in the editor since it has the unit [second], not [1/second]. - - Renamed AstarPath.limitGraphUpdates to AstarPath.batchGraphUpdates and AstarPath.maxGraphUpdateFreq to AstarPath.graphUpdateBatchingInterval. - Hopefully these new names are more descriptive. The documentation for the fields has also been improved slightly. - -- 3.8.1 (2016-02-17) - - Improvements - - The tag visualization mode for graphs can now use the custom list of colors - that can be configured in the inspector. - Thanks Arakade for the patch. - - Fixes - - Recast graphs now handle meshes and colliders with negative scales correctly. - Thanks bvance and peted for reporting it. - - Fixed GridGraphEditor throwing exceptions when a user had created a custom grid graph class - which inherits from GridGraph. - - Fixed Seeker.postProcessPath not being called properly. - Instead it would throw an exception if the postProcessPath delegate was set to a non-null value. - Thanks CodeSpeaker for finding the bug. - -- 3.8 (2016-02-16) - - The last version released on the Unity Asset Store was 3.7, so if you are upgrading - from that version check out the release notes for 3.7.1 through 3.7.5 as well. - - Breaking Changes - - For the few users that have written their own Path Modifiers. The 'source' parameter to the Apply method has been removed from the IPathModifier interface. - You will need to remove that parameter from your modifiers as well. - - Modifier priorities have been removed and the priorities are now set to sensible hard coded values since at least for the - included modifiers there really is only one ordering that makes sense (hopefully there is no use case I have forgotten). - This may affect your paths if you have used some other modifier order. - Hopefully this change will reduce confusion for new users. - - New Features and Improvements - - Added NodeConnection mode to the StartEndModifier on the Seeker component. - This mode will snap the start/end point to a point on the connections of the start/end node. - Similar to the Interpolate mode, but more often does what you actually want. - - SimpleSmoothModifier now has support for multi editing. - - Added a new movement script called AILerp which uses linear interpolation to follow the path. - This is good for games which want the agent to follow the path exactly and not use any - physics like behaviour. This movement script works in both 2D and 3D. - - Added a new 2D example scene which uses the new AILerp movement script. - - All scripts now have a HelpURLAttribute - so the documentation button at the top left corner of every script inspector now links directly to the documentation. - - Recast graphs can now draw the surface of a navmesh in the scene view instead of only - the node outlines. Enable it by checking the 'Show mesh surface' toggle in the inspector. - Drawing the surface instead of the node outlines is usually faster since it does not use - Unity Gizmos which have to rebuild the mesh every frame. - - Improved GUI for the tag mask field on the Seeker. - - All code is now consistently formatted, utilising the excellent Uncrustify tool. - - Added animated gifs to the \link Pathfinding.RecastGraph.cellSize Recast graph \endlink documentation showing how some parameters change the resulting navmesh. - If users like this, I will probably follow up and add similar gifs for variables in other classes. - \shadowimage{recast/character_radius.gif} - - Fixes - - Fixed objects in recast graphs being rasterized with an 0.5 voxel offset. - Note that this will change how your navmesh is rasterized (but usually for the better), so you may want to make sure it still looks good. - - Fixed graph updates to navmesh and recast graphs not checking against the y coordinate of the bounding box properly (introduced in 3.7.5). - - Fixed potential bug when loading graphs from a file and one or more of the graphs were null. - - Fixed invalid data being saved when calling AstarSerializer.SerializeGraphs with an array that was not equal to the AstarData.graphs array. - The AstarSerializer is mostly used internally (and internally it is always called with the AstarData.graphs array). Thanks munkman for reporting this. - - Fixed incorrect documentation for GridNode.NodeInGridIndex. Thanks mfjk for reporting it! - - Fixed typo in a recast graph log message (where -> were). Thanks bigdaddio for reporting it! - - Fixed not making sure the file is writable before writing graph cache files (Perforce could sometimes make it read-only). Thanks Jørgen Tjernø for the patch. - - Fixed RVOController always using FindObjectOfType during Awake, causing performance issues in large scenes. Thanks Jørgen Tjernø for the patch. - - Removed QuadtreeGraph, AstarParallel, NavMeshRenderer and NavmeshController from the released version. - These were internal dev files but due to typos they had been included in the release. - It will also automatically refresh itself if the graph has been rescanned with a different number of tiles. - - Fixed SimpleSmoothModifier not always including the exact start point of the path. - - Fixed ASTAR_GRID_NO_CUSTOM_CONNECTIONS being stripped out of the final build, so that entry in the Optimizations tab didn't actually do anything. - - Fixed performance issue with path pooling. If many paths were being calculated and pooled, the performance could be - severely reduced unless ASTAR_OPTIMIZE_POOLING was enabled (which it was not by default). - - Fixed 3 compiler warnings about using some deprecated Unity methods. - - Changes - - Recast graphs' 'Snap To Scene' button now snaps to the whole scene instead of the objects that intersect the bounds that are already set. - This has been a widely requested change. Thanks Jørgen Tjernø for the patch. - - Moved various AstarMath functions to the new class VectorMath and renamed some of them to reduce confusion. - - Removed various AstarMath functions because they were either not used or they already exist in e.g Mathf or System.Math. - DistancePointSegment2, ComputeVertexHash, Hermite, MapToRange, FormatBytes, - MagnitudeXZ, Repeat, Abs, Min, Max, Sign, Clamp, Clamp01, Lerp, RoundToInt. - - PathEndingCondition (used with XPath) is now abstract since it doesn't really make any sense to use the default implementation (always returns true). - - A 'Recyle' method is no longer required on path classes (reduced boilerplate). - - Removed old IFunnelGraph interface since it was not used by anything. - - Removed old ConvexMeshNode class since it was not used by anything. - - Removed old script NavmeshController since it has been disabled since a few versions. - - Removed Int3.DivBy2, Int3.unsafeSqrMagnitude and Int3.NormalizeTo since they were not used anywere. - - Removed Int2.sqrMagnitude, Int2.Dot since they were not used anywhere and are prone to overflow (use sqrMagnitudeLong/DotLong instead) - - Deprecated Int2.Rotate since it was not used anywhere. - - Deprecated Int3.worldMagnitude since it was not used anywhere. - -- 3.7.5 (2015-10-05) - - Breaking changes - - Graph updates to navmesh and recast graphs now also check that the nodes are contained in the supplied bounding box on the Y axis. - If the bounds you have been using were very short along the Y axis, you may have to change them so that they cover the nodes they should update. - - Improvements - - Added GridNode.ClosestPointOnNode. - - Optimized GridGraph.CalculateConnections by approximately 20%. - This means slightly faster scans and graph updates. - - Changes - - Graph updates to navmesh and recast graphs now also check that the nodes are contained in the supplied bounding box on the Y axis. - If the bounds you have been using were very short along the Y axis, you may have to change them so that they cover the nodes they should update. - - Fixes - - Fixed stack overflow exception when a pivot root with no children was assigned in the heuristic optimization settings. - - Fixed scanning in the editor could sometimes throw exceptions on new versions of Unity. - Exceptions contained the message "Trying to initialize a node when it is not safe to initialize any node". - This happened because Unity changed the EditorGUIUtility.DisplayProgressBar function to also call - OnSceneGUI and OnDrawGizmos and that interfered with the scanning. - - Fixed paths could be returned with invalid nodes if the path was calculated right - before a call to AstarPath.Scan() was done. This could result in - the funnel modifier becoming really confused and returning a straight line to the - target instead of avoiding obstacles. - - Fixed sometimes not being able to use the Optimizations tab on newer versions of Unity. - -- 3.7.4 (2015-09-13) - - Changes - - AIPath now uses the cached transform field in all cases for slightly better performance. - - Fixes - - Fixed recast/navmesh graphs could in rare cases think that a point on the navmesh was - in fact not on the navmesh which could cause odd paths and agents teleporting short distances. - - Documentation Fixes - - Fixed the Seeker class not appearing in the documentation due to a bug in Doxygen (documentation generator). - -- 3.7.3 (2015-08-18) - - Fixed GridGraph->Unwalkable When No Ground used the negated value (true meant false and false meant true). - This bug was introduced in 3.7 when some code was refactored. Thanks DrowningMonkeys for reporting it. - -- 3.7.2 (2015-08-06) - - Fixed penalties not working on navmesh based graphs (navmesh graphs and recast graphs) due to incorrectly configured compiler directives. - - Removed undocumented compiler directive ASTAR_CONSTANT_PENALTY and replaced with ASTAR_NO_TRAVERSAL_COST which - can strip out code handling penalties to get slightly better pathfinding performance (still not documented though as it is not really a big performance boost). - -- 3.7.1 (2015-08-01) - - Removed a few cases where exceptions where needed to better support WebGL when exception handling is disabled. - - Fixed MultiTargetPath could return the wrong path if the target of the path was the same as the start point. - - Fixed MultiTargetPath could sometimes throw exceptions when using more than one pathfinding thread. - - MultiTargetPath will now set path and vectorPath to the shortest path even if pathsForAll is true. - - The log output for MultiTargetPath now contains the length (in nodes) of the shortest path. - - Fixed RecastGraph throwing exceptions when trying to rasterize trees with missing (null) prefabs. Now they will simply be ignored. - - Removed RecastGraph.bbTree since it was not used for anything (bbTrees are stored inside each tile since a few versions) - - Improved performance of loading and updating large recast graph tiles (improved performance of internal AABB tree). - - Removed support for the compiler directive ASTAR_OLD_BBTREE. - -- 3.7 (2015-07-22) - - The last version that was released on the Unity Asset Store - was version 3.6 so if you are upgrading from that version also check out the release - notes for 3.6.1 through 3.6.7. - - Upgrade notes - - ProceduralGridMover.updateDistance is now in nodes instead of world units since this value - is a lot less world scale dependant. So the defaults should fit more cases. - You may have to adjust it slightly. - - Some old parts of the API that has been marked as deprecated long ago have been removed (see below). - Some other unused parts of the API that mostly lead to confusion have been removed as well. - - Improvements - - Rewrote several documentation pages to try to explain concepts better and fixed some old code. - - \ref accessing-data - - \ref graph-updates - - \ref writing-graph-generators - - Pathfinding.NavmeshCut - - And some other smaller changes. - - Added an overload of Pathfinding.PathUtilities.IsPathPossible which takes a tag mask. - - \link Pathfinding.XPath XPath \endlink now works again. - - The ProceduralGridMover component now supports rotated graphs (and all other ways you can transform it, e.g isometric angle and aspect ratio). - - Rewrote GridGraph.Linecast to be more accurate and more performant. - Previously it used a sampling approach which could cut corners of obstacles slightly and was pretty inefficient. - - Linted lots of files to remove trailing whitespace, fix imports, use 'var' when relevant and various other small tweaks. - - Added AstarData.layerGridGraph shortcut. - - Fixes - - Fixed compilation errors for Windows Store. - The errors mentioned ThreadPriority and VolatileRead. - - Fixed LayerGridGraph.GetNearest sometimes returning the wrong node inside a cell (e.g sometimes it would always return the node with the highest y coordinate).\n - This did not happen when the node size was close to 1 and the grid was positioned close to the origin. - Which it of course was in all my tests (tests are improved now). - - Fixed GridGraph.Linecast always returning false (no obstacles) when the start point and end point was the same. - Now it returns true (obstacle) if the start point was inside an obstacle which makes more sense. - - Linecasts on layered grid graphs now use the same implementation as the normal grid graph.\n - This fixed a TON of bugs. If you relied on the old (buggy) behaviour you might have to change your algorithms a bit. - It will now report more accurate hit information as well. - - Fixed documentation on LayerGridGraph.Linecast saying that it would return false if there was an obstacle in the way - when in fact exactly the opposite was true. - - Fixed inspector GUI throwing exceptions when two or more grid graphs or layered grid graphs were visible and thickRaycast was enabled on only one of them. - - Fixed a few options only relevant for grid graphs were visible in the layered grid graph inspector as well. - - Fixed GridGraph.CheckConnection returned the wrong result when neighbours was Four and dir was less than 4. - - All compiler directives in the Optimizations tab are now tested during the package build phase. So hopefully none of them should give compiler errors now. - - Improved accuracy of intellisense by changing the start of some documentation comments to /** instead of /**< as the later type is handled well by doxygen - but apparently not so well by MonoDevelop and VS. - - Fixed the editor sometimes incorrectly comparing versions which could cause the 'New Update' window to appear even though no new version was available. - - Changes - - Removed code only necessary for compatibility with Unity 4.5 and lower. - - Removed a lot of internal unused old code. - - Renamed GridGraph.GetNodePosition to GridGraph.GraphPointToWorld to avoid confusion. - - Renamed 3rd party plugin license files to prevent the Unity Asset Store - from detecting those as the license for the whole package. - - Changed Seeker.traversableTags to be a simple int instead of a class. - - GridNode and LevelGridNode now inherit from a shared base class called GridNodeBase. - - Removed support for the compiler directive ConfigureTagsAsMultiple since it was not supported by the whole codebase - and it was pretty old. - - Marked a few methods in AstarData as deprecated since they used strings instead of types. - If string to type conversion is needed it should be done elsewhere. - - Removed some methods which have been marked as obsolete for a very long time. - - AstarData.GetNode - - PathModifier and MonoModifier.ApplyOriginal - - Some old variants of PathModifier.Apply - - GridGeneratorEditor.ResourcesField - - Int3.safeMagnitude and safeSqrMagnitude - - GraphUpdateUtilities.IsPathPossible (this has been since long been moved to the PathUtilities class) - - All constructors on path classes. The static Construct method should be used instead since that can handle path pooling. - - GraphNode.Position, walkable, tags, graphIndex. These had small changes made to their names (if they use upper- or lowercase letters) a long time ago. - (for better or for worse, but I want to avoid changing the names now again to avoid breaking peoples' code) - - GridNode.GetIndex. - - Removed the Node class which has been marked as obsolete a very long time. This class has been renamed to GraphNode to avoid name conflicts. - - Removed LocalAvoidanceMover which has been marked as obsolete a very long time. The RVO system has replaced it. - - Removed Seeker.ModifierPass.PostProcessOriginal since it was not used. This also caused Seeker.postProcessOriginalPath to be removed. - - Removed support for ASTAR_MORE_PATH_IDS because it wasn't really useful, it only increased the memory usage. - - Removed Path.height, radius, turnRadius, walkabilityMask and speed since they were dummy variables that have not been used and are - better implemented using inheritance anyway. This is also done to reduce confusion for users. - - Removed the old local avoidance system which has long since been marked as obsolete and replaced by the RVO based system. - -- 3.6.7 (2015-06-08) - - Fixes - - Fixed a race condition when OnPathPreSearch and OnPathPostSearch were called. - When the AlternativePath modifier was used, this could cause the pathfinding threads to crash with a null reference exception. - -- 3.6.6 (2015-05-27) - - Improvements - - Point Graphs are now supported when using ASTAR_NO_JSON. - - The Optimizations tab now modifies the player settings instead of changing the source files. - This is more stable and your settings are now preserved even when you upgrade the system. - - The Optimizations tab now works regardless of the directory you have installed the package in. - Hopefully the whole project is now directory agnostic, but you never know. - - Changes - - Switched out OnVoidDelegate for System.Action. - You might get a compiler error because of this (for the few that use it) - but then just rename your delegate to System.Action. - - Fixes - - Fixed recast graphs not saving all fields when using ASTAR_NO_JSON. - -- 3.6.5 (2015-05-19) - - Fixes - - Fixed recast graphs generating odd navmeshes on non-square terrains. - - Fixed serialization sometimes failing with the error 'Argument cannot be null' when ASTAR_NO_JSON was enabled. - - The 'Walkable Climb' setting on recast graphs is now clamped to be at most equal to 'Walkable Height' because - otherwise the navmesh generation can fail in some rare cases. - - Changes - - Recast graphs now show unwalkable nodes with a red outline instead of their normal colors. - -- 3.6.4 (2015-04-19) - - Fixes - - Improved compatibility with WIIU and other big-endian platforms. - -- 3.6.3 (2015-04-19) - - Fixes - - Fixed RVONavmesh not adding obstacles correctly (they were added added, but all agents ignored them). - -- 3.6.2 (2015-04-14) - - Fixes - - Fixed null reference exception in the PointGraph OnDrawGizmos method. - - Fixed a few example scene errors in Unity 5. - -- 3.6.1 (2015-04-06) - - Upgrade notes: - - The behaviour of NavGraph.RelocateNodes has changed. - The oldMatrix was previously treated as the newMatrix and vice versa so you might - need to switch the order of your parameters if you are calling it. - - Highlights: - - Works in WebGL/IL2CPP (Unity 5.0.0p3). - At least according to my limited tests. - - Implemented RelocateNodes for recast graphs (however it cannot be used on tiled recast graphs). - - Added support for hexagon graphs. - Enable it by changing the 'Connections' field on a grid graph to 'Six'. - - Fixed AstarData.DeserializeGraphsAdditive (thanks tmcsweeney). - - Fixed pathfinding threads sometimes not terminating correctly. - This would show up as a 'Could not terminate pathfinding thread...' error message. - - Added a version of GridGraph.RelocateNodes which takes grid settings instead of a matrix for ease of use. - - Changes: - - Removed NavGraph.SafeOnDestroy - - Removed GridGraph.scans because it is a pretty useless variable. - - Removed NavGraph.CreateNodes (and overriden methods) since they were not used. - - Made GridGraph.RemoveGridGraphFromStatic private. - - Removed NavMeshGraph.DeserializeMeshNodes since it was not used. - - Made Seeker.lastCompletedVectorPath, lastCompletedNodePath, OnPathComplete, OnMultiPathComplete, OnPartialPathComplete - private since they really shouldn't be used by other scripts. - - Removed Seeker.saveGetNearestHints, Seeker.startHint, Seeker.endHint, Seeker.DelayPathStart since they were not used. - - Removed unused methods of little use: AstarData.GuidToIndex and AstarData.GuidToGraph. - - Removed RecastGraph.vertices and RecastGraph.vectorVertices since they were obsolete and not used. - - Removed some old Unity 4.3 and Unity 3 compatibility code. - - Recast graphs' 'Snap to scene' button now takes into account the layer mask and the tag mask when snapping, it now also checks terrains and colliders instead of just meshes (thanks Kieran). - - Fixes: - - Fixed RecastGraph bounds gizmos could sometimes be drawn with the wrong color. - - Fixed a rare data race which would cause an exception with the message - 'Trying to initialize a node when it is not safe to initialize any nodes' to be thrown - - Tweaked Undo behaviour, should be more stable now. - - Fixed grid graph editor changing the center field very little every frame (floating point errors) - causing an excessive amount of undo items to be created. - - Reduced unecessary dirtying of the scene (thanks Ben Hymers). - - Fixed RVOCoreSimulator.WallThickness (thanks tmcsweeney). - - Fixed recast graph not properly checking for the case where an object had a MeshFilter but no Renderer (thanks 3rinJax). - - Fixed disabling ASTAR_RECAST_ARRAY_BASED_LINKED_LIST (now ASTAR_RECAST_CLASS_BASED_LINKED_LIST) would cause compiler errors. - - Fixed recast graphs could sometimes voxelize the world incorrectly and the resulting navmesh would have artifacts. - - Fixed graphMask code having been removed from the free version in some cases - due to old code which treated it as a pro only feature. - - Improved compatibility with Xbox One. - - Fixed RVOController layer field not working when multiple agents were selected. - - Fixed grid nodes not being able to have custom connections in the free version. - - Fixed runtime error on PS4. - -- 3.6 (2015-02-02) - - Upgrade notes: - - Cache data for faster startup is now stored in a separate file.\n - This reduces the huge lag some users have been experiencing since Unity changed their Undo system.\n - You will need to open the AstarPath components which used cached startup, go to the save and load tab - and press a button labeled "Transfer cache data to a separate file". - - Highlights: - - Added support for the Jump Point Search algorithm on grid graphs (pro only).\n - The JPS algorithm can be used to speed up pathfinding on grid graphs *without any penalties or tag weights applied* (it only works on uniformly weighted graphs). - It can be several times faster than normal A*. - It works best on open areas. - - Added support for heuristic optimizations (pro only).\n - This can be applied on any static graph, i.e any graph which does not change. - It requires a rather slow preprocessing step so graph updates will be really slow when using this. - However when the preprocessing is done, it can speed up pathfinding with an order of magnitude. - It works especially well in mazes with lots of options and dead ends.\n - Combined with JPS (mentioned above) I have seen it perform up to 20x better than regular A* with no heuristic optimizations. - - Added PointNode.gameObject which will contain the GameObject each node was created from. - - Added support for RVO obstacles.\n - It is by no means perfect at this point, but at least it works. - - Undo works reasonably well again.\n - It took a lot of time working around weird Unity behaviours. - For example Unity seems to send undo events when dragging items to object fields (why? no idea). - - Dragging meshes to the NavmeshGraph.SourceMesh field works again.\n - See fix about undo above. - - Extended the max number of possible areas (connected components) to 2^17 = 131072 up from 2^10 = 1024.\n - No memory usage increase, just shuffling bits around.\n - Deprecated compiler directive ASTAR_MORE_AREAS - - Extended the max number of graphs in the inspector to 256 up from 4 or 32 depending on settings.\n - No memory usage increase, just shuffling bits around. - I still don't recommend that you actually use this many graphs. - - Added RecastTileUpdate and RecastTileUpdateHandler scripts for easier recast tile updating with good performance. - - When using A* Inspector -> Settings -> Debug -> Path Debug Mode = {G,F,H,Penalties} - you previously had to set the limits for what should be displayed as "red" in the scene view yourself, this is now - optionally automatically calculated. The UI for it has also been improved. - - Improvements: - - Added penaltyAnglePower to Grid Graph -> Extra -> Penalty from Angle.\n - This can be used to increase the penalty even more for large angles than for small angles (more than it already does, that is). - - ASTAR_NO_JSON now works for recast graphs as well. - - Added custom inspector for RecastMeshObj, hopefully it will not be as confusing anymore. - - Changes: - - FleePath now has a default flee strength of 1 to avoid confusion when the FleePath doesn't seem to flee from anything. - - Removed some irrelevant defines from the Optimizations tab. - - IAgent.Position cannot be changed anymore, instead use the Teleport and SetYPosition methods. - - Exposed GraphUpdateObject.changedNodes. - - Deprecated the threadSafe paremeter on RegisterSafeUpdate, it is always treated as true now. - - The default value for AstarPath.minAreaSize is now 0 since the number of areas (connected component) indices has been greatly increased (see highlights). - - Tweaked ProceduralWorld script (used for the "Procedural" example scene) to reduce FPS drops. - - Fixes: - - AstarPath.FlushGraphUpdates will now complete all graph updates instead of just making sure they have started.\n - In addition to avoiding confusion, this fixes a rare null reference exception which could happen when using - the GraphUpdateUtilities.UpdateGraphsNoBlock method. - - Fixed some cases where updating recast graphs could throw exceptions. (message begun with "No Voxelizer object. UpdateAreaInit...") - - Fixed typo in RVOSimulator. desiredSimulatonFPS -> desiredSimulationFPS. - - RVO agents move smoother now (previously their velocity could change widely depending on the fps, the average velocity was correct however) - - Fixed an exception which could, with some graph settings, be thrown when deserializing on iPhone when bytecode stripping was enabled. - - Fixed a NullReferenceException in MultiTargetPath which was thrown if the path debug mode was set to "Heavy". - - Fixed PathUtilies.BFS always returning zero nodes (thanks Ajveach). - - Made reverting GraphUpdateObjects work. The GraphUpdateUtilities.UpdateGraphsNoBlock was also fixed by this change. - - Fixed compile error with monodevelop. - - Fixed a bug which caused scanning to fail if more than one NavmeshGraph existed. - - Fixed the lightweight local avoidance example scene which didn't work previously. - - Fixed SimpleSmoothModifier not exposing Roundness Factor in the editor for the Curved Nonuniform mode. - - Fixed an exception when updating RecastGraphs and using RelevantGraphSurfaces and multithreading. - - Fixed exceptions caused by starting paths from other threads than the Unity thread. - - Fixed an infinite loop/out of memory exception that could occur sometimes when graph updates were being done at the start of the game (I hate multithreading race conditions). - - Fixed the Optimizations tab not working when JS Support was enabled. - - Fixed graph updating not working on navmesh graphs (it was broken before due to a missing line of code). - - Fixed some misspelled words in the documentation. - - Removed some unused and/or redundant variables. - - Fixed a case where graphs added using code might not always be configured correctly (and would throw exceptions when scanning). - - Improved Windows Store compatibility. - - Fixed a typo in the GridGraph which could cause compilation to fail when building for Windows Phone or Windows Store (thanks MariuszP) - - Lots of code cleanups and comments added to various scripts. - - Fixed some cases where MonoDevelop would pick up the wrong documention for fields since it doesn't support all features that Doxygen supports. - - Fixed a bug which caused the points field on GraphUpdateScene to sometimes not be editable. - - Fixed a bug which could cause RVO agents not to move if the fps was low and Interpolation and Double Buffering was used. - - Set the execution order for RVOController and RVOSimulator to make sure that other scripts will - get the latest position in their Update method. - - Fixed a bug which could cause some nearest point on line methods in AstarMath to return NaN. - This could happen when Seeker->Start End Modifier->StartPoint and EndPoint was set to Interpolate. - - Fixed a runtime error on PS Vita. - - Fixed an index out of range exception which could occur when scanning LayeredGridGraphs. - - Fixed an index out of range exception which could occur when drawing gizmos for a LayeredGridGraph. - - Fixed a bug which could cause ProduralGridMover to update the graph every frame regardless - of if the target moved or not (thanks Makak for finding the bug). - - Fixed a number of warnings in Unity 5. - -- 3.5.9.7 (3.6 beta 6, 2015-01-28) -- 3.5.9.6 (3.6 beta 5, 2015-01-28) -- 3.5.9.5 (3.6 beta 4, 2015-01-27) -- 3.5.9.1 (3.6 beta 3, 2014-10-14) -- 3.5.9 (3.6 beta 2, 2014-10-13) -- 3.5.8 (3.6 beta 1) - - See release notes for 3.6 - -- 3.5.2 (2013-09-01) (tiny bugfix and small feature release) - - Added isometric angle option for grid graphs to help with isometric 2D games. - - Fixed a bug with the RVOAgent class which caused the LightweightRVO example scene to not work as intended (no agents were avoiding each other). - - Fixed some documentation typos. - - Fixed some compilations errors some people were having with other compilers than Unity's. - -- 3.5.1 (2014-06-15) - - Added avoidance masks to local avoidance. - Each agent now has a layer and each agent can specify which layers it will avoid. - -- 3.5 (2014-06-12) - - Added back local avoidance!! - The new system uses a sampling based algorithm instead of a geometric one. - The API is almost exactly the same so if you used the previous system this will be a drop in replacement. - As for performance, it is roughly the same, maybe slightly worse in high density situations and slightly better - in less dense situations. It can handle several thousand agents on an i7 processor. - Obstacles are not yet supported, but they will be added in a future update. - - - Binary heap switched out for a 4-ary heap. - This improves pathfinding performances by about 5%. - - Optimized scanning of navmesh graphs (not the recast graphs) - Large meshes should be much faster to scan now. - - Optimized BBTree (nearest node lookup for navmesh/recast graphs, pro version only) - Nearest node queries on navmesh/recast graphs should be slightly faster now. - - Minor updates to the documentation, esp. to the GraphNode class. - -- 3.4.0.7 - - Vuforia test build - -- 3.4.0.6 - - Fixed an issue where serialization could on some machines sometimes cause an exception to get thrown. - - Fixed an issue where the recast graph would not rasterize terrains properly near the edges of it. - - Added PathUtilities.BFS. - - Added PathUtilities.GetPointsAroundPointWorld. - -- 3.4.0.5 - - Added offline documentation (Documentation.zip) - - Misc fixes for namespace conflicts people have been having. This should improve compatibility with other packages. - You might need to delete the AstarPathfindingProject folder and reimport the package for everything to work. - -- 3.4.0.4 - - Removed RVOSimulatorEditor from the free version, it was causing compiler errors. - - Made PointGraph.nodes public. - -- 3.4.0.3 - - Removed Local Avoidance due to licensing issues. - Agents will fall back to not avoiding each other. - I am working to get the local avoidance back as soon as possible. - -- 3.4.0.2 - - Unity Asset Store forced me to increase version number. - -- 3.4.0.1 - - Fixed an ArrayIndexOutOfBounds exception which could be thrown by the ProceduralGridMover script in the Procedural example scene if the target was moved too quickly. - - The project no longer references assets from the Standard Assets folder (the package on the Unity Asset Store did so by mistake before). - -- 3.4 - - Fixed a null reference exception when scanning recast graphs and rasterizing colliders. - - Removed duplicate clipper_library.dll which was causing compiler errors. - - Support for 2D Physics collision testing when using Grid Graphs. - - Better warnings when using odd settings for Grid Graphs. - - Minor cleanups. - - Queued graph updates are no longer being performed when the AstarPath object is destroyed, this just took time. - - Fixed a bug introduced in 3.3.11 which forced grid graphs to be square in Unity versions earlier than 4.3. - - Fixed a null reference in BBTree ( used by RecastGraph). - - Fixed NavmeshGraph not rebuilding BBTree on cached start (causing performance issues on larger graphs). - - - Includes all changes from the beta releases below - -- Beta 3.3.14 ( available for everyone! ) - - All dlls are now in namespaces (e.g Pathfinding.Ionic.Zip instead of just Ionic.Zip ) to avoid conflicts with other packages. - - Most scripts are now in namespaces to avoid conflicts with other packages. - - GridNodes now support custom connections. - - Cleanups, preparing for release. - - Reverted to using an Int3 for GraphNode.position instead of an abstract Position property, the tiny memory gains were not worth it. - -- Beta 3.3.13 ( 4.3 compatible only ) - - Fixed an issue where deleting a NavmeshCut component would not update the underlaying graph. - - Better update checking. - -- Beta 3.3.12 ( 4.3 compatible only ) - - Fixed an infinite loop which could happen when scanning graphs during runtime ( not the first scan ). - - NodeLink component is now working correctly. - - Added options for optimizations to the PointGraph. - - Improved TileHandler and navmesh cutting. - - Fixed rare bug which could mess up navmeshes when using navmesh cutting. - -- Beta 3.3.11 ( 4.3 compatible only ) - - Fixed update checking. A bug has caused update checking not to run unless you had been running a previous version in which the bug did not exist. - I am not sure how long this bug has been here, but potentially for a very long time. - - Added an update notification window which pops up when there is a new version of the A* Pathfinding Project. - - Lots of UI fixes for Unity 4.3 - - Lots of other UI fixes and imprements. - - Fixed gravity for RichAI. - - Fixed Undo for Unity 4.3 - - Added a new example scene showing a procedural environment. - -- Beta 3.3.10 - - Removed RecastGraph.includeOutOfBounds. - - Fixed a few bugs when updating Layered Grid Graphs causing incorrect connections to be created, and valid ones to be left out. - - Fixed a null reference bug when removing RVO agents. - - Fixed memory leaks when deserializing graphs or reloading scenes. - -- Beta 3.3.9 - - Added new tutorial page about recast graphs. - - Recast Graph: Fixed a bug which could cause vertical surfaces to be ignored. - - Removed support for C++ Recast. - - Fixed rare bug which could mess up navmeshes when using navmesh cutting. - - Improved TileHandler and navmesh cutting. - - GraphModifiers now take O(n) (linear) time to destroy at end of game instead of O(n^2) (quadratic). - - RecastGraph now has a toggle for using tiles or not. - - Added RelevantGraphSurface which can be used with RecastGraphs to prune away non-relevant surfaces. - - Removed RecastGraph.accurateNearestNode since it was not used anymore. - - Added RecastGraph.nearestSearchOnlyXZ. - - RecastGraph now has support for removing small areas. - - Added toggle to show or hide connections between nodes on a recast graph. - - PointNode has some graph searching methods overloaded specially. This increases performance and reduces alloacations when searching - point graphs. - - Reduced allocations when searching on RecastGraph. - - Reduced allocations in RichAI and RichPath. Everything is pooled now, so for most requests no allocations will be done. - - Reduced allocations in general by using "yield return null" instead of "yield return 0" - - Fixed teleport for local avoidance agents. Previously moving an agent from one position to another - could cause it to interpolate between those two positions for a brief amount of time instead of staying at the second position. - -- Beta 3.3.8 - - Nicer RichAI gizmo colors. - - Fixed RichAI not using raycast when no path has been calculated. - -- Beta 3.3.7 - - Fixed stack overflow exception in RichPath - - Fixed RichPath could sometimes generate invalid paths - - Added gizmos to RichAI - -- Beta 3.3.6 - - Fixed node positions being off by half a node size. GetNearest node queries on grid graphs would be slightly inexact. - - Fixed grid graph updating could get messed up when using erosion. - - ... among other things, see below - -- Beta 3.3.5 and 3.3.6 - - Highlights - - Rewritten graph nodes. Nodes can now be created more easily (less overhead when creating nodes). - - Graphs may use their custom optimized memory structure for storing nodes. - - Performance improvements for scanning recast graphs. - - Added a whole new AI script. RichAI (and the class RichPath for some things): - This script is intended for navmesh based graphs and has features such as: - - Guarantees that the character stays on the navmesh - - Minor deviations from the path can be fixed without a path recalculation. - - Very exact stop at endpoint (seriously, precision with something like 7 decimals). - No more circling around the target point as with AIPath. - - Does not use path modifiers at all (for good reasons). It has an internal funnel modifier however. - - Simple wall avoidance to avoid too much wall hugging. - - Basic support for off-mesh links (see example scene). - - Improved randomness for RandomPath and FleePath, all nodes considered now have an equal chance of being selected. - - Recast now has support for tiles. This enabled much larger worlds to be rasterized (without OutOfMemory errors) and allows for dynamic graph updates. Still slow, but much faster than - a complete recalculation of the graph. - - Navmesh Cutting can now be done on recast graphs. This is a kind of (relatively) cheap graph updating which punches a hole in the navmesh to make place for obstacles. - So it only supports removing geometry, not adding it (like bridges). This update is comparitively fast, and it makes real time navmesh updating possible. - See video: http://youtu.be/qXi5qhhGNIw. - - Added RecastMeshObj which can be attached to any GameObject to include that object in recast rasterization. It exposes more options and is also - faster for graph updates with logarithmic lookup complexity instead of linear (good for larger worlds when doing graph updating). - - Reintroducing special connection costs for start and end nodes. - Before multithreading was introduced, pathfinding on navmesh graphs could recalculate - the connection costs for the start and end nodes to take into account that the start point is not actually exactly at the start node's position - (triangles are usually quite a larger than the player/npc/whatever). - This didn't work with multithreading however and could mess up pathfinding, so it was removed. - Now it has been reintroduced, working with multithreading! This means more accurate paths - on navmeshes. - - Added several methods to pick random points (e.g for group movement) to Pathfinding.PathUtlitilies. - - Added RadiusModifier. A new modifier which can offset the path based on the character radius. Intended for navmesh graphs - which are not shrinked by the character radius at start but can be used for other purposes as well. - - Improved GraphUpdateScene gizmos. Convex gizmos are now correctly placed. It also shows a bounding box when selected (not showing this has confused a lot of people). - - AIPath has gotten some cleanups. Among other things it now behaves correctly when disabled and then enabled again - making it easy to pool and reuse (should that need arise). - - Funnel modifier on grid graphs will create wider funnels for diagonals which results in nicer paths. - - If an exception is thrown during pathfinding, the program does no longer hang at quit. - - Split Automatic thread count into Automatic High Load and Automatic Low Load. The former one using a higher number of thread. - - Thread count used is now shown in the editor. - - GridGraph now supports ClosestOnNode (StartEndModifier) properly. SnapToNode gives the previous behaviour on GridGraphs (they were identical before). - - New example scene Door2 which uses the NavmeshCut component. - - Fixes - - Fixed spelling error in GridGraph.uniformWidthDepthGrid. - - Erosion radius (character radius, recast graphs) could become half of what it really should be in many cases. - - RecastGraph will not rasterize triggers. - - Fixed recast not being able to handle multiple terrains. - - Fixed recast generating an incorrect mesh for terrains in some cases (not the whole terrain was included). - - Linecast on many graph types had incorrect descriptions saying that the function returns true when the line does not intersect any obstacles, - it is actually the other way around. Descriptions corrected. - - The list of nodes returned by a ConstantPath is now guaranteed to have no duplicates. - - Many recast constants are now proper constants instead of static variables. - - Fixed bug in GridNode.RemoveGridGraph which caused graphs not being cleaned up correctly. Could cause problems later on. - - Fixed an ArgumentOutOfRange exception in ListPool class. - - RelocateNodes on NavMeshGraph now correctly recalculates connection costs and rebuilds the internal query tree (thanks peted on the forums). - - Much better member documentation for RVOController. - - Exposed MaxNeighbours from IAgent to RVOController. - - Fixed AstarData.UpdateShortcuts not being called when caching was enabled. This caused graph shortcuts such as AstarPath.astarData.gridGraph not being set - when loaded from a cache. - - RVOCoreSimulator/RVOSimulator now cleans up the worker threads correctly. - - Tiled recast graphs can now be serialized. - - Changes - - Renamed Modifier class to PathModifier to avoid naming conflicts with user scripts and other packages. - - Cleaned up recast, put inside namespace and split into multiple files. - - ListPool and friends are now threadsafe. - - Removed Polygon.Dot since the Vector3 class already contains such a method. - - The Scan functions now use callbacks for progress info instead of IEnumerators. Graphs can now output progress info as well. - - Added Pathfinding.NavGraph.CountNodes function. - - Removed GraphHitInfo.success field since it was not used. - - GraphUpdateScene will now fall back to collider.bounds or renderer.bounds (depending on what is available) if no points are - defined for the shape. - - AstarPath.StartPath now has an option to put the path in the front of the queue to prioritize its calculation over other paths. - - Time.fixedDeltaTime by Time.deltaTime in AIPath.RotateTowards() to work with both FixedUpdate and Update. (Thanks Pat_AfterMoon) - You might have to configure the turn speed variable after updating since the actual rotation speed might have changed a bit depending on your settings. - - Fixed maxNeighbourDistance not being used correctly by the RVOController script. It would stay at the default value. If you - have had trouble getting local avoidance working on world with a large scale, this could have been the problem. (Thanks to Edgar Sun for providing a reproducible example case) - - Graphs loaded using DeserializeGraphsAdditive will get their graphIndex variables on the nodes set to the correct values. (thanks peted for noticing the bug). - - Fixed a null reference exception in MultiTargetPath (thanks Dave for informing me about the bug). - - GraphUpdateScene.useWorldSpace is now false per default. - - If no log output is disabled and we are not running in the editor, log output will be discarded as early as possible for performance. - Even though in theory log output could be enabled between writing to internal log strings and deciding if log output should be written. - - NavGraph.inverseMatrix is now a field, not a property (for performance). All writes to matrix should be through the SetMatrix method. - - StartEndModifier now uses ClosestOnNode for both startPoint and endPoint by default. - - Known bugs - - Linecasting on graphs is broken at the moment. (working for recast/navmesh graph atm. Except in very special cases) - - RVONavmesh does not work with tiled recast graphs. - - - -- 3.2.5.1 - - Fixes - - Pooling of paths had been accidentally disabled in AIPath. - -- 3.2.5 - - Changes - - Added support for serializing dictionaries with integer keys via a Json Converter. - - If drawGizmos is disabled on the seeker, paths will be recycled instantly. - This will show up so that if you had a seeker with drawGizmos=false, and then enable - drawGizmos, it will not draw gizmos until the next path request is issued. - - Fixes - - Fixed UNITY_4_0 preprocesor directives which were indented for UNITY 4 and not only 4.0. - Now they will be enabled for all 4.x versions of unity instead of only 4.0. - - Fixed a path pool leak in the Seeker which could cause paths not to be released if a seeker - was destroyed. - - When using a non-positive maxDistance for point graphs less processing power will be used. - - Removed unused 'recyclePaths' variable in the AIPath class. - - NullReferenceException could occur if the Pathfinding.Node.connections array was null. - - Fixed NullReferenceException which could occur sometimes when using a MultiTargetPath (Issue #16) - - Changed Ctrl to Alt when recalcing path continously in the Path Types example scene to avoid - clearing the points for the MultiTargetPath at the same time (it was also using Ctrl). - - Fixed strange looking movement artifacts during the first few frames when using RVO and interpolation was enabled. - - AlternativePath modifier will no longer cause underflows if penalties have been reset during the time it was active. It will now - only log a warning message and zero the penalty. - - Added Pathfinding.GraphUpdateObject.resetPenaltyOnPhysics (and similar in GraphUpdateScene) to force grid graphs not to reset penalties when - updating graphs. - - Fixed a bug which could cause pathfinding to crash if using the preprocessor directive ASTAR_NoTagPenalty. - - Fixed a case where StartEndModifier.exactEndPoint would incorrectly be used instead of exactStartPoint. - - AlternativePath modifier now correctly resets penalties if it is destroyed. - -- 3.2.4.1 - - Unity Asset Store guys complained about the wrong key image. - I had to update the version number to submit again. - -- 3.2.4 - - Highlights - - RecastGraph can now rasterize colliders as well! - - RecastGraph can rasterize colliders added to trees on unity terrains! - - RecastGraph will use Graphics.DrawMeshNow functions in Unity 4 instead of creating a dummy GameObject. - This will remove the annoying "cleaning up leaked mesh object" debug message which unity would log sometimes. - The debug mesh is now also only visible in the Scene View when the A* object is selected as that seemed - most logical to me (don't like this? post something in the forum saying you want a toggle for it and I will implement - one). - - GraphUpdateObject now has a \link Pathfinding.GraphUpdateObject.updateErosion toggle \endlink specifying if erosion (on grid graphs) should be recalculated after applying the guo. - This enables one to add walkable nodes which should have been made unwalkable by erosion. - - Made it a bit easier (and added more correct documentation) to add custom graph types when building for iPhone with Fast But No Exceptions (see iPhone page). - - Changes - - RecastGraph now only rasterizes enabled MeshRenderers. Previously even disabled ones would be included. - - Renamed RecastGraph.includeTerrain to RecastGraph.rasterizeTerrain to better match other variable naming. - - Fixes - - AIPath now resumes path calculation when the component or GameObject has been disabled and then reenabled. - -- 3.2.3 (free version mostly) - - Fixes - - A UNITY_IPHONE directive was not included in the free version. This caused compilation errors when building for iPhone. - - Changes - - Some documentation updates - -- 3.2.2 - - Changes - - Max Slope in grid graphs is now relative to the graph's up direction instead of world up (makes more sense I hope) - - Note - - Update really too small to be an update by itself, but I was updating the build scripts I use for the project and had to upload a new version because of technical reasons. - -- 3.2.1 - - Fixes - - Fixed bug which caused compiler errors on build (player, not in editor). - - Version number was by mistake set to 3.1 instead of 3.2 in the previous version. - -- 3.2 - - Highlights - - A complete Local Avoidance system is now included in the pro version! - - Almost every allocation can now be pooled. Which means a drastically lower allocation rate (GC get's called less often). - - Initial node penalty per graph can now be set. - Custom graph types implementing CreateNodes must update their implementations to properly assign this value. - - GraphUpdateScene has now many more tools and options which can be used. - - Added Pathfinding.PathUtilities which contains some usefull functions for working with paths and nodes. - - Added Pathfinding.Node.GetConnections to enable easy getting of all connections of a node. - The Node.connections array does not include custom connections which for example grid graphs use. - - Seeker.PostProcess function was added for easy postprocessing of paths calculated without a seeker. - - AstarPath.WaitForPath. Wait (block) until a specific path has been calculated. - - Path.WaitForPath. Wait using a coroutine until a specific path has been calculated. - - LayeredGridGraph now has support for up to 65535 layers (theoretically, but don't try it as you would probably run out of memory) - - Recast graph generation is now up to twice as fast! - - Fixed some UI glitches in Unity 4. - - Debugger component has more features and a slightly better layout. - - Fixes - - Fixed a bug which caused the SimpleSmoothModifier with uniformSegmentLength enabled to skip points sometimes. - - Fixed a bug where importing graphs additively which had the same GUID as a graph already loaded could cause bugs in the inspector. - - Fixed a bug where updating a GridGraph loaded from file would throw a NullReferenceException. - - Fixed a bug which could cause error messages for paths not to be logged - - Fixed a number of small bugs related to updating grid graphs (especially when using erosion as well). - - Overflows could occur in some navmesh/polygon math related functions when working with Int3s. This was because the precision of them had recently been increased. - Further down the line this could cause incorrect answers to GetNearest queries. - Fixed by casting to long when necessary. - - Navmesh2.shader defined "Cull Off" twice. - - Pathfinding threads are now background threads. This will prevent them from blocking the process to terminate if they of some reason are still alive (hopefully at least). - - When really high penalties are applied (which could be underflowed negative penalties) a warning message is logged. - Really high penalties (close to max uint value) can otherwise cause overflows and in some cases infinity loops because of that. - - ClosestPointOnTriangle is now spelled correctly. - - MineBotAI now uses Update instead of FixedUpdate. - - Use Dark Skin option is now exposed again since it could be incorrectly set sometimes. Now you can force it to light or dark, or set it to auto. - - Fixed recast graph bug when using multiple terrains. Previously only one terrain would be used. - - Fixed some UI glitches in Unity 4. - - Changes - - Removed Pathfinding.NNInfo.priority. - - Removed Pathfinding.NearestNodePriority. - - Conversions between NNInfo and Node are now explicit to comply with the rule of "if information might be lost: use explicit casts". - - NNInfo is now a struct. - - GraphHitInfo is now a struct. - - Path.vectorPath and Path.path are now List and List respectively. This is done to enable pooling of resources more efficiently. - - Added Pathfinding.Node.RecalculateConnectionCosts. - - Moved IsPathPossible from GraphUpdateUtilities to PathUtilities. - - Pathfinding.Path.processed was replaced with Pathfinding.Path.state. The new variable will have much more information about where - the path is in the pathfinding pipeline. - - Paths should not be created with constructors anymore, instead use the PathPool class and then call some Setup() method - - When the AstarPath object is destroyed, calculated paths in the return queue are not returned with errors anymore, but just returned. - - Removed depracated methods AstarPath.AddToPathPool, RecyclePath, GetFromPathPool. - - Bugs - - C++ Version of Recast does not work on Windows. - - GraphUpdateScene does in some cases not draw correctly positioned gizmos. - - Starting two webplayers and closing down the first might cause the other one's pathfinding threads to crash (unity bug?) (confirmed on osx) - -- 3.1.4 (iOS fixes) - - Fixes - - More fixes for the iOS platform. - - The "JsonFx.Json.dll" file is now correctly named. - - Changes - - Removed unused code from DotNetZip which reduced the size of it with about 20 KB. - -- 3.1.3 (free version only) - - Fixes - - Some of the fixes which were said to have been made in 3.1.2 were actually not included in the free version of the project. Sorry about that. - - Also includes a new JsonFx and Ionic.Zip dll. This should make it possible to build with the .Net 2.0 Subset again see: - http://www.arongranberg.com/forums/topic/ios-problem/page/1/ - -- 3.1.2 (small bugfix release) - - Fixes - - Fixed a bug which caused builds for iPhone to fail. - - Fixed a bug which caused runtime errors on the iPhone platform. - - Fixed a bug which caused huge lag in the editor for some users when using grid graphs. - - ListGraphs are now correctly loaded as PointGraphs when loading data from older versions of the system. - - Changes - - Moved JsonFx into the namespace Pathfinding.Serialization.JsonFx to avoid conflicts with users own JsonFx libraries (if they used JsonFx). - - - Known bugs - - Recast graph does not work when using static batching on any objects included. - -- 3.1.1 (small bugfix release) - - Fixes - - Fixed a bug which would cause Pathfinding.GraphUpdateUtilities.UpdateGraphsNoBlock to throw an exception when using multithreading - - Fixed a bug which caused an error to be logged and no pathfinding working when not using multithreading in the free version of the project - - Fixed some example scene bugs due to downgrading the project from Unity 3.5 to Unity 3.4 - -- 3.1 - - Fixed bug which caused LayerMask fields (GridGraph inspector for example) to behave weirdly for custom layers on Unity 3.5 and up. - - The color setting "Node Connection" now actually sets the colors of the node connections when no other information should be shown using the connection colors or when no data is available. - - Put the Int3 class in a separate file. - - Casting between Int3 and Vector3 is no longer implicit. This follows the rule of "if information might be lost: use explicit casts". - - Renamed ListGraph to PointGraph. "ListGraph" has previously been used for historical reasons. PointGraph is a more suitable name. - - Graph can now have names in the editor (just click the name in the graph list) - - Graph Gizmos can now be selectively shown or hidden per graph (small "eye" icon to the right of the graph's name) - - Added GraphUpdateUtilities with many useful functions for updating graphs. - - Erosion for grid graphs can now use tags instead of walkability - - Fixed a bug where using One Way links could in some cases result in a NullReferenceException being thrown. - - Vector3 fields in the graph editors now look a bit better in Unity 3.5+. EditorGUILayout.Vector3Field didn't show the XYZ labels in a good way (no idea why) - - GridGraph.useRaycastNormal is now enabled only if the Max Slope is less than 90 degrees. Previously it was a manual setting. - - The keyboard shortcut to scan all graphs does now also work even when the graphs are not deserialized yet (which happens a lot in the editor) - - Added NodeLink script, which can be attached to GameObjects to add manual links. This system will eventually replace the links system in the A* editor. - - Added keyboard shortcuts for adding and removing links. See Menubar -> Edit -> Pathfinding - \note Some features are restricted to Unity 3.5 and newer because of technical limitations in earlier versions (especially multi-object editing related features). - - -- 3.1 beta (version number 3.0.9.9 in Unity due to technical limitations of the System.Versions class) - - Multithreading is now enabled in the free version of the A* Pathfinding Project! - - Better support for graph updates called during e.g OnPostScan. - - PathID is now used as a short everywhere in the project - - G,H and penalty is now used as unsigned integers everywhere in the project instead of signed integers. - - There is now only one tag per node (if not the \#define ConfigureTagsAsMultiple is set). - - Fixed a bug which could make connections between graphs invalid when loading from file (would also log annoying error messages). - - Erosion (GridGraph) can now be used even when updating the graph during runtime. - - Fixed a bug where the GridGraph could return null from it's GetNearestForce calls which ended up later throwing a NullReferenceException. - - FunnelModifier no longer warns if any graph in the path does not implement the IFunnelGraph interface (i.e have no support for the funnel algorithm) - and instead falls back to add node positions to the path. - - Added a new graph type : LayerGridGraph which works like a GridGraph, but has support for multiple layers of nodes (e.g multiple floors in a building). - - ScanOnStartup is now exposed in the editor. - - Separated temporary path data and connectivity data. - - Rewritten multithreading. You can now run any number of threads in parallel. - - To avoid possible infinite loops, paths are no longer returned with just an error when requested at times they should not (e.g right when destroying the pathfinding object) - - Cleaned up code in AstarPath.cs, members are now structured and many obsolete members have been removed. - - Rewritten serialization. Now uses Json for settings along with a small part hardcoded binary data (for performance and memory). - This is a lot more stable and will be more forwards and backwards compatible. - Data is now saved as zip files(in memory, but can be saved to file) which means you can actually edit them by hand if you want! - - Added dependency JsonFx (modified for smaller code size and better compatibility). - - Added dependency DotNetZip (reduced version and a bit modified) for zip compression. - - Graph types wanting to serialize members must add the JsonOptIn attribute to the class and JsonMember to any members to serialize (in the JsonFx.Json namespace) - - Graph types wanting to serialize a bit more data (custom), will have to override some new functions from the NavGraph class to do that instead of the old serialization functions. - - Changed from using System.Guid to a custom written Guid implementation placed in Pathfinding.Util.Guid. This was done to improve compabitility with iOS and other platforms. - Previously it could crash when trying to create one because System.Guid was not included in the runtime. - - Renamed callback AstarPath.OnSafeNodeUpdate to AstarPath.OnSafeCallback (also added AstarPath.OnThreadSafeCallback) - - MultiTargetPath would throw NullReferenceException if no valid start node was found, fixed now. - - Binary heaps are now automatically expanded if needed, no annoying warning messages. - - Fixed a bug where grid graphs would not update the correct area (using GraphUpdateObject) if it was rotated. - - Node position precision increased from 100 steps per world unit to 1000 steps per world unit (if 1 world unit = 1m, that is mm precision). - This also means that all costs and penalties in graphs will need to be multiplied by 10 to match the new scale. - It also means the max range of node positions is reduced a bit... but it is still quite large (about 2 150 000 world units in either direction, that should be enough). - - If Unity 3.5 is used, the EditorGUIUtility.isProSkin field is used to toggle between light and dark skin. - - Added LayeredGridGraph which works almost the same as grid graphs, but support multiple layers of nodes. - - \note Dropped Unity 3.3 support. - - Known Bugs: The C++ version of Recast does not work on Windows - -- Documentation Update - - Changed from FixedUpdate to Update in the Get Started Guide. CharacterController.SimpleMove should not be called more than once per frame, - so this might have lowered performance when using many agents, sorry about this typo. -- 3.0.9 - - The List Graph's "raycast" variable is now serialized correctly, so it will be saved. - - List graphs do not generate connections from nodes to themselves anymore (yielding slightly faster searches) - - List graphs previously calculated cost values for connections which were very low (they should have been 100 times larger), - this can have caused searches which were not very accurate on small scales since the values were rounded to the nearest integer. - - Added Pathfinding.Path.recalcStartEndCosts to specify if the start and end nodes connection costs should be recalculated when searching to reflect - small differences between the node's position and the actual used start point. It is on by default but if you change node connection costs you might want to switch it off to get more accurate paths. - - Fixed a compile time warning in the free version from referecing obsolete variables in the project. - - Added AstarPath.threadTimeoutFrames which specifies how long the pathfinding thread will wait for new work to turn up before aborting (due to request). This variable is not exposed in the inspector yet. - - Fixed typo, either there are eight (8) or four (4) max connections per node in a GridGraph, never six (6). - - AlternativePath will no longer cause errors when using multithreading! - - Added Pathfinding.ConstantPath, a path type which finds all nodes in a specific distance (cost) from a start node. - - Added Pathfinding.FloodPath and Pathfinding.FloodPathTracer as an extreamly fast way to generate paths to a single point in for example TD games. - - Fixed a bug in MultiTargetPath which could make it extreamly slow to process. It would not use much CPU power, but it could take half a second for it to complete due to excessive yielding - - Fixed a bug in FleePath, it now returns the correct path. It had previously sometimes returned the last node searched, but which was not necessarily the best end node (though it was often close) - - Using \#defines, the pathfinder can now be better profiled (see Optimizations tab -> Profile Astar) - - Added example scene Path Types (mainly useful for A* Pro users, so I have only included it for them) - - Added many more tooltips in the editor - - Fixed a bug which would double the Y coordinate of nodes in grid graphs when loading from saved data (or caching startup) - - Graph saving to file will now work better for users of the Free version, I had forgot to include a segment of code for Grid Graphs (sorry about that) - - Some other bugfixes -- 3.0.8.2 - - Fixed a critical bug which could render the A* inspector unusable on Windows due to problems with backslashes and forward slashes in paths. -- 3.0.8.1 - - Fixed critical crash bug. When building, a preprocessor-directive had messed up serialization so the game would probably crash from an OutOfMemoryException. -- 3.0.8 - - Graph saving to file is now exposed for users of the Free version - - Fixed a bug where penalties added using a GraphUpdateObject would be overriden if updatePhysics was turned on in the GraphUpdateObject - - Fixed a bug where list graphs could ignore some children nodes, especially common if the hierarchy was deep - - Fixed the case where empty messages would spam the log (instead of spamming somewhat meaningful messages) when path logging was set to Only Errors - - Changed the NNConstraint used as default when calling NavGraph.GetNearest from NNConstraint.Default to NNConstraint.None, this is now the same as the default for AstarPath.GetNearest. - - You can now set the size of the red cubes shown in place of unwalkable nodes (Settings-->Show Unwalkable Nodes-->Size) - - Dynamic search of where the EditorAssets folder is, so now you can place it anywhere in the project. - - Minor A* inspector enhancements. - - Fixed a very rare bug which could, when using multithreading cause the pathfinding thread not to start after it has been terminated due to a long delay - - Modifiers can now be enabled or disabled in the editor - - Added custom inspector for the Simple Smooth Modifier. Hopefully it will now be easier to use (or at least get the hang on which fields you should change). - - Added AIFollow.canSearch to disable or enable searching for paths due to popular request. - - Added AIFollow.canMove to disable or enable moving due to popular request. - - Changed behaviour of AIFollow.Stop, it will now set AIFollow.ccanSearch and AIFollow.ccanMove to false thus making it completely stop and stop searching for paths. - - Removed Path.customData since it is a much better solution to create a new path class which inherits from Path. - - Seeker.StartPath is now implemented with overloads instead of optional parameters to simplify usage for Javascript users - - Added Curved Nonuniform spline as a smoothing option for the Simple Smooth modifier. - - Added Pathfinding.WillBlockPath as function for checking if a GraphUpdateObject would block pathfinding between two nodes (useful in TD games). - - Unity References (GameObject's, Transforms and similar) are now serialized in another way, hopefully this will make it more stable as people have been having problems with the previous one, especially on the iPhone. - - Added shortcuts to specific types of graphs, AstarData.navmesh, AstarData.gridGraph, AstarData.listGraph - - Known Bugs: The C++ version of Recast does not work on Windows -- 3.0.7 - - Grid Graphs can now be scaled to allow non-square nodes, good for isometric games. - - Added more options for custom links. For example individual nodes or connections can be either enabled or disabled. And penalty can be added to individual nodes - - Placed the Scan keyboard shortcut code in a different place, hopefully it will work more often now - - Disabled GUILayout in the AstarPath script for a possible small speed boost - - Some debug variables (such as AstarPath.PathsCompleted) are now only updated if the ProfileAstar define is enabled - - DynamicGridObstacle will now update nodes correctly when the object is destroyed - - Unwalkable nodes no longer shows when Show Graphs is not toggled - - Removed Path.multithreaded since it was not used - - Removed Path.preCallback since it was obsolate - - Added Pathfinding.XPath as a more customizable path - - Added example of how to use MultiTargetPaths to the documentation as it was seriously lacking info on that area - - The viewing mesh scaling for recast graphs is now correct also for the C# version - - The StartEndModifier now changes the path length to 2 for correct applying if a path length of 1 was passed. - - The progressbar is now removed even if an exception was thrown during scanning - - Two new example scenes have been added, one for list graphs which includes sample links, and another one for recast graphs - - Reverted back to manually setting the dark skin option, since it didn't work in all cases, however if a dark skin is detected, the user will be asked if he/she wants to enable the dark skin - - Added gizmos for the AIFollow script which shows the current waypoint and a circle around it illustrating the distance required for it to be considered "reached". - - The C# version of Recast does now use Character Radius instead of Erosion Radius (world units instead of voxels) - - Fixed an IndexOutOfRange exception which could occur when saving a graph with no nodes to file - - Known Bugs: The C++ version of Recast does not work on Windows -- 3.0.6 - - Added support for a C++ version of Recast which means faster scanning times and more features (though almost no are available at the moment since I haven't added support for them yet). - - Removed the overload AstarData.AddGraph (string type, NavGraph graph) since it was obsolete. AstarData.AddGraph (Pathfinding.NavGraph) should be used now. - - Fixed a few bugs in the FunnelModifier which could cause it to return invalid paths - - A reference image can now be generated for the Use Texture option for Grid Graphs - - Fixed an editor bug with graphs which had no editors - - Graphs with no editors now show up in the Add New Graph list to show that they have been found, but they cannot be used - - Deleted the \a graphIndex parameter in the Pathfinding.NavGraph.Scan function. If you need to use it in your graph's Scan function, get it using Pathfinding.AstarData.GetGraphIndex - - Javascript support! At last you can use Js code with the A* Pathfinding Project! Go to A* Inspector-->Settings-->Editor-->Enable Js Support to enable it - - The Dark Skin is now automatically used if the rest of Unity uses the dark skin(hopefully) - - Fixed a bug which could cause Unity to crash when using multithreading and creating a new AstarPath object during runtime -- 3.0.5 - - \link Pathfinding.PointGraph List Graphs \endlink now support UpdateGraphs. This means that they for example can be used with the DynamicObstacle script. - - List Graphs can now gather nodes based on GameObject tags instead of all nodes as childs of a specific GameObject. - - List Graphs can now search recursively for childs to the 'root' GameObject instead of just searching through the top-level children. - - Added custom area colors which can be edited in the inspector (A* inspector --> Settings --> Color Settings --> Custom Area Colors) - - Fixed a NullReference bug which could occur when loading a Unity Reference with the AstarSerializer. - - Fixed some bugs with the FleePath and RandomPath which could cause the StartEndModifier to assign the wrong endpoint to the path. - - Documentation is now more clear on what is A* Pathfinding Project Pro only features. - - Pathfinding.NNConstraint now has a variable to constrain which graphs to search (A* Pro only).\n - This is also available for Pathfinding.GraphUpdateObject which now have a field for an NNConstraint where it can constrain which graphs to update. - - StartPath calls on the Seeker can now take a parameter specifying which graphs to search for close nodes on (A* Pro only) - - Added the delegate AstarPath.OnAwakeSettings which is called as the first thing in the Awake function, can be used to set up settings. - - Pathfinding.UserConnection.doOverrideCost is now serialized correctly. This represents the toggle to the right of the "Cost" field when editing a link. - - Fixed some bugs with the RecastGraph when spans were partially out-of-bounds, this could generate seemingly random holes in the mesh -- 3.0.4 (only pro version affected) - - Added a Dark Skin for Unity Pro users (though it is available to Unity Free users too, even though it doesn't look very good). - It can be enabled through A* Inspector --> Settings --> Editor Settings --> Use Dark Skin - - Added option to include or not include out of bounds voxels (Y axis below the graph only) for Recast graphs. -- 3.0.3 (only pro version affected) - - Fixed a NullReferenceException caused by Voxelize.cs which could surface if there were MeshFilters with no Renderers on GameObjects (Only Pro version affected) -- 3.0.2 - - Textures can now be used to add penalty, height or change walkability of a Grid Graph (A* Pro only) - - Slope can now be used to add penalty to nodes - - Height (Y position) can now be usd to add penalty to nodes - - Prioritized graphs can be used to enable prioritizing some graphs before others when they are overlapping - - Several bug fixes - - Included a new DynamicGridObstacle.cs script which can be attached to any obstacle with a collider and it will update grids around it to account for changed position -- 3.0.1 - - Fixed Unity 3.3 compability -- 3.0 - - Rewrote the system from scratch - - Funnel modifier - - Easier to extend the system - - -- x. releases are major rewrites or updates to the system. -- .x releases are quite big feature updates -- ..x releases are the most common updates, fix bugs, add some features etc. -- ...x releases are quickfixes, most common when there was a really bad bug which needed fixing ASAP. - - */ diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/changelog.cs.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/changelog.cs.meta deleted file mode 100644 index 015a9baaabe1827d454f74f5becdf6fcc7e16a98..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/changelog.cs.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e271255bdfe8941f9ab0acccbb14dd82 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/defines.csv b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/defines.csv deleted file mode 100644 index 8dc38f98929e3e0fda76948ed1cac249e291840b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/defines.csv +++ /dev/null @@ -1,15 +0,0 @@ -ASTAR_NO_ZIP ; Enable to strip out usage of the DotNetZip library. Increases serialized data size, but this is only relevant if you are using cached startup or loading serialized graphs during runtime. You can delete the Pathfinding.Ionic.Zip.Reduced dll after you have enabled this. You will have to reconfigure all graph settings after enabling. -ASTAR_FAST_NO_EXCEPTIONS ; Needs to be enabled for the iPhone build setting Fast But No Exceptions to work. -ASTAR_GRID_NO_CUSTOM_CONNECTIONS ; Disabling this will reduce memory usage and improve performance slightly but you will not be able to add custom connections to grid nodes using e.g the NodeLink component. -ASTAR_LEVELGRIDNODE_FEW_LAYERS ; Reduces the max number of layers for LayeredGridGraphs from 255 to 16. Saves memory. -ASTAR_NO_PENALTY ; Enabling this disables the use of penalties. Reduces memory usage. -ASTAR_NO_POOLING ; Disable pooling for some reason. Could be debugging or just for measuring the difference. -ASTAR_NoGUI ; Disables the use of the OnGUI function, can possibly improve performance by a tiny bit (disables the InGame option for path debugging). -ASTAR_POOL_DEBUG ; Enables debugging of path pooling. Will log warnings and info messages about paths not beeing pooled correctly. -ASTAR_RECAST_CLASS_BASED_LINKED_LIST ; Disables the array based linked list. This might handle very large tiles better, however it is usually slower to scan and uses more memory (during scanning). -ASTAR_RECAST_BFS ; Enables an experimental optimization to recast. Faster scanning and updating but can sometimes fail to generate any navmesh at all (this is relatively rare though). -ASTAR_RECAST_LARGER_TILES ; Raises the vertex count limit on recast tiles, but reduces the max number of tiles. -ASTAR_SET_LEVELGRIDNODE_HEIGHT ; Enables a field height for each node if you want to use that information. Not used by any included scripts. Warning: Will break node serialization (for e.g cached startup) if changed. -ProfileAstar ; Enables profiling of the pathfinding process. -ASTAR_UNITY_PRO_PROFILER ; Requires ProfileAstar, profiles section of astar code which will show up in the Unity Pro Profiler. -ASTAR_JPS ; Enables jump point search support for grid graphs. There is a separate toggle in the grid graph settings. Disable this if you do not use it since it reduces memory usage. diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/defines.csv.meta b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/defines.csv.meta deleted file mode 100644 index f4d100125bd255da9b148c4af73ec7e991ac05bd..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/defines.csv.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 0efbe2d04dbb642a8833e41b8e8c7275 -TextScriptImporter: - userData: diff --git a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/documentation.html b/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/documentation.html deleted file mode 100644 index 997b5c417c649d263979e79d007442e094c4e16b..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Module/Pathfinding/AstarPathfindingProject/documentation.html +++ /dev/null @@ -1,7447 +0,0 @@ - - - - - - - - Documentation - - - -