From d7dc4d81cbcd61df410618da6159bb0dd03da837 Mon Sep 17 00:00:00 2001 From: Lee Prosser Date: Sat, 3 Oct 2015 08:29:20 +0100 Subject: [PATCH] Initial check in --- .gitignore | 11 +++ Assets/AstarPathfindingProject.meta | 9 +++ Assets/ECSModules.meta | 9 +++ Assets/ECSModules/AStarPathfinding.meta | 9 +++ .../ECSModules/AStarPathfinding/Actions.meta | 9 +++ .../AStarPathfinding/Actions/Debug.meta | 9 +++ .../Actions/Debug/DrawDebugPathAction.cs | 30 +++++++ .../Actions/Debug/DrawDebugPathAction.cs.meta | 8 ++ .../AStarPathfinding/Actions/Graphs.meta | 9 +++ .../Actions/Graphs/FloodFillGraphsAction.cs | 28 +++++++ .../Graphs/FloodFillGraphsAction.cs.meta | 8 ++ .../Actions/Graphs/FlushGraphUpdatesAction.cs | 19 +++++ .../Graphs/FlushGraphUpdatesAction.cs.meta | 8 ++ .../Actions/Graphs/GetGraphByIndexAction.cs | 28 +++++++ .../Graphs/GetGraphByIndexAction.cs.meta | 8 ++ .../Actions/Graphs/GetGraphFromNodeAction.cs | 25 ++++++ .../Graphs/GetGraphFromNodeAction.cs.meta | 8 ++ .../Actions/Graphs/RescanGraphAction.cs | 22 +++++ .../Actions/Graphs/RescanGraphAction.cs.meta | 8 ++ .../Actions/Graphs/RescanGraphsAction.cs | 19 +++++ .../Actions/Graphs/RescanGraphsAction.cs.meta | 8 ++ .../Actions/Graphs/SetHeuristicAction.cs | 22 +++++ .../Actions/Graphs/SetHeuristicAction.cs.meta | 8 ++ .../Actions/Graphs/SetHeuristicScaleAction.cs | 22 +++++ .../Graphs/SetHeuristicScaleAction.cs.meta | 8 ++ .../Actions/Graphs/UpdateGraphsAction.cs | 22 +++++ .../Actions/Graphs/UpdateGraphsAction.cs.meta | 8 ++ .../AStarPathfinding/Actions/Nodes.meta | 9 +++ .../Nodes/AddConnectionToNodeAction.cs | 28 +++++++ .../Nodes/AddConnectionToNodeAction.cs.meta | 8 ++ .../Nodes/ClearNodeConnectionsAction.cs | 25 ++++++ .../Nodes/ClearNodeConnectionsAction.cs.meta | 8 ++ .../Actions/Nodes/DestroyNodeAction.cs | 22 +++++ .../Actions/Nodes/DestroyNodeAction.cs.meta | 8 ++ .../Actions/Nodes/GetNearestNodeAction.cs | 29 +++++++ .../Nodes/GetNearestNodeAction.cs.meta | 8 ++ .../Actions/Nodes/GetNodeConnectionsAction.cs | 26 ++++++ .../Nodes/GetNodeConnectionsAction.cs.meta | 8 ++ .../Actions/Nodes/GetNodePenaltyAction.cs | 25 ++++++ .../Nodes/GetNodePenaltyAction.cs.meta | 8 ++ .../Actions/Nodes/GetNodeWalkabilityAction.cs | 25 ++++++ .../Nodes/GetNodeWalkabilityAction.cs.meta | 8 ++ .../Actions/Nodes/GetNodesPositionAction.cs | 26 ++++++ .../Nodes/GetNodesPositionAction.cs.meta | 8 ++ .../RecalculateNodeConnectionCostsAction.cs | 22 +++++ ...calculateNodeConnectionCostsAction.cs.meta | 8 ++ .../Nodes/RemoveConnectionToNodeAction.cs | 25 ++++++ .../RemoveConnectionToNodeAction.cs.meta | 8 ++ .../AStarPathfinding/Actions/Paths.meta | 9 +++ .../Actions/Paths/ClaimPathInPoolAction.cs | 21 +++++ .../Paths/ClaimPathInPoolAction.cs.meta | 12 +++ .../Actions/Paths/CreateABPathAction.cs | 51 ++++++++++++ .../Actions/Paths/CreateABPathAction.cs.meta | 12 +++ .../Actions/Paths/CreateConstantPathAction.cs | 50 ++++++++++++ .../Paths/CreateConstantPathAction.cs.meta | 12 +++ .../Actions/Paths/CreateFleePathAction.cs | 56 +++++++++++++ .../Paths/CreateFleePathAction.cs.meta | 12 +++ .../Actions/Paths/CreateFloodPathAction.cs | 50 ++++++++++++ .../Paths/CreateFloodPathAction.cs.meta | 12 +++ .../Paths/CreateFloodPathTraceAction.cs | 53 ++++++++++++ .../Paths/CreateFloodPathTraceAction.cs.meta | 12 +++ .../Actions/Paths/CreateMultiPathAction.cs | 52 ++++++++++++ .../Paths/CreateMultiPathAction.cs.meta | 12 +++ .../Actions/Paths/CreateRandomPathAction.cs | 45 +++++++++++ .../Paths/CreateRandomPathAction.cs.meta | 12 +++ .../Actions/Paths/DuplicatePathAction.cs | 25 ++++++ .../Actions/Paths/DuplicatePathAction.cs.meta | 12 +++ .../Actions/Paths/FreePathInPoolAction.cs | 20 +++++ .../Paths/FreePathInPoolAction.cs.meta | 12 +++ .../GetAllNodesFromConstantPathAction.cs | 24 ++++++ .../GetAllNodesFromConstantPathAction.cs.meta | 12 +++ .../Paths/GetClosestNodeInPathAction.cs | 38 +++++++++ .../Paths/GetClosestNodeInPathAction.cs.meta | 12 +++ .../Paths/GetClosestPositionInPathAction.cs | 36 +++++++++ .../GetClosestPositionInPathAction.cs.meta | 12 +++ .../Actions/Paths/GetDistanceOfPathAction.cs | 38 +++++++++ .../Paths/GetDistanceOfPathAction.cs.meta | 12 +++ .../Paths/GetNodeFromPathByIndexAction.cs | 31 +++++++ .../GetNodeFromPathByIndexAction.cs.meta | 12 +++ .../Actions/Paths/GetNodesFromPathAction.cs | 24 ++++++ .../Paths/GetNodesFromPathAction.cs.meta | 12 +++ .../Paths/GetVectorFromPathByIndexAction.cs | 31 +++++++ .../GetVectorFromPathByIndexAction.cs.meta | 12 +++ .../Actions/Paths/ReversePathAction.cs | 23 ++++++ .../Actions/Paths/ReversePathAction.cs.meta | 12 +++ .../AStarPathfinding/Actions/Seeker.meta | 9 +++ .../Actions/Seeker/SeekerProcessPathAction.cs | 23 ++++++ .../Seeker/SeekerProcessPathAction.cs.meta | 8 ++ .../AStarPathfinding/Conditions.meta | 9 +++ .../AStarPathfinding/Conditions/Nodes.meta | 5 ++ .../Nodes/IsNodeDestroyedCondition.cs | 30 +++++++ .../Nodes/IsNodeDestroyedCondition.cs.meta | 8 ++ .../Nodes/IsNodeWalkableCondition.cs | 30 +++++++ .../Nodes/IsNodeWalkableCondition.cs.meta | 8 ++ .../Nodes/IsPathPossibleCondition.cs | 59 ++++++++++++++ .../Nodes/IsPathPossibleCondition.cs.meta | 8 ++ .../Nodes/IsPositionWalkableCondition.cs | 38 +++++++++ .../Nodes/IsPositionWalkableCondition.cs.meta | 8 ++ .../Nodes/IsThereACloseEnoughNodeCondition.cs | 42 ++++++++++ .../IsThereACloseEnoughNodeCondition.cs.meta | 8 ++ .../Nodes/NodeContainsConnectionCondition.cs | 33 ++++++++ .../NodeContainsConnectionCondition.cs.meta | 8 ++ .../Nodes/NodePenaltyPredicateCondition.cs | 47 +++++++++++ .../NodePenaltyPredicateCondition.cs.meta | 8 ++ .../AStarPathfinding/Conditions/Paths.meta | 5 ++ .../Paths/HasReachedNodeCondition.cs | 39 +++++++++ .../Paths/HasReachedNodeCondition.cs.meta | 8 ++ .../Paths/HasReachedWaypointCondition.cs | 36 +++++++++ .../Paths/HasReachedWaypointCondition.cs.meta | 8 ++ .../Conditions/Paths/IsPathValid.cs | 30 +++++++ .../Conditions/Paths/IsPathValid.cs.meta | 8 ++ .../ECSModules/AStarPathfinding/Events.meta | 9 +++ .../Events/PathCreatedEvent.cs | 12 +++ .../Events/PathCreatedEvent.cs.meta | 12 +++ .../AStarPathfinding/Extensions.meta | 9 +++ .../Extensions/ListExtensions.cs | 16 ++++ .../Extensions/ListExtensions.cs.meta | 8 ++ .../Extensions/PathExtensions.cs | 76 ++++++++++++++++++ .../Extensions/PathExtensions.cs.meta | 8 ++ .../AStarPathfinding/Polyfills.meta | 9 +++ .../Polyfills/ConstantPath.cs | 35 ++++++++ .../Polyfills/ConstantPath.cs.meta | 8 ++ .../AStarPathfinding/Polyfills/FleePath.cs | 33 ++++++++ .../Polyfills/FleePath.cs.meta | 8 ++ .../AStarPathfinding/Polyfills/FloodPath.cs | 33 ++++++++ .../Polyfills/FloodPath.cs.meta | 8 ++ .../Polyfills/FloodPathTracer.cs | 33 ++++++++ .../Polyfills/FloodPathTracer.cs.meta | 8 ++ .../Polyfills/MultiTargetPath.cs | 36 +++++++++ .../Polyfills/MultiTargetPath.cs.meta | 8 ++ .../AStarPathfinding/Polyfills/RandomPath.cs | 33 ++++++++ .../Polyfills/RandomPath.cs.meta | 8 ++ Assets/ECSModules/AStarPathfinding/Types.meta | 9 +++ .../AStarPathfinding/Types/PredicateTypes.cs | 11 +++ .../Types/PredicateTypes.cs.meta | 8 ++ Assets/Plugins.meta | 9 +++ Dist/ecs.astarpathfinding-1.0.0.unitypackage | Bin 0 -> 16893 bytes ProjectSettings/AudioManager.asset | Bin 0 -> 4136 bytes ProjectSettings/DynamicsManager.asset | Bin 0 -> 4276 bytes ProjectSettings/EditorBuildSettings.asset | Bin 0 -> 4104 bytes ProjectSettings/EditorSettings.asset | Bin 0 -> 4188 bytes ProjectSettings/GraphicsSettings.asset | Bin 0 -> 4228 bytes ProjectSettings/InputManager.asset | Bin 0 -> 5520 bytes ProjectSettings/NavMeshAreas.asset | Bin 0 -> 4384 bytes ProjectSettings/NetworkManager.asset | Bin 0 -> 4112 bytes ProjectSettings/Physics2DSettings.asset | Bin 0 -> 4308 bytes ProjectSettings/ProjectSettings.asset | Bin 0 -> 35809 bytes ProjectSettings/ProjectVersion.txt | 2 + ProjectSettings/QualitySettings.asset | Bin 0 -> 4944 bytes ProjectSettings/TagManager.asset | Bin 0 -> 4236 bytes ProjectSettings/TimeManager.asset | Bin 0 -> 4112 bytes Readme.md | 33 ++++++++ 152 files changed, 2622 insertions(+) create mode 100644 .gitignore create mode 100644 Assets/AstarPathfindingProject.meta create mode 100644 Assets/ECSModules.meta create mode 100644 Assets/ECSModules/AStarPathfinding.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Debug.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Debug/DrawDebugPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Debug/DrawDebugPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/FloodFillGraphsAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/FloodFillGraphsAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/FlushGraphUpdatesAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/FlushGraphUpdatesAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphByIndexAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphByIndexAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphFromNodeAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphFromNodeAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphsAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphsAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicScaleAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicScaleAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/UpdateGraphsAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Graphs/UpdateGraphsAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/AddConnectionToNodeAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/AddConnectionToNodeAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/ClearNodeConnectionsAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/ClearNodeConnectionsAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/DestroyNodeAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/DestroyNodeAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNearestNodeAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNearestNodeAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeConnectionsAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeConnectionsAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodePenaltyAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodePenaltyAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeWalkabilityAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeWalkabilityAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodesPositionAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodesPositionAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/RecalculateNodeConnectionCostsAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/RecalculateNodeConnectionCostsAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/RemoveConnectionToNodeAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Nodes/RemoveConnectionToNodeAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/ClaimPathInPoolAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/ClaimPathInPoolAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateABPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateABPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateConstantPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateConstantPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFleePathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFleePathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathTraceAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathTraceAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateMultiPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateMultiPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateRandomPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateRandomPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/DuplicatePathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/DuplicatePathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/FreePathInPoolAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/FreePathInPoolAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetAllNodesFromConstantPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetAllNodesFromConstantPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestNodeInPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestNodeInPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestPositionInPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestPositionInPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetDistanceOfPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetDistanceOfPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodeFromPathByIndexAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodeFromPathByIndexAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodesFromPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodesFromPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetVectorFromPathByIndexAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/GetVectorFromPathByIndexAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/ReversePathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Paths/ReversePathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Seeker.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Seeker/SeekerProcessPathAction.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Actions/Seeker/SeekerProcessPathAction.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeDestroyedCondition.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeDestroyedCondition.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeWalkableCondition.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeWalkableCondition.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPathPossibleCondition.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPathPossibleCondition.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPositionWalkableCondition.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPositionWalkableCondition.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsThereACloseEnoughNodeCondition.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsThereACloseEnoughNodeCondition.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodeContainsConnectionCondition.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodeContainsConnectionCondition.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodePenaltyPredicateCondition.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodePenaltyPredicateCondition.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Paths.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedNodeCondition.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedNodeCondition.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedWaypointCondition.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedWaypointCondition.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Paths/IsPathValid.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Conditions/Paths/IsPathValid.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Events.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Events/PathCreatedEvent.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Events/PathCreatedEvent.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Extensions.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Extensions/ListExtensions.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Extensions/ListExtensions.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Extensions/PathExtensions.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Extensions/PathExtensions.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/ConstantPath.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/ConstantPath.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/FleePath.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/FleePath.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/FloodPath.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/FloodPath.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/FloodPathTracer.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/FloodPathTracer.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/MultiTargetPath.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/MultiTargetPath.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/RandomPath.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Polyfills/RandomPath.cs.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Types.meta create mode 100644 Assets/ECSModules/AStarPathfinding/Types/PredicateTypes.cs create mode 100644 Assets/ECSModules/AStarPathfinding/Types/PredicateTypes.cs.meta create mode 100644 Assets/Plugins.meta create mode 100644 Dist/ecs.astarpathfinding-1.0.0.unitypackage create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/NetworkManager.asset create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/ProjectVersion.txt create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 Readme.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..889d61e --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +bin +/Library +*.db +*.suo +/Assets/Plugins +/Assets/UnityVS +/Assets/AstarPathfindingProject +*.csproj +*.sln +*.user +/Assets/UnityVS.meta diff --git a/Assets/AstarPathfindingProject.meta b/Assets/AstarPathfindingProject.meta new file mode 100644 index 0000000..4fd935d --- /dev/null +++ b/Assets/AstarPathfindingProject.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 852989b7ee417614895ad7f0e7ce3d75 +folderAsset: yes +timeCreated: 1442649884 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules.meta b/Assets/ECSModules.meta new file mode 100644 index 0000000..3d4df3b --- /dev/null +++ b/Assets/ECSModules.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 13f1604b16db004409c73889d3b2e488 +folderAsset: yes +timeCreated: 1442650475 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding.meta b/Assets/ECSModules/AStarPathfinding.meta new file mode 100644 index 0000000..ad925d1 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 407cf11ddafa16f4f9d1c52bab52730f +folderAsset: yes +timeCreated: 1442650491 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions.meta b/Assets/ECSModules/AStarPathfinding/Actions.meta new file mode 100644 index 0000000..a17e0e0 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0703cde7f7edafb43811dd8204dfce66 +folderAsset: yes +timeCreated: 1442650497 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Debug.meta b/Assets/ECSModules/AStarPathfinding/Actions/Debug.meta new file mode 100644 index 0000000..0562eef --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Debug.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7b1dac50fce28df46a16a28b63697b69 +folderAsset: yes +timeCreated: 1442773094 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Debug/DrawDebugPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Debug/DrawDebugPathAction.cs new file mode 100644 index 0000000..7b6a667 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Debug/DrawDebugPathAction.cs @@ -0,0 +1,30 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace EECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Draw Debug Path")] + [ActionDescription("Draws a debug line for the path in the scene")] + public class DrawDebugPathAction : UFAction + { + [In] + public Path Path; + + public Color PathColor = Color.green; + public float TimeToShow = 0.1f; + + public override void Execute() + { + var vectorPath = Path.vectorPath; + for (var i = 1; i < vectorPath.Count; i++) + { + Debug.DrawLine(vectorPath[i - 1], vectorPath[i], PathColor, TimeToShow); + } + } + } +} diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Debug/DrawDebugPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Debug/DrawDebugPathAction.cs.meta new file mode 100644 index 0000000..4eb30d6 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Debug/DrawDebugPathAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5499b05e92e6e9e439f0fef6ca9ebca3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Graphs.meta new file mode 100644 index 0000000..69166e3 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0fabe0d04f8368a499d4b39c17f09950 +folderAsset: yes +timeCreated: 1442773094 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FloodFillGraphsAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FloodFillGraphsAction.cs new file mode 100644 index 0000000..7a7af90 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FloodFillGraphsAction.cs @@ -0,0 +1,28 @@ +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Graphs")] + [ActionTitle("Flood Fill Graphs")] + [ActionDescription("Flood fills graphs forcing updates to propogate")] + public class FloodFillGraphsAction : UFAction + { + [In] + public GraphNode StartingNode; + + [In] + public int Area; + + public override void Execute() + { + if (StartingNode == null) + { AstarPath.active.FloodFill(); } + else if (Area <= 0) + { AstarPath.active.FloodFill(StartingNode); } + else + { AstarPath.active.FloodFill(StartingNode, (uint)Area); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FloodFillGraphsAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FloodFillGraphsAction.cs.meta new file mode 100644 index 0000000..d3a2c90 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FloodFillGraphsAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9374b84ae57f3aa468a3c42b420a2d55 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FlushGraphUpdatesAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FlushGraphUpdatesAction.cs new file mode 100644 index 0000000..5f9656b --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FlushGraphUpdatesAction.cs @@ -0,0 +1,19 @@ + + + +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Graphs")] + [ActionTitle("Flush Graph Updates")] + [ActionDescription("Flushes all graph updates")] + public class FlushGraphUpdatesAction : UFAction + { + public override void Execute() + { + AstarPath.active.FlushGraphUpdates(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FlushGraphUpdatesAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FlushGraphUpdatesAction.cs.meta new file mode 100644 index 0000000..5c95fb2 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/FlushGraphUpdatesAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37d00cf96836da34fba213549c61da9c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphByIndexAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphByIndexAction.cs new file mode 100644 index 0000000..dbf6f34 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphByIndexAction.cs @@ -0,0 +1,28 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace NodeCanvasAddons +{ + [uFrameCategory("A* Pathfinding", "Graphs")] + [ActionTitle("Get Graph By Index")] + [ActionDescription("Gets a graph in the scene by index")] + public class GetGraphByIndexAction : UFAction + { + [In] + public int GraphIndex; + + [Out] + public NavGraph LocatedGraph; + + public override void Execute() + { + if (AstarPath.active.graphs.Length <= GraphIndex) + { return; } + + LocatedGraph = AstarPath.active.graphs[GraphIndex]; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphByIndexAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphByIndexAction.cs.meta new file mode 100644 index 0000000..85d9164 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphByIndexAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0cb39ffbfb15f949b98e4d7d245d5ef +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphFromNodeAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphFromNodeAction.cs new file mode 100644 index 0000000..d59ac56 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphFromNodeAction.cs @@ -0,0 +1,25 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Graphs")] + [ActionTitle("Get Graph From Node")] + [ActionDescription("Gets a graph from a node")] + public class GetGraphFromNodeAction : UFAction + { + [In] + public GraphNode Node; + + [Out] + public NavGraph LocatedGraph; + + public override void Execute() + { + LocatedGraph = AstarPath.active.graphs[Node.GraphIndex]; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphFromNodeAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphFromNodeAction.cs.meta new file mode 100644 index 0000000..86a9dda --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/GetGraphFromNodeAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c868d3e8bf2bdae4a9b1b9a290787d6e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphAction.cs new file mode 100644 index 0000000..5ca94e6 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphAction.cs @@ -0,0 +1,22 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Graphs")] + [ActionTitle("Rescan Graph")] + [ActionDescription("Rescans the graph to see if any changes have occurred")] + public class RescanGraphAction : UFAction + { + [In] + public NavGraph Graph; + + public override void Execute() + { + Graph.ScanInternal(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphAction.cs.meta new file mode 100644 index 0000000..5399a6b --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 715e34c280646184c8bae5ef50e3e258 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphsAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphsAction.cs new file mode 100644 index 0000000..43389fd --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphsAction.cs @@ -0,0 +1,19 @@ + + + +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Graphs")] + [ActionTitle("Rescan Graphs")] + [ActionDescription("Rescans all graphs in the scene")] + public class RescanGraphsAction : UFAction + { + public override void Execute() + { + AstarPath.active.Scan(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphsAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphsAction.cs.meta new file mode 100644 index 0000000..9148148 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/RescanGraphsAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9f529e7794ad3e418b80d82ca9750c9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicAction.cs new file mode 100644 index 0000000..f3175a1 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicAction.cs @@ -0,0 +1,22 @@ + + + +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Set Heuristic")] + [ActionDescription("Sets the heuristic to use when calculating paths")] + public class SetHeuristicAction : UFAction + { + [In] + public Heuristic Heuristic = Heuristic.Euclidean; + + public override void Execute() + { + AstarPath.active.heuristic = Heuristic; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicAction.cs.meta new file mode 100644 index 0000000..fe94bbb --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb9ec3503812fd64baf248794cb6fb09 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicScaleAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicScaleAction.cs new file mode 100644 index 0000000..8836284 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicScaleAction.cs @@ -0,0 +1,22 @@ + + + +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Set Heuristic Scale")] + [ActionDescription("Sets the heuristic scale to use when calculating paths")] + public class SetHeuristicScaleAction : UFAction + { + [In] + public float HeuristicScale; + + public override void Execute() + { + AstarPath.active.heuristicScale = HeuristicScale; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicScaleAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicScaleAction.cs.meta new file mode 100644 index 0000000..fd9cbfe --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/SetHeuristicScaleAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4294909f5f2aac24a919c5bcf7bd26ea +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/UpdateGraphsAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/UpdateGraphsAction.cs new file mode 100644 index 0000000..7b9ffe2 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/UpdateGraphsAction.cs @@ -0,0 +1,22 @@ + + +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Graphs")] + [ActionTitle("Update Graphs")] + [ActionDescription("Updates graphs nodes within a given boundry")] + public class UpdateGraphsAction : UFAction + { + [In] + public Bounds UpdateBoundry; + + public override void Execute() + { + AstarPath.active.UpdateGraphs(UpdateBoundry); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Graphs/UpdateGraphsAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/UpdateGraphsAction.cs.meta new file mode 100644 index 0000000..b975312 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Graphs/UpdateGraphsAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0e3690006eab2a4491a1caf38bc6036 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes.meta new file mode 100644 index 0000000..edae0be --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a90f84a31d7bc9b4d84e12435b742fde +folderAsset: yes +timeCreated: 1442773094 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/AddConnectionToNodeAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/AddConnectionToNodeAction.cs new file mode 100644 index 0000000..a41fc29 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/AddConnectionToNodeAction.cs @@ -0,0 +1,28 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Nodes")] + [ActionTitle("Add Connection To Node")] + [ActionDescription("Adds a connection to the node with an associated cost (must be positive)")] + public class AddConnectionToNodeAction : UFAction + { + [In] + public GraphNode Node; + + [In] + public GraphNode ConnectingNode; + + [In] + public int ConnectionCost; + + public override void Execute() + { + Node.AddConnection(ConnectingNode, (uint)ConnectionCost); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/AddConnectionToNodeAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/AddConnectionToNodeAction.cs.meta new file mode 100644 index 0000000..8687926 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/AddConnectionToNodeAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 42b8cabd3442b194f8530dc6105569a7 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/ClearNodeConnectionsAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/ClearNodeConnectionsAction.cs new file mode 100644 index 0000000..911b097 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/ClearNodeConnectionsAction.cs @@ -0,0 +1,25 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Nodes")] + [ActionTitle("Clear Nodes Connections")] + [ActionDescription("Clears all nodes connections")] + public class ClearNodeConnectionsAction : UFAction + { + [In] + public GraphNode Node; + + [In] + public bool ClearReverse; + + public override void Execute() + { + Node.ClearConnections(ClearReverse); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/ClearNodeConnectionsAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/ClearNodeConnectionsAction.cs.meta new file mode 100644 index 0000000..72224a2 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/ClearNodeConnectionsAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e4b3e2e6162151a4982feff2da526bdd +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/DestroyNodeAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/DestroyNodeAction.cs new file mode 100644 index 0000000..38a21de --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/DestroyNodeAction.cs @@ -0,0 +1,22 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Nodes")] + [ActionTitle("Destroy Node")] + [ActionDescription("Destroys a node")] + public class DestroyNodeAction : UFAction + { + [In] + public GraphNode Node; + + public override void Execute() + { + Node.Destroy(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/DestroyNodeAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/DestroyNodeAction.cs.meta new file mode 100644 index 0000000..6ef160b --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/DestroyNodeAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3aee3f612ecd8784f819d3d38f791b4a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNearestNodeAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNearestNodeAction.cs new file mode 100644 index 0000000..6adda9b --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNearestNodeAction.cs @@ -0,0 +1,29 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Nodes")] + [ActionTitle("Get Nearest Node")] + [ActionDescription("Finds the nearest node to a position")] + public class GetNearestNodeAction : UFAction + { + [In] + public Vector3 Position; + + [Out] + public GraphNode NearestNode; + + public override void Execute() + { + var closestResult = AstarPath.active.GetNearest(Position); + if (closestResult.node == null) { return; } + + NearestNode = closestResult.node; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNearestNodeAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNearestNodeAction.cs.meta new file mode 100644 index 0000000..57e0a04 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNearestNodeAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfa04e5daa0a7504da6d8df982cede1e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeConnectionsAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeConnectionsAction.cs new file mode 100644 index 0000000..0e368f2 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeConnectionsAction.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Nodes")] + [ActionTitle("Get Node Connections")] + [ActionDescription("Gets all connections for a node")] + public class GetNodeConnectionsAction : UFAction + { + [In] + public GraphNode Node; + + [Out] + public List ConnectionList = new List(); + + public override void Execute() + { + Node.GetConnections(connectedNode => ConnectionList.Add(connectedNode)); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeConnectionsAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeConnectionsAction.cs.meta new file mode 100644 index 0000000..129db7e --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeConnectionsAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7572018f212272048947f027b2006844 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodePenaltyAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodePenaltyAction.cs new file mode 100644 index 0000000..cec9456 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodePenaltyAction.cs @@ -0,0 +1,25 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Nodes")] + [ActionTitle("Get Node Penalty")] + [ActionDescription("Gets the penalty for a node")] + public class GetNodePenaltyAction : UFAction + { + [In] + public GraphNode NodeToCheck; + + [Out] + public int Penalty; + + public override void Execute() + { + Penalty = (int)NodeToCheck.Penalty; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodePenaltyAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodePenaltyAction.cs.meta new file mode 100644 index 0000000..e49fdec --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodePenaltyAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5921580c7a8552c4e8871a37d9a20261 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeWalkabilityAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeWalkabilityAction.cs new file mode 100644 index 0000000..be70553 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeWalkabilityAction.cs @@ -0,0 +1,25 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Nodes")] + [ActionTitle("Get Node Walkability")] + [ActionDescription("Gets a boolean indicating if the path is walkable")] + public class GetNodeWalkabilityAction : UFAction + { + [In] + public GraphNode NodeToCheck; + + [Out] + public bool Walkability; + + public override void Execute() + { + Walkability = NodeToCheck.Walkable; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeWalkabilityAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeWalkabilityAction.cs.meta new file mode 100644 index 0000000..7b2633b --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodeWalkabilityAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b39cf1b65bbd024d9974cf2a4bb1762 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodesPositionAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodesPositionAction.cs new file mode 100644 index 0000000..552eb28 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodesPositionAction.cs @@ -0,0 +1,26 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Nodes")] + [ActionTitle("Get Nodes Position")] + [ActionDescription("Gets the underlying position of a Node")] + public class GetNodesPositionAction : UFAction + { + [In] + public GraphNode Node; + + [Out] + public Vector3 Position; + + public override void Execute() + { + Position = (Vector3)Node.position; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodesPositionAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodesPositionAction.cs.meta new file mode 100644 index 0000000..6a0a92e --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/GetNodesPositionAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6bd2823f7386b9c408b4c33140728b09 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RecalculateNodeConnectionCostsAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RecalculateNodeConnectionCostsAction.cs new file mode 100644 index 0000000..d1529c4 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RecalculateNodeConnectionCostsAction.cs @@ -0,0 +1,22 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Nodes")] + [ActionTitle("Recalculate Node Connection Costs")] + [ActionDescription("Recalculates a nodes connection costs")] + public class RecalculateNodeConnectionCostsAction : UFAction + { + [In] + public GraphNode Node; + + public override void Execute() + { + Node.RecalculateConnectionCosts(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RecalculateNodeConnectionCostsAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RecalculateNodeConnectionCostsAction.cs.meta new file mode 100644 index 0000000..7610254 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RecalculateNodeConnectionCostsAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 703130252a9c9ff4198484aa3438de0d +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RemoveConnectionToNodeAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RemoveConnectionToNodeAction.cs new file mode 100644 index 0000000..b3d5b4c --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RemoveConnectionToNodeAction.cs @@ -0,0 +1,25 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Nodes")] + [ActionTitle("Add Connection To Node")] + [ActionDescription("Removes a connected node")] + public class RemoveConnectionToNodeAction : UFAction + { + [In] + public GraphNode Node; + + [In] + public GraphNode ConnectedNode; + + public override void Execute() + { + Node.RemoveConnection(ConnectedNode); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RemoveConnectionToNodeAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RemoveConnectionToNodeAction.cs.meta new file mode 100644 index 0000000..5fa6416 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Nodes/RemoveConnectionToNodeAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf3dfd2c31dc25040b2fafbe74de74e6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths.meta new file mode 100644 index 0000000..360462a --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6624caf51c27b1d4784f5923a1e59634 +folderAsset: yes +timeCreated: 1442773094 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/ClaimPathInPoolAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/ClaimPathInPoolAction.cs new file mode 100644 index 0000000..ea46042 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/ClaimPathInPoolAction.cs @@ -0,0 +1,21 @@ +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [ActionLibrary] + [uFrameCategory("A* Pathfinding")] + [ActionDescription("Claims the path in the pathing pool")] + [ActionTitle("Claim Path In Pool")] + public class ClaimPathInPoolAction : UFAction + { + [In] + public Path Path; + + public override void Execute() + { + Path.Claim(EntityView); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/ClaimPathInPoolAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/ClaimPathInPoolAction.cs.meta new file mode 100644 index 0000000..f1694a7 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/ClaimPathInPoolAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2bd6c8a98bd6d694eb075eebbd24f97e +timeCreated: 1442773094 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateABPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateABPathAction.cs new file mode 100644 index 0000000..dc5d3d1 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateABPathAction.cs @@ -0,0 +1,51 @@ +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Create AB Path")] + [ActionDescription("Creates an AB Path from the source position to the destination position.")] + public class CreateABPathAction : UFAction + { + [In] + public Vector3 SourcePosition; + + [In] + public Vector3 DestinationPosition; + + [Out] + public Path GeneratedPath; + + [Out] + public string Error; + + [Out] + public Action PathGenerated; + + [Out] + public Action PathFailed; + + public override void Execute() + { + var currentPath = ABPath.Construct(SourcePosition, DestinationPosition, PathFinishedDelegate); + AstarPath.StartPath(currentPath); + } + + private void PathFinishedDelegate(Path path) + { + if (path.error) + { + Error = path.errorLog; + PathFailed(); + return; + } + + GeneratedPath = path; + PathGenerated(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateABPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateABPathAction.cs.meta new file mode 100644 index 0000000..049d575 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateABPathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 31e95b695ef161244ab375e876ac6ad4 +timeCreated: 1442650518 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateConstantPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateConstantPathAction.cs new file mode 100644 index 0000000..6545e6f --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateConstantPathAction.cs @@ -0,0 +1,50 @@ + + +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding - Pro")] + [ActionTitle("Create Constant Path")] + [ActionDescription("Creates a constant path for use")] + public class CreateConstantPathAction : UFAction + { + [In] + public int MaxScore; + + [In] + Vector3 SourcePosition; + + [Out] + public ConstantPath GeneratedPath; + + [Out] public Action PathGenerated; + + [Out] public string Error; + + [Out] public Action PathFailed; + + public override void Execute() + { + var currentPath = ConstantPath.Construct(SourcePosition, MaxScore, PathFinishedDelegate); + AstarPath.StartPath(currentPath); + } + + private void PathFinishedDelegate(Path path) + { + if (path.error) + { + Error = path.errorLog; + PathFailed(); + return; + } + + GeneratedPath = (ConstantPath) path; + PathGenerated(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateConstantPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateConstantPathAction.cs.meta new file mode 100644 index 0000000..771e4d7 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateConstantPathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 02b00af805624f449a3427ae8b7e705e +timeCreated: 1442773094 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFleePathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFleePathAction.cs new file mode 100644 index 0000000..3dec5d2 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFleePathAction.cs @@ -0,0 +1,56 @@ + + +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding - Pro")] + [ActionTitle("Create Flee Path")] + [ActionDescription("Creates a flee path for from an agents position")] + public class CreateFleePathAction : UFAction + { + [In] + public Vector3 SourcePosition; + + [In] + public Vector3 AvoidPosition; + + [In] + public int GScoreToStopAt; + + [Out] + public Path GeneratedPath; + + [Out] + public Action PathGenerated; + + [Out] + public string Error; + + [Out] + public Action PathFailed; + + public override void Execute() + { + var path = FleePath.Construct(SourcePosition, AvoidPosition, GScoreToStopAt, PathFinishedDelegate); + AstarPath.StartPath(path); + } + + private void PathFinishedDelegate(Path path) + { + if(path.error) + { + Error = path.errorLog; + PathFailed(); + return; + } + + GeneratedPath = path; + PathGenerated(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFleePathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFleePathAction.cs.meta new file mode 100644 index 0000000..e539748 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFleePathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 58d5aa347edc0ec45812d5813ccaa6a9 +timeCreated: 1442773094 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathAction.cs new file mode 100644 index 0000000..f986a18 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathAction.cs @@ -0,0 +1,50 @@ + + +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding - Pro")] + [ActionTitle("Create Flood Path")] + [ActionDescription("Creates a flood path for subsequent lookups")] + public class CreateFloodPathAction : UFAction + { + [In] + public Vector3 SourcePosition; + + [Out] + public Path GeneratedPath; + + [Out] + public Action PathGenerated; + + [Out] + public string Error; + + [Out] + public Action PathFailed; + + public override void Execute() + { + var currentPath = FloodPath.Construct(SourcePosition, PathFinishedDelegate); + AstarPath.StartPath(currentPath); + } + + private void PathFinishedDelegate(Path path) + { + if (path.error) + { + Error = path.errorLog; + PathFailed(); + return; + } + + GeneratedPath = (FloodPath)path; + PathGenerated(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathAction.cs.meta new file mode 100644 index 0000000..c46f2f0 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dcc37539f1c44874d958a083e35a5d9c +timeCreated: 1442773095 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathTraceAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathTraceAction.cs new file mode 100644 index 0000000..1e6ca01 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathTraceAction.cs @@ -0,0 +1,53 @@ + + +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding - Pro")] + [ActionTitle("Create Flood Path Trace")] + [ActionDescription("Creates a path from the trace start to the flood path start")] + public class CreateFloodPathTraceAction : UFAction + { + [In] + public Vector3 TraceStart; + + [In] + public FloodPath FloodPath; + + [Out] + public Path GeneratedPath; + + [Out] + public Action PathGenerated; + + [Out] + public string Error; + + [Out] + public Action PathFailed; + + public override void Execute() + { + var path = FloodPathTracer.Construct(TraceStart, FloodPath, PathFinishedDelegate); + AstarPath.StartPath(path); + } + + private void PathFinishedDelegate(Path path) + { + if (path.error) + { + Error = path.errorLog; + PathFailed(); + return; + } + + GeneratedPath = path; + PathGenerated(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathTraceAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathTraceAction.cs.meta new file mode 100644 index 0000000..0e451bb --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateFloodPathTraceAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0743631d88506ca41aa837c6e89ab3d9 +timeCreated: 1442773094 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateMultiPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateMultiPathAction.cs new file mode 100644 index 0000000..b72eaf6 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateMultiPathAction.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding - Pro")] + [ActionTitle("Create Multi Path")] + [ActionDescription("Creates a path from the current agent to the destination point")] + public class CreateMultiPathAction : UFAction + { + [In] + public Vector3 SourcePosition; + + [In] + public List TargetDestinations; + + [Out] + public Path GeneratedPath; + + [Out] + public Action PathGenerated; + + [Out] + public string Error; + + [Out] + public Action PathFailed; + + public override void Execute() + { + var currentPath = MultiTargetPath.Construct(SourcePosition, TargetDestinations.ToArray(), null, PathFinishedDelegate); + AstarPath.StartPath(currentPath); + } + + private void PathFinishedDelegate(Path path) + { + if (path.error) + { + Error = path.errorLog; + PathFailed(); + return; + } + + GeneratedPath = path; + PathGenerated(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateMultiPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateMultiPathAction.cs.meta new file mode 100644 index 0000000..4a7faa8 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateMultiPathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 92fe4a9f44fa92b4d9cabc0655fd2cce +timeCreated: 1442773095 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateRandomPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateRandomPathAction.cs new file mode 100644 index 0000000..506a407 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateRandomPathAction.cs @@ -0,0 +1,45 @@ +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [ActionLibrary] + [uFrameCategory("A* Pathfinding - Pro")] + [ActionTitle("Create Random Path")] + [ActionDescription("Creates a random path based upon the starting point and the search length")] + public class CreateRandomPathAction : UFAction + { + [In] public Vector3 StartingPoint; + [In] public int SearchLength; + + [Out] public Path GeneratedPath; + [Out] public Action PathGenerated; + + [Out] public string Error; + [Out] public Action PathFailed; + + public override void Execute() + { + var currentPath = RandomPath.Construct(StartingPoint, SearchLength, PathFinishedDeletate); + AstarPath.StartPath(currentPath); + } + + private void PathFinishedDeletate(Path path) + { + if (path.error) + { + Error = path.errorLog; + PathFailed(); + } + else + { + GeneratedPath = path; + PathGenerated(); + PathGenerated(); + } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateRandomPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateRandomPathAction.cs.meta new file mode 100644 index 0000000..edf715d --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/CreateRandomPathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2f5898d3f6697d341a014b46fc491b29 +timeCreated: 1442773094 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/DuplicatePathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/DuplicatePathAction.cs new file mode 100644 index 0000000..8d4d29d --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/DuplicatePathAction.cs @@ -0,0 +1,25 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Duplicate Path")] + [ActionDescription("Duplicates a given path")] + public class DuplicatePathAction : UFAction + { + [In] + public Path Path; + + [Out] + public Path DuplicatePath; + + public override void Execute() + { + DuplicatePath = Path.DuplicatePath(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/DuplicatePathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/DuplicatePathAction.cs.meta new file mode 100644 index 0000000..daf56f7 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/DuplicatePathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 36c09acdf61aa71429ab02e5275df199 +timeCreated: 1442773094 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/FreePathInPoolAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/FreePathInPoolAction.cs new file mode 100644 index 0000000..22ad538 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/FreePathInPoolAction.cs @@ -0,0 +1,20 @@ +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Free Path In Pool")] + [ActionDescription("Frees the path from the pathing pool")] + public class FreePathInPoolAction : UFAction + { + [In] + public Path Path; + + public override void Execute() + { + Path.Release(EntityView); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/FreePathInPoolAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/FreePathInPoolAction.cs.meta new file mode 100644 index 0000000..6d572d5 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/FreePathInPoolAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b5764e6b49ca0d04e8b5f89b54e25224 +timeCreated: 1442773095 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetAllNodesFromConstantPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetAllNodesFromConstantPathAction.cs new file mode 100644 index 0000000..c32cfcf --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetAllNodesFromConstantPathAction.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding - Pro")] + [ActionTitle("Get All Nodes From Constant Path")] + [ActionDescription("Get all nodes from a constant path")] + public class GetAllNodesFromConstantPathAction : UFAction + { + [In] + public ConstantPath Path; + + [Out] + public List NodeList; + + public override void Execute() + { + NodeList = Path.allNodes; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetAllNodesFromConstantPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetAllNodesFromConstantPathAction.cs.meta new file mode 100644 index 0000000..5a12d1f --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetAllNodesFromConstantPathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3d1eecc28e122bc49b55f4c3d6bf184f +timeCreated: 1442773094 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestNodeInPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestNodeInPathAction.cs new file mode 100644 index 0000000..f996b5d --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestNodeInPathAction.cs @@ -0,0 +1,38 @@ +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Get Closest Node In Path")] + [ActionDescription("Gets the closest node in an existing path")] + public class GetClosestNodeInPathAction : UFAction + { + [In] + public Path Path; + + [In] + public Vector3 PositionToCheck; + + [Out] + public GraphNode OutputNode; + + [Out] + public float DistanceToClosest; + + public override void Execute() + { + if(Path.vectorPath.Count == 0) { return; } + + var closestNode = Path.FindClosestNodeTo(PositionToCheck); + OutputNode = closestNode; + if (DistanceToClosest > 0 || DistanceToClosest < 0) + { + var nodePosition = (Vector3) closestNode.position; + DistanceToClosest = Vector3.Distance(nodePosition, PositionToCheck); + } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestNodeInPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestNodeInPathAction.cs.meta new file mode 100644 index 0000000..fbc4e3e --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestNodeInPathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 42e788d0ceaf20242a6b72cf44a6d214 +timeCreated: 1442773094 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestPositionInPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestPositionInPathAction.cs new file mode 100644 index 0000000..874dcea --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestPositionInPathAction.cs @@ -0,0 +1,36 @@ +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Get Closest Position In Path")] + [ActionDescription("Gets the closest position in an existing path")] + public class GetClosestPositionInPathAction : UFAction + { + [In] + public Path Path; + + [In] + public Vector3 PositionToCheck; + + [Out] + public Vector3 OutputVector; + + [Out] + public float DistanceToClosest; + + public override void Execute() + { + if (Path.vectorPath.Count == 0) { return; } + + var closestNode = Path.FindClosestPositionTo(PositionToCheck); + OutputVector = closestNode; + + if (DistanceToClosest > 0 || DistanceToClosest < 0) + { DistanceToClosest = Vector3.Distance(closestNode, PositionToCheck); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestPositionInPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestPositionInPathAction.cs.meta new file mode 100644 index 0000000..6676dcf --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetClosestPositionInPathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b6298b2628cab6f46868bf7a5c00a484 +timeCreated: 1442773095 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetDistanceOfPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetDistanceOfPathAction.cs new file mode 100644 index 0000000..9ac5794 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetDistanceOfPathAction.cs @@ -0,0 +1,38 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Get Distance Of Path")] + [ActionDescription("Gets the distance of a given path")] + public class GetDistanceOfPathAction : UFAction + { + [In] + public Path Path; + + [Out] + public float TotalDistance; + + public override void Execute() + { + TotalDistance = Path.vectorPath.Count > 1 ? GetTotalDistanceOfPath(Path) : 0; + } + + private float GetTotalDistanceOfPath(Path path) + { + var totalDistance = 0.0f; + for (var i = 1; i < path.vectorPath.Count; i++) + { + var previousPosition = path.vectorPath[i - 1]; + var nextPosition = path.vectorPath[i]; + totalDistance = Vector3.Distance(previousPosition, nextPosition); + } + return totalDistance; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetDistanceOfPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetDistanceOfPathAction.cs.meta new file mode 100644 index 0000000..19dd537 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetDistanceOfPathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7310b7a279588384986839dcfa8f662b +timeCreated: 1442773095 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodeFromPathByIndexAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodeFromPathByIndexAction.cs new file mode 100644 index 0000000..267984f --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodeFromPathByIndexAction.cs @@ -0,0 +1,31 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Get Node From Path By Index")] + [ActionDescription("Gets a node from a path by index")] + public class GetNodeFromPathByIndexAction : UFAction + { + [In] + public Path Path; + + [In] + public int Index; + + [Out] + public GraphNode Node; + + public override void Execute() + { + if(Path.path.Count >= Index) + { return; } + + Node = Path.path[Index]; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodeFromPathByIndexAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodeFromPathByIndexAction.cs.meta new file mode 100644 index 0000000..90ca5f4 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodeFromPathByIndexAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4ca9bc1b3ea45e84abdbf08a4df7aeef +timeCreated: 1442773094 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodesFromPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodesFromPathAction.cs new file mode 100644 index 0000000..3fc4b28 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodesFromPathAction.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Get Nodes From Path")] + [ActionDescription("Get nodes from an existing path")] + public class GetNodesFromPathAction : UFAction + { + [In] + public Path Path; + + [Out] + public List NodeList; + + public override void Execute() + { + NodeList = Path.path; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodesFromPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodesFromPathAction.cs.meta new file mode 100644 index 0000000..fa5cdc6 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetNodesFromPathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8877b897a2dc96c4cb7233b15d969095 +timeCreated: 1442773095 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetVectorFromPathByIndexAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetVectorFromPathByIndexAction.cs new file mode 100644 index 0000000..a3eedce --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetVectorFromPathByIndexAction.cs @@ -0,0 +1,31 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Get Vector From Path By Index")] + [ActionDescription("Gets a vector from a path by index")] + public class GetVectorFromPathByIndexAction : UFAction + { + [In] + public Path Path; + + [In] + public int Index; + + [Out] + public Vector3 Vector; + + public override void Execute() + { + if (Path.path.Count >= Index) { return; } + + Vector = Path.vectorPath[Index]; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetVectorFromPathByIndexAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetVectorFromPathByIndexAction.cs.meta new file mode 100644 index 0000000..63c70b5 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/GetVectorFromPathByIndexAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7be83de93cacb7c4e961de8bdfea5026 +timeCreated: 1442773095 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/ReversePathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Paths/ReversePathAction.cs new file mode 100644 index 0000000..8e9cbd9 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/ReversePathAction.cs @@ -0,0 +1,23 @@ +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Reverse Path")] + [ActionDescription("Reverses a given path")] + public class ReversePathAction : UFAction + { + [In] + public Path Path; + + [Out] + public Path ReversedPath; + + public override void Execute() + { + ReversedPath = Path.ReversePath(); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Paths/ReversePathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Paths/ReversePathAction.cs.meta new file mode 100644 index 0000000..7ac0f82 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Paths/ReversePathAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f35fa4a072b320c408ad22302643dc0c +timeCreated: 1442773100 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Seeker.meta b/Assets/ECSModules/AStarPathfinding/Actions/Seeker.meta new file mode 100644 index 0000000..e8936ee --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Seeker.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 715210f72e1385642844cdda8f71087b +folderAsset: yes +timeCreated: 1442773094 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Seeker/SeekerProcessPathAction.cs b/Assets/ECSModules/AStarPathfinding/Actions/Seeker/SeekerProcessPathAction.cs new file mode 100644 index 0000000..fc271f2 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Seeker/SeekerProcessPathAction.cs @@ -0,0 +1,23 @@ + + +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding", "Paths")] + [ActionTitle("Seeker Process Path")] + [ActionDescription("Tells the seeker to process the given path making use of modifiers attached")] + public class SeekerProcessPathAction : UFAction + { + [In] + public Path Path; + + public override void Execute() + { + var seeker = EntityView.GetComponent(); + seeker.PostProcess(Path); + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Actions/Seeker/SeekerProcessPathAction.cs.meta b/Assets/ECSModules/AStarPathfinding/Actions/Seeker/SeekerProcessPathAction.cs.meta new file mode 100644 index 0000000..4b76466 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Actions/Seeker/SeekerProcessPathAction.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b4b846ad2178b1d4799658b97aa1ed1f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions.meta b/Assets/ECSModules/AStarPathfinding/Conditions.meta new file mode 100644 index 0000000..5438547 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6acba352e19c42d48ba77e6397c54aa4 +folderAsset: yes +timeCreated: 1442824888 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes.meta new file mode 100644 index 0000000..7b579b4 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 6dd123217566e2e40aafaae5cb87af79 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeDestroyedCondition.cs b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeDestroyedCondition.cs new file mode 100644 index 0000000..6743b49 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeDestroyedCondition.cs @@ -0,0 +1,30 @@ +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Is Node Destroyed")] + [ActionDescription("Checks to see if a node is destroyed")] + public class IsNodeDestroyedCondition : UFAction + { + [In] + public GraphNode NodeToCheck; + + [Out] + public Action True; + + [Out] + public Action False; + + public override void Execute() + { + if(NodeToCheck.Destroyed) + { True(); } + else + { False(); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeDestroyedCondition.cs.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeDestroyedCondition.cs.meta new file mode 100644 index 0000000..5e02841 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeDestroyedCondition.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c0e397099edc6004e862ed3715bf0aee +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeWalkableCondition.cs b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeWalkableCondition.cs new file mode 100644 index 0000000..784ce68 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeWalkableCondition.cs @@ -0,0 +1,30 @@ +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Is Node Walkable")] + [ActionDescription("Checks to see if a node is walkable")] + public class IsNodeWalkableCondition : UFAction + { + [In] + public GraphNode NodeToCheck; + + [Out] + public Action True; + + [Out] + public Action False; + + public override void Execute() + { + if(NodeToCheck.Walkable) + { True(); } + else + { False(); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeWalkableCondition.cs.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeWalkableCondition.cs.meta new file mode 100644 index 0000000..3917dcc --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsNodeWalkableCondition.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c4e742ce72ef1314398618eef5e3b1f8 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPathPossibleCondition.cs b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPathPossibleCondition.cs new file mode 100644 index 0000000..1c79d52 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPathPossibleCondition.cs @@ -0,0 +1,59 @@ +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Is Path Possible")] + [ActionDescription("Checks to see if a path is possible between 2 positions")] + public class IsPathPossibleCondition : UFAction + { + [In] + public Vector3 StartPoint; + + [In] + public Vector3 EndPoint; + + [In] + public float MaximumDistanceFromPoint; + + [Out] + public Action True; + + [Out] + public Action False; + + public override void Execute() + { + var startNode = AstarPath.active.GetNearest(StartPoint).node; + if (MaximumDistanceFromPoint > 0) + { + var startDistance = Vector3.Distance((Vector3) startNode.position, StartPoint); + if (startDistance > MaximumDistanceFromPoint) + { + False(); + return; + } + } + + var destinationNode = AstarPath.active.GetNearest(EndPoint).node; + if (MaximumDistanceFromPoint > 0) + { + var endDistance = Vector3.Distance((Vector3)destinationNode.position, EndPoint); + if (endDistance > MaximumDistanceFromPoint) + { + False(); + return; + } + } + + if(PathUtilities.IsPathPossible(startNode, destinationNode)) + { True(); } + else + { False(); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPathPossibleCondition.cs.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPathPossibleCondition.cs.meta new file mode 100644 index 0000000..bd1807a --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPathPossibleCondition.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6177634da8a06f842b8bc6847583e4a6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPositionWalkableCondition.cs b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPositionWalkableCondition.cs new file mode 100644 index 0000000..a1861a0 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPositionWalkableCondition.cs @@ -0,0 +1,38 @@ +using System; +using System.Linq; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Is Position Walkable")] + [ActionDescription("Checks to see if a position is walkable")] + public class IsPositionWalkableCondition : UFAction + { + [In] + public Vector3 PositionToCheck; + + [Out] + public Action True; + + [Out] + public Action False; + + public override void Execute() + { + if(AstarPath.active.graphs.Any(isGraphWalkable)) + { True(); } + else + { False(); } + } + + private bool isGraphWalkable(NavGraph graph) + { + var nearestNode = graph.GetNearest(PositionToCheck); + return nearestNode.node != null && nearestNode.node.Walkable; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPositionWalkableCondition.cs.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPositionWalkableCondition.cs.meta new file mode 100644 index 0000000..23805d8 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsPositionWalkableCondition.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d7ecd993b12e9949b2103165caae85d +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsThereACloseEnoughNodeCondition.cs b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsThereACloseEnoughNodeCondition.cs new file mode 100644 index 0000000..a11eaf8 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsThereACloseEnoughNodeCondition.cs @@ -0,0 +1,42 @@ +using System; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Is There A Close Enough Node")] + [ActionDescription("Checks to see if a node is close enough to a position")] + public class IsThereACloseEnoughNodeCondition : UFAction + { + [In] + public Vector3 Position; + + [In] + public float MaximumDistance; + + [Out] + public Action True; + + [Out] + public Action False; + + public override void Execute() + { + var closestResult = AstarPath.active.GetNearest(Position); + if (closestResult.node == null) + { + False(); + return; + } + + var nearestNode = closestResult.node; + var distance = Vector3.Distance((Vector3)nearestNode.position, Position); + if(distance <= MaximumDistance) + { True(); } + else + { False(); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsThereACloseEnoughNodeCondition.cs.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsThereACloseEnoughNodeCondition.cs.meta new file mode 100644 index 0000000..2a4924d --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/IsThereACloseEnoughNodeCondition.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c90207881980ab40b0669745ad80610 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodeContainsConnectionCondition.cs b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodeContainsConnectionCondition.cs new file mode 100644 index 0000000..d26ec73 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodeContainsConnectionCondition.cs @@ -0,0 +1,33 @@ +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Node Contains Connection")] + [ActionDescription("Checks to see if a node contains a given connection")] + public class NodeContainsConnectionCondition : UFAction + { + [In] + public GraphNode NodeToCheck; + + [In] + public GraphNode ConnectingNode; + + [Out] + public Action True; + + [Out] + public Action False; + + public override void Execute() + { + if(NodeToCheck.ContainsConnection(ConnectingNode)) + { True(); } + else + { False(); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodeContainsConnectionCondition.cs.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodeContainsConnectionCondition.cs.meta new file mode 100644 index 0000000..5cec62d --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodeContainsConnectionCondition.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f7a2361b7cea50b4b8041fdcfbca85d4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodePenaltyPredicateCondition.cs b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodePenaltyPredicateCondition.cs new file mode 100644 index 0000000..8d759cd --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodePenaltyPredicateCondition.cs @@ -0,0 +1,47 @@ +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Node Penalty Predicate")] + [ActionDescription("Checks node penalty with predicate")] + public class NodePenaltyPredicateCondition : UFAction + { + [In] + public GraphNode NodeToCheck; + + [In] + public PredicateTypes PredicateType = PredicateTypes.EqualTo; + + [In] + public int ComparisonValue; + + [Out] + public Action True; + + [Out] + public Action False; + + public override void Execute() + { + var penalty = NodeToCheck.Penalty; + var result = false; + switch (PredicateType) + { + case PredicateTypes.EqualTo: { result = (penalty == ComparisonValue); } break; + case PredicateTypes.GreaterThan: { result = (penalty > ComparisonValue); } break; + case PredicateTypes.GreaterThanOrEqualTo: { result = (penalty >= ComparisonValue); } break; + case PredicateTypes.LessThan: { result = (penalty < ComparisonValue); } break; + case PredicateTypes.LessThanOrEqualTo: { result = (penalty <= ComparisonValue); } break; + } + + if(result) + { True(); } + else + { False(); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodePenaltyPredicateCondition.cs.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodePenaltyPredicateCondition.cs.meta new file mode 100644 index 0000000..82ac322 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Nodes/NodePenaltyPredicateCondition.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9d75c8d851ddd14c9b5820b66e8bd97 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Paths.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Paths.meta new file mode 100644 index 0000000..7144d9a --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Paths.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 510b5f0f17262d64fb7758703b7da414 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedNodeCondition.cs b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedNodeCondition.cs new file mode 100644 index 0000000..8fcf777 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedNodeCondition.cs @@ -0,0 +1,39 @@ +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Has Reached Node")] + [ActionDescription("Checks to see if the agent is close enough to node")] + public class HasReachedNodeCondition : UFAction + { + [In] + public Vector3 SourcePosition; + + [In] + public GraphNode Node; + + [In] + public float AcceptableDistance = 0.1f; + + [Out] + public Action True; + + [Out] + public Action False; + + public override void Execute() + { + var nodeAsWaypoint = (Vector3) Node.position; + var distance = Vector3.Distance(nodeAsWaypoint, SourcePosition); + if(distance <= AcceptableDistance) + { True(); } + else + { False(); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedNodeCondition.cs.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedNodeCondition.cs.meta new file mode 100644 index 0000000..9efb9cf --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedNodeCondition.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: de3aa99a664504744b3128a90e3ad448 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedWaypointCondition.cs b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedWaypointCondition.cs new file mode 100644 index 0000000..cb21852 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedWaypointCondition.cs @@ -0,0 +1,36 @@ +using System; +using uFrame.Actions; +using uFrame.Attributes; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Has Reached Waypoint")] + [ActionDescription("Checks to see if the agent is close enough to waypoint")] + public class HasReachedWaypointCondition : UFAction + { + [In] public Vector3 SourcePosition; + + [In] + public Vector3 Waypoint; + + [In] + public float AcceptableDistance = 0.1f; + + [Out] + public Action True; + + [Out] + public Action False; + + public override void Execute() + { + var distance = Vector3.Distance(Waypoint, SourcePosition); + if(distance <= AcceptableDistance) + { True(); } + else + { False(); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedWaypointCondition.cs.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedWaypointCondition.cs.meta new file mode 100644 index 0000000..e17bac3 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/HasReachedWaypointCondition.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 330c20cc2b1506c44b2b5b133db01d8a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Paths/IsPathValid.cs b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/IsPathValid.cs new file mode 100644 index 0000000..42e9027 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/IsPathValid.cs @@ -0,0 +1,30 @@ +using System; +using Pathfinding; +using uFrame.Actions; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameCategory("A* Pathfinding")] + [ActionTitle("Is Path Valid")] + [ActionDescription("Checks to see if the path is valid and not null or empty")] + public class IsPathValid : UFAction + { + [In] + public Path Path; + + [Out] + public Action True; + + [Out] + public Action False; + + public override void Execute() + { + if(Path == null || Path.error || Path.vectorPath.Count == 0) + { True(); } + else + { False(); } + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Conditions/Paths/IsPathValid.cs.meta b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/IsPathValid.cs.meta new file mode 100644 index 0000000..4bb9a28 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Conditions/Paths/IsPathValid.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6090861901edc154e8b69a61e94e38b9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Events.meta b/Assets/ECSModules/AStarPathfinding/Events.meta new file mode 100644 index 0000000..0574703 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Events.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 25d8ec6074fef5d4697b83c10fd2550b +folderAsset: yes +timeCreated: 1442651492 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Events/PathCreatedEvent.cs b/Assets/ECSModules/AStarPathfinding/Events/PathCreatedEvent.cs new file mode 100644 index 0000000..e126a89 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Events/PathCreatedEvent.cs @@ -0,0 +1,12 @@ +using Pathfinding; +using uFrame.Attributes; + +namespace ECSModules.AStarPathfinding +{ + [uFrameEvent("Path Created")] + [uFrameCategory("A* Pathfinding")] + public class PathCreatedEvent + { + public Path CreatedPath; + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Events/PathCreatedEvent.cs.meta b/Assets/ECSModules/AStarPathfinding/Events/PathCreatedEvent.cs.meta new file mode 100644 index 0000000..e89b179 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Events/PathCreatedEvent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3add77eaf622a6c41b2496f7562c3901 +timeCreated: 1442651501 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Extensions.meta b/Assets/ECSModules/AStarPathfinding/Extensions.meta new file mode 100644 index 0000000..658d3e3 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Extensions.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 151c35ca47bfe4548a9bc2ce18f0190b +folderAsset: yes +timeCreated: 1442773094 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Extensions/ListExtensions.cs b/Assets/ECSModules/AStarPathfinding/Extensions/ListExtensions.cs new file mode 100644 index 0000000..3870dc5 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Extensions/ListExtensions.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; + +namespace ECSModules.AStarPathfinding +{ + public static class ListExtensions + { + public static List> Split(this List source, int size) + { + var ret = new List>(); + for (var i = 0; i < source.Count; i += size) + { ret.Add(source.GetRange(i, Math.Min(size, source.Count - i))); } + return ret; + } + } +} diff --git a/Assets/ECSModules/AStarPathfinding/Extensions/ListExtensions.cs.meta b/Assets/ECSModules/AStarPathfinding/Extensions/ListExtensions.cs.meta new file mode 100644 index 0000000..658158f --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Extensions/ListExtensions.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 555a61de25de58a43ac322cb22aa77e3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Extensions/PathExtensions.cs b/Assets/ECSModules/AStarPathfinding/Extensions/PathExtensions.cs new file mode 100644 index 0000000..2f5f1cc --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Extensions/PathExtensions.cs @@ -0,0 +1,76 @@ +using System.Collections.Generic; +using Pathfinding; +using UnityEngine; + +namespace ECSModules.AStarPathfinding +{ + public static class PathExtensions + { + public static Path DuplicatePath(this Path pathToClone) + { + return new ABPath + { + duration = pathToClone.duration, + heuristicScale = pathToClone.heuristicScale, + enabledTags = pathToClone.enabledTags, + searchedNodes = pathToClone.searchedNodes, + searchIterations = pathToClone.searchIterations, + recycled = pathToClone.recycled, + nnConstraint = pathToClone.nnConstraint, + path = pathToClone.path, + vectorPath = pathToClone.vectorPath + }; + } + + public static Path ReversePath(this Path pathToReverse) + { + var duplicatePath = pathToReverse.DuplicatePath(); + duplicatePath.vectorPath.Reverse(); + duplicatePath.path.Reverse(); + return duplicatePath; + } + + public static IList SplitPath(this Path pathToSplit, int chunkSizes) + { + var splitVectorPath = pathToSplit.vectorPath.Split(chunkSizes); + var splitNodePath = pathToSplit.path.Split(chunkSizes); + var chunkedPaths = new List(); + for (var i = 0; i < splitVectorPath.Count; i++) + { + var chunkedPath = pathToSplit.DuplicatePath(); + chunkedPath.vectorPath = splitVectorPath[0]; + chunkedPath.path = splitNodePath[0]; + chunkedPaths.Add(chunkedPath); + } + return chunkedPaths; + } + + public static int FindClosestIndexTo(this Path path, Vector3 position) + { + var closestDistance = float.MaxValue; + var closestIndex = 0; + for (var i = 0; i < path.vectorPath.Count; i++) + { + var distance = Vector3.Distance(position, path.vectorPath[i]); + if (distance < closestDistance) + { + closestIndex = i; + closestDistance = distance; + } + } + return closestIndex; + } + + public static GraphNode FindClosestNodeTo(this Path path, Vector3 position) + { + var closestIndex = FindClosestIndexTo(path, position); + return path.path[closestIndex]; + } + + public static Vector3 FindClosestPositionTo(this Path path, Vector3 position) + { + var closestIndex = FindClosestIndexTo(path, position); + return path.vectorPath[closestIndex]; + } + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Extensions/PathExtensions.cs.meta b/Assets/ECSModules/AStarPathfinding/Extensions/PathExtensions.cs.meta new file mode 100644 index 0000000..b1eeab8 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Extensions/PathExtensions.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dedaf092816a4ae4ba09d2157de4138d +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills.meta b/Assets/ECSModules/AStarPathfinding/Polyfills.meta new file mode 100644 index 0000000..b60bf7d --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ce7727174a410ea46b43552f636a9ac3 +folderAsset: yes +timeCreated: 1442824561 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/ConstantPath.cs b/Assets/ECSModules/AStarPathfinding/Polyfills/ConstantPath.cs new file mode 100644 index 0000000..5fae477 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/ConstantPath.cs @@ -0,0 +1,35 @@ +//#define IS_ASTAR_FREE + + +#if IS_ASTAR_FREE +namespace Pathfinding +{ + public class ConstantPath : Path + { + public static ConstantPath Construct (Vector3 start, int maxGScore, OnPathDelegate callback) + { return null; } + + public List allNodes; + + protected override void Recycle() + { + throw new System.NotImplementedException(); + } + + public override void Prepare() + { + throw new System.NotImplementedException(); + } + + public override void Initialize() + { + throw new System.NotImplementedException(); + } + + public override void CalculateStep(long targetTick) + { + throw new System.NotImplementedException(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/ConstantPath.cs.meta b/Assets/ECSModules/AStarPathfinding/Polyfills/ConstantPath.cs.meta new file mode 100644 index 0000000..8c6dcfe --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/ConstantPath.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 88799d2bc88f59e4881cb3a3e75df19c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/FleePath.cs b/Assets/ECSModules/AStarPathfinding/Polyfills/FleePath.cs new file mode 100644 index 0000000..f1da9da --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/FleePath.cs @@ -0,0 +1,33 @@ +//#define IS_ASTAR_FREE + + +#if IS_ASTAR_FREE +namespace Pathfinding +{ + public class FleePath : Path + { + public static FleePath Construct (Vector3 position , Vector3 avoid , int searchLength, OnPathDelegate callback) + { return null; } + + protected override void Recycle() + { + throw new System.NotImplementedException(); + } + + public override void Prepare() + { + throw new System.NotImplementedException(); + } + + public override void Initialize() + { + throw new System.NotImplementedException(); + } + + public override void CalculateStep(long targetTick) + { + throw new System.NotImplementedException(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/FleePath.cs.meta b/Assets/ECSModules/AStarPathfinding/Polyfills/FleePath.cs.meta new file mode 100644 index 0000000..5adadef --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/FleePath.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 71b04d52294f8344d8fbff1089fa6fb6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPath.cs b/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPath.cs new file mode 100644 index 0000000..14d37de --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPath.cs @@ -0,0 +1,33 @@ +//#define IS_ASTAR_FREE + + +#if IS_ASTAR_FREE +namespace Pathfinding +{ + public class FloodPath : Path + { + public static FloodPath Construct (Vector3 position, OnPathDelegate callback) + { return null; } + + protected override void Recycle() + { + throw new System.NotImplementedException(); + } + + public override void Prepare() + { + throw new System.NotImplementedException(); + } + + public override void Initialize() + { + throw new System.NotImplementedException(); + } + + public override void CalculateStep(long targetTick) + { + throw new System.NotImplementedException(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPath.cs.meta b/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPath.cs.meta new file mode 100644 index 0000000..b9587fc --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPath.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 98a4dc20769b65b4e818ba0fb89d6750 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPathTracer.cs b/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPathTracer.cs new file mode 100644 index 0000000..95a80bc --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPathTracer.cs @@ -0,0 +1,33 @@ +//#define IS_ASTAR_FREE + + +#if IS_ASTAR_FREE +namespace Pathfinding +{ + public class FloodPathTracer : Path + { + public static FloodPathTracer Construct (Vector3 position , FloodPath floodPath , OnPathDelegate callback) + { return null; } + + protected override void Recycle() + { + throw new System.NotImplementedException(); + } + + public override void Prepare() + { + throw new System.NotImplementedException(); + } + + public override void Initialize() + { + throw new System.NotImplementedException(); + } + + public override void CalculateStep(long targetTick) + { + throw new System.NotImplementedException(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPathTracer.cs.meta b/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPathTracer.cs.meta new file mode 100644 index 0000000..bc6d6da --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/FloodPathTracer.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d044f8a2af3ca904cbf28948849fc0a3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/MultiTargetPath.cs b/Assets/ECSModules/AStarPathfinding/Polyfills/MultiTargetPath.cs new file mode 100644 index 0000000..abc24b7 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/MultiTargetPath.cs @@ -0,0 +1,36 @@ +//#define IS_ASTAR_FREE + + +#if IS_ASTAR_FREE +namespace Pathfinding +{ + public class MultiTargetPath : Path + { + public static MultiTargetPath Construct(Vector3[] startPoints, Vector3 target, OnPathDelegate[] callbackDelegates, OnPathDelegate callback) + { return null; } + + public static MultiTargetPath Construct (Vector3 start, Vector3[] targets, OnPathDelegate[] callbackDelegates, OnPathDelegate callback) + { return null; } + + protected override void Recycle() + { + throw new System.NotImplementedException(); + } + + public override void Prepare() + { + throw new System.NotImplementedException(); + } + + public override void Initialize() + { + throw new System.NotImplementedException(); + } + + public override void CalculateStep(long targetTick) + { + throw new System.NotImplementedException(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/MultiTargetPath.cs.meta b/Assets/ECSModules/AStarPathfinding/Polyfills/MultiTargetPath.cs.meta new file mode 100644 index 0000000..fe3ff66 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/MultiTargetPath.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13c631048108b344fb637cc74d0c4a46 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/RandomPath.cs b/Assets/ECSModules/AStarPathfinding/Polyfills/RandomPath.cs new file mode 100644 index 0000000..9418d0f --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/RandomPath.cs @@ -0,0 +1,33 @@ +//#define IS_ASTAR_FREE + + +#if IS_ASTAR_FREE +namespace Pathfinding +{ + public class RandomPath : Path + { + public static RandomPath Construct(Vector3 position, int length, OnPathDelegate callback) + {return null;} + + protected override void Recycle() + { + throw new System.NotImplementedException(); + } + + public override void Prepare() + { + throw new System.NotImplementedException(); + } + + public override void Initialize() + { + throw new System.NotImplementedException(); + } + + public override void CalculateStep(long targetTick) + { + throw new System.NotImplementedException(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Polyfills/RandomPath.cs.meta b/Assets/ECSModules/AStarPathfinding/Polyfills/RandomPath.cs.meta new file mode 100644 index 0000000..0dbcfca --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Polyfills/RandomPath.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cab6fa499a3b44a4f8bce9708d1a7812 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/ECSModules/AStarPathfinding/Types.meta b/Assets/ECSModules/AStarPathfinding/Types.meta new file mode 100644 index 0000000..d9c41c5 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Types.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 454dff5163d9eec47ac0655f9943a217 +folderAsset: yes +timeCreated: 1442833944 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ECSModules/AStarPathfinding/Types/PredicateTypes.cs b/Assets/ECSModules/AStarPathfinding/Types/PredicateTypes.cs new file mode 100644 index 0000000..455e111 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Types/PredicateTypes.cs @@ -0,0 +1,11 @@ +namespace ECSModules.AStarPathfinding +{ + public enum PredicateTypes + { + EqualTo, + GreaterThan, + GreaterThanOrEqualTo, + LessThan, + LessThanOrEqualTo + } +} \ No newline at end of file diff --git a/Assets/ECSModules/AStarPathfinding/Types/PredicateTypes.cs.meta b/Assets/ECSModules/AStarPathfinding/Types/PredicateTypes.cs.meta new file mode 100644 index 0000000..c579d39 --- /dev/null +++ b/Assets/ECSModules/AStarPathfinding/Types/PredicateTypes.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf1c101bc310f6243b8f7eac1b6c61bb +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..86f8d62 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 96c1decd88c4a7e4881885711e64fb27 +folderAsset: yes +timeCreated: 1442114557 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Dist/ecs.astarpathfinding-1.0.0.unitypackage b/Dist/ecs.astarpathfinding-1.0.0.unitypackage new file mode 100644 index 0000000000000000000000000000000000000000..887d691758f21fc5c14f32f01838fb9a50a7e8bd GIT binary patch literal 16893 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 C6{ZpZ literal 0 HcmV?d00001 diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..6eae5ce10bc8d001fccff3c3fddaecdecc8f5c28 GIT binary patch literal 4136 zcmeH~ze>YU6vj`i|4Y%y!Ks6SQ&CFkXw{$&7No(ha&2!UnD&;KAUb8$H*gUI^#Obv z7e^n#(fEByv-k?$4-WaxFDK#LFH=OEZ;{n45m~_%7m-$Dr?KrfY@b-H~(_oO4Av@{EZZdh!{REEe@WJTXf`01QYBCI`5k>8ENU6Ff_hj_XaA|;+n}M)KUFV4Pq0Ct9_M(aow9} zbp_ltLybp0HNsR+#cW*fbU*QZ9eKeW`+g9`i3HUXP}O~5AbUlK@n@kg6i{ySbC8%=%c Fe*u%vTg?Cf literal 0 HcmV?d00001 diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..cac8c343fe1c7ed48f28df510936f02579449fbd GIT binary patch literal 4276 zcmeH~&ubGw6vy8r{;2V{o}`Ku!DFygsbG<6YHXpUL3{9`GHz#^(Q&uTPD55N`4hzd zKm?&z@h;-kYw1Do=1shaC&BoAvr`S?U62|0X6Jq8<;|P#CWj%aH;9hBCZfZ5;z4w= zIoUj)PSKCya3}=8G&KLczxn>_!}Pc_3$i{Gks9%muxy)8Lh$ z!7f0~t0d?XICi50Pz|E739QxVIcl6h$ocg@_;}#FHkyAb@ZG<-pwpONfVlo1&w1|} zeMJ2>Vy>|l5@Qu_qMv2N2)!yUd_T9rIDa3+i+nEb^FiQn&yOAcB=G$socDbeIQPVZ z^B2K4{ha8ar@#4|zz;E>t@sxD+(O7cvwxMJH8F`gEavE z4wH^_T|c>&Z)AyD=~`8EbF+%2TSlq%Q4q?s^32J^EvIRr9Ovbxr|bf@lTPPZ3xycp zlw~3dSIld-V)Yu@EkLhl^1e}5SLM3XJ=M-_qCgjAscb7ZMi;1nKCSM1f5Nfx@Pq#V z{4<}1xfO|@(ShhdbRaqq9f%G@2ciSff#^VV;Qw^s-M5o(|8la~#`cTLjqS5De2wO7 M+vKZV9t@u5 z+3W5j*68=B2Bk9q0_&@o1ivS z;gp@)t9-TgkFvbHy+3@&r`gDtWnN5XxH%hL_`=T+1AH+)pZW}Ubx^j!Y~7 literal 0 HcmV?d00001 diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..4441fd7de660564c3eabb3cacd4ec1d2331dd995 GIT binary patch literal 4188 zcmeH~J#Q015QgV$zCQwpk|v^{yd#Pb5)~pCxrt4S4W>pNJbVXl*`Afl7AZ*r5oE8oE`VGsNK>D86H;E&+!dzAI9CvAPUs6B?2 z#(CIh4KaHhCxnr69)+0ao*?`{esG?Xz=zFqioErM^PK+8=jXn_JI_4>r|r-43NiUv zLfAfkhnRec5Z2Q+IG>vkY_&a>@?r03Fuqd7J>$pLRco#a-W7R08aW@3&yBaLu+LOL zcHL|Y0roFN*+ElMnn}yN;$oAbhZ1@7%+h$AEMYv^l)D!FcqGLWnGc!=b z$L26JP+DW&ftwh=kZJyR_~b{&Piq&#^F3NrASw_Qhzdjnq5@HYs6bR8Di9Tj3jALM zE}(tiYHh0JbraO`9b1_3Uq@a+yc5FcMwU$`leC;_S1MbjLsw?ybX%1stt(t9SM_`o Juk^eU{{m|=qsssQ literal 0 HcmV?d00001 diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..f0b6b9ba41fc6716e6bafbd45b12dc670a1230a8 GIT binary patch literal 4228 zcmeH~J8u&~5Xa}@g!eN%0tCXNK|;cipa>x%2qZCzaD*jG2r6rH-q?%Icc=AP#GQ*s zNPGb*S_(=U3cdjnP^G1TFF=E6!2Di{eD(gtr%RvTZvVUp*1%=~E6Yuy9^(7P=@B{j zyeUxcokP8GK+a>;p`)-bL%G}-l*NJd6*=Z$b9|DQ`7QV*=z(|-3*rkV{!z?ui#UIQ zim3Yp{vPPAl-s%jKG)q1Wf`r@XIMt-?zMPF-F+t3_LHrqaO{Q=fihkL4Icz z_hn^%(Bd@zG|uoG4rMsc;ThsN2cDJ@hsKBIz<0BA9v_+m&peqw_wy1y*PS$3cJ^~D z<#x_VKgTotHSDCH6Dc3==Op;Q`k6|(WBUI9pYMAL%EIqY8F&3+Y@*YK4*0j2pBdr5 zV?I5?r_coVahCa_&BO28RY0zLjyWW$yAa3oyU&vFa?H-J=uPiW}{D4U{8jmJVO;YUk>=SeqGfzL(Ds?m&EBCJMQ zg(2F{u!mBH6;CLCge@z*6tvcrZ?2ML;ArerWhk_Wb@xfQ{k4`KZO>dQLT zC33cZuzz6kjQm|%TCyw%8*nZBe)Z!0wVv<4N`HFy?c8Obg7yU$ymdJzGLQaC+L#xy z@cYmy^NW_ummrc8U6%ZSPA2rkRCVwkx6Mq}~8|KfLoA^6YJ>uVi zO@0q*6MrZB8~D4Z8{)G&)gyidHu=4%P5eFVZ{Y8xZs6}r^@u+Mn|!XbiGP6o4g5ap z2L8cRFUdRP)Bl%=k&L+exyaeiT?0`ugKAy{vp{NGSW4IB9o-1`PaM%``b~PN&c7Sp#+h@wRXPj^rBiI!Ql&b+00@tpK&x@3+16UH!;ri9 zSKKK#sbp5XXD+w?je5ij@J!!lxR&E_9wUyga7>UX+@5ouedW+krq3;Y&1(dzZvano zSED)3UClVcNSLQ{4V=4XV)wzOCXb`9%sWG;mckfoUNG%UYGNysqqk==W;Yr&M5|di z@1Sm%Ra3%Kdj{t}rsHux<6$zsef@fYdh2>N{U4ZIGFq#D!r&1^H2y@{_o~%<(@G_4 zm2u7)t*qp@sa?M2T($Y|_3%aPa4*qF{P}FkP3rlQ`r}3DpS(|!H~C!Tdt$#CAnBj> zJ=Qy1oqq^bxV8pKNhK+ A5dZ)H literal 0 HcmV?d00001 diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000000000000000000000000000000000000..3ef01bfa7affcbf422b9b0345c65b3761093f119 GIT binary patch literal 4384 zcmeH~y-EW?6ot=ZfBcK6SlTSu2x2gZSVqAj2nMXIM_Ccw7;#t2u%%d7T4-hC1NbNj zwi59X>|M{Dm5}sSa%Z_SbI;s4d-=Kn%pI^00hj~kxd5BBdTsq=1K&ka7(=1USiS%3 zCDp-W^!3#L2nG)`)YcdkhKwyBXMN$495DP|Jmjwixld7i$}o7NKFeI{-ThlRtC%`H zBt-Xk4ySu~r?$j9;v<1csrRtR?b&aAAiAsf(PZs1Q}GFhdNAfcLESXPCmi#qHH`BQ zaX@eJm%gWlx{qgSE6k;rX@>OEvN!v2db)EJ+Z5K#Bhs$TEG}$2#&IXj_){6>?6!!Q z2<9%EE)|`XfD%vwNuB3c z^aAw`MZ2KsJ2TTHK0%9f;mkSrHy`($`^^wp>qO}^5zQha5v^u&nQT2z-=60w1<*&_ zCVQ`UAJ3)7o29{*{i#^mMDTlFYeX*eUa(`X=pjb#lOi_`$hsgDy+Mm^#N0ygV*LPo z9yRkALoDX+;ESmF{J*m-l>_Hsp76D-kNM}%p*L&ChWLU-?iuvlV?5$ypNaav5YZ`I zaUr@fJTiQ3`8w^i+ik}I7=W%k`I+nA+L(P-uZ_{*=1vZ58$ph<+$3rtza2X*<_^8= zrq&yWT0MZAXVsx^;Ah|;g?2%St{~P$FHnQ)a(*}C4t^OPb5_e8M2T)ek3$bZS-8#* z)VTwja}USN@?qT9h0pgrvdf(~|2}-q=NJp`pX)q^&HNZc2y@=&25jcN3?V6h4x4!& zLrBVB!)DHVWl8x**vwBbgrxjCZ008!LQ?(>KTY`HKK?4<=b2C0`rDYxJ8(Wf7l64Q=ID%| zJ}dK!ySzJ|%MjLZA1-xpK5vhZ&wME1+N2OJ-q3|Oe-^Xo8nUq)v%wDAYvh<~~8=4J5 zctYcG>x(mDwO$pWk*+7S>;x56mv@(o^@i|F8e~=pTrFh-sdlHaR|zy8*Y~(Wveg58 zK{P!Pndr7Ml~7fyGUV2z)HT>e(a#53t0f!C*Mwh{t_d1ZUTFPLcq_c3B$^WaL0*LR zU>KoVj}M4FCYW+8`~${Eb^wRSlI%O{K-Ph*16c>M4rCq3I*@fB>p<3le|6x)@7(*& v7{3PFSMb*4)@Eq}?ljS-8KSrO-mh23Et{GIpJX4`DgLkE3JiW-`=9a$J|~Kl literal 0 HcmV?d00001 diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..3d43d6e00d1f696239ce3b9ee7200f8e7660ac1d GIT binary patch literal 35809 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 Q4~p@Sf3CHud_au<2mJ`?NB{r; literal 0 HcmV?d00001 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..71343754199bcc06b8d1f96f698140d5333ffb4a GIT binary patch literal 4236 zcmeH_ze>YU6vj{5r2hY}RdErQE>bKaB8YTQtWYbWy97-`Ynx*K4Baw1_yi8RIrtb( zzJQB^58`0_zMC2h%TUBaogAHdP@1T7 zB;s+MqvQ!XId_uIao{AK6XXdxCnFx}TtrTtI4w-VdEEWupLGSpGS{IU&<