diff --git a/game/Assets/PathCreator.meta b/game/Assets/PathCreator.meta new file mode 100644 index 0000000..e3aaeef --- /dev/null +++ b/game/Assets/PathCreator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c78921add991a914aa4263c80d69a9d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core.meta b/game/Assets/PathCreator/Core.meta new file mode 100644 index 0000000..af53750 --- /dev/null +++ b/game/Assets/PathCreator/Core.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fded9f896ea32473eb30ae61b640a176 +folderAsset: yes +timeCreated: 1519645413 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Editor.meta b/game/Assets/PathCreator/Core/Editor.meta new file mode 100644 index 0000000..081c996 --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 76c2f3171eae9954aa317277dbffd478 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Editor/Helper.meta b/game/Assets/PathCreator/Core/Editor/Helper.meta new file mode 100644 index 0000000..c7dd6da --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/Helper.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 366e41d4e3408334aad31e48f28757e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Editor/Helper/MouseUtility.cs b/game/Assets/PathCreator/Core/Editor/Helper/MouseUtility.cs new file mode 100644 index 0000000..0ae6b33 --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/Helper/MouseUtility.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using UnityEditor; +using PathCreation; + +namespace PathCreationEditor +{ + public static class MouseUtility + { + /// + /// Determines mouse position in world. If PathSpace is xy/xz, the position will be locked to that plane. + /// If PathSpace is xyz, then depthFor3DSpace will be used as distance from scene camera. + /// + public static Vector3 GetMouseWorldPosition(PathSpace space, float depthFor3DSpace = 10) + { + Ray mouseRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); + Vector3 worldMouse = mouseRay.GetPoint(depthFor3DSpace); + + // Mouse can only move on XY plane + if (space == PathSpace.xy) + { + float zDir = mouseRay.direction.z; + if (zDir != 0) + { + float dstToXYPlane = Mathf.Abs(mouseRay.origin.z / zDir); + worldMouse = mouseRay.GetPoint(dstToXYPlane); + } + } + // Mouse can only move on XZ plane + else if (space == PathSpace.xz) + { + float yDir = mouseRay.direction.y; + if (yDir != 0) + { + float dstToXZPlane = Mathf.Abs(mouseRay.origin.y / yDir); + worldMouse = mouseRay.GetPoint(dstToXZPlane); + } + } + + return worldMouse; + } + + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Editor/Helper/MouseUtility.cs.meta b/game/Assets/PathCreator/Core/Editor/Helper/MouseUtility.cs.meta new file mode 100644 index 0000000..4b5ec6b --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/Helper/MouseUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd0de63ca5c52504a8d2063418a326c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Editor/Helper/PathHandle.cs b/game/Assets/PathCreator/Core/Editor/Helper/PathHandle.cs new file mode 100644 index 0000000..613fdb8 --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/Helper/PathHandle.cs @@ -0,0 +1,237 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using PathCreation; + +namespace PathCreationEditor +{ + public static class PathHandle + { + + public const float extraInputRadius = .005f; + + static Vector2 handleDragMouseStart; + static Vector2 handleDragMouseEnd; + static Vector3 handleDragWorldStart; + + static int selectedHandleID; + static bool mouseIsOverAHandle; + + public enum HandleInputType + { + None, + LMBPress, + LMBClick, + LMBDrag, + LMBRelease, + }; + + static float dstMouseToDragPointStart; + + static List ids; + static HashSet idHash; + + static PathHandle() + { + ids = new List(); + idHash = new HashSet(); + + dstMouseToDragPointStart = float.MaxValue; + } + + public static Vector3 DrawHandle(Vector3 position, PathSpace space, bool isInteractive, float handleDiameter, Handles.CapFunction capFunc, HandleColours colours, out HandleInputType inputType, int handleIndex) + { + int id = GetID(handleIndex); + Vector3 screenPosition = Handles.matrix.MultiplyPoint(position); + Matrix4x4 cachedMatrix = Handles.matrix; + + inputType = HandleInputType.None; + + EventType eventType = Event.current.GetTypeForControl(id); + float handleRadius = handleDiameter / 2f; + float dstToHandle = HandleUtility.DistanceToCircle(position, handleRadius + extraInputRadius); + float dstToMouse = HandleUtility.DistanceToCircle(position, 0); + + // Handle input events + if (isInteractive) + { + // Repaint if mouse is entering/exiting handle (for highlight colour) + if (dstToHandle == 0) + { + if (!mouseIsOverAHandle) + { + HandleUtility.Repaint(); + mouseIsOverAHandle = true; + } + } + else + { + if (mouseIsOverAHandle) + { + HandleUtility.Repaint(); + mouseIsOverAHandle = false; + } + } + switch (eventType) + { + case EventType.MouseDown: + if (Event.current.button == 0 && Event.current.modifiers != EventModifiers.Alt) + { + if (dstToHandle == 0 && dstToMouse < dstMouseToDragPointStart) + { + dstMouseToDragPointStart = dstToMouse; + GUIUtility.hotControl = id; + handleDragMouseEnd = handleDragMouseStart = Event.current.mousePosition; + handleDragWorldStart = position; + selectedHandleID = id; + inputType = HandleInputType.LMBPress; + } + } + break; + + case EventType.MouseUp: + dstMouseToDragPointStart = float.MaxValue; + if (GUIUtility.hotControl == id && Event.current.button == 0) + { + GUIUtility.hotControl = 0; + selectedHandleID = -1; + Event.current.Use(); + + inputType = HandleInputType.LMBRelease; + + + if (Event.current.mousePosition == handleDragMouseStart) + { + inputType = HandleInputType.LMBClick; + } + } + break; + + case EventType.MouseDrag: + if (GUIUtility.hotControl == id && Event.current.button == 0) + { + handleDragMouseEnd += new Vector2(Event.current.delta.x, -Event.current.delta.y); + Vector3 position2 = Camera.current.WorldToScreenPoint(Handles.matrix.MultiplyPoint(handleDragWorldStart)) + + (Vector3)(handleDragMouseEnd - handleDragMouseStart); + inputType = HandleInputType.LMBDrag; + // Handle can move freely in 3d space + if (space == PathSpace.xyz) + { + position = Handles.matrix.inverse.MultiplyPoint(Camera.current.ScreenToWorldPoint(position2)); + } + // Handle is clamped to xy or xz plane + else + { + position = MouseUtility.GetMouseWorldPosition(space); + } + + GUI.changed = true; + Event.current.Use(); + } + break; + } + } + + switch (eventType) + { + case EventType.Repaint: + Color originalColour = Handles.color; + Handles.color = (isInteractive) ? colours.defaultColour : colours.disabledColour; + + if (id == GUIUtility.hotControl) + { + Handles.color = colours.selectedColour; + } + else if (dstToHandle == 0 && selectedHandleID == -1 && isInteractive) + { + Handles.color = colours.highlightedColour; + } + + + Handles.matrix = Matrix4x4.identity; + Vector3 lookForward = Vector3.up; + Camera cam = Camera.current; + if (cam != null) + { + if (cam.orthographic) + { + lookForward= -cam.transform.forward; + } + else + { + lookForward = (cam.transform.position - position); + } + } + + capFunc(id, screenPosition, Quaternion.LookRotation(lookForward), handleDiameter, EventType.Repaint); + Handles.matrix = cachedMatrix; + + Handles.color = originalColour; + break; + + case EventType.Layout: + Handles.matrix = Matrix4x4.identity; + HandleUtility.AddControl(id, HandleUtility.DistanceToCircle(screenPosition, handleDiameter / 2f)); + Handles.matrix = cachedMatrix; + break; + } + + return position; + } + + public struct HandleColours + { + public Color defaultColour; + public Color highlightedColour; + public Color selectedColour; + public Color disabledColour; + + public HandleColours(Color defaultColour, Color highlightedColour, Color selectedColour, Color disabledColour) + { + this.defaultColour = defaultColour; + this.highlightedColour = highlightedColour; + this.selectedColour = selectedColour; + this.disabledColour = disabledColour; + } + } + + static void AddIDs(int upToIndex) + { + int numIDAtStart = ids.Count; + int numToAdd = (upToIndex - numIDAtStart) + 1; + for (int i = 0; i < numToAdd; i++) + { + string hashString = string.Format("pathhandle({0})", numIDAtStart + i); + int hash = hashString.GetHashCode(); + + int id = GUIUtility.GetControlID(hash, FocusType.Passive); + int numIts = 0; + + // This is a bit of a shot in the dark at fixing a reported bug that I've been unable to reproduce. + // The problem is that multiple handles are being selected when just one is clicked on. + // I assume this is because they're somehow being assigned the same id. + while (idHash.Contains(id)) { + numIts ++; + id += numIts * numIts; + if (numIts > 100) { + Debug.LogError("Failed to generate unique handle id."); + break; + } + } + + idHash.Add(id); + ids.Add(id); + } + } + + static int GetID(int handleIndex) + { + if (handleIndex >= ids.Count) + { + AddIDs(handleIndex); + } + + return ids[handleIndex]; + } + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Editor/Helper/PathHandle.cs.meta b/game/Assets/PathCreator/Core/Editor/Helper/PathHandle.cs.meta new file mode 100644 index 0000000..4dee2f9 --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/Helper/PathHandle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 804ddb43548540a4ca3b0a534a75c4b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Editor/Helper/ScreenSpacePolyLine.cs b/game/Assets/PathCreator/Core/Editor/Helper/ScreenSpacePolyLine.cs new file mode 100644 index 0000000..50b28a2 --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/Helper/ScreenSpacePolyLine.cs @@ -0,0 +1,215 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using PathCreation; +using PathCreation.Utility; + +namespace PathCreationEditor +{ + public class ScreenSpacePolyLine + { + const int accuracyMultiplier = 10; + // dont allow vertices to be spaced too far apart, as screenspace-worldspace conversion can then be noticeably off + const float intermediaryThreshold = .2f; + + public readonly List verticesWorld; + // For each point in the polyline, says which bezier segment it belongs to + readonly List vertexToPathSegmentMap; + // Stores the index in the vertices list where the start point of each segment is + readonly int[] segmentStartIndices; + + readonly float pathLengthWorld; + readonly float[] cumululativeLengthWorld; + + Vector2[] points; + + Vector3 prevCamPos; + Quaternion prevCamRot; + bool premCamIsOrtho; + + readonly Transform transform; + readonly Vector3 transformPosition; + readonly Quaternion transformRotation; + readonly Vector3 transformScale; + + public ScreenSpacePolyLine(BezierPath bezierPath, Transform transform, float maxAngleError, float minVertexDst, float accuracy = 1) + { + this.transform = transform; + transformPosition = transform.position; + transformRotation = transform.rotation; + transformScale = transform.localScale; + + // Split path in vertices based on angle error + verticesWorld = new List(); + vertexToPathSegmentMap = new List(); + segmentStartIndices = new int[bezierPath.NumSegments+1]; + + verticesWorld.Add(bezierPath[0]); + vertexToPathSegmentMap.Add(0); + Vector3 prevPointOnPath = bezierPath[0]; + float dstSinceLastVertex = 0; + Vector3 lastAddedPoint = prevPointOnPath; + float dstSinceLastIntermediary = 0; + + for (int segmentIndex = 0; segmentIndex < bezierPath.NumSegments; segmentIndex++) + { + Vector3[] segmentPoints = bezierPath.GetPointsInSegment(segmentIndex); + verticesWorld.Add(segmentPoints[0]); + vertexToPathSegmentMap.Add(segmentIndex); + segmentStartIndices[segmentIndex] = verticesWorld.Count-1; + + prevPointOnPath = segmentPoints[0]; + lastAddedPoint = prevPointOnPath; + dstSinceLastVertex = 0; + dstSinceLastIntermediary = 0; + + float estimatedSegmentLength = CubicBezierUtility.EstimateCurveLength(segmentPoints[0], segmentPoints[1], segmentPoints[2], segmentPoints[3]); + int divisions = Mathf.CeilToInt(estimatedSegmentLength * accuracy * accuracyMultiplier); + float increment = 1f / divisions; + + for (float t = increment; t <= 1; t += increment) + { + Vector3 pointOnPath = CubicBezierUtility.EvaluateCurve(segmentPoints[0], segmentPoints[1], segmentPoints[2], segmentPoints[3], t); + Vector3 nextPointOnPath = CubicBezierUtility.EvaluateCurve(segmentPoints[0], segmentPoints[1], segmentPoints[2], segmentPoints[3], t + increment); + + // angle at current point on path + float localAngle = 180 - MathUtility.MinAngle(prevPointOnPath, pointOnPath, nextPointOnPath); + // angle between the last added vertex, the current point on the path, and the next point on the path + float angleFromPrevVertex = 180 - MathUtility.MinAngle(lastAddedPoint, pointOnPath, nextPointOnPath); + float angleError = Mathf.Max(localAngle, angleFromPrevVertex); + + + if (angleError > maxAngleError && dstSinceLastVertex >= minVertexDst) + { + dstSinceLastVertex = 0; + dstSinceLastIntermediary = 0; + verticesWorld.Add(pointOnPath); + vertexToPathSegmentMap.Add(segmentIndex); + lastAddedPoint = pointOnPath; + } + else + { + if (dstSinceLastIntermediary > intermediaryThreshold) + { + verticesWorld.Add(pointOnPath); + vertexToPathSegmentMap.Add(segmentIndex); + dstSinceLastIntermediary = 0; + } + else + { + dstSinceLastIntermediary += (pointOnPath - prevPointOnPath).magnitude; + } + dstSinceLastVertex += (pointOnPath - prevPointOnPath).magnitude; + } + prevPointOnPath = pointOnPath; + } + } + + segmentStartIndices[bezierPath.NumSegments] = verticesWorld.Count; + + // ensure final point gets added (unless path is closed loop) + if (!bezierPath.IsClosed) + { + verticesWorld.Add(bezierPath[bezierPath.NumPoints - 1]); + } + else + { + verticesWorld.Add(bezierPath[0]); + } + + // Calculate length + cumululativeLengthWorld = new float[verticesWorld.Count]; + for (int i = 0; i < verticesWorld.Count; i++) + { + verticesWorld[i] = MathUtility.TransformPoint(verticesWorld[i], transform, bezierPath.Space); + if (i > 0) { + pathLengthWorld += (verticesWorld[i - 1] - verticesWorld[i]).magnitude; + cumululativeLengthWorld[i] = pathLengthWorld; + } + } + + } + + void ComputeScreenSpace() + { + if (Camera.current.transform.position != prevCamPos || Camera.current.transform.rotation != prevCamRot || Camera.current.orthographic != premCamIsOrtho) + { + points = new Vector2[verticesWorld.Count]; + for (int i = 0; i < verticesWorld.Count; i++) + { + points[i] = HandleUtility.WorldToGUIPoint(verticesWorld[i]); + } + + prevCamPos = Camera.current.transform.position; + prevCamRot = Camera.current.transform.rotation; + premCamIsOrtho = Camera.current.orthographic; + } + } + + public MouseInfo CalculateMouseInfo() + { + ComputeScreenSpace(); + + Vector2 mousePos = Event.current.mousePosition; + float minDst = float.MaxValue; + int closestPolyLineSegmentIndex = 0; + int closestBezierSegmentIndex = 0; + + for (int i = 0; i < points.Length - 1; i++) + { + float dst = HandleUtility.DistancePointToLineSegment(mousePos, points[i], points[i + 1]); + + if (dst < minDst) + { + minDst = dst; + closestPolyLineSegmentIndex = i; + closestBezierSegmentIndex = vertexToPathSegmentMap[i]; + } + } + + Vector2 closestPointOnLine = MathUtility.ClosestPointOnLineSegment(mousePos, points[closestPolyLineSegmentIndex], points[closestPolyLineSegmentIndex + 1]); + float dstToPointOnLine = (points[closestPolyLineSegmentIndex] - closestPointOnLine).magnitude; + float percentBetweenVertices = dstToPointOnLine / (points[closestPolyLineSegmentIndex] - points[closestPolyLineSegmentIndex + 1]).magnitude; + Vector3 closestPoint3D = Vector3.Lerp(verticesWorld[closestPolyLineSegmentIndex], verticesWorld[closestPolyLineSegmentIndex + 1], percentBetweenVertices); + + float distanceAlongPathWorld = cumululativeLengthWorld[closestPolyLineSegmentIndex] + Vector3.Distance(verticesWorld[closestPolyLineSegmentIndex], closestPoint3D); + float timeAlongPath = distanceAlongPathWorld / pathLengthWorld; + + // Calculate how far between the current bezier segment the closest point on the line is + + int bezierSegmentStartIndex = segmentStartIndices[closestBezierSegmentIndex]; + int bezierSegmentEndIndex = segmentStartIndices[closestBezierSegmentIndex+1]; + float bezierSegmentLength = cumululativeLengthWorld[bezierSegmentEndIndex] - cumululativeLengthWorld[bezierSegmentStartIndex]; + float distanceAlongBezierSegment = distanceAlongPathWorld - cumululativeLengthWorld[bezierSegmentStartIndex]; + float timeAlongBezierSegment = distanceAlongBezierSegment/bezierSegmentLength; + + return new MouseInfo(minDst, closestPoint3D, distanceAlongPathWorld, timeAlongPath, timeAlongBezierSegment, closestBezierSegmentIndex); + } + + public bool TransformIsOutOfDate() { + return transform.position != transformPosition || transform.rotation != transformRotation || transform.localScale != transformScale; + } + + + public struct MouseInfo + { + public readonly float mouseDstToLine; + public readonly Vector3 closestWorldPointToMouse; + public readonly float distanceAlongPathWorld; + public readonly float timeOnPath; + public readonly float timeOnBezierSegment; + public readonly int closestSegmentIndex; + + + public MouseInfo(float mouseDstToLine, Vector3 closestWorldPointToMouse, float distanceAlongPathWorld, float timeOnPath, float timeOnBezierSegment, int closestSegmentIndex) + { + this.mouseDstToLine = mouseDstToLine; + this.closestWorldPointToMouse = closestWorldPointToMouse; + this.distanceAlongPathWorld = distanceAlongPathWorld; + this.timeOnPath = timeOnPath; + this.timeOnBezierSegment = timeOnBezierSegment; + this.closestSegmentIndex = closestSegmentIndex; + } + } + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Editor/Helper/ScreenSpacePolyLine.cs.meta b/game/Assets/PathCreator/Core/Editor/Helper/ScreenSpacePolyLine.cs.meta new file mode 100644 index 0000000..d860ffe --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/Helper/ScreenSpacePolyLine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05aed72a972059e45a62e31c2bb60fc4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Editor/PathCreatorEditor.asmdef b/game/Assets/PathCreator/Core/Editor/PathCreatorEditor.asmdef new file mode 100644 index 0000000..a53287d --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/PathCreatorEditor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "PathCreatorEditor", + "references": [ + "PathCreator" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Editor/PathCreatorEditor.asmdef.meta b/game/Assets/PathCreator/Core/Editor/PathCreatorEditor.asmdef.meta new file mode 100644 index 0000000..0c83f71 --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/PathCreatorEditor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 92ee438f32d811247a22ca14bf2a3fe0 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Editor/PathEditor.cs b/game/Assets/PathCreator/Core/Editor/PathEditor.cs new file mode 100644 index 0000000..7c52cc6 --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/PathEditor.cs @@ -0,0 +1,736 @@ +using System.Collections.Generic; +using PathCreation; +using PathCreation.Utility; +using UnityEditor; +using UnityEditor.IMGUI.Controls; +using UnityEngine; + +namespace PathCreationEditor { + /// Editor class for the creation of Bezier and Vertex paths + + [CustomEditor (typeof (PathCreator))] + public class PathEditor : Editor { + + #region Fields + + // Interaction: + const float segmentSelectDistanceThreshold = 10f; + const float screenPolylineMaxAngleError = .3f; + const float screenPolylineMinVertexDst = .01f; + + // Help messages: + const string helpInfo = "Shift-click to add or insert new points. Control-click to delete points. For more detailed infomation, please refer to the documentation."; + static readonly string[] spaceNames = { "3D (xyz)", "2D (xy)", "Top-down (xz)" }; + static readonly string[] tabNames = { "Bézier Path", "Vertex Path" }; + const string constantSizeTooltip = "If true, anchor and control points will keep a constant size when zooming in the editor."; + + // Display + const int inspectorSectionSpacing = 10; + const float constantHandleScale = .01f; + const float normalsSpacing = .2f; + GUIStyle boldFoldoutStyle; + + // References: + PathCreator creator; + Editor globalDisplaySettingsEditor; + ScreenSpacePolyLine screenSpaceLine; + ScreenSpacePolyLine.MouseInfo pathMouseInfo; + GlobalDisplaySettings globalDisplaySettings; + PathHandle.HandleColours splineAnchorColours; + PathHandle.HandleColours splineControlColours; + Dictionary capFunctions; + ArcHandle anchorAngleHandle = new ArcHandle (); + VertexPath normalsVertexPath; + + // State variables: + int selectedSegmentIndex; + int draggingHandleIndex; + int mouseOverHandleIndex; + int handleIndexToDisplayAsTransform; + + bool shiftLastFrame; + bool hasUpdatedScreenSpaceLine; + bool hasUpdatedNormalsVertexPath; + bool editingNormalsOld; + + Vector3 transformPos; + Vector3 transformScale; + Quaternion transformRot; + + Color handlesStartCol; + + // Constants + const int bezierPathTab = 0; + const int vertexPathTab = 1; + + #endregion + + #region Inspectors + + public override void OnInspectorGUI () { + // Initialize GUI styles + if (boldFoldoutStyle == null) { + boldFoldoutStyle = new GUIStyle (EditorStyles.foldout); + boldFoldoutStyle.fontStyle = FontStyle.Bold; + } + + Undo.RecordObject (creator, "Path settings changed"); + + // Draw Bezier and Vertex tabs + int tabIndex = GUILayout.Toolbar (data.tabIndex, tabNames); + if (tabIndex != data.tabIndex) { + data.tabIndex = tabIndex; + TabChanged (); + } + + // Draw inspector for active tab + switch (data.tabIndex) { + case bezierPathTab: + DrawBezierPathInspector (); + break; + case vertexPathTab: + DrawVertexPathInspector (); + break; + } + + // Notify of undo/redo that might modify the path + if (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed") { + data.PathModifiedByUndo (); + } + } + + void DrawBezierPathInspector () { + using (var check = new EditorGUI.ChangeCheckScope ()) { + // Path options: + data.showPathOptions = EditorGUILayout.Foldout (data.showPathOptions, new GUIContent ("Bézier Path Options"), true, boldFoldoutStyle); + if (data.showPathOptions) { + bezierPath.Space = (PathSpace) EditorGUILayout.Popup ("Space", (int) bezierPath.Space, spaceNames); + bezierPath.ControlPointMode = (BezierPath.ControlMode) EditorGUILayout.EnumPopup (new GUIContent ("Control Mode"), bezierPath.ControlPointMode); + if (bezierPath.ControlPointMode == BezierPath.ControlMode.Automatic) { + bezierPath.AutoControlLength = EditorGUILayout.Slider (new GUIContent ("Control Spacing"), bezierPath.AutoControlLength, 0, 1); + } + + bezierPath.IsClosed = EditorGUILayout.Toggle ("Closed Path", bezierPath.IsClosed); + data.showTransformTool = EditorGUILayout.Toggle (new GUIContent ("Enable Transforms"), data.showTransformTool); + + Tools.hidden = !data.showTransformTool; + + // Check if out of bounds (can occur after undo operations) + if (handleIndexToDisplayAsTransform >= bezierPath.NumPoints) { + handleIndexToDisplayAsTransform = -1; + } + + // If a point has been selected + if (handleIndexToDisplayAsTransform != -1) { + EditorGUILayout.LabelField ("Selected Point:"); + + using (new EditorGUI.IndentLevelScope ()) { + var currentPosition = creator.bezierPath[handleIndexToDisplayAsTransform]; + var newPosition = EditorGUILayout.Vector3Field ("Position", currentPosition); + if (newPosition != currentPosition) { + Undo.RecordObject (creator, "Move point"); + creator.bezierPath.MovePoint (handleIndexToDisplayAsTransform, newPosition); + } + // Don't draw the angle field if we aren't selecting an anchor point/not in 3d space + if (handleIndexToDisplayAsTransform % 3 == 0 && creator.bezierPath.Space == PathSpace.xyz) { + var anchorIndex = handleIndexToDisplayAsTransform / 3; + var currentAngle = creator.bezierPath.GetAnchorNormalAngle (anchorIndex); + var newAngle = EditorGUILayout.FloatField ("Angle", currentAngle); + if (newAngle != currentAngle) { + Undo.RecordObject (creator, "Set Angle"); + creator.bezierPath.SetAnchorNormalAngle (anchorIndex, newAngle); + } + } + } + } + + if (data.showTransformTool & (handleIndexToDisplayAsTransform == -1)) { + if (GUILayout.Button ("Centre Transform")) { + + Vector3 worldCentre = bezierPath.CalculateBoundsWithTransform (creator.transform).center; + Vector3 transformPos = creator.transform.position; + if (bezierPath.Space == PathSpace.xy) { + transformPos = new Vector3 (transformPos.x, transformPos.y, 0); + } else if (bezierPath.Space == PathSpace.xz) { + transformPos = new Vector3 (transformPos.x, 0, transformPos.z); + } + Vector3 worldCentreToTransform = transformPos - worldCentre; + + if (worldCentre != creator.transform.position) { + //Undo.RecordObject (creator, "Centralize Transform"); + if (worldCentreToTransform != Vector3.zero) { + Vector3 localCentreToTransform = MathUtility.InverseTransformVector (worldCentreToTransform, creator.transform, bezierPath.Space); + for (int i = 0; i < bezierPath.NumPoints; i++) { + bezierPath.SetPoint (i, bezierPath.GetPoint (i) + localCentreToTransform, true); + } + } + + creator.transform.position = worldCentre; + bezierPath.NotifyPathModified (); + } + } + } + + if (GUILayout.Button ("Reset Path")) { + Undo.RecordObject (creator, "Reset Path"); + bool in2DEditorMode = EditorSettings.defaultBehaviorMode == EditorBehaviorMode.Mode2D; + data.ResetBezierPath (creator.transform.position, in2DEditorMode); + EditorApplication.QueuePlayerLoopUpdate (); + } + + GUILayout.Space (inspectorSectionSpacing); + } + + data.showNormals = EditorGUILayout.Foldout (data.showNormals, new GUIContent ("Normals Options"), true, boldFoldoutStyle); + if (data.showNormals) { + bezierPath.FlipNormals = EditorGUILayout.Toggle (new GUIContent ("Flip Normals"), bezierPath.FlipNormals); + if (bezierPath.Space == PathSpace.xyz) { + bezierPath.GlobalNormalsAngle = EditorGUILayout.Slider (new GUIContent ("Global Angle"), bezierPath.GlobalNormalsAngle, 0, 360); + + if (GUILayout.Button ("Reset Normals")) { + Undo.RecordObject (creator, "Reset Normals"); + bezierPath.FlipNormals = false; + bezierPath.ResetNormalAngles (); + } + } + GUILayout.Space (inspectorSectionSpacing); + } + + // Editor display options + data.showDisplayOptions = EditorGUILayout.Foldout (data.showDisplayOptions, new GUIContent ("Display Options"), true, boldFoldoutStyle); + if (data.showDisplayOptions) { + data.showPathBounds = GUILayout.Toggle (data.showPathBounds, new GUIContent ("Show Path Bounds")); + data.showPerSegmentBounds = GUILayout.Toggle (data.showPerSegmentBounds, new GUIContent ("Show Segment Bounds")); + data.displayAnchorPoints = GUILayout.Toggle (data.displayAnchorPoints, new GUIContent ("Show Anchor Points")); + if (!(bezierPath.ControlPointMode == BezierPath.ControlMode.Automatic && globalDisplaySettings.hideAutoControls)) { + data.displayControlPoints = GUILayout.Toggle (data.displayControlPoints, new GUIContent ("Show Control Points")); + } + data.keepConstantHandleSize = GUILayout.Toggle (data.keepConstantHandleSize, new GUIContent ("Constant Point Size", constantSizeTooltip)); + data.bezierHandleScale = Mathf.Max (0, EditorGUILayout.FloatField (new GUIContent ("Handle Scale"), data.bezierHandleScale)); + DrawGlobalDisplaySettingsInspector (); + } + + if (check.changed) { + SceneView.RepaintAll (); + EditorApplication.QueuePlayerLoopUpdate (); + } + } + } + + void DrawVertexPathInspector () { + + GUILayout.Space (inspectorSectionSpacing); + EditorGUILayout.LabelField ("Vertex count: " + creator.path.NumPoints); + GUILayout.Space (inspectorSectionSpacing); + + data.showVertexPathOptions = EditorGUILayout.Foldout (data.showVertexPathOptions, new GUIContent ("Vertex Path Options"), true, boldFoldoutStyle); + if (data.showVertexPathOptions) { + using (var check = new EditorGUI.ChangeCheckScope ()) { + data.vertexPathMaxAngleError = EditorGUILayout.Slider (new GUIContent ("Max Angle Error"), data.vertexPathMaxAngleError, 0, 45); + data.vertexPathMinVertexSpacing = EditorGUILayout.Slider (new GUIContent ("Min Vertex Dst"), data.vertexPathMinVertexSpacing, 0, 1); + + GUILayout.Space (inspectorSectionSpacing); + if (check.changed) { + data.VertexPathSettingsChanged (); + SceneView.RepaintAll (); + EditorApplication.QueuePlayerLoopUpdate (); + } + } + } + + data.showVertexPathDisplayOptions = EditorGUILayout.Foldout (data.showVertexPathDisplayOptions, new GUIContent ("Display Options"), true, boldFoldoutStyle); + if (data.showVertexPathDisplayOptions) { + using (var check = new EditorGUI.ChangeCheckScope ()) { + data.showNormalsInVertexMode = GUILayout.Toggle (data.showNormalsInVertexMode, new GUIContent ("Show Normals")); + data.showBezierPathInVertexMode = GUILayout.Toggle (data.showBezierPathInVertexMode, new GUIContent ("Show Bezier Path")); + + if (check.changed) { + SceneView.RepaintAll (); + EditorApplication.QueuePlayerLoopUpdate (); + } + } + DrawGlobalDisplaySettingsInspector (); + } + } + + void DrawGlobalDisplaySettingsInspector () { + using (var check = new EditorGUI.ChangeCheckScope ()) { + data.globalDisplaySettingsFoldout = EditorGUILayout.InspectorTitlebar (data.globalDisplaySettingsFoldout, globalDisplaySettings); + if (data.globalDisplaySettingsFoldout) { + CreateCachedEditor (globalDisplaySettings, null, ref globalDisplaySettingsEditor); + globalDisplaySettingsEditor.OnInspectorGUI (); + } + if (check.changed) { + UpdateGlobalDisplaySettings (); + SceneView.RepaintAll (); + } + } + } + + #endregion + + #region Scene GUI + + void OnSceneGUI () { + if (!globalDisplaySettings.visibleBehindObjects) { + Handles.zTest = UnityEngine.Rendering.CompareFunction.LessEqual; + } + + EventType eventType = Event.current.type; + + using (var check = new EditorGUI.ChangeCheckScope ()) { + handlesStartCol = Handles.color; + switch (data.tabIndex) { + case bezierPathTab: + if (eventType != EventType.Repaint && eventType != EventType.Layout) { + ProcessBezierPathInput (Event.current); + } + + DrawBezierPathSceneEditor (); + break; + case vertexPathTab: + if (eventType == EventType.Repaint) { + DrawVertexPathSceneEditor (); + } + break; + } + + // Don't allow clicking over empty space to deselect the object + if (eventType == EventType.Layout) { + HandleUtility.AddDefaultControl (0); + } + + if (check.changed) { + EditorApplication.QueuePlayerLoopUpdate (); + } + } + + SetTransformState (); + } + + void DrawVertexPathSceneEditor () { + + Color bezierCol = globalDisplaySettings.bezierPath; + bezierCol.a *= .5f; + + if (data.showBezierPathInVertexMode) { + for (int i = 0; i < bezierPath.NumSegments; i++) { + Vector3[] points = bezierPath.GetPointsInSegment (i); + for (int j = 0; j < points.Length; j++) { + points[j] = MathUtility.TransformPoint (points[j], creator.transform, bezierPath.Space); + } + Handles.DrawBezier (points[0], points[3], points[1], points[2], bezierCol, null, 2); + } + } + + Handles.color = globalDisplaySettings.vertexPath; + + for (int i = 0; i < creator.path.NumPoints; i++) { + int nextIndex = (i + 1) % creator.path.NumPoints; + if (nextIndex != 0 || bezierPath.IsClosed) { + Handles.DrawLine (creator.path.GetPoint (i), creator.path.GetPoint (nextIndex)); + } + } + + if (data.showNormalsInVertexMode) { + Handles.color = globalDisplaySettings.normals; + Vector3[] normalLines = new Vector3[creator.path.NumPoints * 2]; + for (int i = 0; i < creator.path.NumPoints; i++) { + normalLines[i * 2] = creator.path.GetPoint (i); + normalLines[i * 2 + 1] = creator.path.GetPoint (i) + creator.path.localNormals[i] * globalDisplaySettings.normalsLength; + } + Handles.DrawLines (normalLines); + } + } + + void ProcessBezierPathInput (Event e) { + // Find which handle mouse is over. Start by looking at previous handle index first, as most likely to still be closest to mouse + int previousMouseOverHandleIndex = (mouseOverHandleIndex == -1) ? 0 : mouseOverHandleIndex; + mouseOverHandleIndex = -1; + for (int i = 0; i < bezierPath.NumPoints; i += 3) { + + int handleIndex = (previousMouseOverHandleIndex + i) % bezierPath.NumPoints; + float handleRadius = GetHandleDiameter (globalDisplaySettings.anchorSize * data.bezierHandleScale, bezierPath[handleIndex]) / 2f; + Vector3 pos = MathUtility.TransformPoint (bezierPath[handleIndex], creator.transform, bezierPath.Space); + float dst = HandleUtility.DistanceToCircle (pos, handleRadius); + if (dst == 0) { + mouseOverHandleIndex = handleIndex; + break; + } + } + + // Shift-left click (when mouse not over a handle) to split or add segment + if (mouseOverHandleIndex == -1) { + if (e.type == EventType.MouseDown && e.button == 0 && e.shift) { + UpdatePathMouseInfo (); + // Insert point along selected segment + if (selectedSegmentIndex != -1 && selectedSegmentIndex < bezierPath.NumSegments) { + Vector3 newPathPoint = pathMouseInfo.closestWorldPointToMouse; + newPathPoint = MathUtility.InverseTransformPoint (newPathPoint, creator.transform, bezierPath.Space); + Undo.RecordObject (creator, "Split segment"); + bezierPath.SplitSegment (newPathPoint, selectedSegmentIndex, pathMouseInfo.timeOnBezierSegment); + } + // If path is not a closed loop, add new point on to the end of the path + else if (!bezierPath.IsClosed) { + // insert new point at same dst from scene camera as the point that comes before it (for a 3d path) + float dstCamToEndpoint = (Camera.current.transform.position - bezierPath[bezierPath.NumPoints - 1]).magnitude; + Vector3 newPathPoint = MouseUtility.GetMouseWorldPosition (bezierPath.Space, dstCamToEndpoint); + newPathPoint = MathUtility.InverseTransformPoint (newPathPoint, creator.transform, bezierPath.Space); + + Undo.RecordObject (creator, "Add segment"); + if (e.control || e.command) { + bezierPath.AddSegmentToStart (newPathPoint); + } else { + bezierPath.AddSegmentToEnd (newPathPoint); + } + + } + + } + } + + // Control click or backspace/delete to remove point + if (e.keyCode == KeyCode.Backspace || e.keyCode == KeyCode.Delete || ((e.control || e.command) && e.type == EventType.MouseDown && e.button == 0)) { + + if (mouseOverHandleIndex != -1) { + Undo.RecordObject (creator, "Delete segment"); + bezierPath.DeleteSegment (mouseOverHandleIndex); + if (mouseOverHandleIndex == handleIndexToDisplayAsTransform) { + handleIndexToDisplayAsTransform = -1; + } + mouseOverHandleIndex = -1; + Repaint (); + } + } + + // Holding shift and moving mouse (but mouse not over a handle/dragging a handle) + if (draggingHandleIndex == -1 && mouseOverHandleIndex == -1) { + bool shiftDown = e.shift && !shiftLastFrame; + if (shiftDown || ((e.type == EventType.MouseMove || e.type == EventType.MouseDrag) && e.shift)) { + + UpdatePathMouseInfo (); + + if (pathMouseInfo.mouseDstToLine < segmentSelectDistanceThreshold) { + if (pathMouseInfo.closestSegmentIndex != selectedSegmentIndex) { + selectedSegmentIndex = pathMouseInfo.closestSegmentIndex; + HandleUtility.Repaint (); + } + } else { + selectedSegmentIndex = -1; + HandleUtility.Repaint (); + } + + } + } + + shiftLastFrame = e.shift; + + } + + void DrawBezierPathSceneEditor () { + + bool displayControlPoints = data.displayControlPoints && (bezierPath.ControlPointMode != BezierPath.ControlMode.Automatic || !globalDisplaySettings.hideAutoControls); + Bounds bounds = bezierPath.CalculateBoundsWithTransform (creator.transform); + + if (Event.current.type == EventType.Repaint) { + for (int i = 0; i < bezierPath.NumSegments; i++) { + Vector3[] points = bezierPath.GetPointsInSegment (i); + for (int j = 0; j < points.Length; j++) { + points[j] = MathUtility.TransformPoint (points[j], creator.transform, bezierPath.Space); + } + + if (data.showPerSegmentBounds) { + Bounds segmentBounds = CubicBezierUtility.CalculateSegmentBounds (points[0], points[1], points[2], points[3]); + Handles.color = globalDisplaySettings.segmentBounds; + Handles.DrawWireCube (segmentBounds.center, segmentBounds.size); + } + + // Draw lines between control points + if (displayControlPoints) { + Handles.color = (bezierPath.ControlPointMode == BezierPath.ControlMode.Automatic) ? globalDisplaySettings.handleDisabled : globalDisplaySettings.controlLine; + Handles.DrawLine (points[1], points[0]); + Handles.DrawLine (points[2], points[3]); + } + + // Draw path + bool highlightSegment = (i == selectedSegmentIndex && Event.current.shift && draggingHandleIndex == -1 && mouseOverHandleIndex == -1); + Color segmentCol = (highlightSegment) ? globalDisplaySettings.highlightedPath : globalDisplaySettings.bezierPath; + Handles.DrawBezier (points[0], points[3], points[1], points[2], segmentCol, null, 2); + } + + if (data.showPathBounds) { + Handles.color = globalDisplaySettings.bounds; + Handles.DrawWireCube (bounds.center, bounds.size); + } + + // Draw normals + if (data.showNormals) { + if (!hasUpdatedNormalsVertexPath) { + normalsVertexPath = new VertexPath (bezierPath, creator.transform, normalsSpacing); + hasUpdatedNormalsVertexPath = true; + } + + if (editingNormalsOld != data.showNormals) { + editingNormalsOld = data.showNormals; + Repaint (); + } + + Vector3[] normalLines = new Vector3[normalsVertexPath.NumPoints * 2]; + Handles.color = globalDisplaySettings.normals; + for (int i = 0; i < normalsVertexPath.NumPoints; i++) { + normalLines[i * 2] = normalsVertexPath.GetPoint (i); + normalLines[i * 2 + 1] = normalsVertexPath.GetPoint (i) + normalsVertexPath.GetNormal (i) * globalDisplaySettings.normalsLength; + } + Handles.DrawLines (normalLines); + } + } + + if (data.displayAnchorPoints) { + for (int i = 0; i < bezierPath.NumPoints; i += 3) { + DrawHandle (i); + } + } + if (displayControlPoints) { + for (int i = 1; i < bezierPath.NumPoints - 1; i += 3) { + DrawHandle (i); + DrawHandle (i + 1); + } + } + } + + void DrawHandle (int i) { + Vector3 handlePosition = MathUtility.TransformPoint (bezierPath[i], creator.transform, bezierPath.Space); + + float anchorHandleSize = GetHandleDiameter (globalDisplaySettings.anchorSize * data.bezierHandleScale, bezierPath[i]); + float controlHandleSize = GetHandleDiameter (globalDisplaySettings.controlSize * data.bezierHandleScale, bezierPath[i]); + + bool isAnchorPoint = i % 3 == 0; + bool isInteractive = isAnchorPoint || bezierPath.ControlPointMode != BezierPath.ControlMode.Automatic; + float handleSize = (isAnchorPoint) ? anchorHandleSize : controlHandleSize; + bool doTransformHandle = i == handleIndexToDisplayAsTransform; + + PathHandle.HandleColours handleColours = (isAnchorPoint) ? splineAnchorColours : splineControlColours; + if (i == handleIndexToDisplayAsTransform) { + handleColours.defaultColour = (isAnchorPoint) ? globalDisplaySettings.anchorSelected : globalDisplaySettings.controlSelected; + } + var cap = capFunctions[(isAnchorPoint) ? globalDisplaySettings.anchorShape : globalDisplaySettings.controlShape]; + PathHandle.HandleInputType handleInputType; + handlePosition = PathHandle.DrawHandle (handlePosition, bezierPath.Space, isInteractive, handleSize, cap, handleColours, out handleInputType, i); + + if (doTransformHandle) { + // Show normals rotate tool + if (data.showNormals && Tools.current == Tool.Rotate && isAnchorPoint && bezierPath.Space == PathSpace.xyz) { + Handles.color = handlesStartCol; + + int attachedControlIndex = (i == bezierPath.NumPoints - 1) ? i - 1 : i + 1; + Vector3 dir = (bezierPath[attachedControlIndex] - handlePosition).normalized; + float handleRotOffset = (360 + bezierPath.GlobalNormalsAngle) % 360; + anchorAngleHandle.radius = handleSize * 3; + anchorAngleHandle.angle = handleRotOffset + bezierPath.GetAnchorNormalAngle (i / 3); + Vector3 handleDirection = Vector3.Cross (dir, Vector3.up); + Matrix4x4 handleMatrix = Matrix4x4.TRS ( + handlePosition, + Quaternion.LookRotation (handleDirection, dir), + Vector3.one + ); + + using (new Handles.DrawingScope (handleMatrix)) { + // draw the handle + EditorGUI.BeginChangeCheck (); + anchorAngleHandle.DrawHandle (); + if (EditorGUI.EndChangeCheck ()) { + Undo.RecordObject (creator, "Set angle"); + bezierPath.SetAnchorNormalAngle (i / 3, anchorAngleHandle.angle - handleRotOffset); + } + } + + } else { + handlePosition = Handles.DoPositionHandle (handlePosition, Quaternion.identity); + } + + } + + switch (handleInputType) { + case PathHandle.HandleInputType.LMBDrag: + draggingHandleIndex = i; + handleIndexToDisplayAsTransform = -1; + Repaint (); + break; + case PathHandle.HandleInputType.LMBRelease: + draggingHandleIndex = -1; + handleIndexToDisplayAsTransform = -1; + Repaint (); + break; + case PathHandle.HandleInputType.LMBClick: + draggingHandleIndex = -1; + if (Event.current.shift) { + handleIndexToDisplayAsTransform = -1; // disable move tool if new point added + } else { + if (handleIndexToDisplayAsTransform == i) { + handleIndexToDisplayAsTransform = -1; // disable move tool if clicking on point under move tool + } else { + handleIndexToDisplayAsTransform = i; + } + } + Repaint (); + break; + case PathHandle.HandleInputType.LMBPress: + if (handleIndexToDisplayAsTransform != i) { + handleIndexToDisplayAsTransform = -1; + Repaint (); + } + break; + } + + Vector3 localHandlePosition = MathUtility.InverseTransformPoint (handlePosition, creator.transform, bezierPath.Space); + + if (bezierPath[i] != localHandlePosition) { + Undo.RecordObject (creator, "Move point"); + bezierPath.MovePoint (i, localHandlePosition); + + } + + } + + #endregion + + #region Internal methods + + void OnDisable () { + Tools.hidden = false; + } + + void OnEnable () { + creator = (PathCreator) target; + bool in2DEditorMode = EditorSettings.defaultBehaviorMode == EditorBehaviorMode.Mode2D; + creator.InitializeEditorData (in2DEditorMode); + + data.bezierCreated -= ResetState; + data.bezierCreated += ResetState; + Undo.undoRedoPerformed -= OnUndoRedo; + Undo.undoRedoPerformed += OnUndoRedo; + + LoadDisplaySettings (); + UpdateGlobalDisplaySettings (); + ResetState (); + SetTransformState (true); + } + + void SetTransformState (bool initialize = false) { + Transform t = creator.transform; + if (!initialize) { + if (transformPos != t.position || t.localScale != transformScale || t.rotation != transformRot) { + data.PathTransformed (); + } + } + transformPos = t.position; + transformScale = t.localScale; + transformRot = t.rotation; + } + + void OnUndoRedo () { + hasUpdatedScreenSpaceLine = false; + hasUpdatedNormalsVertexPath = false; + selectedSegmentIndex = -1; + + Repaint (); + } + + void TabChanged () { + SceneView.RepaintAll (); + RepaintUnfocusedSceneViews (); + } + + void LoadDisplaySettings () { + globalDisplaySettings = GlobalDisplaySettings.Load (); + + capFunctions = new Dictionary (); + capFunctions.Add (GlobalDisplaySettings.HandleType.Circle, Handles.CylinderHandleCap); + capFunctions.Add (GlobalDisplaySettings.HandleType.Sphere, Handles.SphereHandleCap); + capFunctions.Add (GlobalDisplaySettings.HandleType.Square, Handles.CubeHandleCap); + } + + void UpdateGlobalDisplaySettings () { + var gds = globalDisplaySettings; + splineAnchorColours = new PathHandle.HandleColours (gds.anchor, gds.anchorHighlighted, gds.anchorSelected, gds.handleDisabled); + splineControlColours = new PathHandle.HandleColours (gds.control, gds.controlHighlighted, gds.controlSelected, gds.handleDisabled); + + anchorAngleHandle.fillColor = new Color (1, 1, 1, .05f); + anchorAngleHandle.wireframeColor = Color.grey; + anchorAngleHandle.radiusHandleColor = Color.clear; + anchorAngleHandle.angleHandleColor = Color.white; + } + + void ResetState () { + selectedSegmentIndex = -1; + draggingHandleIndex = -1; + mouseOverHandleIndex = -1; + handleIndexToDisplayAsTransform = -1; + hasUpdatedScreenSpaceLine = false; + hasUpdatedNormalsVertexPath = false; + + bezierPath.OnModified -= OnPathModifed; + bezierPath.OnModified += OnPathModifed; + + SceneView.RepaintAll (); + EditorApplication.QueuePlayerLoopUpdate (); + } + + void OnPathModifed () { + hasUpdatedScreenSpaceLine = false; + hasUpdatedNormalsVertexPath = false; + + RepaintUnfocusedSceneViews (); + } + + void RepaintUnfocusedSceneViews () { + // If multiple scene views are open, repaint those which do not have focus. + if (SceneView.sceneViews.Count > 1) { + foreach (SceneView sv in SceneView.sceneViews) { + if (EditorWindow.focusedWindow != (EditorWindow) sv) { + sv.Repaint (); + } + } + } + } + + void UpdatePathMouseInfo () { + + if (!hasUpdatedScreenSpaceLine || (screenSpaceLine != null && screenSpaceLine.TransformIsOutOfDate ())) { + screenSpaceLine = new ScreenSpacePolyLine (bezierPath, creator.transform, screenPolylineMaxAngleError, screenPolylineMinVertexDst); + hasUpdatedScreenSpaceLine = true; + } + pathMouseInfo = screenSpaceLine.CalculateMouseInfo (); + } + + float GetHandleDiameter (float diameter, Vector3 handlePosition) { + float scaledDiameter = diameter * constantHandleScale; + if (data.keepConstantHandleSize) { + scaledDiameter *= HandleUtility.GetHandleSize (handlePosition) * 2.5f; + } + return scaledDiameter; + } + + BezierPath bezierPath { + get { + return data.bezierPath; + } + } + + PathCreatorData data { + get { + return creator.EditorData; + } + } + + bool editingNormals { + get { + return Tools.current == Tool.Rotate && handleIndexToDisplayAsTransform % 3 == 0 && bezierPath.Space == PathSpace.xyz; + } + } + + #endregion + + } + +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Editor/PathEditor.cs.meta b/game/Assets/PathCreator/Core/Editor/PathEditor.cs.meta new file mode 100644 index 0000000..40e26f1 --- /dev/null +++ b/game/Assets/PathCreator/Core/Editor/PathEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 45d81a20743ff42a3b0dfbd499d4797e +timeCreated: 1516864234 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime.meta b/game/Assets/PathCreator/Core/Runtime.meta new file mode 100644 index 0000000..3756548 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c62dae0f992c5174a951248617cc5720 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Objects.meta b/game/Assets/PathCreator/Core/Runtime/Objects.meta new file mode 100644 index 0000000..be235b4 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b76edb14a39ed944b9c906e5f1d3aaa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/BezierPath.cs b/game/Assets/PathCreator/Core/Runtime/Objects/BezierPath.cs new file mode 100644 index 0000000..a3912b2 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/BezierPath.cs @@ -0,0 +1,678 @@ +using System.Collections.Generic; +using System.Linq; +using PathCreation.Utility; +using UnityEngine; + +namespace PathCreation { + /// A bezier path is a path made by stitching together any number of (cubic) bezier curves. + /// A single cubic bezier curve is defined by 4 points: anchor1, control1, control2, anchor2 + /// The curve moves between the 2 anchors, and the shape of the curve is affected by the positions of the 2 control points + + /// When two curves are stitched together, they share an anchor point (end anchor of curve 1 = start anchor of curve 2). + /// So while one curve alone consists of 4 points, two curves are defined by 7 unique points. + + /// Apart from storing the points, this class also provides methods for working with the path. + /// For example, adding, inserting, and deleting points. + + [System.Serializable] + public class BezierPath { + public event System.Action OnModified; + public enum ControlMode { Aligned, Mirrored, Free, Automatic }; + + #region Fields + + [SerializeField, HideInInspector] + List points; + [SerializeField, HideInInspector] + bool isClosed; + [SerializeField, HideInInspector] + PathSpace space; + [SerializeField, HideInInspector] + ControlMode controlMode; + [SerializeField, HideInInspector] + float autoControlLength = .3f; + [SerializeField, HideInInspector] + bool boundsUpToDate; + [SerializeField, HideInInspector] + Bounds bounds; + + // Normals settings + [SerializeField, HideInInspector] + List perAnchorNormalsAngle; + [SerializeField, HideInInspector] + float globalNormalsAngle; + [SerializeField, HideInInspector] + bool flipNormals; + + #endregion + + #region Constructors + + /// Creates a two-anchor path centred around the given centre point + /// Should the end point connect back to the start point? + /// Determines if the path is in 3d space, or clamped to the xy/xz plane + public BezierPath (Vector3 centre, bool isClosed = false, PathSpace space = PathSpace.xyz) { + + Vector3 dir = (space == PathSpace.xz) ? Vector3.forward : Vector3.up; + float width = 2; + float controlHeight = .5f; + float controlWidth = 1f; + points = new List { + centre + Vector3.left * width, + centre + Vector3.left * controlWidth + dir * controlHeight, + centre + Vector3.right * controlWidth - dir * controlHeight, + centre + Vector3.right * width + }; + + perAnchorNormalsAngle = new List () { 0, 0 }; + + Space = space; + IsClosed = isClosed; + } + + /// Creates a path from the supplied 3D points + /// List or array of points to create the path from. + /// Should the end point connect back to the start point? + /// Determines if the path is in 3d space, or clamped to the xy/xz plane + public BezierPath (IEnumerable points, bool isClosed = false, PathSpace space = PathSpace.xyz) { + Vector3[] pointsArray = points.ToArray (); + + if (pointsArray.Length < 2) { + Debug.LogError ("Path requires at least 2 anchor points."); + } else { + controlMode = ControlMode.Automatic; + this.points = new List { pointsArray[0], Vector3.zero, Vector3.zero, pointsArray[1] }; + perAnchorNormalsAngle = new List (new float[] { 0, 0 }); + + for (int i = 2; i < pointsArray.Length; i++) { + AddSegmentToEnd (pointsArray[i]); + perAnchorNormalsAngle.Add (0); + } + } + + this.Space = space; + this.IsClosed = isClosed; + } + + /// Creates a path from the positions of the supplied 2D points + /// List or array of transforms to create the path from. + /// Should the end point connect back to the start point? + /// Determines if the path is in 3d space, or clamped to the xy/xz plane + public BezierPath (IEnumerable transforms, bool isClosed = false, PathSpace space = PathSpace.xy): + this (transforms.Select (p => new Vector3 (p.x, p.y)), isClosed, space) { } + + /// Creates a path from the positions of the supplied transforms + /// List or array of transforms to create the path from. + /// Should the end point connect back to the start point? + /// Determines if the path is in 3d space, or clamped to the xy/xz plane + public BezierPath (IEnumerable transforms, bool isClosed = false, PathSpace space = PathSpace.xy): + this (transforms.Select (t => t.position), isClosed, space) { } + + /// Creates a path from the supplied 2D points + /// List or array of 2d points to create the path from. + /// Should the end point connect back to the start point? + /// Determines if the path is in 3d space, or clamped to the xy/xz plane + public BezierPath (IEnumerable points, PathSpace space = PathSpace.xyz, bool isClosed = false): + this (points.Select (p => new Vector3 (p.x, p.y)), isClosed, space) { } + + #endregion + + #region Public methods and accessors + + /// Get world space position of point + public Vector3 this [int i] { + get { + return GetPoint (i); + } + } + + /// Get world space position of point + public Vector3 GetPoint (int i) { + return points[i]; + } + + /// Get world space position of point + public void SetPoint (int i, Vector3 localPosition, bool suppressPathModifiedEvent = false) { + points[i] = localPosition; + if (!suppressPathModifiedEvent) { + NotifyPathModified(); + } + } + + /// Total number of points in the path (anchors and controls) + public int NumPoints { + get { + return points.Count; + } + } + + /// Number of anchor points making up the path + public int NumAnchorPoints { + get { + return (IsClosed) ? points.Count / 3 : (points.Count + 2) / 3; + } + } + + /// Number of bezier curves making up this path + public int NumSegments { + get { + return points.Count / 3; + } + } + + /// Path can exist in 3D (xyz), 2D (xy), or Top-Down (xz) space + /// In xy or xz space, points will be clamped to that plane (so in a 2D path, for example, points will always be at 0 on z axis) + public PathSpace Space { + get { + return space; + } + set { + if (value != space) { + PathSpace previousSpace = space; + space = value; + UpdateToNewPathSpace (previousSpace); + } + } + } + + /// If closed, path will loop back from end point to start point + public bool IsClosed { + get { + return isClosed; + } + set { + if (isClosed != value) { + isClosed = value; + UpdateClosedState (); + } + } + } + + /// The control mode determines the behaviour of control points. + /// Possible modes are: + /// Aligned = controls stay in straight line around their anchor + /// Mirrored = controls stay in straight, equidistant line around their anchor + /// Free = no constraints (use this if sharp corners are needed) + /// Automatic = controls placed automatically to try make the path smooth + public ControlMode ControlPointMode { + get { + return controlMode; + } + set { + if (controlMode != value) { + controlMode = value; + if (controlMode == ControlMode.Automatic) { + AutoSetAllControlPoints (); + NotifyPathModified (); + } + } + } + } + + /// When using automatic control point placement, this value scales how far apart controls are placed + public float AutoControlLength { + get { + return autoControlLength; + } + set { + value = Mathf.Max (value, .01f); + if (autoControlLength != value) { + autoControlLength = value; + AutoSetAllControlPoints (); + NotifyPathModified (); + } + } + } + + /// Add new anchor point to end of the path + public void AddSegmentToEnd (Vector3 anchorPos) { + if (isClosed) { + return; + } + + int lastAnchorIndex = points.Count - 1; + // Set position for new control to be mirror of its counterpart + Vector3 secondControlForOldLastAnchorOffset = (points[lastAnchorIndex] - points[lastAnchorIndex - 1]); + if (controlMode != ControlMode.Mirrored && controlMode != ControlMode.Automatic) { + // Set position for new control to be aligned with its counterpart, but with a length of half the distance from prev to new anchor + float dstPrevToNewAnchor = (points[lastAnchorIndex] - anchorPos).magnitude; + secondControlForOldLastAnchorOffset = (points[lastAnchorIndex] - points[lastAnchorIndex - 1]).normalized * dstPrevToNewAnchor * .5f; + } + Vector3 secondControlForOldLastAnchor = points[lastAnchorIndex] + secondControlForOldLastAnchorOffset; + Vector3 controlForNewAnchor = (anchorPos + secondControlForOldLastAnchor) * .5f; + + points.Add (secondControlForOldLastAnchor); + points.Add (controlForNewAnchor); + points.Add (anchorPos); + perAnchorNormalsAngle.Add (perAnchorNormalsAngle[perAnchorNormalsAngle.Count - 1]); + + if (controlMode == ControlMode.Automatic) { + AutoSetAllAffectedControlPoints (points.Count - 1); + } + + NotifyPathModified (); + } + + /// Add new anchor point to start of the path + public void AddSegmentToStart (Vector3 anchorPos) { + if (isClosed) { + return; + } + + // Set position for new control to be mirror of its counterpart + Vector3 secondControlForOldFirstAnchorOffset = (points[0] - points[1]); + if (controlMode != ControlMode.Mirrored && controlMode != ControlMode.Automatic) { + // Set position for new control to be aligned with its counterpart, but with a length of half the distance from prev to new anchor + float dstPrevToNewAnchor = (points[0] - anchorPos).magnitude; + secondControlForOldFirstAnchorOffset = secondControlForOldFirstAnchorOffset.normalized * dstPrevToNewAnchor * .5f; + } + + Vector3 secondControlForOldFirstAnchor = points[0] + secondControlForOldFirstAnchorOffset; + Vector3 controlForNewAnchor = (anchorPos + secondControlForOldFirstAnchor) * .5f; + points.Insert (0, anchorPos); + points.Insert (1, controlForNewAnchor); + points.Insert (2, secondControlForOldFirstAnchor); + perAnchorNormalsAngle.Insert (0, perAnchorNormalsAngle[0]); + + if (controlMode == ControlMode.Automatic) { + AutoSetAllAffectedControlPoints (0); + } + NotifyPathModified (); + } + + /// Insert new anchor point at given position. Automatically place control points around it so as to keep shape of curve the same + public void SplitSegment (Vector3 anchorPos, int segmentIndex, float splitTime) { + splitTime = Mathf.Clamp01 (splitTime); + + if (controlMode == ControlMode.Automatic) { + points.InsertRange (segmentIndex * 3 + 2, new Vector3[] { Vector3.zero, anchorPos, Vector3.zero }); + AutoSetAllAffectedControlPoints (segmentIndex * 3 + 3); + } else { + // Split the curve to find where control points can be inserted to least affect shape of curve + // Curve will probably be deformed slightly since splitTime is only an estimate (for performance reasons, and so doesn't correspond exactly with anchorPos) + Vector3[][] splitSegment = CubicBezierUtility.SplitCurve (GetPointsInSegment (segmentIndex), splitTime); + points.InsertRange (segmentIndex * 3 + 2, new Vector3[] { splitSegment[0][2], splitSegment[1][0], splitSegment[1][1] }); + int newAnchorIndex = segmentIndex * 3 + 3; + MovePoint (newAnchorIndex - 2, splitSegment[0][1], true); + MovePoint (newAnchorIndex + 2, splitSegment[1][2], true); + MovePoint (newAnchorIndex, anchorPos, true); + + if (controlMode == ControlMode.Mirrored) { + float avgDst = ((splitSegment[0][2] - anchorPos).magnitude + (splitSegment[1][1] - anchorPos).magnitude) / 2; + MovePoint (newAnchorIndex + 1, anchorPos + (splitSegment[1][1] - anchorPos).normalized * avgDst, true); + } + } + + // Insert angle for new anchor (value should be set inbetween neighbour anchor angles) + int newAnchorAngleIndex = (segmentIndex + 1) % perAnchorNormalsAngle.Count; + int numAngles = perAnchorNormalsAngle.Count; + float anglePrev = perAnchorNormalsAngle[segmentIndex]; + float angleNext = perAnchorNormalsAngle[newAnchorAngleIndex]; + float splitAngle = Mathf.LerpAngle (anglePrev, angleNext, splitTime); + perAnchorNormalsAngle.Insert (newAnchorAngleIndex, splitAngle); + + NotifyPathModified (); + } + + /// Delete the anchor point at given index, as well as its associated control points + public void DeleteSegment (int anchorIndex) { + // Don't delete segment if its the last one remaining (or if only two segments in a closed path) + if (NumSegments > 2 || !isClosed && NumSegments > 1) { + if (anchorIndex == 0) { + if (isClosed) { + points[points.Count - 1] = points[2]; + } + points.RemoveRange (0, 3); + } else if (anchorIndex == points.Count - 1 && !isClosed) { + points.RemoveRange (anchorIndex - 2, 3); + } else { + points.RemoveRange (anchorIndex - 1, 3); + } + + perAnchorNormalsAngle.RemoveAt (anchorIndex / 3); + + if (controlMode == ControlMode.Automatic) { + AutoSetAllControlPoints (); + } + + NotifyPathModified (); + } + } + + /// Returns an array of the 4 points making up the segment (anchor1, control1, control2, anchor2) + public Vector3[] GetPointsInSegment (int segmentIndex) { + segmentIndex = Mathf.Clamp (segmentIndex, 0, NumSegments - 1); + return new Vector3[] { this [segmentIndex * 3], this [segmentIndex * 3 + 1], this [segmentIndex * 3 + 2], this [LoopIndex (segmentIndex * 3 + 3)] }; + } + + /// Move an existing point to a new position + public void MovePoint (int i, Vector3 pointPos, bool suppressPathModifiedEvent = false) { + + if (space == PathSpace.xy) { + pointPos.z = 0; + } else if (space == PathSpace.xz) { + pointPos.y = 0; + } + Vector3 deltaMove = pointPos - points[i]; + bool isAnchorPoint = i % 3 == 0; + + // Don't process control point if control mode is set to automatic + if (isAnchorPoint || controlMode != ControlMode.Automatic) { + points[i] = pointPos; + + if (controlMode == ControlMode.Automatic) { + AutoSetAllAffectedControlPoints (i); + } else { + // Move control points with anchor point + if (isAnchorPoint) { + if (i + 1 < points.Count || isClosed) { + points[LoopIndex (i + 1)] += deltaMove; + } + if (i - 1 >= 0 || isClosed) { + points[LoopIndex (i - 1)] += deltaMove; + } + } + // If not in free control mode, then move attached control point to be aligned/mirrored (depending on mode) + else if (controlMode != ControlMode.Free) { + bool nextPointIsAnchor = (i + 1) % 3 == 0; + int attachedControlIndex = (nextPointIsAnchor) ? i + 2 : i - 2; + int anchorIndex = (nextPointIsAnchor) ? i + 1 : i - 1; + + if (attachedControlIndex >= 0 && attachedControlIndex < points.Count || isClosed) { + float distanceFromAnchor = 0; + // If in aligned mode, then attached control's current distance from anchor point should be maintained + if (controlMode == ControlMode.Aligned) { + distanceFromAnchor = (points[LoopIndex (anchorIndex)] - points[LoopIndex (attachedControlIndex)]).magnitude; + } + // If in mirrored mode, then both control points should have the same distance from the anchor point + else if (controlMode == ControlMode.Mirrored) { + distanceFromAnchor = (points[LoopIndex (anchorIndex)] - points[i]).magnitude; + + } + Vector3 dir = (points[LoopIndex (anchorIndex)] - pointPos).normalized; + points[LoopIndex (attachedControlIndex)] = points[LoopIndex (anchorIndex)] + dir * distanceFromAnchor; + } + } + } + + if (!suppressPathModifiedEvent) { + NotifyPathModified (); + } + } + } + + /// Update the bounding box of the path + public Bounds CalculateBoundsWithTransform (Transform transform) { + // Loop through all segments and keep track of the minmax points of all their bounding boxes + MinMax3D minMax = new MinMax3D (); + + for (int i = 0; i < NumSegments; i++) { + Vector3[] p = GetPointsInSegment (i); + for (int j = 0; j < p.Length; j++) { + p[j] = MathUtility.TransformPoint (p[j], transform, space); + } + + minMax.AddValue (p[0]); + minMax.AddValue (p[3]); + + List extremePointTimes = CubicBezierUtility.ExtremePointTimes (p[0], p[1], p[2], p[3]); + foreach (float t in extremePointTimes) { + minMax.AddValue (CubicBezierUtility.EvaluateCurve (p, t)); + } + } + + return new Bounds ((minMax.Min + minMax.Max) / 2, minMax.Max - minMax.Min); + } + + /// Flip the normal vectors 180 degrees + public bool FlipNormals { + get { + return flipNormals; + } + set { + if (flipNormals != value) { + flipNormals = value; + NotifyPathModified (); + } + } + } + + /// Global angle that all normal vectors are rotated by (only relevant for paths in 3D space) + public float GlobalNormalsAngle { + get { + return globalNormalsAngle; + } + set { + if (value != globalNormalsAngle) { + globalNormalsAngle = value; + NotifyPathModified (); + } + } + } + + /// Get the desired angle of the normal vector at a particular anchor (only relevant for paths in 3D space) + public float GetAnchorNormalAngle (int anchorIndex) { + return perAnchorNormalsAngle[anchorIndex] % 360; + } + + /// Set the desired angle of the normal vector at a particular anchor (only relevant for paths in 3D space) + public void SetAnchorNormalAngle (int anchorIndex, float angle) { + angle = (angle + 360) % 360; + if (perAnchorNormalsAngle[anchorIndex] != angle) { + perAnchorNormalsAngle[anchorIndex] = angle; + NotifyPathModified (); + } + } + + /// Reset global and anchor normal angles to 0 + public void ResetNormalAngles () { + for (int i = 0; i < perAnchorNormalsAngle.Count; i++) { + perAnchorNormalsAngle[i] = 0; + } + globalNormalsAngle = 0; + NotifyPathModified (); + } + + /// Bounding box containing the path + public Bounds PathBounds { + get { + if (!boundsUpToDate) { + UpdateBounds (); + } + return bounds; + } + } + + #endregion + + #region Internal methods and accessors + + /// Update the bounding box of the path + void UpdateBounds () { + if (boundsUpToDate) { + return; + } + + // Loop through all segments and keep track of the minmax points of all their bounding boxes + MinMax3D minMax = new MinMax3D (); + + for (int i = 0; i < NumSegments; i++) { + Vector3[] p = GetPointsInSegment (i); + minMax.AddValue (p[0]); + minMax.AddValue (p[3]); + + List extremePointTimes = CubicBezierUtility.ExtremePointTimes (p[0], p[1], p[2], p[3]); + foreach (float t in extremePointTimes) { + minMax.AddValue (CubicBezierUtility.EvaluateCurve (p, t)); + } + } + + boundsUpToDate = true; + bounds = new Bounds ((minMax.Min + minMax.Max) / 2, minMax.Max - minMax.Min); + } + + /// Determines good positions (for a smooth path) for the control points affected by a moved/inserted anchor point + void AutoSetAllAffectedControlPoints (int updatedAnchorIndex) { + for (int i = updatedAnchorIndex - 3; i <= updatedAnchorIndex + 3; i += 3) { + if (i >= 0 && i < points.Count || isClosed) { + AutoSetAnchorControlPoints (LoopIndex (i)); + } + } + + AutoSetStartAndEndControls (); + } + + /// Determines good positions (for a smooth path) for all control points + void AutoSetAllControlPoints () { + if (NumAnchorPoints > 2) { + for (int i = 0; i < points.Count; i += 3) { + AutoSetAnchorControlPoints (i); + } + } + + AutoSetStartAndEndControls (); + } + + /// Calculates good positions (to result in smooth path) for the controls around specified anchor + void AutoSetAnchorControlPoints (int anchorIndex) { + // Calculate a vector that is perpendicular to the vector bisecting the angle between this anchor and its two immediate neighbours + // The control points will be placed along that vector + Vector3 anchorPos = points[anchorIndex]; + Vector3 dir = Vector3.zero; + float[] neighbourDistances = new float[2]; + + if (anchorIndex - 3 >= 0 || isClosed) { + Vector3 offset = points[LoopIndex (anchorIndex - 3)] - anchorPos; + dir += offset.normalized; + neighbourDistances[0] = offset.magnitude; + } + if (anchorIndex + 3 >= 0 || isClosed) { + Vector3 offset = points[LoopIndex (anchorIndex + 3)] - anchorPos; + dir -= offset.normalized; + neighbourDistances[1] = -offset.magnitude; + } + + dir.Normalize (); + + // Set the control points along the calculated direction, with a distance proportional to the distance to the neighbouring control point + for (int i = 0; i < 2; i++) { + int controlIndex = anchorIndex + i * 2 - 1; + if (controlIndex >= 0 && controlIndex < points.Count || isClosed) { + points[LoopIndex (controlIndex)] = anchorPos + dir * neighbourDistances[i] * autoControlLength; + } + } + } + + /// Determines good positions (for a smooth path) for the control points at the start and end of a path + void AutoSetStartAndEndControls () { + if (isClosed) { + // Handle case with only 2 anchor points separately, as will otherwise result in straight line () + if (NumAnchorPoints == 2) { + Vector3 dirAnchorAToB = (points[3] - points[0]).normalized; + float dstBetweenAnchors = (points[0] - points[3]).magnitude; + Vector3 perp = Vector3.Cross (dirAnchorAToB, (space == PathSpace.xy) ? Vector3.forward : Vector3.up); + points[1] = points[0] + perp * dstBetweenAnchors / 2f; + points[5] = points[0] - perp * dstBetweenAnchors / 2f; + points[2] = points[3] + perp * dstBetweenAnchors / 2f; + points[4] = points[3] - perp * dstBetweenAnchors / 2f; + + } else { + AutoSetAnchorControlPoints (0); + AutoSetAnchorControlPoints (points.Count - 3); + } + } else { + // Handle case with 2 anchor points separately, as otherwise minor adjustments cause path to constantly flip + if (NumAnchorPoints == 2) { + points[1] = points[0] + (points[3] - points[0]) * .25f; + points[2] = points[3] + (points[0] - points[3]) * .25f; + } else { + points[1] = (points[0] + points[2]) * .5f; + points[points.Count - 2] = (points[points.Count - 1] + points[points.Count - 3]) * .5f; + } + } + } + + /// Update point positions for new path space + /// (for example, if changing from xy to xz path, y and z axes will be swapped so the path keeps its shape in the new space) + void UpdateToNewPathSpace (PathSpace previousSpace) { + // If changing from 3d to 2d space, first find the bounds of the 3d path. + // The axis with the smallest bounds will be discarded. + if (previousSpace == PathSpace.xyz) { + Vector3 boundsSize = PathBounds.size; + float minBoundsSize = Mathf.Min (boundsSize.x, boundsSize.y, boundsSize.z); + + for (int i = 0; i < NumPoints; i++) { + if (space == PathSpace.xy) { + float x = (minBoundsSize == boundsSize.x) ? points[i].z : points[i].x; + float y = (minBoundsSize == boundsSize.y) ? points[i].z : points[i].y; + points[i] = new Vector3 (x, y, 0); + } else if (space == PathSpace.xz) { + float x = (minBoundsSize == boundsSize.x) ? points[i].y : points[i].x; + float z = (minBoundsSize == boundsSize.z) ? points[i].y : points[i].z; + points[i] = new Vector3 (x, 0, z); + } + } + } else { + // Nothing needs to change when going to 3d space + if (space != PathSpace.xyz) { + for (int i = 0; i < NumPoints; i++) { + // from xz to xy + if (space == PathSpace.xy) { + points[i] = new Vector3 (points[i].x, points[i].z, 0); + } + // from xy to xz + else if (space == PathSpace.xz) { + points[i] = new Vector3 (points[i].x, 0, points[i].y); + } + } + } + } + + NotifyPathModified (); + } + + /// Add/remove the extra 2 controls required for a closed path + void UpdateClosedState () { + if (isClosed) { + // Set positions for new controls to mirror their counterparts + Vector3 lastAnchorSecondControl = points[points.Count - 1] * 2 - points[points.Count - 2]; + Vector3 firstAnchorSecondControl = points[0] * 2 - points[1]; + if (controlMode != ControlMode.Mirrored && controlMode != ControlMode.Automatic) { + // Set positions for new controls to be aligned with their counterparts, but with a length of half the distance between start/end anchor + float dstBetweenStartAndEndAnchors = (points[points.Count - 1] - points[0]).magnitude; + lastAnchorSecondControl = points[points.Count - 1] + (points[points.Count - 1] - points[points.Count - 2]).normalized * dstBetweenStartAndEndAnchors * .5f; + firstAnchorSecondControl = points[0] + (points[0] - points[1]).normalized * dstBetweenStartAndEndAnchors * .5f; + } + points.Add (lastAnchorSecondControl); + points.Add (firstAnchorSecondControl); + } else { + points.RemoveRange (points.Count - 2, 2); + + } + + if (controlMode == ControlMode.Automatic) { + AutoSetStartAndEndControls (); + } + + if (OnModified != null) { + OnModified (); + } + } + + /// Loop index around to start/end of points array if out of bounds (useful when working with closed paths) + int LoopIndex (int i) { + return (i + points.Count) % points.Count; + } + + // Called when the path is modified + public void NotifyPathModified () { + boundsUpToDate = false; + if (OnModified != null) { + OnModified (); + } + } + + #endregion + + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/BezierPath.cs.meta b/game/Assets/PathCreator/Core/Runtime/Objects/BezierPath.cs.meta new file mode 100644 index 0000000..c1c193e --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/BezierPath.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 756209f371f304fb1920c53a8a25a5e2 +timeCreated: 1516786483 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/EndOfPathInstruction.cs b/game/Assets/PathCreator/Core/Runtime/Objects/EndOfPathInstruction.cs new file mode 100644 index 0000000..697e361 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/EndOfPathInstruction.cs @@ -0,0 +1,3 @@ +namespace PathCreation { + public enum EndOfPathInstruction {Loop, Reverse, Stop}; +} diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/EndOfPathInstruction.cs.meta b/game/Assets/PathCreator/Core/Runtime/Objects/EndOfPathInstruction.cs.meta new file mode 100644 index 0000000..6f25bdf --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/EndOfPathInstruction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0d7fa70c03166e4180909b6e5d546c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/GlobalDisplaySettings.cs b/game/Assets/PathCreator/Core/Runtime/Objects/GlobalDisplaySettings.cs new file mode 100644 index 0000000..0d9254d --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/GlobalDisplaySettings.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace PathCreation +{ + //[CreateAssetMenu()] + public class GlobalDisplaySettings : ScriptableObject + { + + public enum HandleType { Sphere, Circle, Square }; + + [Header("Appearance")] + public float anchorSize = 10; + public float controlSize = 7f; + + [Tooltip("Should the path still be drawn when behind objects in the scene?")] + public bool visibleBehindObjects = true; + [Tooltip("Should the path be drawn even when the path object is not selected?")] + public bool visibleWhenNotSelected = true; + [Tooltip("If true, control points will be hidden when the control point mode is set to automatic. Otherwise they will inactive, but still visible.")] + public bool hideAutoControls = true; + public HandleType anchorShape; + public HandleType controlShape; + + + [Header("Anchor Colours")] + public Color anchor = new Color(0.95f, 0.25f, 0.25f, 0.85f); + public Color anchorHighlighted = new Color(1, 0.57f, 0.4f); + public Color anchorSelected = Color.white; + + [Header("Control Colours")] + public Color control = new Color(0.35f, 0.6f, 1, 0.85f); + public Color controlHighlighted = new Color(0.8f, 0.67f, 0.97f); + public Color controlSelected = Color.white; + public Color handleDisabled = new Color(1, 1, 1, 0.2f); + public Color controlLine = new Color(0, 0, 0, 0.35f); + + [Header("Bezier Path Colours")] + public Color bezierPath = Color.green; + public Color highlightedPath = new Color(1, 0.6f, 0); + public Color bounds = new Color(1, 1, 1, .4f); + public Color segmentBounds = new Color(1, 1, 1, .4f); + + [Header("Vertex Path Colours")] + public Color vertexPath = Color.white; + + [Header("Normals")] + public Color normals = Color.yellow; + [Range(0,1)] + public float normalsLength = .1f; + +#if UNITY_EDITOR + public static GlobalDisplaySettings Load() { + string[] guids = UnityEditor.AssetDatabase.FindAssets("t:GlobalDisplaySettings"); + if (guids.Length == 0) + { + Debug.LogWarning("Could not find DisplaySettings asset. Will use default settings instead."); + return ScriptableObject.CreateInstance(); + } + else + { + string path = UnityEditor.AssetDatabase.GUIDToAssetPath(guids[0]); + return UnityEditor.AssetDatabase.LoadAssetAtPath(path); + } + } +#endif + + } +} diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/GlobalDisplaySettings.cs.meta b/game/Assets/PathCreator/Core/Runtime/Objects/GlobalDisplaySettings.cs.meta new file mode 100644 index 0000000..cd66ac9 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/GlobalDisplaySettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46d5e8d803e252f4499b52e657f8e1a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/MinMax3D.cs b/game/Assets/PathCreator/Core/Runtime/Objects/MinMax3D.cs new file mode 100644 index 0000000..4229602 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/MinMax3D.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace PathCreation { + public class MinMax3D { + + public Vector3 Min { get; private set; } + public Vector3 Max { get; private set; } + + public MinMax3D() + { + Min = Vector3.one * float.MaxValue; + Max = Vector3.one * float.MinValue; + } + + public void AddValue(Vector3 v) + { + Min = new Vector3(Mathf.Min(Min.x, v.x), Mathf.Min(Min.y,v.y), Mathf.Min(Min.z,v.z)); + Max = new Vector3(Mathf.Max(Max.x, v.x), Mathf.Max(Max.y,v.y), Mathf.Max(Max.z,v.z)); + } + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/MinMax3D.cs.meta b/game/Assets/PathCreator/Core/Runtime/Objects/MinMax3D.cs.meta new file mode 100644 index 0000000..f96e783 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/MinMax3D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 194e1b7893dcbf940a71eb507d8b10f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/PathCreator.cs b/game/Assets/PathCreator/Core/Runtime/Objects/PathCreator.cs new file mode 100644 index 0000000..e8ecc19 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/PathCreator.cs @@ -0,0 +1,112 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathCreation { + public class PathCreator : MonoBehaviour { + + /// This class stores data for the path editor, and provides accessors to get the current vertex and bezier path. + /// Attach to a GameObject to create a new path editor. + + public event System.Action pathUpdated; + + [SerializeField, HideInInspector] + PathCreatorData editorData; + [SerializeField, HideInInspector] + bool initialized; + + GlobalDisplaySettings globalEditorDisplaySettings; + + // Vertex path created from the current bezier path + public VertexPath path { + get { + if (!initialized) { + InitializeEditorData (false); + } + return editorData.GetVertexPath(transform); + } + } + + // The bezier path created in the editor + public BezierPath bezierPath { + get { + if (!initialized) { + InitializeEditorData (false); + } + return editorData.bezierPath; + } + set { + if (!initialized) { + InitializeEditorData (false); + } + editorData.bezierPath = value; + } + } + + #region Internal methods + + /// Used by the path editor to initialise some data + public void InitializeEditorData (bool in2DMode) { + if (editorData == null) { + editorData = new PathCreatorData (); + } + editorData.bezierOrVertexPathModified -= TriggerPathUpdate; + editorData.bezierOrVertexPathModified += TriggerPathUpdate; + + editorData.Initialize (in2DMode); + initialized = true; + } + + public PathCreatorData EditorData { + get { + return editorData; + } + + } + + public void TriggerPathUpdate () { + if (pathUpdated != null) { + pathUpdated (); + } + } + +#if UNITY_EDITOR + + // Draw the path when path objected is not selected (if enabled in settings) + void OnDrawGizmos () { + + // Only draw path gizmo if the path object is not selected + // (editor script is resposible for drawing when selected) + GameObject selectedObj = UnityEditor.Selection.activeGameObject; + if (selectedObj != gameObject) { + + if (path != null) { + path.UpdateTransform (transform); + + if (globalEditorDisplaySettings == null) { + globalEditorDisplaySettings = GlobalDisplaySettings.Load (); + } + + if (globalEditorDisplaySettings.visibleWhenNotSelected) { + + Gizmos.color = globalEditorDisplaySettings.bezierPath; + + for (int i = 0; i < path.NumPoints; i++) { + int nextI = i + 1; + if (nextI >= path.NumPoints) { + if (path.isClosedLoop) { + nextI %= path.NumPoints; + } else { + break; + } + } + Gizmos.DrawLine (path.GetPoint (i), path.GetPoint (nextI)); + } + } + } + } + } +#endif + + #endregion + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/PathCreator.cs.meta b/game/Assets/PathCreator/Core/Runtime/Objects/PathCreator.cs.meta new file mode 100644 index 0000000..242d3f5 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/PathCreator.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8e5ac92bc18f545cc84cd886ece82b4d +timeCreated: 1516864223 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/PathCreatorData.cs b/game/Assets/PathCreator/Core/Runtime/Objects/PathCreatorData.cs new file mode 100644 index 0000000..8002be6 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/PathCreatorData.cs @@ -0,0 +1,136 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathCreation { + /// Stores state data for the path creator editor + + [System.Serializable] + public class PathCreatorData { + public event System.Action bezierOrVertexPathModified; + public event System.Action bezierCreated; + + [SerializeField] + BezierPath _bezierPath; + VertexPath _vertexPath; + + [SerializeField] + bool vertexPathUpToDate; + + // vertex path settings + public float vertexPathMaxAngleError = .3f; + public float vertexPathMinVertexSpacing = 0.01f; + + // bezier display settings + public bool showTransformTool = true; + public bool showPathBounds; + public bool showPerSegmentBounds; + public bool displayAnchorPoints = true; + public bool displayControlPoints = true; + public float bezierHandleScale = 1; + public bool globalDisplaySettingsFoldout; + public bool keepConstantHandleSize; + + // vertex display settings + public bool showNormalsInVertexMode; + public bool showBezierPathInVertexMode; + + // Editor display states + public bool showDisplayOptions; + public bool showPathOptions = true; + public bool showVertexPathDisplayOptions; + public bool showVertexPathOptions = true; + public bool showNormals; + public bool showNormalsHelpInfo; + public int tabIndex; + + public void Initialize (bool defaultIs2D) { + if (_bezierPath == null) { + CreateBezier (Vector3.zero, defaultIs2D); + } + vertexPathUpToDate = false; + _bezierPath.OnModified -= BezierPathEdited; + _bezierPath.OnModified += BezierPathEdited; + } + + public void ResetBezierPath (Vector3 centre, bool defaultIs2D = false) { + CreateBezier (centre, defaultIs2D); + } + + void CreateBezier (Vector3 centre, bool defaultIs2D = false) { + if (_bezierPath != null) { + _bezierPath.OnModified -= BezierPathEdited; + } + + var space = (defaultIs2D) ? PathSpace.xy : PathSpace.xyz; + _bezierPath = new BezierPath (centre, false, space); + + _bezierPath.OnModified += BezierPathEdited; + vertexPathUpToDate = false; + + if (bezierOrVertexPathModified != null) { + bezierOrVertexPathModified (); + } + if (bezierCreated != null) { + bezierCreated (); + } + } + + public BezierPath bezierPath { + get { + return _bezierPath; + } + set { + _bezierPath.OnModified -= BezierPathEdited; + vertexPathUpToDate = false; + _bezierPath = value; + _bezierPath.OnModified += BezierPathEdited; + + if (bezierOrVertexPathModified != null) { + bezierOrVertexPathModified (); + } + if (bezierCreated != null) { + bezierCreated (); + } + + } + } + + // Get the current vertex path + public VertexPath GetVertexPath (Transform transform) { + // create new vertex path if path was modified since this vertex path was created + if (!vertexPathUpToDate || _vertexPath == null) { + vertexPathUpToDate = true; + _vertexPath = new VertexPath (bezierPath, transform, vertexPathMaxAngleError, vertexPathMinVertexSpacing); + } + return _vertexPath; + } + + public void PathTransformed () { + if (bezierOrVertexPathModified != null) { + bezierOrVertexPathModified (); + } + } + + public void VertexPathSettingsChanged () { + vertexPathUpToDate = false; + if (bezierOrVertexPathModified != null) { + bezierOrVertexPathModified (); + } + } + + public void PathModifiedByUndo () { + vertexPathUpToDate = false; + if (bezierOrVertexPathModified != null) { + bezierOrVertexPathModified (); + } + } + + void BezierPathEdited () { + vertexPathUpToDate = false; + if (bezierOrVertexPathModified != null) { + bezierOrVertexPathModified (); + } + } + + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/PathCreatorData.cs.meta b/game/Assets/PathCreator/Core/Runtime/Objects/PathCreatorData.cs.meta new file mode 100644 index 0000000..b626c46 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/PathCreatorData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19547029ffb83484e90d00c182104817 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/PathSpace.cs b/game/Assets/PathCreator/Core/Runtime/Objects/PathSpace.cs new file mode 100644 index 0000000..8bb0052 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/PathSpace.cs @@ -0,0 +1,3 @@ +namespace PathCreation { + public enum PathSpace {xyz, xy, xz}; +} diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/PathSpace.cs.meta b/game/Assets/PathCreator/Core/Runtime/Objects/PathSpace.cs.meta new file mode 100644 index 0000000..2c89861 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/PathSpace.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 407af8f85a5bae449bce4730c5d97d1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/VertexPath.cs b/game/Assets/PathCreator/Core/Runtime/Objects/VertexPath.cs new file mode 100644 index 0000000..5fd6e6b --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/VertexPath.cs @@ -0,0 +1,345 @@ +using System.Collections.Generic; +using PathCreation.Utility; +using UnityEngine; + + +namespace PathCreation { + /// A vertex path is a collection of points (vertices) that lie along a bezier path. + /// This allows one to do things like move at a constant speed along the path, + /// which is not possible with a bezier path directly due to how they're constructed mathematically. + + /// This class also provides methods for getting the position along the path at a certain distance or time + /// (where time = 0 is the start of the path, and time = 1 is the end of the path). + /// Other info about the path (tangents, normals, rotation) can also be retrieved in this manner. + + public class VertexPath { + #region Fields + + public readonly PathSpace space; + public readonly bool isClosedLoop; + public readonly Vector3[] localPoints; + public readonly Vector3[] localTangents; + public readonly Vector3[] localNormals; + + /// Percentage along the path at each vertex (0 being start of path, and 1 being the end) + public readonly float[] times; + /// Total distance between the vertices of the polyline + public readonly float length; + /// Total distance from the first vertex up to each vertex in the polyline + public readonly float[] cumulativeLengthAtEachVertex; + /// Bounding box of the path + public readonly Bounds bounds; + /// Equal to (0,0,-1) for 2D paths, and (0,1,0) for XZ paths + public readonly Vector3 up; + + // Default values and constants: + const int accuracy = 10; // A scalar for how many times bezier path is divided when determining vertex positions + const float minVertexSpacing = .01f; + + Transform transform; + + #endregion + + #region Constructors + + /// Splits bezier path into array of vertices along the path. + ///How much can the angle of the path change before a vertex is added. This allows fewer vertices to be generated in straighter sections. + ///Vertices won't be added closer together than this distance, regardless of angle error. + public VertexPath (BezierPath bezierPath, Transform transform, float maxAngleError = 0.3f, float minVertexDst = 0): + this (bezierPath, VertexPathUtility.SplitBezierPathByAngleError (bezierPath, maxAngleError, minVertexDst, VertexPath.accuracy), transform) { } + + /// Splits bezier path into array of vertices along the path. + ///How much can the angle of the path change before a vertex is added. This allows fewer vertices to be generated in straighter sections. + ///Vertices won't be added closer together than this distance, regardless of angle error. + ///Higher value means the change in angle is checked more frequently. + public VertexPath (BezierPath bezierPath, Transform transform, float vertexSpacing): + this (bezierPath, VertexPathUtility.SplitBezierPathEvenly (bezierPath, Mathf.Max (vertexSpacing, minVertexSpacing), VertexPath.accuracy), transform) { } + + /// Internal contructor + VertexPath (BezierPath bezierPath, VertexPathUtility.PathSplitData pathSplitData, Transform transform) { + this.transform = transform; + space = bezierPath.Space; + isClosedLoop = bezierPath.IsClosed; + int numVerts = pathSplitData.vertices.Count; + length = pathSplitData.cumulativeLength[numVerts - 1]; + + localPoints = new Vector3[numVerts]; + localNormals = new Vector3[numVerts]; + localTangents = new Vector3[numVerts]; + cumulativeLengthAtEachVertex = new float[numVerts]; + times = new float[numVerts]; + bounds = new Bounds ((pathSplitData.minMax.Min + pathSplitData.minMax.Max) / 2, pathSplitData.minMax.Max - pathSplitData.minMax.Min); + + // Figure out up direction for path + up = (bounds.size.z > bounds.size.y) ? Vector3.up : -Vector3.forward; + Vector3 lastRotationAxis = up; + + // Loop through the data and assign to arrays. + for (int i = 0; i < localPoints.Length; i++) { + localPoints[i] = pathSplitData.vertices[i]; + localTangents[i] = pathSplitData.tangents[i]; + cumulativeLengthAtEachVertex[i] = pathSplitData.cumulativeLength[i]; + times[i] = cumulativeLengthAtEachVertex[i] / length; + + // Calculate normals + if (space == PathSpace.xyz) { + if (i == 0) { + localNormals[0] = Vector3.Cross (lastRotationAxis, pathSplitData.tangents[0]).normalized; + } else { + // First reflection + Vector3 offset = (localPoints[i] - localPoints[i - 1]); + float sqrDst = offset.sqrMagnitude; + Vector3 r = lastRotationAxis - offset * 2 / sqrDst * Vector3.Dot (offset, lastRotationAxis); + Vector3 t = localTangents[i - 1] - offset * 2 / sqrDst * Vector3.Dot (offset, localTangents[i - 1]); + + // Second reflection + Vector3 v2 = localTangents[i] - t; + float c2 = Vector3.Dot (v2, v2); + + Vector3 finalRot = r - v2 * 2 / c2 * Vector3.Dot (v2, r); + Vector3 n = Vector3.Cross (finalRot, localTangents[i]).normalized; + localNormals[i] = n; + lastRotationAxis = finalRot; + } + } else { + localNormals[i] = Vector3.Cross (localTangents[i], up) * ((bezierPath.FlipNormals) ? 1 : -1); + } + } + + // Apply correction for 3d normals along a closed path + if (space == PathSpace.xyz && isClosedLoop) { + // Get angle between first and last normal (if zero, they're already lined up, otherwise we need to correct) + float normalsAngleErrorAcrossJoin = Vector3.SignedAngle (localNormals[localNormals.Length - 1], localNormals[0], localTangents[0]); + // Gradually rotate the normals along the path to ensure start and end normals line up correctly + if (Mathf.Abs (normalsAngleErrorAcrossJoin) > 0.1f) // don't bother correcting if very nearly correct + { + for (int i = 1; i < localNormals.Length; i++) { + float t = (i / (localNormals.Length - 1f)); + float angle = normalsAngleErrorAcrossJoin * t; + Quaternion rot = Quaternion.AngleAxis (angle, localTangents[i]); + localNormals[i] = rot * localNormals[i] * ((bezierPath.FlipNormals) ? -1 : 1); + } + } + } + + // Rotate normals to match up with user-defined anchor angles + if (space == PathSpace.xyz) { + for (int anchorIndex = 0; anchorIndex < pathSplitData.anchorVertexMap.Count - 1; anchorIndex++) { + int nextAnchorIndex = (isClosedLoop) ? (anchorIndex + 1) % bezierPath.NumSegments : anchorIndex + 1; + + float startAngle = bezierPath.GetAnchorNormalAngle (anchorIndex) + bezierPath.GlobalNormalsAngle; + float endAngle = bezierPath.GetAnchorNormalAngle (nextAnchorIndex) + bezierPath.GlobalNormalsAngle; + float deltaAngle = Mathf.DeltaAngle (startAngle, endAngle); + + int startVertIndex = pathSplitData.anchorVertexMap[anchorIndex]; + int endVertIndex = pathSplitData.anchorVertexMap[anchorIndex + 1]; + + int num = endVertIndex - startVertIndex; + if (anchorIndex == pathSplitData.anchorVertexMap.Count - 2) { + num += 1; + } + for (int i = 0; i < num; i++) { + int vertIndex = startVertIndex + i; + float t = i / (num - 1f); + float angle = startAngle + deltaAngle * t; + Quaternion rot = Quaternion.AngleAxis (angle, localTangents[vertIndex]); + localNormals[vertIndex] = (rot * localNormals[vertIndex]) * ((bezierPath.FlipNormals) ? -1 : 1); + } + } + } + } + + #endregion + + #region Public methods and accessors + + public void UpdateTransform (Transform transform) { + this.transform = transform; + } + public int NumPoints { + get { + return localPoints.Length; + } + } + + public Vector3 GetTangent (int index) { + return MathUtility.TransformDirection (localTangents[index], transform, space); + } + + public Vector3 GetNormal (int index) { + return MathUtility.TransformDirection (localNormals[index], transform, space); + } + + public Vector3 GetPoint (int index) { + return MathUtility.TransformPoint (localPoints[index], transform, space); + } + + /// Gets point on path based on distance travelled. + public Vector3 GetPointAtDistance (float dst, EndOfPathInstruction endOfPathInstruction = EndOfPathInstruction.Loop) { + float t = dst / length; + return GetPointAtTime (t, endOfPathInstruction); + } + + /// Gets forward direction on path based on distance travelled. + public Vector3 GetDirectionAtDistance (float dst, EndOfPathInstruction endOfPathInstruction = EndOfPathInstruction.Loop) { + float t = dst / length; + return GetDirection (t, endOfPathInstruction); + } + + /// Gets normal vector on path based on distance travelled. + public Vector3 GetNormalAtDistance (float dst, EndOfPathInstruction endOfPathInstruction = EndOfPathInstruction.Loop) { + float t = dst / length; + return GetNormal (t, endOfPathInstruction); + } + + /// Gets a rotation that will orient an object in the direction of the path at this point, with local up point along the path's normal + public Quaternion GetRotationAtDistance (float dst, EndOfPathInstruction endOfPathInstruction = EndOfPathInstruction.Loop) { + float t = dst / length; + return GetRotation (t, endOfPathInstruction); + } + + /// Gets point on path based on 'time' (where 0 is start, and 1 is end of path). + public Vector3 GetPointAtTime (float t, EndOfPathInstruction endOfPathInstruction = EndOfPathInstruction.Loop) { + var data = CalculatePercentOnPathData (t, endOfPathInstruction); + return Vector3.Lerp (GetPoint (data.previousIndex), GetPoint (data.nextIndex), data.percentBetweenIndices); + } + + /// Gets forward direction on path based on 'time' (where 0 is start, and 1 is end of path). + public Vector3 GetDirection (float t, EndOfPathInstruction endOfPathInstruction = EndOfPathInstruction.Loop) { + var data = CalculatePercentOnPathData (t, endOfPathInstruction); + Vector3 dir = Vector3.Lerp (localTangents[data.previousIndex], localTangents[data.nextIndex], data.percentBetweenIndices); + return MathUtility.TransformDirection (dir, transform, space); + } + + /// Gets normal vector on path based on 'time' (where 0 is start, and 1 is end of path). + public Vector3 GetNormal (float t, EndOfPathInstruction endOfPathInstruction = EndOfPathInstruction.Loop) { + var data = CalculatePercentOnPathData (t, endOfPathInstruction); + Vector3 normal = Vector3.Lerp (localNormals[data.previousIndex], localNormals[data.nextIndex], data.percentBetweenIndices); + return MathUtility.TransformDirection (normal, transform, space); + } + + /// Gets a rotation that will orient an object in the direction of the path at this point, with local up point along the path's normal + public Quaternion GetRotation (float t, EndOfPathInstruction endOfPathInstruction = EndOfPathInstruction.Loop) { + var data = CalculatePercentOnPathData (t, endOfPathInstruction); + Vector3 direction = Vector3.Lerp (localTangents[data.previousIndex], localTangents[data.nextIndex], data.percentBetweenIndices); + Vector3 normal = Vector3.Lerp (localNormals[data.previousIndex], localNormals[data.nextIndex], data.percentBetweenIndices); + return Quaternion.LookRotation (MathUtility.TransformDirection (direction, transform, space), MathUtility.TransformDirection (normal, transform, space)); + } + + /// Finds the closest point on the path from any point in the world + public Vector3 GetClosestPointOnPath (Vector3 worldPoint) { + TimeOnPathData data = CalculateClosestPointOnPathData (worldPoint); + return Vector3.Lerp (GetPoint (data.previousIndex), GetPoint (data.nextIndex), data.percentBetweenIndices); + } + + /// Finds the 'time' (0=start of path, 1=end of path) along the path that is closest to the given point + public float GetClosestTimeOnPath (Vector3 worldPoint) { + TimeOnPathData data = CalculateClosestPointOnPathData (worldPoint); + return Mathf.Lerp (times[data.previousIndex], times[data.nextIndex], data.percentBetweenIndices); + } + + /// Finds the distance along the path that is closest to the given point + public float GetClosestDistanceAlongPath (Vector3 worldPoint) { + TimeOnPathData data = CalculateClosestPointOnPathData (worldPoint); + return Mathf.Lerp (cumulativeLengthAtEachVertex[data.previousIndex], cumulativeLengthAtEachVertex[data.nextIndex], data.percentBetweenIndices); + } + + #endregion + + #region Internal methods + + /// For a given value 't' between 0 and 1, calculate the indices of the two vertices before and after t. + /// Also calculate how far t is between those two vertices as a percentage between 0 and 1. + TimeOnPathData CalculatePercentOnPathData (float t, EndOfPathInstruction endOfPathInstruction) { + // Constrain t based on the end of path instruction + switch (endOfPathInstruction) { + case EndOfPathInstruction.Loop: + // If t is negative, make it the equivalent value between 0 and 1 + if (t < 0) { + t += Mathf.CeilToInt (Mathf.Abs (t)); + } + t %= 1; + break; + case EndOfPathInstruction.Reverse: + t = Mathf.PingPong (t, 1); + break; + case EndOfPathInstruction.Stop: + t = Mathf.Clamp01 (t); + break; + } + + int prevIndex = 0; + int nextIndex = NumPoints - 1; + int i = Mathf.RoundToInt (t * (NumPoints - 1)); // starting guess + + // Starts by looking at middle vertex and determines if t lies to the left or to the right of that vertex. + // Continues dividing in half until closest surrounding vertices have been found. + while (true) { + // t lies to left + if (t <= times[i]) { + nextIndex = i; + } + // t lies to right + else { + prevIndex = i; + } + i = (nextIndex + prevIndex) / 2; + + if (nextIndex - prevIndex <= 1) { + break; + } + } + + float abPercent = Mathf.InverseLerp (times[prevIndex], times[nextIndex], t); + return new TimeOnPathData (prevIndex, nextIndex, abPercent); + } + + /// Calculate time data for closest point on the path from given world point + TimeOnPathData CalculateClosestPointOnPathData (Vector3 worldPoint) { + float minSqrDst = float.MaxValue; + Vector3 closestPoint = Vector3.zero; + int closestSegmentIndexA = 0; + int closestSegmentIndexB = 0; + + for (int i = 0; i < localPoints.Length; i++) { + int nextI = i + 1; + if (nextI >= localPoints.Length) { + if (isClosedLoop) { + nextI %= localPoints.Length; + } else { + break; + } + } + + Vector3 closestPointOnSegment = MathUtility.ClosestPointOnLineSegment (worldPoint, GetPoint (i), GetPoint (nextI)); + float sqrDst = (worldPoint - closestPointOnSegment).sqrMagnitude; + if (sqrDst < minSqrDst) { + minSqrDst = sqrDst; + closestPoint = closestPointOnSegment; + closestSegmentIndexA = i; + closestSegmentIndexB = nextI; + } + + } + float closestSegmentLength = (GetPoint (closestSegmentIndexA) - GetPoint (closestSegmentIndexB)).magnitude; + float t = (closestPoint - GetPoint (closestSegmentIndexA)).magnitude / closestSegmentLength; + return new TimeOnPathData (closestSegmentIndexA, closestSegmentIndexB, t); + } + + public struct TimeOnPathData { + public readonly int previousIndex; + public readonly int nextIndex; + public readonly float percentBetweenIndices; + + public TimeOnPathData (int prev, int next, float percentBetweenIndices) { + this.previousIndex = prev; + this.nextIndex = next; + this.percentBetweenIndices = percentBetweenIndices; + } + } + + #endregion + + } + +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Runtime/Objects/VertexPath.cs.meta b/game/Assets/PathCreator/Core/Runtime/Objects/VertexPath.cs.meta new file mode 100644 index 0000000..b8cf388 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Objects/VertexPath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 223183313f20d4049a397d83fab3151e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/PathCreator.asmdef b/game/Assets/PathCreator/Core/Runtime/PathCreator.asmdef new file mode 100644 index 0000000..26c0dac --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/PathCreator.asmdef @@ -0,0 +1,3 @@ +{ + "name": "PathCreator" +} diff --git a/game/Assets/PathCreator/Core/Runtime/PathCreator.asmdef.meta b/game/Assets/PathCreator/Core/Runtime/PathCreator.asmdef.meta new file mode 100644 index 0000000..4b98d32 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/PathCreator.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 626070ea3273cb844a310aa4f53b31fa +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Utility.meta b/game/Assets/PathCreator/Core/Runtime/Utility.meta new file mode 100644 index 0000000..14dfdff --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Utility.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c55bdfe2cdafc04ba5f909d4f1f192b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Utility/CubicBezierUtility.cs b/game/Assets/PathCreator/Core/Runtime/Utility/CubicBezierUtility.cs new file mode 100644 index 0000000..ceded9f --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Utility/CubicBezierUtility.cs @@ -0,0 +1,136 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace PathCreation.Utility { + + /// Collection of functions related to cubic bezier curves + /// (a curve with a start and end 'anchor' point, and two 'control' points to define the shape of the curve between the anchors) + public static class CubicBezierUtility { + + /// Returns point at time 't' (between 0 and 1) along bezier curve defined by 4 points (anchor_1, control_1, control_2, anchor_2) + public static Vector3 EvaluateCurve (Vector3[] points, float t) { + return EvaluateCurve (points[0], points[1], points[2], points[3], t); + } + + /// Returns point at time 't' (between 0 and 1) along bezier curve defined by 4 points (anchor_1, control_1, control_2, anchor_2) + public static Vector3 EvaluateCurve (Vector3 a1, Vector3 c1, Vector3 c2, Vector3 a2, float t) { + t = Mathf.Clamp01 (t); + return (1 - t) * (1 - t) * (1 - t) * a1 + 3 * (1 - t) * (1 - t) * t * c1 + 3 * (1 - t) * t * t * c2 + t * t * t * a2; + } + + /// Returns a vector tangent to the point at time 't' + /// This is the vector tangent to the curve at that point + public static Vector3 EvaluateCurveDerivative (Vector3[] points, float t) { + return EvaluateCurveDerivative (points[0], points[1], points[2], points[3], t); + } + + /// Calculates the derivative of the curve at time 't' + /// This is the vector tangent to the curve at that point + public static Vector3 EvaluateCurveDerivative (Vector3 a1, Vector3 c1, Vector3 c2, Vector3 a2, float t) { + t = Mathf.Clamp01 (t); + return 3 * (1 - t) * (1 - t) * (c1 - a1) + 6 * (1 - t) * t * (c2 - c1) + 3 * t * t * (a2 - c2); + } + + /// Returns the second derivative of the curve at time 't' + public static Vector3 EvaluateCurveSecondDerivative (Vector3[] points, float t) { + return EvaluateCurveSecondDerivative (points[0], points[1], points[2], points[3], t); + } + + ///Returns the second derivative of the curve at time 't' + public static Vector3 EvaluateCurveSecondDerivative (Vector3 a1, Vector3 c1, Vector3 c2, Vector3 a2, float t) { + t = Mathf.Clamp01 (t); + return 6 * (1 - t) * (c2 - 2 * c1 + a1) + 6 * t * (a2 - 2 * c2 + c1); + } + + /// Calculates the normal vector (vector perpendicular to the curve) at specified time + public static Vector3 Normal (Vector3[] points, float t) { + return Normal (points[0], points[1], points[2], points[3], t); + } + + /// Calculates the normal vector (vector perpendicular to the curve) at specified time + public static Vector3 Normal (Vector3 a1, Vector3 c1, Vector3 c2, Vector3 a2, float t) { + Vector3 tangent = EvaluateCurveDerivative (a1, c1, c2, a2, t); + Vector3 nextTangent = EvaluateCurveSecondDerivative (a1, c1, c2, a2, t); + Vector3 c = Vector3.Cross (nextTangent, tangent); + return Vector3.Cross (c, tangent).normalized; + } + + public static Bounds CalculateSegmentBounds (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) { + MinMax3D minMax = new MinMax3D (); + minMax.AddValue (p0); + minMax.AddValue (p3); + + List extremePointTimes = ExtremePointTimes (p0,p1,p2,p3); + foreach (float t in extremePointTimes) { + minMax.AddValue (CubicBezierUtility.EvaluateCurve (p0, p1, p2, p3, t)); + } + + return new Bounds ((minMax.Min + minMax.Max) / 2, minMax.Max - minMax.Min); + } + + /// Splits curve into two curves at time t. Returns 2 arrays of 4 points. + public static Vector3[][] SplitCurve (Vector3[] points, float t) { + Vector3 a1 = Vector3.Lerp (points[0], points[1], t); + Vector3 a2 = Vector3.Lerp (points[1], points[2], t); + Vector3 a3 = Vector3.Lerp (points[2], points[3], t); + Vector3 b1 = Vector3.Lerp (a1, a2, t); + Vector3 b2 = Vector3.Lerp (a2, a3, t); + Vector3 pointOnCurve = Vector3.Lerp (b1, b2, t); + + return new Vector3[][] { + new Vector3[] { points[0], a1, b1, pointOnCurve }, + new Vector3[] { pointOnCurve, b2, a3, points[3] } + }; + } + + // Crude, but fast estimation of curve length. + public static float EstimateCurveLength (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) { + float controlNetLength = (p0 - p1).magnitude + (p1 - p2).magnitude + (p2 - p3).magnitude; + float estimatedCurveLength = (p0 - p3).magnitude + controlNetLength / 2f; + return estimatedCurveLength; + } + + /// Times of stationary points on curve (points where derivative is zero on any axis) + public static List ExtremePointTimes (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) { + // coefficients of derivative function + Vector3 a = 3 * (-p0 + 3 * p1 - 3 * p2 + p3); + Vector3 b = 6 * (p0 - 2 * p1 + p2); + Vector3 c = 3 * (p1 - p0); + + List times = new List (); + times.AddRange (StationaryPointTimes (a.x, b.x, c.x)); + times.AddRange (StationaryPointTimes (a.y, b.y, c.y)); + times.AddRange (StationaryPointTimes (a.z, b.z, c.z)); + return times; + } + + // Finds times of stationary points on curve defined by ax^2 + bx + c. + // Only times between 0 and 1 are considered as Bezier only uses values in that range + static IEnumerable StationaryPointTimes (float a, float b, float c) { + List times = new List (); + + // from quadratic equation: y = [-b +- sqrt(b^2 - 4ac)]/2a + if (a != 0) { + float discriminant = b * b - 4 * a * c; + if (discriminant >= 0) { + float s = Mathf.Sqrt (discriminant); + float t1 = (-b + s) / (2 * a); + if (t1 >= 0 && t1 <= 1) { + times.Add (t1); + } + + if (discriminant != 0) { + float t2 = (-b - s) / (2 * a); + + if (t2 >= 0 && t2 <= 1) { + times.Add (t2); + } + } + } + } + return times; + } + + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Runtime/Utility/CubicBezierUtility.cs.meta b/game/Assets/PathCreator/Core/Runtime/Utility/CubicBezierUtility.cs.meta new file mode 100644 index 0000000..ebf6cae --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Utility/CubicBezierUtility.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c66a6536bb2d641558729d6da1ec7594 +timeCreated: 1519565538 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Utility/MathUtility.cs b/game/Assets/PathCreator/Core/Runtime/Utility/MathUtility.cs new file mode 100644 index 0000000..af862ba --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Utility/MathUtility.cs @@ -0,0 +1,162 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathCreation.Utility { + public static class MathUtility { + + static PosRotScale LockTransformToSpace (Transform t, PathSpace space) { + var original = new PosRotScale (t); + if (space == PathSpace.xy) { + t.eulerAngles = new Vector3 (0, 0, t.eulerAngles.z); + t.position = new Vector3 (t.position.x, t.position.y, 0); + } else if (space == PathSpace.xz) { + t.eulerAngles = new Vector3 (0, t.eulerAngles.y, 0); + t.position = new Vector3 (t.position.x, 0, t.position.z); + } + + //float maxScale = Mathf.Max (t.localScale.x * t.parent.localScale.x, t.localScale.y * t.parent.localScale.y, t.localScale.z * t.parent.localScale.z); + float maxScale = Mathf.Max (t.lossyScale.x, t.lossyScale.y, t.lossyScale.z); + + t.localScale = Vector3.one * maxScale; + + return original; + } + + public static Vector3 TransformPoint (Vector3 p, Transform t, PathSpace space) { + var original = LockTransformToSpace (t, space); + Vector3 transformedPoint = t.TransformPoint (p); + original.SetTransform (t); + return transformedPoint; + } + + public static Vector3 InverseTransformPoint (Vector3 p, Transform t, PathSpace space) { + var original = LockTransformToSpace (t, space); + Vector3 transformedPoint = t.InverseTransformPoint (p); + original.SetTransform (t); + return transformedPoint; + } + + public static Vector3 TransformVector (Vector3 p, Transform t, PathSpace space) { + var original = LockTransformToSpace (t, space); + Vector3 transformedPoint = t.TransformVector (p); + original.SetTransform (t); + return transformedPoint; + } + + public static Vector3 InverseTransformVector (Vector3 p, Transform t, PathSpace space) { + var original = LockTransformToSpace (t, space); + Vector3 transformedPoint = t.InverseTransformVector (p); + original.SetTransform (t); + return transformedPoint; + } + + public static Vector3 TransformDirection (Vector3 p, Transform t, PathSpace space) { + var original = LockTransformToSpace (t, space); + Vector3 transformedPoint = t.TransformDirection (p); + original.SetTransform (t); + return transformedPoint; + } + + public static Vector3 InverseTransformDirection (Vector3 p, Transform t, PathSpace space) { + var original = LockTransformToSpace (t, space); + Vector3 transformedPoint = t.InverseTransformDirection (p); + original.SetTransform (t); + return transformedPoint; + } + + public static bool LineSegmentsIntersect (Vector2 a1, Vector2 a2, Vector2 b1, Vector2 b2) { + float d = (b2.x - b1.x) * (a1.y - a2.y) - (a1.x - a2.x) * (b2.y - b1.y); + if (d == 0) + return false; + float t = ((b1.y - b2.y) * (a1.x - b1.x) + (b2.x - b1.x) * (a1.y - b1.y)) / d; + float u = ((a1.y - a2.y) * (a1.x - b1.x) + (a2.x - a1.x) * (a1.y - b1.y)) / d; + + return t >= 0 && t <= 1 && u >= 0 && u <= 1; + } + + public static bool LinesIntersect (Vector2 a1, Vector2 a2, Vector2 a3, Vector2 a4) { + return (a1.x - a2.x) * (a3.y - a4.y) - (a1.y - a2.y) * (a3.x - a4.x) != 0; + } + + public static Vector2 PointOfLineLineIntersection (Vector2 a1, Vector2 a2, Vector2 a3, Vector2 a4) { + float d = (a1.x - a2.x) * (a3.y - a4.y) - (a1.y - a2.y) * (a3.x - a4.x); + if (d == 0) { + Debug.LogError ("Lines are parallel, please check that this is not the case before calling line intersection method"); + return Vector2.zero; + } else { + float n = (a1.x - a3.x) * (a3.y - a4.y) - (a1.y - a3.y) * (a3.x - a4.x); + float t = n / d; + return a1 + (a2 - a1) * t; + } + } + + public static Vector2 ClosestPointOnLineSegment (Vector2 p, Vector2 a, Vector2 b) { + Vector2 aB = b - a; + Vector2 aP = p - a; + float sqrLenAB = aB.sqrMagnitude; + + if (sqrLenAB == 0) + return a; + + float t = Mathf.Clamp01 (Vector2.Dot (aP, aB) / sqrLenAB); + return a + aB * t; + } + + public static Vector3 ClosestPointOnLineSegment (Vector3 p, Vector3 a, Vector3 b) { + Vector3 aB = b - a; + Vector3 aP = p - a; + float sqrLenAB = aB.sqrMagnitude; + + if (sqrLenAB == 0) + return a; + + float t = Mathf.Clamp01 (Vector3.Dot (aP, aB) / sqrLenAB); + return a + aB * t; + } + + public static int SideOfLine (Vector2 a, Vector2 b, Vector2 c) { + return (int) Mathf.Sign ((c.x - a.x) * (-b.y + a.y) + (c.y - a.y) * (b.x - a.x)); + } + + /// returns the smallest angle between ABC. Never greater than 180 + public static float MinAngle (Vector3 a, Vector3 b, Vector3 c) { + return Vector3.Angle ((a - b), (c - b)); + } + + public static bool PointInTriangle (Vector2 a, Vector2 b, Vector2 c, Vector2 p) { + float area = 0.5f * (-b.y * c.x + a.y * (-b.x + c.x) + a.x * (b.y - c.y) + b.x * c.y); + float s = 1 / (2 * area) * (a.y * c.x - a.x * c.y + (c.y - a.y) * p.x + (a.x - c.x) * p.y); + float t = 1 / (2 * area) * (a.x * b.y - a.y * b.x + (a.y - b.y) * p.x + (b.x - a.x) * p.y); + return s >= 0 && t >= 0 && (s + t) <= 1; + } + + public static bool PointsAreClockwise (Vector2[] points) { + float signedArea = 0; + for (int i = 0; i < points.Length; i++) { + int nextIndex = (i + 1) % points.Length; + signedArea += (points[nextIndex].x - points[i].x) * (points[nextIndex].y + points[i].y); + } + + return signedArea >= 0; + } + + class PosRotScale { + public readonly Vector3 position; + public readonly Quaternion rotation; + public readonly Vector3 scale; + + public PosRotScale (Transform t) { + this.position = t.position; + this.rotation = t.rotation; + this.scale = t.localScale; + } + + public void SetTransform (Transform t) { + t.position = position; + t.rotation = rotation; + t.localScale = scale; + + } + } + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Runtime/Utility/MathUtility.cs.meta b/game/Assets/PathCreator/Core/Runtime/Utility/MathUtility.cs.meta new file mode 100644 index 0000000..277ff19 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Utility/MathUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 096bae1d1ed960d4bb7605dce06767c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Runtime/Utility/VertexPathUtility.cs b/game/Assets/PathCreator/Core/Runtime/Utility/VertexPathUtility.cs new file mode 100644 index 0000000..69ab950 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Utility/VertexPathUtility.cs @@ -0,0 +1,139 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathCreation.Utility +{ + public static class VertexPathUtility + { + + public static PathSplitData SplitBezierPathByAngleError(BezierPath bezierPath, float maxAngleError, float minVertexDst, float accuracy) + { + PathSplitData splitData = new PathSplitData(); + + splitData.vertices.Add(bezierPath[0]); + splitData.tangents.Add(CubicBezierUtility.EvaluateCurveDerivative(bezierPath.GetPointsInSegment(0), 0).normalized); + splitData.cumulativeLength.Add(0); + splitData.anchorVertexMap.Add(0); + splitData.minMax.AddValue(bezierPath[0]); + + Vector3 prevPointOnPath = bezierPath[0]; + Vector3 lastAddedPoint = bezierPath[0]; + + float currentPathLength = 0; + float dstSinceLastVertex = 0; + + // Go through all segments and split up into vertices + for (int segmentIndex = 0; segmentIndex < bezierPath.NumSegments; segmentIndex++) + { + Vector3[] segmentPoints = bezierPath.GetPointsInSegment(segmentIndex); + float estimatedSegmentLength = CubicBezierUtility.EstimateCurveLength(segmentPoints[0], segmentPoints[1], segmentPoints[2], segmentPoints[3]); + int divisions = Mathf.CeilToInt(estimatedSegmentLength * accuracy); + float increment = 1f / divisions; + + for (float t = increment; t <= 1; t += increment) + { + bool isLastPointOnPath = (t + increment > 1 && segmentIndex == bezierPath.NumSegments - 1); + if (isLastPointOnPath) + { + t = 1; + } + Vector3 pointOnPath = CubicBezierUtility.EvaluateCurve(segmentPoints, t); + Vector3 nextPointOnPath = CubicBezierUtility.EvaluateCurve(segmentPoints, t + increment); + + // angle at current point on path + float localAngle = 180 - MathUtility.MinAngle(prevPointOnPath, pointOnPath, nextPointOnPath); + // angle between the last added vertex, the current point on the path, and the next point on the path + float angleFromPrevVertex = 180 - MathUtility.MinAngle(lastAddedPoint, pointOnPath, nextPointOnPath); + float angleError = Mathf.Max(localAngle, angleFromPrevVertex); + + + if ((angleError > maxAngleError && dstSinceLastVertex >= minVertexDst) || isLastPointOnPath) + { + + currentPathLength += (lastAddedPoint - pointOnPath).magnitude; + splitData.cumulativeLength.Add(currentPathLength); + splitData.vertices.Add(pointOnPath); + splitData.tangents.Add(CubicBezierUtility.EvaluateCurveDerivative(segmentPoints, t).normalized); + splitData.minMax.AddValue(pointOnPath); + dstSinceLastVertex = 0; + lastAddedPoint = pointOnPath; + } + else + { + dstSinceLastVertex += (pointOnPath - prevPointOnPath).magnitude; + } + prevPointOnPath = pointOnPath; + } + splitData.anchorVertexMap.Add(splitData.vertices.Count - 1); + } + return splitData; + } + + public static PathSplitData SplitBezierPathEvenly(BezierPath bezierPath, float spacing, float accuracy) + { + PathSplitData splitData = new PathSplitData(); + + splitData.vertices.Add(bezierPath[0]); + splitData.tangents.Add(CubicBezierUtility.EvaluateCurveDerivative(bezierPath.GetPointsInSegment(0), 0).normalized); + splitData.cumulativeLength.Add(0); + splitData.anchorVertexMap.Add(0); + splitData.minMax.AddValue(bezierPath[0]); + + Vector3 prevPointOnPath = bezierPath[0]; + Vector3 lastAddedPoint = bezierPath[0]; + + float currentPathLength = 0; + float dstSinceLastVertex = 0; + + // Go through all segments and split up into vertices + for (int segmentIndex = 0; segmentIndex < bezierPath.NumSegments; segmentIndex++) + { + Vector3[] segmentPoints = bezierPath.GetPointsInSegment(segmentIndex); + float estimatedSegmentLength = CubicBezierUtility.EstimateCurveLength(segmentPoints[0], segmentPoints[1], segmentPoints[2], segmentPoints[3]); + int divisions = Mathf.CeilToInt(estimatedSegmentLength * accuracy); + float increment = 1f / divisions; + + for (float t = increment; t <= 1; t += increment) + { + bool isLastPointOnPath = (t + increment > 1 && segmentIndex == bezierPath.NumSegments - 1); + if (isLastPointOnPath) + { + t = 1; + } + Vector3 pointOnPath = CubicBezierUtility.EvaluateCurve(segmentPoints, t); + dstSinceLastVertex += (pointOnPath - prevPointOnPath).magnitude; + + // If vertices are now too far apart, go back by amount we overshot by + if (dstSinceLastVertex > spacing) { + float overshootDst = dstSinceLastVertex - spacing; + pointOnPath += (prevPointOnPath-pointOnPath).normalized * overshootDst; + t-=increment; + } + + if (dstSinceLastVertex >= spacing || isLastPointOnPath) + { + currentPathLength += (lastAddedPoint - pointOnPath).magnitude; + splitData.cumulativeLength.Add(currentPathLength); + splitData.vertices.Add(pointOnPath); + splitData.tangents.Add(CubicBezierUtility.EvaluateCurveDerivative(segmentPoints, t).normalized); + splitData.minMax.AddValue(pointOnPath); + dstSinceLastVertex = 0; + lastAddedPoint = pointOnPath; + } + prevPointOnPath = pointOnPath; + } + splitData.anchorVertexMap.Add(splitData.vertices.Count - 1); + } + return splitData; + } + + + public class PathSplitData { + public List vertices = new List(); + public List tangents = new List(); + public List cumulativeLength = new List(); + public List anchorVertexMap = new List(); + public MinMax3D minMax = new MinMax3D(); + } + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Core/Runtime/Utility/VertexPathUtility.cs.meta b/game/Assets/PathCreator/Core/Runtime/Utility/VertexPathUtility.cs.meta new file mode 100644 index 0000000..a36c3a7 --- /dev/null +++ b/game/Assets/PathCreator/Core/Runtime/Utility/VertexPathUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5505526f3c472e8499fa7ce169410ace +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Settings.meta b/game/Assets/PathCreator/Core/Settings.meta new file mode 100644 index 0000000..8ecf40c --- /dev/null +++ b/game/Assets/PathCreator/Core/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f9b1508dc64040469b4b1ee117d27a9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Core/Settings/GlobalDisplaySettings.asset b/game/Assets/PathCreator/Core/Settings/GlobalDisplaySettings.asset new file mode 100644 index 0000000..53dbd17 --- /dev/null +++ b/game/Assets/PathCreator/Core/Settings/GlobalDisplaySettings.asset @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 46d5e8d803e252f4499b52e657f8e1a2, type: 3} + m_Name: GlobalDisplaySettings + m_EditorClassIdentifier: + anchorSize: 10 + controlSize: 7 + visibleBehindObjects: 1 + visibleWhenNotSelected: 1 + hideAutoControls: 1 + anchorShape: 0 + controlShape: 0 + anchor: {r: 1, g: 0.3726415, b: 0.3726415, a: 1} + anchorHighlighted: {r: 0.735849, g: 0.03818085, b: 0.03818085, a: 1} + anchorSelected: {r: 1, g: 1, b: 1, a: 1} + control: {r: 0.35, g: 0.6, b: 1, a: 1} + controlHighlighted: {r: 0.19579923, g: 0.19579923, b: 0.754717, a: 1} + controlSelected: {r: 1, g: 1, b: 1, a: 1} + handleDisabled: {r: 1, g: 1, b: 1, a: 0.2} + controlLine: {r: 0, g: 0, b: 0, a: 0.7254902} + bezierPath: {r: 0, g: 1, b: 0, a: 1} + highlightedPath: {r: 1, g: 0.6, b: 0, a: 1} + bounds: {r: 1, g: 1, b: 1, a: 0.4} + segmentBounds: {r: 1, g: 1, b: 1, a: 0.4} + vertexPath: {r: 1, g: 1, b: 1, a: 1} + normals: {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + normalsLength: 0.198 diff --git a/game/Assets/PathCreator/Core/Settings/GlobalDisplaySettings.asset.meta b/game/Assets/PathCreator/Core/Settings/GlobalDisplaySettings.asset.meta new file mode 100644 index 0000000..b4c86c8 --- /dev/null +++ b/game/Assets/PathCreator/Core/Settings/GlobalDisplaySettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35fab21375bf12f4b96eba4dafa4ad30 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Documentation.meta b/game/Assets/PathCreator/Documentation.meta new file mode 100644 index 0000000..10b2fce --- /dev/null +++ b/game/Assets/PathCreator/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f53e212088d741abad12e1f2315eee7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Documentation/Documentation.pdf b/game/Assets/PathCreator/Documentation/Documentation.pdf new file mode 100644 index 0000000..208013a Binary files /dev/null and b/game/Assets/PathCreator/Documentation/Documentation.pdf differ diff --git a/game/Assets/PathCreator/Documentation/Documentation.pdf.meta b/game/Assets/PathCreator/Documentation/Documentation.pdf.meta new file mode 100644 index 0000000..1d3a49c --- /dev/null +++ b/game/Assets/PathCreator/Documentation/Documentation.pdf.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e7b865996e4d342a39bbea59a2e43a53 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples.meta b/game/Assets/PathCreator/Examples.meta new file mode 100644 index 0000000..f397761 --- /dev/null +++ b/game/Assets/PathCreator/Examples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 856133338e5935c4ea7215ea837b00da +folderAsset: yes +timeCreated: 1546380202 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Materials.meta b/game/Assets/PathCreator/Examples/Materials.meta new file mode 100644 index 0000000..4b6d20e --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ba68311e0a74e694fbd8f64185d03175 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Materials/Black.mat b/game/Assets/PathCreator/Examples/Materials/Black.mat new file mode 100644 index 0000000..11377dd --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Black.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Black + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.2 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.103773594, g: 0.103773594, b: 0.103773594, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/game/Assets/PathCreator/Examples/Materials/Black.mat.meta b/game/Assets/PathCreator/Examples/Materials/Black.mat.meta new file mode 100644 index 0000000..5c81f46 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Black.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 69561553b86bde34da494d1ffed3ba45 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Materials/Blue.mat b/game/Assets/PathCreator/Examples/Materials/Blue.mat new file mode 100644 index 0000000..16b3943 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Blue.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Blue + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.2 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.30584726, g: 0.5791927, b: 0.8207547, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/game/Assets/PathCreator/Examples/Materials/Blue.mat.meta b/game/Assets/PathCreator/Examples/Materials/Blue.mat.meta new file mode 100644 index 0000000..dff321d --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Blue.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c270a73328a99e439fec44a0cf3a17d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Materials/Brown.mat b/game/Assets/PathCreator/Examples/Materials/Brown.mat new file mode 100644 index 0000000..f4b31a5 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Brown.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Brown + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 10.66} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 10.66} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.4528302, g: 0.19663213, b: 0.10466359, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/game/Assets/PathCreator/Examples/Materials/Brown.mat.meta b/game/Assets/PathCreator/Examples/Materials/Brown.mat.meta new file mode 100644 index 0000000..d3fa293 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Brown.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d5b3a558a1e7f4a4182b166bb2f27cf7 +timeCreated: 1519840206 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Materials/Dark Grey.mat b/game/Assets/PathCreator/Examples/Materials/Dark Grey.mat new file mode 100644 index 0000000..498e755 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Dark Grey.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Dark Grey + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.16037738, g: 0.16037738, b: 0.16037738, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/game/Assets/PathCreator/Examples/Materials/Dark Grey.mat.meta b/game/Assets/PathCreator/Examples/Materials/Dark Grey.mat.meta new file mode 100644 index 0000000..b494506 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Dark Grey.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 407e3de4fbbcf4a99b17bf5aac2d28d8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Materials/Green.mat b/game/Assets/PathCreator/Examples/Materials/Green.mat new file mode 100644 index 0000000..ad0bc71 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Green.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Green + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.2 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.46839345, g: 0.81960785, b: 0.30588233, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/game/Assets/PathCreator/Examples/Materials/Green.mat.meta b/game/Assets/PathCreator/Examples/Materials/Green.mat.meta new file mode 100644 index 0000000..cfbf57e --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Green.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ca80467a033e954a8b9ad8601d6f4c7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Materials/Red.mat b/game/Assets/PathCreator/Examples/Materials/Red.mat new file mode 100644 index 0000000..c792f37 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Red.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Red + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.2 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.9528302, g: 0.23820755, b: 0.26590508, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/game/Assets/PathCreator/Examples/Materials/Red.mat.meta b/game/Assets/PathCreator/Examples/Materials/Red.mat.meta new file mode 100644 index 0000000..a21a9ae --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Red.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01763a1c279a5cd4d8f897f6b6cdbae5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Materials/Road Texture.png b/game/Assets/PathCreator/Examples/Materials/Road Texture.png new file mode 100644 index 0000000..450ca73 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Road Texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0965315b4f955d722046987876c1e37ea2d3897bd7ea6f26c843cbbc6d3dde8 +size 5809 diff --git a/game/Assets/PathCreator/Examples/Materials/Road Texture.png.meta b/game/Assets/PathCreator/Examples/Materials/Road Texture.png.meta new file mode 100644 index 0000000..5cb01c8 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Road Texture.png.meta @@ -0,0 +1,74 @@ +fileFormatVersion: 2 +guid: eef7def8a6d89134284369bbe0145515 +timeCreated: 1546381451 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Materials/Road Underside.mat b/game/Assets/PathCreator/Examples/Materials/Road Underside.mat new file mode 100644 index 0000000..13a6dc3 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Road Underside.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Road Underside + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 10.66} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 10.66} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.047169805, g: 0.047169805, b: 0.047169805, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/game/Assets/PathCreator/Examples/Materials/Road Underside.mat.meta b/game/Assets/PathCreator/Examples/Materials/Road Underside.mat.meta new file mode 100644 index 0000000..40a068b --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Road Underside.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c1d8d882244c5344fa86a8fd23246f81 +timeCreated: 1519840206 +licenseType: Store +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Materials/Road.mat b/game/Assets/PathCreator/Examples/Materials/Road.mat new file mode 100644 index 0000000..3af20a1 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Road.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Road + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: eef7def8a6d89134284369bbe0145515, type: 3} + m_Scale: {x: 1, y: 8} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.153 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/game/Assets/PathCreator/Examples/Materials/Road.mat.meta b/game/Assets/PathCreator/Examples/Materials/Road.mat.meta new file mode 100644 index 0000000..f875c87 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Materials/Road.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b5df4735192845740bd11076dc9cdc99 +timeCreated: 1546381442 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Prefabs.meta b/game/Assets/PathCreator/Examples/Prefabs.meta new file mode 100644 index 0000000..6bab42a --- /dev/null +++ b/game/Assets/PathCreator/Examples/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3331696fd1c6e4ce399332471e58fe60 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Prefabs/Cube.prefab b/game/Assets/PathCreator/Examples/Prefabs/Cube.prefab new file mode 100644 index 0000000..3c53ba0 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Prefabs/Cube.prefab @@ -0,0 +1,79 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4033822839321833552 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 979840955744105011} + - component: {fileID: 590364381998773281} + - component: {fileID: 5190809732636690155} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &979840955744105011 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4033822839321833552} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.1922646, y: -0.4048736, z: -0.2549243} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &590364381998773281 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4033822839321833552} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5190809732636690155 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4033822839321833552} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/game/Assets/PathCreator/Examples/Prefabs/Cube.prefab.meta b/game/Assets/PathCreator/Examples/Prefabs/Cube.prefab.meta new file mode 100644 index 0000000..f8ce78f --- /dev/null +++ b/game/Assets/PathCreator/Examples/Prefabs/Cube.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f19b52bc2573b4e508c60232d5ba4c53 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Prefabs/Follower.prefab b/game/Assets/PathCreator/Examples/Prefabs/Follower.prefab new file mode 100644 index 0000000..c1b17e3 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Prefabs/Follower.prefab @@ -0,0 +1,450 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1576909240372392} + m_IsPrefabParent: 1 +--- !u!1 &1048366265463928 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4175983145834568} + - component: {fileID: 33949624754287046} + - component: {fileID: 23998214817209668} + m_Layer: 0 + m_Name: Body + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1142303417255900 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4919219541973858} + - component: {fileID: 33545565440070206} + - component: {fileID: 23648042348708658} + m_Layer: 0 + m_Name: Left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1179929860508712 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4969400159738430} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1402382065157418 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4420413991641732} + - component: {fileID: 33735273466746142} + - component: {fileID: 23463250516226866} + m_Layer: 0 + m_Name: Forward + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1466481028253768 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4175567933537352} + - component: {fileID: 33944734216049334} + - component: {fileID: 23616845451545226} + m_Layer: 0 + m_Name: Right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1576909240372392 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4125965570099986} + - component: {fileID: 114548013775708692} + m_Layer: 0 + m_Name: Follower + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1591658747683034 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4243308877940266} + - component: {fileID: 33880363704101016} + - component: {fileID: 23486494810615104} + m_Layer: 0 + m_Name: Up + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4125965570099986 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1576909240372392} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4969400159738430} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4175567933537352 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1466481028253768} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.75, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 4969400159738430} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4175983145834568 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048366265463928} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4969400159738430} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4243308877940266 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1591658747683034} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.75, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 4969400159738430} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4420413991641732 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1402382065157418} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.75} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 4969400159738430} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4919219541973858 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1142303417255900} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.75, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 4969400159738430} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4969400159738430 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1179929860508712} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: + - {fileID: 4175983145834568} + - {fileID: 4420413991641732} + - {fileID: 4243308877940266} + - {fileID: 4919219541973858} + - {fileID: 4175567933537352} + m_Father: {fileID: 4125965570099986} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23463250516226866 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1402382065157418} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 2100000, guid: 5c270a73328a99e439fec44a0cf3a17d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23486494810615104 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1591658747683034} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 2100000, guid: 9ca80467a033e954a8b9ad8601d6f4c7, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23616845451545226 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1466481028253768} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 2100000, guid: 01763a1c279a5cd4d8f897f6b6cdbae5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23648042348708658 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1142303417255900} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 2100000, guid: 01763a1c279a5cd4d8f897f6b6cdbae5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23998214817209668 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048366265463928} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 2100000, guid: 69561553b86bde34da494d1ffed3ba45, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33545565440070206 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1142303417255900} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33735273466746142 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1402382065157418} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33880363704101016 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1591658747683034} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33944734216049334 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1466481028253768} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33949624754287046 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048366265463928} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &114548013775708692 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1576909240372392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 33aabe1a2dec93349b06e6e5dc51bc06, type: 3} + m_Name: + m_EditorClassIdentifier: + pathCreator: {fileID: 0} + endOfPathInstruction: 0 + speed: 5 diff --git a/game/Assets/PathCreator/Examples/Prefabs/Follower.prefab.meta b/game/Assets/PathCreator/Examples/Prefabs/Follower.prefab.meta new file mode 100644 index 0000000..7ddb1d0 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Prefabs/Follower.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 761d600d1e80341ac97f3228771ce637 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Prefabs/Path.prefab b/game/Assets/PathCreator/Examples/Prefabs/Path.prefab new file mode 100644 index 0000000..13e486f --- /dev/null +++ b/game/Assets/PathCreator/Examples/Prefabs/Path.prefab @@ -0,0 +1,106 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1801384024788032} + m_IsPrefabParent: 1 +--- !u!1 &1801384024788032 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4050403524429934} + - component: {fileID: 114462757500385858} + m_Layer: 0 + m_Name: Path + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4050403524429934 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1801384024788032} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114462757500385858 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1801384024788032} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e5ac92bc18f545cc84cd886ece82b4d, type: 3} + m_Name: + m_EditorClassIdentifier: + editorData: + _bezierPath: + points: + - {x: -4.350084, y: -0.6192361, z: 0.36958665} + - {x: -4.3119984, y: -0.27224493, z: 2.7627096} + - {x: -2.500093, y: 1.7315861, z: 2.2386506} + - {x: 0.14839771, y: 1.7105651, z: 2.2219813} + - {x: 2.7968912, y: 1.6895441, z: 2.205312} + - {x: 4.16408, y: -0.44785511, z: 2.1293974} + - {x: 4.3446193, y: -0.6192361, z: 0.36958665} + - {x: 4.5251584, y: -0.7906171, z: -1.390224} + - {x: 3.2920637, y: 0.7694727, z: -2.9261537} + - {x: 0.77272415, y: 0.83640313, z: -3.0503848} + - {x: -1.7466154, y: 0.90333354, z: -3.1746159} + - {x: -4.3881693, y: -0.9662273, z: -2.0235362} + isClosed: 1 + space: 0 + controlMode: 1 + autoControlLength: 0.3 + boundsUpToDate: 0 + bounds: + m_Center: {x: 0.005727291, y: 0.5250117, z: -0.39030027} + m_Extent: {x: 4.3562183, y: 1.1872373, z: 2.6691647} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 2.1736755, y: 2.1736755, z: 2.1736755} + perAnchorNormalsAngle: + - 0 + - 0 + - 0 + - 0 + globalNormalsAngle: 69 + flipNormals: 0 + vertexPathUpToDate: 1 + vertexPathMaxAngleError: 0.3 + vertexPathMinVertexSpacing: 0 + showTransformTool: 1 + showPathBounds: 0 + showPerSegmentBounds: 0 + displayAnchorPoints: 1 + displayControlPoints: 1 + bezierHandleScale: 1 + globalDisplaySettingsFoldout: 0 + keepConstantHandleSize: 0 + showNormalsInVertexMode: 0 + showBezierPathInVertexMode: 0 + showDisplayOptions: 0 + showPathOptions: 1 + showVertexPathDisplayOptions: 0 + showVertexPathOptions: 1 + showNormals: 1 + showNormalsHelpInfo: 0 + tabIndex: 0 + initialized: 1 diff --git a/game/Assets/PathCreator/Examples/Prefabs/Path.prefab.meta b/game/Assets/PathCreator/Examples/Prefabs/Path.prefab.meta new file mode 100644 index 0000000..d08ab98 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Prefabs/Path.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2791553a612d84e7c9f3c0a95308376f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Prefabs/Sphere.prefab b/game/Assets/PathCreator/Examples/Prefabs/Sphere.prefab new file mode 100644 index 0000000..80dd763 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Prefabs/Sphere.prefab @@ -0,0 +1,79 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1284304205642556215 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3168392299219943901} + - component: {fileID: 7484263716245627173} + - component: {fileID: 4367022514524041713} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3168392299219943901 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1284304205642556215} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7484263716245627173 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1284304205642556215} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4367022514524041713 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1284304205642556215} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/game/Assets/PathCreator/Examples/Prefabs/Sphere.prefab.meta b/game/Assets/PathCreator/Examples/Prefabs/Sphere.prefab.meta new file mode 100644 index 0000000..6c54355 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Prefabs/Sphere.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cb2e1e8aa0d44489c8d332b91c9a4202 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scenes.meta b/game/Assets/PathCreator/Examples/Scenes.meta new file mode 100644 index 0000000..e53a358 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7fa8a76a6a31dba43b3f224aa4c8ef31 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scenes/Follow Path.unity b/game/Assets/PathCreator/Examples/Scenes/Follow Path.unity new file mode 100644 index 0000000..a481f50 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes/Follow Path.unity @@ -0,0 +1,393 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.4465934, g: 0.49642956, b: 0.57482487, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 2 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &184727957 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 184727959} + - component: {fileID: 184727958} + m_Layer: 0 + m_Name: Path + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &184727958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 184727957} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e5ac92bc18f545cc84cd886ece82b4d, type: 3} + m_Name: + m_EditorClassIdentifier: + editorData: + _bezierPath: + points: + - {x: -4.350084, y: -0.6192361, z: 0.36958665} + - {x: -4.3119984, y: -0.27224493, z: 2.7627096} + - {x: -2.500093, y: 1.7315861, z: 2.2386506} + - {x: 0.14839771, y: 1.7105651, z: 2.2219813} + - {x: 2.7968912, y: 1.6895441, z: 2.205312} + - {x: 4.16408, y: -0.44785511, z: 2.1293974} + - {x: 4.3446193, y: -0.6192361, z: 0.36958665} + - {x: 4.5251584, y: -0.7906171, z: -1.390224} + - {x: 3.2920637, y: 0.7694727, z: -2.9261537} + - {x: 0.77272415, y: 0.83640313, z: -3.0503848} + - {x: -1.7466154, y: 0.90333354, z: -3.1746159} + - {x: -4.3881693, y: -0.9662273, z: -2.0235362} + isClosed: 1 + space: 0 + controlMode: 1 + autoControlLength: 0.3 + boundsUpToDate: 0 + bounds: + m_Center: {x: 0.005727291, y: 0.5250117, z: -0.39030027} + m_Extent: {x: 4.3562183, y: 1.1872373, z: 2.6691647} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 2.1736755, y: 2.1736755, z: 2.1736755} + perAnchorNormalsAngle: + - 0 + - 0 + - 0 + - 0 + globalNormalsAngle: 69 + flipNormals: 0 + vertexPathUpToDate: 1 + vertexPathMaxAngleError: 0.3 + vertexPathMinVertexSpacing: 0 + showTransformTool: 1 + showPathBounds: 0 + showPerSegmentBounds: 0 + displayAnchorPoints: 1 + displayControlPoints: 1 + bezierHandleScale: 1 + globalDisplaySettingsFoldout: 0 + keepConstantHandleSize: 0 + showNormalsInVertexMode: 0 + showBezierPathInVertexMode: 0 + showDisplayOptions: 0 + showPathOptions: 1 + showVertexPathDisplayOptions: 0 + showVertexPathOptions: 1 + showNormals: 0 + showNormalsHelpInfo: 0 + tabIndex: 0 + initialized: 1 +--- !u!4 &184727959 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 184727957} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1266884696 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4125965570099986, guid: 761d600d1e80341ac97f3228771ce637, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4125965570099986, guid: 761d600d1e80341ac97f3228771ce637, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4125965570099986, guid: 761d600d1e80341ac97f3228771ce637, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4125965570099986, guid: 761d600d1e80341ac97f3228771ce637, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4125965570099986, guid: 761d600d1e80341ac97f3228771ce637, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4125965570099986, guid: 761d600d1e80341ac97f3228771ce637, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4125965570099986, guid: 761d600d1e80341ac97f3228771ce637, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4125965570099986, guid: 761d600d1e80341ac97f3228771ce637, type: 2} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 114548013775708692, guid: 761d600d1e80341ac97f3228771ce637, + type: 2} + propertyPath: pathCreator + value: + objectReference: {fileID: 184727958} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 761d600d1e80341ac97f3228771ce637, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &1308570505 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1308570508} + - component: {fileID: 1308570507} + - component: {fileID: 1308570506} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1308570506 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1308570505} + m_Enabled: 1 +--- !u!20 &1308570507 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1308570505} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1308570508 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1308570505} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1844901808 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1844901810} + - component: {fileID: 1844901809} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1844901809 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1844901808} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1844901810 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1844901808} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} diff --git a/game/Assets/PathCreator/Examples/Scenes/Follow Path.unity.meta b/game/Assets/PathCreator/Examples/Scenes/Follow Path.unity.meta new file mode 100644 index 0000000..5ccda69 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes/Follow Path.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c1e712ad623461e418f182144cf61384 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scenes/Generate Path.unity b/game/Assets/PathCreator/Examples/Scenes/Generate Path.unity new file mode 100644 index 0000000..706981d --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes/Generate Path.unity @@ -0,0 +1,973 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657892, g: 0.4964127, b: 0.5748172, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_ExportTrainingData: 0 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &244891480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 244891483} + - component: {fileID: 244891482} + - component: {fileID: 244891481} + m_Layer: 0 + m_Name: Follower + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!96 &244891481 +TrailRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 244891480} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10306, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Time: 5 + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0.16470587, g: 0.47597936, b: 1, a: 1} + key1: {r: 0.7216981, g: 0.89121073, b: 1, a: 0} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 8 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_MinVertexDistance: 0.1 + m_Autodestruct: 0 + m_Emitting: 1 +--- !u!114 &244891482 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 244891480} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 33aabe1a2dec93349b06e6e5dc51bc06, type: 3} + m_Name: + m_EditorClassIdentifier: + pathCreator: {fileID: 839433806} + endOfPathInstruction: 0 + speed: 5 +--- !u!4 &244891483 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 244891480} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &315902406 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 315902409} + - component: {fileID: 315902408} + - component: {fileID: 315902407} + m_Layer: 0 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &315902407 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315902406} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &315902408 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315902406} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &315902409 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315902406} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.54, y: -1.75, z: 6.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 762964052} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &729862344 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 729862347} + - component: {fileID: 729862346} + - component: {fileID: 729862345} + m_Layer: 0 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &729862345 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729862344} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &729862346 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729862344} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &729862347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729862344} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 9.1, y: 6.39, z: -3.51} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 762964052} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &762964051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 762964052} + m_Layer: 0 + m_Name: Waypoints + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &762964052 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 762964051} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1295418884} + - {fileID: 2107402768} + - {fileID: 1544419622} + - {fileID: 729862347} + - {fileID: 315902409} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &839433805 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 839433807} + - component: {fileID: 839433808} + - component: {fileID: 839433806} + m_Layer: 0 + m_Name: Path + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &839433806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839433805} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e5ac92bc18f545cc84cd886ece82b4d, type: 3} + m_Name: + m_EditorClassIdentifier: + editorData: + _bezierPath: + points: + - {x: -2, y: 0, z: 0} + - {x: -1, y: 0.5, z: 0} + - {x: 1, y: -0.5, z: 0} + - {x: 2, y: 0, z: 0} + isClosed: 0 + space: 0 + controlMode: 0 + autoControlLength: 0.3 + boundsUpToDate: 0 + bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + perAnchorNormalsAngle: + - 0 + - 0 + globalNormalsAngle: 0 + flipNormals: 0 + vertexPathUpToDate: 0 + vertexPathMaxAngleError: 0.3 + vertexPathMinVertexSpacing: 0.01 + showTransformTool: 1 + showPathBounds: 0 + showPerSegmentBounds: 0 + displayAnchorPoints: 1 + displayControlPoints: 1 + bezierHandleScale: 1 + globalDisplaySettingsFoldout: 0 + keepConstantHandleSize: 0 + showNormalsInVertexMode: 0 + showBezierPathInVertexMode: 0 + showDisplayOptions: 0 + showPathOptions: 1 + showVertexPathDisplayOptions: 0 + showVertexPathOptions: 1 + showNormals: 0 + showNormalsHelpInfo: 0 + tabIndex: 0 + initialized: 1 +--- !u!4 &839433807 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839433805} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &839433808 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839433805} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f417e74782fffcd40b77b0fdbe82af04, type: 3} + m_Name: + m_EditorClassIdentifier: + closedLoop: 1 + waypoints: + - {fileID: 1295418884} + - {fileID: 2107402768} + - {fileID: 1544419622} + - {fileID: 729862347} + - {fileID: 315902409} +--- !u!1 &1295418881 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1295418884} + - component: {fileID: 1295418883} + - component: {fileID: 1295418882} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1295418882 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295418881} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1295418883 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295418881} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1295418884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295418881} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 762964052} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1407856702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1407856705} + - component: {fileID: 1407856704} + - component: {fileID: 1407856703} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1407856703 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1407856702} + m_Enabled: 1 +--- !u!20 &1407856704 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1407856702} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1407856705 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1407856702} + m_LocalRotation: {x: 0.12969545, y: -0.1184572, z: 0.015607949, w: 0.9843289} + m_LocalPosition: {x: 3, y: 8.92, z: -18.23} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 15.012001, y: -13.724001, z: 0} +--- !u!1 &1544419619 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1544419622} + - component: {fileID: 1544419621} + - component: {fileID: 1544419620} + m_Layer: 0 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1544419620 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544419619} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1544419621 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544419619} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1544419622 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544419619} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -6.17, y: 6.39, z: -10.04} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 762964052} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1612519935 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1612519937} + - component: {fileID: 1612519936} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1612519936 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1612519935} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1612519937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1612519935} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &2107402765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2107402768} + - component: {fileID: 2107402767} + - component: {fileID: 2107402766} + m_Layer: 0 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2107402766 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2107402765} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2107402767 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2107402765} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &2107402768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2107402765} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -6.17, y: 1.4746776, z: 2.67} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 762964052} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/game/Assets/PathCreator/Examples/Scenes/Generate Path.unity.meta b/game/Assets/PathCreator/Examples/Scenes/Generate Path.unity.meta new file mode 100644 index 0000000..d2ff05c --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes/Generate Path.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3145d476fb2c7f242875d23b77320de4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scenes/Object Placement.unity b/game/Assets/PathCreator/Examples/Scenes/Object Placement.unity new file mode 100644 index 0000000..dd0a3b9 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes/Object Placement.unity @@ -0,0 +1,1944 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.4465934, g: 0.49642956, b: 0.57482487, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &70188142 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 70188143} + - component: {fileID: 70188145} + - component: {fileID: 70188144} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &70188143 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 70188142} + m_LocalRotation: {x: -0.39927244, y: 0.39927244, z: -0.5835936, w: 0.5835936} + m_LocalPosition: {x: 9.822016, y: 0.4048736, z: -10.503309} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &70188144 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 70188142} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &70188145 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 70188142} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &473136262 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 473136263} + - component: {fileID: 473136265} + - component: {fileID: 473136264} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &473136263 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 473136262} + m_LocalRotation: {x: 0.6124736, y: -0.6124736, z: 0.3533781, w: -0.3533781} + m_LocalPosition: {x: -7.4458857, y: 0.4048736, z: -8.243549} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &473136264 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 473136262} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &473136265 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 473136262} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &664526678 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 664526679} + - component: {fileID: 664526681} + - component: {fileID: 664526680} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &664526679 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 664526678} + m_LocalRotation: {x: 0.25204316, y: -0.25204316, z: -0.66066194, w: 0.660662} + m_LocalPosition: {x: 14.085798, y: 0.4048736, z: 17.422533} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &664526680 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 664526678} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &664526681 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 664526678} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &702570136 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 702570137} + - component: {fileID: 702570139} + - component: {fileID: 702570138} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &702570137 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 702570136} + m_LocalRotation: {x: 0.334829, y: -0.334829, z: -0.6228078, w: 0.6228078} + m_LocalPosition: {x: 9.585267, y: 0.4048736, z: 21.53287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &702570138 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 702570136} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &702570139 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 702570136} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &877217990 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 877217991} + - component: {fileID: 877217993} + - component: {fileID: 877217992} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &877217991 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 877217990} + m_LocalRotation: {x: -0.497745, y: 0.497745, z: -0.50224495, w: 0.5022449} + m_LocalPosition: {x: 9.432941, y: 0.4048736, z: 0.568121} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &877217992 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 877217990} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &877217993 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 877217990} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &947851089 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 947851090} + - component: {fileID: 947851092} + - component: {fileID: 947851091} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &947851090 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 947851089} + m_LocalRotation: {x: -0.2508529, y: 0.2508529, z: -0.6611149, w: 0.6611148} + m_LocalPosition: {x: 14.984689, y: 0.4048736, z: -7.3686123} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &947851091 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 947851089} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &947851092 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 947851089} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &987899030 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 987899031} + - component: {fileID: 987899033} + - component: {fileID: 987899032} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &987899031 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 987899030} + m_LocalRotation: {x: 0.70505685, y: -0.70505685, z: -0.05380449, w: 0.05380449} + m_LocalPosition: {x: -14.578905, y: 0.4048736, z: 13.0229435} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &987899032 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 987899030} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &987899033 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 987899030} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1017046790 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1017046791} + - component: {fileID: 1017046793} + - component: {fileID: 1017046792} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1017046791 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1017046790} + m_LocalRotation: {x: 0.6906611, y: -0.690661, z: -0.15161571, w: 0.15161571} + m_LocalPosition: {x: -12.987309, y: 0.4048736, z: 18.90274} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1017046792 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1017046790} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1017046793 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1017046790} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1035122922 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1035122923} + - component: {fileID: 1035122925} + - component: {fileID: 1035122924} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1035122923 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1035122922} + m_LocalRotation: {x: 0.7070882, y: -0.7070881, z: -0.005134826, w: 0.005134826} + m_LocalPosition: {x: -15.071617, y: 0.4048736, z: 6.9375906} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1035122924 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1035122922} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1035122925 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1035122922} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1045485630 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1045485633} + - component: {fileID: 1045485632} + - component: {fileID: 1045485631} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1045485631 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1045485630} + m_Enabled: 1 +--- !u!20 &1045485632 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1045485630} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1045485633 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1045485630} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1100876285 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1100876286} + m_Layer: 0 + m_Name: Object Holder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1100876286 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1100876285} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.1922646, y: -0.4048736, z: -0.2549243} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1489228399} + - {fileID: 877217991} + - {fileID: 1305567046} + - {fileID: 1726925215} + - {fileID: 1836065500} + - {fileID: 664526679} + - {fileID: 702570137} + - {fileID: 1653420825} + - {fileID: 1239443495} + - {fileID: 1631447300} + - {fileID: 1017046791} + - {fileID: 987899031} + - {fileID: 1035122923} + - {fileID: 1451327458} + - {fileID: 1863139043} + - {fileID: 473136263} + - {fileID: 1551300063} + - {fileID: 1413329164} + - {fileID: 70188143} + - {fileID: 947851090} + - {fileID: 1743644112} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1163749077 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1163749079} + - component: {fileID: 1163749078} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1163749078 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1163749077} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1163749079 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1163749077} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1173081723 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1173081726} + - component: {fileID: 1173081725} + - component: {fileID: 1173081724} + m_Layer: 0 + m_Name: Path + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1173081724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1173081723} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e5ac92bc18f545cc84cd886ece82b4d, type: 3} + m_Name: + m_EditorClassIdentifier: + editorData: + _bezierPath: + points: + - {x: 2.177661, y: 0, z: 1.0135708} + - {x: 5.2159348, y: 0, z: 0.51950216} + - {x: 8.254209, y: 0, z: 0.02543357} + - {x: 9.880889, y: 0, z: 0.51335144} + - {x: 12.122741, y: 0, z: 1.185788} + - {x: 18.025703, y: 0, z: 4.6161985} + - {x: 18.365267, y: 0, z: 6.931963} + - {x: 18.953577, y: 0, z: 10.944124} + - {x: 11.143806, y: 0, z: 20.072712} + - {x: 7.4771137, y: 0, z: 21.80445} + - {x: 3.4255772, y: 0, z: 23.717943} + - {x: -9.652585, y: 0, z: 23.788317} + - {x: -12.857204, y: 0, z: 20.656733} + - {x: -16.654, y: 0, z: 16.946468} + - {x: -17.266878, y: 0, z: 1.2884617} + - {x: -14.771961, y: 0, z: -3.397377} + - {x: -12.861416, y: 0, z: -6.9856763} + - {x: -2.7150939, y: 0, z: -12.051621} + - {x: 1.3291776, y: 0, z: -12.463868} + - {x: 3.8740497, y: 0, z: -12.723276} + - {x: 10.303253, y: 0, z: -10.38054} + - {x: 12.403621, y: 0, z: -8.9203615} + - {x: 13.973428, y: 0, z: -7.82903} + - {x: 15.871395, y: 0, z: -4.956673} + - {x: 17.769363, y: 0, z: -2.0843163} + isClosed: 0 + localPosition: {x: 0, y: 0, z: 0} + space: 2 + controlMode: 3 + autoControlLength: 0.22 + boundsUpToDate: 1 + pivot: {x: 1.0637436, y: 0, z: 5.3302784} + bounds: + m_Center: {x: 1.0637436, y: 0, z: 5.3302784} + m_Extent: {x: 17.332994, y: 0, z: 17.813997} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + perAnchorNormalsAngle: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + globalNormalsAngle: 0 + flipNormals: 0 + vertexPathUpToDate: 1 + vertexPathMaxAngleError: 0.3 + vertexPathMinVertexSpacing: 0.01 + pathTransformationEnabled: 0 + showPathBounds: 0 + showPerSegmentBounds: 0 + displayAnchorPoints: 1 + displayControlPoints: 1 + bezierHandleScale: 7.64 + globalDisplaySettingsFoldout: 0 + keepConstantHandleSize: 0 + showNormalsInVertexMode: 0 + showBezierPathInVertexMode: 0 + showDisplayOptions: 0 + showPathOptions: 0 + showVertexPathDisplayOptions: 0 + showVertexPathOptions: 1 + showNormals: 0 + showNormalsHelpInfo: 0 + tabIndex: 0 + initialized: 1 +--- !u!114 &1173081725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1173081723} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d12b1fe1b42884d7692049d7f6f79ee9, type: 3} + m_Name: + m_EditorClassIdentifier: + pathCreator: {fileID: 1173081724} + autoUpdate: 1 + prefab: {fileID: 4033822839321833552, guid: f19b52bc2573b4e508c60232d5ba4c53, type: 2} + holder: {fileID: 1100876285} + spacing: 6.11 +--- !u!4 &1173081726 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1173081723} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1239443494 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1239443495} + - component: {fileID: 1239443497} + - component: {fileID: 1239443496} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1239443495 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1239443494} + m_LocalRotation: {x: 0.51114064, y: -0.5111407, z: -0.4886054, w: 0.4886054} + m_LocalPosition: {x: -2.3383734, y: 0.4048736, z: 23.356722} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1239443496 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1239443494} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1239443497 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1239443494} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1305567045 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1305567046} + - component: {fileID: 1305567048} + - component: {fileID: 1305567047} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1305567046 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1305567045} + m_LocalRotation: {x: -0.34406978, y: 0.34406978, z: -0.61775076, w: 0.61775076} + m_LocalPosition: {x: 15.058696, y: 0.4048736, z: 2.730334} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1305567047 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1305567045} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1305567048 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1305567045} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1413329163 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1413329164} + - component: {fileID: 1413329166} + - component: {fileID: 1413329165} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1413329164 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1413329163} + m_LocalRotation: {x: -0.46657854, y: 0.46657854, z: -0.5313234, w: 0.5313234} + m_LocalPosition: {x: 3.9528432, y: 0.4048736, z: -12.155033} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1413329165 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1413329163} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1413329166 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1413329163} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1451327457 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1451327458} + - component: {fileID: 1451327460} + - component: {fileID: 1451327459} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1451327458 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1451327457} + m_LocalRotation: {x: 0.7051131, y: -0.7051131, z: 0.053061392, w: -0.053061392} + m_LocalPosition: {x: -14.709441, y: 0.4048736, z: 0.8449825} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1451327459 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1451327457} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1451327460 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1451327457} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1489228398 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1489228399} + - component: {fileID: 1489228401} + - component: {fileID: 1489228400} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1489228399 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1489228398} + m_LocalRotation: {x: 0.53863406, y: -0.53863406, z: 0.4581194, w: -0.4581194} + m_LocalPosition: {x: 3.3699255, y: 0.4048736, z: 1.2684951} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1489228400 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1489228398} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1489228401 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1489228398} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1551300062 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1551300063} + - component: {fileID: 1551300065} + - component: {fileID: 1551300064} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1551300063 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1551300062} + m_LocalRotation: {x: 0.5853645, y: -0.5853645, z: 0.39667162, w: -0.39667162} + m_LocalPosition: {x: -1.9577849, y: 0.4048736, z: -10.917622} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1551300064 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1551300062} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1551300065 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1551300062} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1631447299 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1631447300} + - component: {fileID: 1631447302} + - component: {fileID: 1631447301} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1631447300 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1631447299} + m_LocalRotation: {x: 0.5621399, y: -0.56213987, z: -0.42895082, w: 0.42895082} + m_LocalPosition: {x: -8.37764, y: 0.4048736, z: 22.51158} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1631447301 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1631447299} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1631447302 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1631447299} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1653420824 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1653420825} + - component: {fileID: 1653420827} + - component: {fileID: 1653420826} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1653420825 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1653420824} + m_LocalRotation: {x: 0.47242323, y: -0.47242323, z: -0.5261334, w: 0.52613336} + m_LocalPosition: {x: 3.7633872, y: 0.4048736, z: 23.181543} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1653420826 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1653420824} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1653420827 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1653420824} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1726925214 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1726925215} + - component: {fileID: 1726925217} + - component: {fileID: 1726925216} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1726925215 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1726925214} + m_LocalRotation: {x: -0.12087492, y: 0.12087492, z: -0.6966989, w: 0.69669884} + m_LocalPosition: {x: 19.46735, y: 0.4048736, z: 6.836807} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1726925216 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1726925214} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1726925217 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1726925214} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1743644111 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1743644112} + - component: {fileID: 1743644114} + - component: {fileID: 1743644113} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1743644112 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1743644111} + m_LocalRotation: {x: -0.20450312, y: 0.20450312, z: -0.6768888, w: 0.6768888} + m_LocalPosition: {x: 18.56629, y: 0.4048736, z: -2.4241676} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1743644113 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1743644111} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1743644114 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1743644111} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1836065499 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1836065500} + - component: {fileID: 1836065502} + - component: {fileID: 1836065501} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1836065500 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1836065499} + m_LocalRotation: {x: 0.19032404, y: -0.19032404, z: -0.6810116, w: 0.6810116} + m_LocalPosition: {x: 17.74937, y: 0.4048736, z: 12.543003} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1836065501 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1836065499} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1836065502 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1836065499} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1863139042 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1863139043} + - component: {fileID: 1863139045} + - component: {fileID: 1863139044} + m_Layer: 0 + m_Name: Cube(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1863139043 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1863139042} + m_LocalRotation: {x: 0.6531901, y: -0.65319, z: 0.27081865, w: -0.27081865} + m_LocalPosition: {x: -12.382312, y: 0.4048736, z: -4.669839} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1100876286} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1863139044 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1863139042} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1863139045 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1863139042} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} diff --git a/game/Assets/PathCreator/Examples/Scenes/Object Placement.unity.meta b/game/Assets/PathCreator/Examples/Scenes/Object Placement.unity.meta new file mode 100644 index 0000000..23a9ebb --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes/Object Placement.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f9d700f5f914447f48566abe5b02d921 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scenes/Path as Prefab.unity b/game/Assets/PathCreator/Examples/Scenes/Path as Prefab.unity new file mode 100644 index 0000000..c3c7f7e --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes/Path as Prefab.unity @@ -0,0 +1,517 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.4465934, g: 0.49642956, b: 0.57482487, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 2 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &854113292 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 854113295} + - component: {fileID: 854113294} + - component: {fileID: 854113293} + m_Layer: 0 + m_Name: Spawn 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &854113293 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 854113292} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 2100000, guid: 5c270a73328a99e439fec44a0cf3a17d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &854113294 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 854113292} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &854113295 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 854113292} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6, y: 0, z: 0} + m_LocalScale: {x: 3.7376, y: 0.14671586, z: 3.7376} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1001367091 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1001367094} + - component: {fileID: 1001367093} + - component: {fileID: 1001367092} + m_Layer: 0 + m_Name: Spawn 3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1001367092 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1001367091} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 2100000, guid: 01763a1c279a5cd4d8f897f6b6cdbae5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1001367093 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1001367091} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1001367094 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1001367091} + m_LocalRotation: {x: -0.3582922, y: -0, z: -0, w: 0.9336095} + m_LocalPosition: {x: 0, y: 2.6, z: 5.85} + m_LocalScale: {x: 3.7376, y: 0.14671586, z: 3.7376} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: -41.991, y: 0, z: 0} +--- !u!1 &1170195241 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1170195244} + - component: {fileID: 1170195243} + - component: {fileID: 1170195242} + m_Layer: 0 + m_Name: Spawn 2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1170195242 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1170195241} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 2100000, guid: 9ca80467a033e954a8b9ad8601d6f4c7, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1170195243 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1170195241} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1170195244 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1170195241} + m_LocalRotation: {x: -0, y: -0, z: 0.480542, w: 0.87697166} + m_LocalPosition: {x: 6, y: 0, z: 0} + m_LocalScale: {x: 3.7376, y: 0.14671586, z: 3.7376} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 57.442} +--- !u!1 &1308570505 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1308570508} + - component: {fileID: 1308570507} + - component: {fileID: 1308570506} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1308570506 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1308570505} + m_Enabled: 1 +--- !u!20 &1308570507 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1308570505} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1308570508 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1308570505} + m_LocalRotation: {x: 0.17410469, y: -0, z: -0, w: 0.9847272} + m_LocalPosition: {x: 0, y: 6.41, z: -11.71} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 20.053001, y: 0, z: 0} +--- !u!1 &1518276650 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1518276652} + - component: {fileID: 1518276651} + m_Layer: 0 + m_Name: Spawner + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1518276651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1518276650} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b617cc208d0104cad9534d503ff3e1cf, type: 3} + m_Name: + m_EditorClassIdentifier: + pathPrefab: {fileID: 114462757500385858, guid: 2791553a612d84e7c9f3c0a95308376f, + type: 2} + followerPrefab: {fileID: 114548013775708692, guid: 761d600d1e80341ac97f3228771ce637, + type: 2} + spawnPoints: + - {fileID: 854113295} + - {fileID: 1170195244} + - {fileID: 1001367094} +--- !u!4 &1518276652 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1518276650} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1844901808 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1844901810} + - component: {fileID: 1844901809} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1844901809 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1844901808} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1844901810 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1844901808} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} diff --git a/game/Assets/PathCreator/Examples/Scenes/Path as Prefab.unity.meta b/game/Assets/PathCreator/Examples/Scenes/Path as Prefab.unity.meta new file mode 100644 index 0000000..0b21ff1 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes/Path as Prefab.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7c3960531f0fd44beaacc5037d708071 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scenes/Road.unity b/game/Assets/PathCreator/Examples/Scenes/Road.unity new file mode 100644 index 0000000..b9e3831 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes/Road.unity @@ -0,0 +1,678 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657892, g: 0.4964127, b: 0.5748172, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_ExportTrainingData: 0 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &1073702040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1073702042} + - component: {fileID: 1073702041} + - component: {fileID: 1073702043} + m_Layer: 0 + m_Name: Road Creator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1073702041 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073702040} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e5ac92bc18f545cc84cd886ece82b4d, type: 3} + m_Name: + m_EditorClassIdentifier: + editorData: + _bezierPath: + points: + - {x: -3.2247634, y: 0.8263334, z: 2.3792875} + - {x: -1.283143, y: 0.23846622, z: 3.1646647} + - {x: 0.6584772, y: -0.34940097, z: 3.950042} + - {x: 2.3595712, y: -0.7624575, z: 2.901955} + - {x: 3.6594722, y: -1.0780971, z: 2.1010528} + - {x: 4.583452, y: -1.0509282, z: 0.2846942} + - {x: 4.092701, y: -1.0053874, z: -1.1944623} + - {x: 3.579156, y: -0.95773137, z: -2.7423213} + - {x: 1.7052363, y: -0.72001815, z: -3.5153677} + - {x: 0.08291578, y: -0.54737484, z: -3.5271394} + - {x: -1.112274, y: -0.42018574, z: -3.5358117} + - {x: -2.006318, y: -0.33657387, z: -2.6937559} + - {x: -2.900362, y: -0.252962, z: -1.8517001} + isClosed: 0 + space: 0 + controlMode: 3 + autoControlLength: 0.35 + boundsUpToDate: 0 + bounds: + m_Center: {x: 1.2616136, y: 0.54719853, z: -2.224142} + m_Extent: {x: 3.2442577, y: 0.8264315, z: 3.3909774} + rotation: {x: 0, y: 0.0023407342, z: 0, w: 0.9999979} + scale: {x: 1, y: 1, z: 1} + perAnchorNormalsAngle: + - 335.08722 + - 345.02103 + - 327.71606 + - 320.15445 + - 320.15445 + globalNormalsAngle: 0 + flipNormals: 0 + vertexPathUpToDate: 1 + vertexPathMaxAngleError: 0.3 + vertexPathMinVertexSpacing: 0 + showTransformTool: 1 + showPathBounds: 0 + showPerSegmentBounds: 0 + displayAnchorPoints: 1 + displayControlPoints: 1 + bezierHandleScale: 1 + globalDisplaySettingsFoldout: 1 + keepConstantHandleSize: 1 + showNormalsInVertexMode: 0 + showBezierPathInVertexMode: 0 + showDisplayOptions: 0 + showPathOptions: 1 + showVertexPathDisplayOptions: 0 + showVertexPathOptions: 1 + showNormals: 1 + showNormalsHelpInfo: 0 + tabIndex: 0 + initialized: 1 +--- !u!4 &1073702042 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073702040} + m_LocalRotation: {x: 0.067577064, y: -0, z: -0, w: 0.99771404} + m_LocalPosition: {x: 1.86, y: 0.54729664, z: 2.44} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 7.7500005, y: 0, z: 0} +--- !u!114 &1073702043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073702040} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b275c3b78f8717c4cbc60f74a3247f67, type: 3} + m_Name: + m_EditorClassIdentifier: + pathCreator: {fileID: 1073702041} + autoUpdate: 1 + roadWidth: 1 + thickness: 0.127 + flattenSurface: 0 + roadMaterial: {fileID: 2100000, guid: b5df4735192845740bd11076dc9cdc99, type: 2} + undersideMaterial: {fileID: 2100000, guid: c1d8d882244c5344fa86a8fd23246f81, type: 2} + textureTiling: 8 + meshHolder: {fileID: 1646890433} +--- !u!1 &1646890433 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1646890436} + - component: {fileID: 1646890435} + - component: {fileID: 1646890434} + m_Layer: 0 + m_Name: Road Mesh Holder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1646890434 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646890433} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b5df4735192845740bd11076dc9cdc99, type: 2} + - {fileID: 2100000, guid: c1d8d882244c5344fa86a8fd23246f81, type: 2} + - {fileID: 2100000, guid: c1d8d882244c5344fa86a8fd23246f81, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1646890435 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646890433} + m_Mesh: {fileID: 1712268210} +--- !u!4 &1646890436 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646890433} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!43 &1712268210 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 10 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 1566 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 2090 + localAABB: + m_Center: {x: 2.7326906, y: 0.30216432, z: 2.4225621} + m_Extent: {x: 4.332015, y: 1.0258145, z: 4.353405} + - serializedVersion: 2 + firstByte: 3132 + indexCount: 1566 + topology: 0 + baseVertex: 0 + firstVertex: 2 + vertexCount: 2090 + localAABB: + m_Center: {x: 2.7212982, y: 0.18137878, z: 2.391499} + m_Extent: {x: 4.369539, y: 1.0316021, z: 4.398033} + - serializedVersion: 2 + firstByte: 6264 + indexCount: 3132 + topology: 0 + baseVertex: 0 + firstVertex: 4 + vertexCount: 2092 + localAABB: + m_Center: {x: 2.7212982, y: 0.23887771, z: 2.391499} + m_Extent: {x: 4.369539, y: 1.0891011, z: 4.398033} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 0 + m_IndexBuffer: 0000080001000100080009000800100009000900100011001000180011001100180019001800200019001900200021002000280021002100280029002800300029002900300031003000380031003100380039003800400039003900400041004000480041004100480049004800500049004900500051005000580051005100580059005800600059005900600061006000680061006100680069006800700069006900700071007000780071007100780079007800800079007900800081008000880081008100880089008800900089008900900091009000980091009100980099009800a00099009900a000a100a000a800a100a100a800a900a800b000a900a900b000b100b000b800b100b100b800b900b800c000b900b900c000c100c000c800c100c100c800c900c800d000c900c900d000d100d000d800d100d100d800d900d800e000d900d900e000e100e000e800e100e100e800e900e800f000e900e900f000f100f000f800f100f100f800f900f8000001f900f900000101010001080101010101080109010801100109010901100111011001180111011101180119011801200119011901200121012001280121012101280129012801300129012901300131013001380131013101380139013801400139013901400141014001480141014101480149014801500149014901500151015001580151015101580159015801600159015901600161016001680161016101680169016801700169016901700171017001780171017101780179017801800179017901800181018001880181018101880189018801900189018901900191019001980191019101980199019801a00199019901a001a101a001a801a101a101a801a901a801b001a901a901b001b101b001b801b101b101b801b901b801c001b901b901c001c101c001c801c101c101c801c901c801d001c901c901d001d101d001d801d101d101d801d901d801e001d901d901e001e101e001e801e101e101e801e901e801f001e901e901f001f101f001f801f101f101f801f901f8010002f901f901000201020002080201020102080209020802100209020902100211021002180211021102180219021802200219021902200221022002280221022102280229022802300229022902300231023002380231023102380239023802400239023902400241024002480241024102480249024802500249024902500251025002580251025102580259025802600259025902600261026002680261026102680269026802700269026902700271027002780271027102780279027802800279027902800281028002880281028102880289028802900289028902900291029002980291029102980299029802a00299029902a002a102a002a802a102a102a802a902a802b002a902a902b002b102b002b802b102b102b802b902b802c002b902b902c002c102c002c802c102c102c802c902c802d002c902c902d002d102d002d802d102d102d802d902d802e002d902d902e002e102e002e802e102e102e802e902e802f002e902e902f002f102f002f802f102f102f802f902f8020003f902f902000301030003080301030103080309030803100309030903100311031003180311031103180319031803200319031903200321032003280321032103280329032803300329032903300331033003380331033103380339033803400339033903400341034003480341034103480349034803500349034903500351035003580351035103580359035803600359035903600361036003680361036103680369036803700369036903700371037003780371037103780379037803800379037903800381038003880381038103880389038803900389038903900391039003980391039103980399039803a00399039903a003a103a003a803a103a103a803a903a803b003a903a903b003b103b003b803b103b103b803b903b803c003b903b903c003c103c003c803c103c103c803c903c803d003c903c903d003d103d003d803d103d103d803d903d803e003d903d903e003e103e003e803e103e103e803e903e803f003e903e903f003f103f003f803f103f103f803f903f8030004f903f903000401040004080401040104080409040804100409040904100411041004180411041104180419041804200419041904200421042004280421042104280429042804300429042904300431043004380431043104380439043804400439043904400441044004480441044104480449044804500449044904500451045004580451045104580459045804600459045904600461046004680461046104680469046804700469046904700471047004780471047104780479047804800479047904800481048004880481048104880489048804900489048904900491049004980491049104980499049804a00499049904a004a104a004a804a104a104a804a904a804b004a904a904b004b104b004b804b104b104b804b904b804c004b904b904c004c104c004c804c104c104c804c904c804d004c904c904d004d104d004d804d104d104d804d904d804e004d904d904e004e104e004e804e104e104e804e904e804f004e904e904f004f104f004f804f104f104f804f904f8040005f904f904000501050005080501050105080509050805100509050905100511051005180511051105180519051805200519051905200521052005280521052105280529052805300529052905300531053005380531053105380539053805400539053905400541054005480541054105480549054805500549054905500551055005580551055105580559055805600559055905600561056005680561056105680569056805700569056905700571057005780571057105780579057805800579057905800581058005880581058105880589058805900589058905900591059005980591059105980599059805a00599059905a005a105a005a805a105a105a805a905a805b005a905a905b005b105b005b805b105b105b805b905b805c005b905b905c005c105c005c805c105c105c805c905c805d005c905c905d005d105d005d805d105d105d805d905d805e005d905d905e005e105e005e805e105e105e805e905e805f005e905e905f005f105f005f805f105f105f805f905f8050006f905f905000601060006080601060106080609060806100609060906100611061006180611061106180619061806200619061906200621062006280621062106280629062806300629062906300631063006380631063106380639063806400639063906400641064006480641064106480649064806500649064906500651065006580651065106580659065806600659065906600661066006680661066106680669066806700669066906700671067006780671067106780679067806800679067906800681068006880681068106880689068806900689068906900691069006980691069106980699069806a00699069906a006a106a006a806a106a106a806a906a806b006a906a906b006b106b006b806b106b106b806b906b806c006b906b906c006c106c006c806c106c106c806c906c806d006c906c906d006d106d006d806d106d106d806d906d806e006d906d906e006e106e006e806e106e106e806e906e806f006e906e906f006f106f006f806f106f106f806f906f8060007f906f906000701070007080701070107080709070807100709070907100711071007180711071107180719071807200719071907200721072007280721072107280729072807300729072907300731073007380731073107380739073807400739073907400741074007480741074107480749074807500749074907500751075007580751075107580759075807600759075907600761076007680761076107680769076807700769076907700771077007780771077107780779077807800779077907800781078007880781078107880789078807900789078907900791079007980791079107980799079807a00799079907a007a107a007a807a107a107a807a907a807b007a907a907b007b107b007b807b107b107b807b907b807c007b907b907c007c107c007c807c107c107c807c907c807d007c907c907d007d107d007d807d107d107d807d907d807e007d907d907e007e107e007e807e107e107e807e907e807f007e907e907f007f107f007f807f107f107f807f907f8070008f907f907000801080008080801080108080809080808100809080908100811081008180811081108180819081808200819081908200821082008280821082108280829080b000a00030003000a000200130012000b000b0012000a001b001a00130013001a001200230022001b001b0022001a002b002a00230023002a002200330032002b002b0032002a003b003a00330033003a003200430042003b003b0042003a004b004a00430043004a004200530052004b004b0052004a005b005a00530053005a005200630062005b005b0062005a006b006a00630063006a006200730072006b006b0072006a007b007a00730073007a007200830082007b007b0082007a008b008a00830083008a008200930092008b008b0092008a009b009a00930093009a009200a300a2009b009b00a2009a00ab00aa00a300a300aa00a200b300b200ab00ab00b200aa00bb00ba00b300b300ba00b200c300c200bb00bb00c200ba00cb00ca00c300c300ca00c200d300d200cb00cb00d200ca00db00da00d300d300da00d200e300e200db00db00e200da00eb00ea00e300e300ea00e200f300f200eb00eb00f200ea00fb00fa00f300f300fa00f20003010201fb00fb000201fa000b010a01030103010a010201130112010b010b0112010a011b011a01130113011a011201230122011b011b0122011a012b012a01230123012a012201330132012b012b0132012a013b013a01330133013a013201430142013b013b0142013a014b014a01430143014a014201530152014b014b0152014a015b015a01530153015a015201630162015b015b0162015a016b016a01630163016a016201730172016b016b0172016a017b017a01730173017a017201830182017b017b0182017a018b018a01830183018a018201930192018b018b0192018a019b019a01930193019a019201a301a2019b019b01a2019a01ab01aa01a301a301aa01a201b301b201ab01ab01b201aa01bb01ba01b301b301ba01b201c301c201bb01bb01c201ba01cb01ca01c301c301ca01c201d301d201cb01cb01d201ca01db01da01d301d301da01d201e301e201db01db01e201da01eb01ea01e301e301ea01e201f301f201eb01eb01f201ea01fb01fa01f301f301fa01f20103020202fb01fb010202fa010b020a02030203020a020202130212020b020b0212020a021b021a02130213021a021202230222021b021b0222021a022b022a02230223022a022202330232022b022b0232022a023b023a02330233023a023202430242023b023b0242023a024b024a02430243024a024202530252024b024b0252024a025b025a02530253025a025202630262025b025b0262025a026b026a02630263026a026202730272026b026b0272026a027b027a02730273027a027202830282027b027b0282027a028b028a02830283028a028202930292028b028b0292028a029b029a02930293029a029202a302a2029b029b02a2029a02ab02aa02a302a302aa02a202b302b202ab02ab02b202aa02bb02ba02b302b302ba02b202c302c202bb02bb02c202ba02cb02ca02c302c302ca02c202d302d202cb02cb02d202ca02db02da02d302d302da02d202e302e202db02db02e202da02eb02ea02e302e302ea02e202f302f202eb02eb02f202ea02fb02fa02f302f302fa02f20203030203fb02fb020203fa020b030a03030303030a030203130312030b030b0312030a031b031a03130313031a031203230322031b031b0322031a032b032a03230323032a032203330332032b032b0332032a033b033a03330333033a033203430342033b033b0342033a034b034a03430343034a034203530352034b034b0352034a035b035a03530353035a035203630362035b035b0362035a036b036a03630363036a036203730372036b036b0372036a037b037a03730373037a037203830382037b037b0382037a038b038a03830383038a038203930392038b038b0392038a039b039a03930393039a039203a303a2039b039b03a2039a03ab03aa03a303a303aa03a203b303b203ab03ab03b203aa03bb03ba03b303b303ba03b203c303c203bb03bb03c203ba03cb03ca03c303c303ca03c203d303d203cb03cb03d203ca03db03da03d303d303da03d203e303e203db03db03e203da03eb03ea03e303e303ea03e203f303f203eb03eb03f203ea03fb03fa03f303f303fa03f20303040204fb03fb030204fa030b040a04030403040a040204130412040b040b0412040a041b041a04130413041a041204230422041b041b0422041a042b042a04230423042a042204330432042b042b0432042a043b043a04330433043a043204430442043b043b0442043a044b044a04430443044a044204530452044b044b0452044a045b045a04530453045a045204630462045b045b0462045a046b046a04630463046a046204730472046b046b0472046a047b047a04730473047a047204830482047b047b0482047a048b048a04830483048a048204930492048b048b0492048a049b049a04930493049a049204a304a2049b049b04a2049a04ab04aa04a304a304aa04a204b304b204ab04ab04b204aa04bb04ba04b304b304ba04b204c304c204bb04bb04c204ba04cb04ca04c304c304ca04c204d304d204cb04cb04d204ca04db04da04d304d304da04d204e304e204db04db04e204da04eb04ea04e304e304ea04e204f304f204eb04eb04f204ea04fb04fa04f304f304fa04f20403050205fb04fb040205fa040b050a05030503050a050205130512050b050b0512050a051b051a05130513051a051205230522051b051b0522051a052b052a05230523052a052205330532052b052b0532052a053b053a05330533053a053205430542053b053b0542053a054b054a05430543054a054205530552054b054b0552054a055b055a05530553055a055205630562055b055b0562055a056b056a05630563056a056205730572056b056b0572056a057b057a05730573057a057205830582057b057b0582057a058b058a05830583058a058205930592058b058b0592058a059b059a05930593059a059205a305a2059b059b05a2059a05ab05aa05a305a305aa05a205b305b205ab05ab05b205aa05bb05ba05b305b305ba05b205c305c205bb05bb05c205ba05cb05ca05c305c305ca05c205d305d205cb05cb05d205ca05db05da05d305d305da05d205e305e205db05db05e205da05eb05ea05e305e305ea05e205f305f205eb05eb05f205ea05fb05fa05f305f305fa05f20503060206fb05fb050206fa050b060a06030603060a060206130612060b060b0612060a061b061a06130613061a061206230622061b061b0622061a062b062a06230623062a062206330632062b062b0632062a063b063a06330633063a063206430642063b063b0642063a064b064a06430643064a064206530652064b064b0652064a065b065a06530653065a065206630662065b065b0662065a066b066a06630663066a066206730672066b066b0672066a067b067a06730673067a067206830682067b067b0682067a068b068a06830683068a068206930692068b068b0692068a069b069a06930693069a069206a306a2069b069b06a2069a06ab06aa06a306a306aa06a206b306b206ab06ab06b206aa06bb06ba06b306b306ba06b206c306c206bb06bb06c206ba06cb06ca06c306c306ca06c206d306d206cb06cb06d206ca06db06da06d306d306da06d206e306e206db06db06e206da06eb06ea06e306e306ea06e206f306f206eb06eb06f206ea06fb06fa06f306f306fa06f20603070207fb06fb060207fa060b070a07030703070a070207130712070b070b0712070a071b071a07130713071a071207230722071b071b0722071a072b072a07230723072a072207330732072b072b0732072a073b073a07330733073a073207430742073b073b0742073a074b074a07430743074a074207530752074b074b0752074a075b075a07530753075a075207630762075b075b0762075a076b076a07630763076a076207730772076b076b0772076a077b077a07730773077a077207830782077b077b0782077a078b078a07830783078a078207930792078b078b0792078a079b079a07930793079a079207a307a2079b079b07a2079a07ab07aa07a307a307aa07a207b307b207ab07ab07b207aa07bb07ba07b307b307ba07b207c307c207bb07bb07c207ba07cb07ca07c307c307ca07c207d307d207cb07cb07d207ca07db07da07d307d307da07d207e307e207db07db07e207da07eb07ea07e307e307ea07e207f307f207eb07eb07f207ea07fb07fa07f307f307fa07f20703080208fb07fb070208fa070b080a08030803080a080208130812080b080b0812080a081b081a08130813081a081208230822081b081b0822081a082b082a08230823082a082208040006000e000c0004000e0005000f0007000d000f0005000c000e00160014000c0016000d0017000f00150017000d00140016001e001c0014001e0015001f0017001d001f0015001c001e00260024001c0026001d0027001f00250027001d00240026002e002c0024002e0025002f0027002d002f0025002c002e00360034002c0036002d0037002f00350037002d00340036003e003c0034003e0035003f0037003d003f0035003c003e00460044003c0046003d0047003f00450047003d00440046004e004c0044004e0045004f0047004d004f0045004c004e00560054004c0056004d0057004f00550057004d00540056005e005c0054005e0055005f0057005d005f0055005c005e00660064005c0066005d0067005f00650067005d00640066006e006c0064006e0065006f0067006d006f0065006c006e00760074006c0076006d0077006f00750077006d00740076007e007c0074007e0075007f0077007d007f0075007c007e00860084007c0086007d0087007f00850087007d00840086008e008c0084008e0085008f0087008d008f0085008c008e00960094008c0096008d0097008f00950097008d00940096009e009c0094009e0095009f0097009d009f0095009c009e00a600a4009c00a6009d00a7009f00a500a7009d00a400a600ae00ac00a400ae00a500af00a700ad00af00a500ac00ae00b600b400ac00b600ad00b700af00b500b700ad00b400b600be00bc00b400be00b500bf00b700bd00bf00b500bc00be00c600c400bc00c600bd00c700bf00c500c700bd00c400c600ce00cc00c400ce00c500cf00c700cd00cf00c500cc00ce00d600d400cc00d600cd00d700cf00d500d700cd00d400d600de00dc00d400de00d500df00d700dd00df00d500dc00de00e600e400dc00e600dd00e700df00e500e700dd00e400e600ee00ec00e400ee00e500ef00e700ed00ef00e500ec00ee00f600f400ec00f600ed00f700ef00f500f700ed00f400f600fe00fc00f400fe00f500ff00f700fd00ff00f500fc00fe0006010401fc000601fd000701ff0005010701fd00040106010e010c0104010e0105010f0107010d010f0105010c010e01160114010c0116010d0117010f01150117010d01140116011e011c0114011e0115011f0117011d011f0115011c011e01260124011c0126011d0127011f01250127011d01240126012e012c0124012e0125012f0127012d012f0125012c012e01360134012c0136012d0137012f01350137012d01340136013e013c0134013e0135013f0137013d013f0135013c013e01460144013c0146013d0147013f01450147013d01440146014e014c0144014e0145014f0147014d014f0145014c014e01560154014c0156014d0157014f01550157014d01540156015e015c0154015e0155015f0157015d015f0155015c015e01660164015c0166015d0167015f01650167015d01640166016e016c0164016e0165016f0167016d016f0165016c016e01760174016c0176016d0177016f01750177016d01740176017e017c0174017e0175017f0177017d017f0175017c017e01860184017c0186017d0187017f01850187017d01840186018e018c0184018e0185018f0187018d018f0185018c018e01960194018c0196018d0197018f01950197018d01940196019e019c0194019e0195019f0197019d019f0195019c019e01a601a4019c01a6019d01a7019f01a501a7019d01a401a601ae01ac01a401ae01a501af01a701ad01af01a501ac01ae01b601b401ac01b601ad01b701af01b501b701ad01b401b601be01bc01b401be01b501bf01b701bd01bf01b501bc01be01c601c401bc01c601bd01c701bf01c501c701bd01c401c601ce01cc01c401ce01c501cf01c701cd01cf01c501cc01ce01d601d401cc01d601cd01d701cf01d501d701cd01d401d601de01dc01d401de01d501df01d701dd01df01d501dc01de01e601e401dc01e601dd01e701df01e501e701dd01e401e601ee01ec01e401ee01e501ef01e701ed01ef01e501ec01ee01f601f401ec01f601ed01f701ef01f501f701ed01f401f601fe01fc01f401fe01f501ff01f701fd01ff01f501fc01fe0106020402fc010602fd010702ff0105020702fd01040206020e020c0204020e0205020f0207020d020f0205020c020e02160214020c0216020d0217020f02150217020d02140216021e021c0214021e0215021f0217021d021f0215021c021e02260224021c0226021d0227021f02250227021d02240226022e022c0224022e0225022f0227022d022f0225022c022e02360234022c0236022d0237022f02350237022d02340236023e023c0234023e0235023f0237023d023f0235023c023e02460244023c0246023d0247023f02450247023d02440246024e024c0244024e0245024f0247024d024f0245024c024e02560254024c0256024d0257024f02550257024d02540256025e025c0254025e0255025f0257025d025f0255025c025e02660264025c0266025d0267025f02650267025d02640266026e026c0264026e0265026f0267026d026f0265026c026e02760274026c0276026d0277026f02750277026d02740276027e027c0274027e0275027f0277027d027f0275027c027e02860284027c0286027d0287027f02850287027d02840286028e028c0284028e0285028f0287028d028f0285028c028e02960294028c0296028d0297028f02950297028d02940296029e029c0294029e0295029f0297029d029f0295029c029e02a602a4029c02a6029d02a7029f02a502a7029d02a402a602ae02ac02a402ae02a502af02a702ad02af02a502ac02ae02b602b402ac02b602ad02b702af02b502b702ad02b402b602be02bc02b402be02b502bf02b702bd02bf02b502bc02be02c602c402bc02c602bd02c702bf02c502c702bd02c402c602ce02cc02c402ce02c502cf02c702cd02cf02c502cc02ce02d602d402cc02d602cd02d702cf02d502d702cd02d402d602de02dc02d402de02d502df02d702dd02df02d502dc02de02e602e402dc02e602dd02e702df02e502e702dd02e402e602ee02ec02e402ee02e502ef02e702ed02ef02e502ec02ee02f602f402ec02f602ed02f702ef02f502f702ed02f402f602fe02fc02f402fe02f502ff02f702fd02ff02f502fc02fe0206030403fc020603fd020703ff0205030703fd02040306030e030c0304030e0305030f0307030d030f0305030c030e03160314030c0316030d0317030f03150317030d03140316031e031c0314031e0315031f0317031d031f0315031c031e03260324031c0326031d0327031f03250327031d03240326032e032c0324032e0325032f0327032d032f0325032c032e03360334032c0336032d0337032f03350337032d03340336033e033c0334033e0335033f0337033d033f0335033c033e03460344033c0346033d0347033f03450347033d03440346034e034c0344034e0345034f0347034d034f0345034c034e03560354034c0356034d0357034f03550357034d03540356035e035c0354035e0355035f0357035d035f0355035c035e03660364035c0366035d0367035f03650367035d03640366036e036c0364036e0365036f0367036d036f0365036c036e03760374036c0376036d0377036f03750377036d03740376037e037c0374037e0375037f0377037d037f0375037c037e03860384037c0386037d0387037f03850387037d03840386038e038c0384038e0385038f0387038d038f0385038c038e03960394038c0396038d0397038f03950397038d03940396039e039c0394039e0395039f0397039d039f0395039c039e03a603a4039c03a6039d03a7039f03a503a7039d03a403a603ae03ac03a403ae03a503af03a703ad03af03a503ac03ae03b603b403ac03b603ad03b703af03b503b703ad03b403b603be03bc03b403be03b503bf03b703bd03bf03b503bc03be03c603c403bc03c603bd03c703bf03c503c703bd03c403c603ce03cc03c403ce03c503cf03c703cd03cf03c503cc03ce03d603d403cc03d603cd03d703cf03d503d703cd03d403d603de03dc03d403de03d503df03d703dd03df03d503dc03de03e603e403dc03e603dd03e703df03e503e703dd03e403e603ee03ec03e403ee03e503ef03e703ed03ef03e503ec03ee03f603f403ec03f603ed03f703ef03f503f703ed03f403f603fe03fc03f403fe03f503ff03f703fd03ff03f503fc03fe0306040404fc030604fd030704ff0305040704fd03040406040e040c0404040e0405040f0407040d040f0405040c040e04160414040c0416040d0417040f04150417040d04140416041e041c0414041e0415041f0417041d041f0415041c041e04260424041c0426041d0427041f04250427041d04240426042e042c0424042e0425042f0427042d042f0425042c042e04360434042c0436042d0437042f04350437042d04340436043e043c0434043e0435043f0437043d043f0435043c043e04460444043c0446043d0447043f04450447043d04440446044e044c0444044e0445044f0447044d044f0445044c044e04560454044c0456044d0457044f04550457044d04540456045e045c0454045e0455045f0457045d045f0455045c045e04660464045c0466045d0467045f04650467045d04640466046e046c0464046e0465046f0467046d046f0465046c046e04760474046c0476046d0477046f04750477046d04740476047e047c0474047e0475047f0477047d047f0475047c047e04860484047c0486047d0487047f04850487047d04840486048e048c0484048e0485048f0487048d048f0485048c048e04960494048c0496048d0497048f04950497048d04940496049e049c0494049e0495049f0497049d049f0495049c049e04a604a4049c04a6049d04a7049f04a504a7049d04a404a604ae04ac04a404ae04a504af04a704ad04af04a504ac04ae04b604b404ac04b604ad04b704af04b504b704ad04b404b604be04bc04b404be04b504bf04b704bd04bf04b504bc04be04c604c404bc04c604bd04c704bf04c504c704bd04c404c604ce04cc04c404ce04c504cf04c704cd04cf04c504cc04ce04d604d404cc04d604cd04d704cf04d504d704cd04d404d604de04dc04d404de04d504df04d704dd04df04d504dc04de04e604e404dc04e604dd04e704df04e504e704dd04e404e604ee04ec04e404ee04e504ef04e704ed04ef04e504ec04ee04f604f404ec04f604ed04f704ef04f504f704ed04f404f604fe04fc04f404fe04f504ff04f704fd04ff04f504fc04fe0406050405fc040605fd040705ff0405050705fd04040506050e050c0504050e0505050f0507050d050f0505050c050e05160514050c0516050d0517050f05150517050d05140516051e051c0514051e0515051f0517051d051f0515051c051e05260524051c0526051d0527051f05250527051d05240526052e052c0524052e0525052f0527052d052f0525052c052e05360534052c0536052d0537052f05350537052d05340536053e053c0534053e0535053f0537053d053f0535053c053e05460544053c0546053d0547053f05450547053d05440546054e054c0544054e0545054f0547054d054f0545054c054e05560554054c0556054d0557054f05550557054d05540556055e055c0554055e0555055f0557055d055f0555055c055e05660564055c0566055d0567055f05650567055d05640566056e056c0564056e0565056f0567056d056f0565056c056e05760574056c0576056d0577056f05750577056d05740576057e057c0574057e0575057f0577057d057f0575057c057e05860584057c0586057d0587057f05850587057d05840586058e058c0584058e0585058f0587058d058f0585058c058e05960594058c0596058d0597058f05950597058d05940596059e059c0594059e0595059f0597059d059f0595059c059e05a605a4059c05a6059d05a7059f05a505a7059d05a405a605ae05ac05a405ae05a505af05a705ad05af05a505ac05ae05b605b405ac05b605ad05b705af05b505b705ad05b405b605be05bc05b405be05b505bf05b705bd05bf05b505bc05be05c605c405bc05c605bd05c705bf05c505c705bd05c405c605ce05cc05c405ce05c505cf05c705cd05cf05c505cc05ce05d605d405cc05d605cd05d705cf05d505d705cd05d405d605de05dc05d405de05d505df05d705dd05df05d505dc05de05e605e405dc05e605dd05e705df05e505e705dd05e405e605ee05ec05e405ee05e505ef05e705ed05ef05e505ec05ee05f605f405ec05f605ed05f705ef05f505f705ed05f405f605fe05fc05f405fe05f505ff05f705fd05ff05f505fc05fe0506060406fc050606fd050706ff0505060706fd05040606060e060c0604060e0605060f0607060d060f0605060c060e06160614060c0616060d0617060f06150617060d06140616061e061c0614061e0615061f0617061d061f0615061c061e06260624061c0626061d0627061f06250627061d06240626062e062c0624062e0625062f0627062d062f0625062c062e06360634062c0636062d0637062f06350637062d06340636063e063c0634063e0635063f0637063d063f0635063c063e06460644063c0646063d0647063f06450647063d06440646064e064c0644064e0645064f0647064d064f0645064c064e06560654064c0656064d0657064f06550657064d06540656065e065c0654065e0655065f0657065d065f0655065c065e06660664065c0666065d0667065f06650667065d06640666066e066c0664066e0665066f0667066d066f0665066c066e06760674066c0676066d0677066f06750677066d06740676067e067c0674067e0675067f0677067d067f0675067c067e06860684067c0686067d0687067f06850687067d06840686068e068c0684068e0685068f0687068d068f0685068c068e06960694068c0696068d0697068f06950697068d06940696069e069c0694069e0695069f0697069d069f0695069c069e06a606a4069c06a6069d06a7069f06a506a7069d06a406a606ae06ac06a406ae06a506af06a706ad06af06a506ac06ae06b606b406ac06b606ad06b706af06b506b706ad06b406b606be06bc06b406be06b506bf06b706bd06bf06b506bc06be06c606c406bc06c606bd06c706bf06c506c706bd06c406c606ce06cc06c406ce06c506cf06c706cd06cf06c506cc06ce06d606d406cc06d606cd06d706cf06d506d706cd06d406d606de06dc06d406de06d506df06d706dd06df06d506dc06de06e606e406dc06e606dd06e706df06e506e706dd06e406e606ee06ec06e406ee06e506ef06e706ed06ef06e506ec06ee06f606f406ec06f606ed06f706ef06f506f706ed06f406f606fe06fc06f406fe06f506ff06f706fd06ff06f506fc06fe0606070407fc060607fd060707ff0605070707fd06040706070e070c0704070e0705070f0707070d070f0705070c070e07160714070c0716070d0717070f07150717070d07140716071e071c0714071e0715071f0717071d071f0715071c071e07260724071c0726071d0727071f07250727071d07240726072e072c0724072e0725072f0727072d072f0725072c072e07360734072c0736072d0737072f07350737072d07340736073e073c0734073e0735073f0737073d073f0735073c073e07460744073c0746073d0747073f07450747073d07440746074e074c0744074e0745074f0747074d074f0745074c074e07560754074c0756074d0757074f07550757074d07540756075e075c0754075e0755075f0757075d075f0755075c075e07660764075c0766075d0767075f07650767075d07640766076e076c0764076e0765076f0767076d076f0765076c076e07760774076c0776076d0777076f07750777076d07740776077e077c0774077e0775077f0777077d077f0775077c077e07860784077c0786077d0787077f07850787077d07840786078e078c0784078e0785078f0787078d078f0785078c078e07960794078c0796078d0797078f07950797078d07940796079e079c0794079e0795079f0797079d079f0795079c079e07a607a4079c07a6079d07a7079f07a507a7079d07a407a607ae07ac07a407ae07a507af07a707ad07af07a507ac07ae07b607b407ac07b607ad07b707af07b507b707ad07b407b607be07bc07b407be07b507bf07b707bd07bf07b507bc07be07c607c407bc07c607bd07c707bf07c507c707bd07c407c607ce07cc07c407ce07c507cf07c707cd07cf07c507cc07ce07d607d407cc07d607cd07d707cf07d507d707cd07d407d607de07dc07d407de07d507df07d707dd07df07d507dc07de07e607e407dc07e607dd07e707df07e507e707dd07e407e607ee07ec07e407ee07e507ef07e707ed07ef07e507ec07ee07f607f407ec07f607ed07f707ef07f507f707ed07f407f607fe07fc07f407fe07f507ff07f707fd07ff07f507fc07fe0706080408fc070608fd070708ff0705080708fd07040806080e080c0804080e0805080f0807080d080f0805080c080e08160814080c0816080d0817080f08150817080d08140816081e081c0814081e0815081f0817081d081f0815081c081e08260824081c0826081d0827081f08250827081d08240826082e082c0824082e0825082f0827082d082f082508 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 2096 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 24 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 67072 + _typelessdata: acb6ccbf36fba93f97d9ba401c34c53e8ace673fb26536be000000000000000076aa90bf4134433f66a67e401c34c53e8ace673fb26536be0000803f000000008bf9d2bff6429b3fe892bb401c34c5be8ace67bfb265363e000000000000000055ed96bfc0c3253f840c80401c34c5be8ace67bfb265363e0000000000000000acb6ccbf36fba93f97d9ba40d53070be2ac2903e8e196e3f000000000000000076aa90bf4134433f66a67e40d530703e2ac290be8e196ebf00000000000000008bf9d2bff6429b3fe892bb40d53070be2ac2903e8e196e3f000000000000000055ed96bfc0c3253f840c8040d530703e2ac290be8e196ebf0000000000000000605a82bf41558f3f4f83c14075a9c33e1c34683f49f534be000000003eb2083d65370fbfda21103fb5d2854075a9c33e1c34683f49f534be0000803f3eb2083db79088bf8e96803f293bc24075a9c3be1c3468bf49f5343e000000000000000013a41bbfe648e53e8f8a864075a9c3be1c3468bf49f5343e0000000000000000605a82bf41558f3f4f83c140b4fa6abea9888e3e6bc26e3f000000000000000065370fbfda21103fb5d28540b4fa6a3ea9888ebe6bc26ebf0000000000000000b79088bf8e96803f293bc240b4fa6abea9888e3e6bc26e3f000000000000000013a41bbfe648e53e8f8a8640b4fa6a3ea9888ebe6bc26ebf00000000000000001dd241bf613c833f1370c440ee02c23ee19d683f329233be00000000ff27453d0e809ebeeb88f43ec5928840ee02c23ee19d683f329233be0000803fff27453df7234ebfeced683f8526c540ee02c2bee19d68bf3292333e0000000000000000c123b7be4073b93e37498940ee02c2bee19d68bf3292333e00000000000000001dd241bf613c833f1370c4402b2465be4d348c3e39756f3f00000000000000000e809ebeeb88f43ec59288402b24653e4d348cbe39756fbf0000000000000000f7234ebfeced683f8526c5402b2465be4d348c3e39756f3f0000000000000000c123b7be4073b93e374989402b24653e4d348cbe39756fbf0000000000000000515a0fbf5726743f2d97c6402760c03e4506693f452532be00000000954c723ddaadfdbdc28bd43e2f8e8a402760c03e4506693f452532be0000803f954c723d93911bbf3f8e563f2c4cc7402760c0be450669bf4525323e0000000000000000f5b32fbe935b993e2e438b402760c0be450669bf4525323e0000000000000000515a0fbf5726743f2d97c6402b495fbe76e0893ef823703f0000000000000000daadfdbdc28bd43e2f8e8a402b495f3e76e089bef82370bf000000000000000093911bbf3f8e563f2c4cc7402b495fbe76e0893ef823703f0000000000000000f5b32fbe935b993e2e438b402b495f3e76e089bef82370bf00000000000000005225b9be43d2613fd4b0c8409774be3e917a693f77e030be00000000059d8f3dcc08763d4a10b53e5c758c409774be3e917a693f77e030be0000803f059d8f3d6855d1be662b443f8964c9409774bebe917a69bf77e0303e00000000000000006820523c2185733e11298d409774bebe917a69bf77e0303e00000000000000005225b9be43d2613fd4b0c8406be657be1e4a873ee1ed703f0000000000000000cc08763d4a10b53e5c758c406be6573e1e4a87bee1ed70bf00000000000000006855d1be662b443f8964c9406be657be1e4a873ee1ed703f00000000000000006820523c2185733e11298d406be6573e1e4a87bee1ed70bf0000000000000000d47c6abe166b553f430fca40c6edbc3e9bdc693fe3522fbe0000000041859e3d34513a3e7bc3a03e51ac8d40c6edbc3e9bdc693fe3522fbe0000803f41859e3dde3c8dbec6b7373f64c1ca40c6edbcbe9bdc69bfe3522f3e00000000000000004c540a3eb6b94a3e725e8e40c6edbcbe9bdc69bfe3522f3e0000000000000000d47c6abe166b553f430fca40046752be5909853eca8b713f000000000000000034513a3e7bc3a03e51ac8d400467523e590985beca8b71bf0000000000000000de3c8dbec6b7373f64c1ca40046752be5909853eca8b713f00000000000000004c540a3eb6b94a3e725e8e400467523e590985beca8b71bf0000000000000000ee39c4bdca06493f2b65cb40aa46bb3e85436a3fe5d22dbe00000000ec5dad3df41c9b3e98ba8c3e25d88e40aa46bb3e85436a3fe5d22dbe0000803fec5dad3d67ae11be68462b3fc615cc40aa46bbbe85436abfe5d22d3e00000000000000003c54833ea873223ec0888f40aa46bbbe85436abfe5d22d3e0000000000000000ee39c4bdca06493f2b65cb406f2b4cbe7ea9823e1834723f0000000000000000f41c9b3e98ba8c3e25d88e406f2b4c3e7ea982be183472bf000000000000000067ae11be68462b3fc615cc406f2b4cbe7ea9823e1834723f00000000000000003c54833ea873223ec0888f406f2b4c3e7ea982be183472bf0000000000000000305c1b3dd2a63c3f83b1cc40d07eb93e49af6a3fb85e2cbe00000000cc25bc3d0299d83e9af3713e05f88f40d07eb93e49af6a3fb85e2cbe0000803fcc25bc3da86904bcc0d81e3fa460cd40d07eb9be49af6abfb85e2c3e00000000000000002f0ac13ea676f53d26a79040d07eb9be49af6abfb85e2c3e0000000000000000305c1b3dd2a63c3f83b1cc407c2d45beec29803ef6e5723f00000000000000000299d83e9af3713e05f88f407c2d453eec2980bef6e572bf0000000000000000a86904bcc0d81e3fa460cd407c2d45beec29803ef6e5723f00000000000000002f0ac13ea676f53d26a790407c2d453eec2980bef6e572bf0000000000000000f661303ec24c303f3bf3cd40cc95b73ed91f6b3fe8f42abe00000000bedbca3daecb0a3ff2094b3e210b9140cc95b73ed91f6b3fe8f42abe0000803fbedbca3d85c0013e6570123feca0ce40cc95b7bed91f6bbfe8f42a3e0000000000000000a446fe3ef930a73dd2b89140cc95b7bed91f6bbfe8f42a3e0000000000000000f661303ec24c303f3bf3cd4062663dbe8a147b3e66a0733f0000000000000000aecb0a3ff2094b3e210b914062663d3e8a147bbe66a073bf000000000000000085c0013e6570123feca0ce4062663dbe8a147b3e66a0733f0000000000000000a446fe3ef930a73dd2b8914062663d3e8a147bbe66a073bf0000000000000000e5ee743ec9d8293f6e91ce40b077b63e4c6d6b3f091229be00000000ad2fd23d630f1a3f11f7383efe8d9140b077b63e4c6d6b3f091229be0000803fad2fd23d2096463e96f20b3f353dcf40b077b6be4c6d6bbf0912293e000000000000000032790e3f86bc823dc5399240b077b6be4c6d6bbf0912293e0000000000000000e5ee743ec9d8293f6e91ce4053a739be0936773ebf0d743f0000000000000000630f1a3f11f7383efe8d914053a7393e093677bebf0d74bf00000000000000002096463e96f20b3f353dcf4053a739be0936773ebf0d743f000000000000000032790e3f86bc823dc539924053a7393e093677bebf0d74bf000000000000000002d29c3e9e66233f8a2ccf406052b53e6fbb6b3fc12f27be00000000bf7ed93dff41293f150e273e620d92406052b53e6fbb6b3fc12f27be0000803fbf7ed93de0ca853e7e76053f67d6cf406052b5be6fbb6bbfc12f273e00000000000000006ebe1d3f56363d3d3fb792406052b5be6fbb6bbfc12f273e000000000000000002d29c3e9e66233f8a2ccf40fbb135be3146733e9e7c743f0000000000000000ff41293f150e273e620d9240fbb1353e314673be9e7c74bf0000000000000000e0ca853e7e76053f67d6cf40fbb135be3146733e9e7c743f00000000000000006ebe1d3f56363d3d3fb79240fbb1353e314673be9e7c74bf00000000000000000441bf3e8ef61c3f6cc4cf40ea25b43e330a6c3f2b4e25be00000000d4c8e03d1a63383fae4f153e38899240ea25b43e330a6c3f2b4e25be0000803fd4c8e03d0a60a83edbf8fd3e5f6cd040ea25b4be330a6cbf2b4e253e00000000000000009df22c3f5c39eb3c2b319340ea25b4be330a6cbf2b4e253e00000000000000000441bf3e8ef61c3f6cc4cf40318531be44456f3eceec743f00000000000000001a63383fae4f153e388992403185313e44456fbeceec74bf00000000000000000a60a83edbf8fd3e5f6cd040318531be44456f3eceec743f00000000000000009df22c3f5c39eb3c2b3193403185313e44456fbeceec74bf0000000000000000b0c4e13ea688163ff158d04049f2b23e99596c3f8c6c23be00000000d40de83d5c72473f35bd033e6701934049f2b23e99596c3f8c6c23be0000803fd40de83dc80acb3ee008f13efbfed04049f2b2be99596cbf8c6c233e000000000000000068153c3fd0c53a3c71a7934049f2b2be99596cbf8c6c233e0000000000000000b0c4e13ea688163ff158d04009202dbeb1326b3e265e753f00000000000000005c72473f35bd033e6701934009202d3eb1326bbe265e75bf0000000000000000c80acb3ee008f13efbfed04009202dbeb1326b3e265e753f000000000000000068153c3fd0c53a3c71a7934009202d3eb1326bbe265e75bf0000000000000000a32e023f1c1d103ff5e9d0408eb7b13ea1a96c3f958a21be00000000a24def3d616f563f64afe43dd77593408eb7b13ea1a96c3f958a21be0000803fa24def3d56cbed3e781de43e158ed1408eb7b1bea1a96cbf958a213e000000000000000069264b3fc039bcbbf71994408eb7b1bea1a96cbf958a213e0000000000000000a32e023f1c1d103ff5e9d0407c8128be5e0e673e77d0753f0000000000000000616f563f64afe43dd77593407c81283e5e0e67be77d075bf000000000000000056cbed3e781de43e158ed1407c8128be5e0e673e77d0753f000000000000000069264b3fc039bcbbf71994407c81283e5e0e67be77d075bf00000000000000008d85133f2cb4093f5377d140bb75b03e3cfa6c3f2ba81fbe000000002588f63db759653fe43fc23d71e69340bb75b03e3cfa6c3f2ba81fbe0000803f2588f63d0551083f1f37d73e8919d240bb75b0be3cfa6cbf2ba81f3e00000000000000002f255a3f0414babca7889440bb75b0be3cfa6cbf2ba81f3e00000000000000008d85133f2cb4093f5377d14055a823be60d8623e8643763f0000000000000000b759653fe43fc23d71e6934055a8233e60d862be864376bf00000000000000000551083f1f37d73e8919d24055a823be60d8623e8643763f00000000000000002f255a3f0414babca788944055a8233e60d862be864376bf00000000000000003ee7243f024e033fe500d240db2caf3e694b6d3fdac41dbe0000000049bdfd3d0631743f142ea03d1f539440db2caf3e694b6d3fdac41dbe0000803f49bdfd3d98c7193f2c56ca3e30a1d240db2cafbe694b6dbfdac41d3e00000000000000006011693f96d221bd6af39440db2cafbe694b6dbfdac41d3e00000000000000003ee7243f024e033fe500d2408e931ebe7e905e3e1ab7763f00000000000000000631743f142ea03d1f5394408e931e3e7e905ebe1ab776bf000000000000000098c7193f2c56ca3e30a1d2408e931ebe7e905e3e1ab7763f00000000000000006011693f96d221bd6af394408e931e3e7e905ebe1ab776bf0000000000000000da53363f92d5f93e8786d240f8dcad3e219d6d3f37e01bbe000000007c76023e6e7a813f24f87c3dc9bb9440f8dcad3e219d6d3f37e01bbe0000803f7c76023e88492b3ff87abd3ee624d340f8dcadbe219d6dbf37e01b3e00000000000000008aea773fa8dc65bd285a9540f8dcadbe219d6dbf37e01b3e0000000000000000da53363f92d5f93e8786d240034219be8d365a3ef72a773f00000000000000006e7a813f24f87c3dc9bb94400342193e8d365abef72a77bf000000000000000088492b3ff87abd3ee624d340034219be8d365a3ef72a773f00000000000000008aea773fa8dc65bd285a95400342193e8d365abef72a77bf000000000000000089cb473f6915ed3e1108d3401786ac3e5fef6d3feaf919be00000000900b063e6ad2883f78573a3d5b2095401786ac3e5fef6d3feaf919be0000803f900b063efdd63c3feca5b03e82a4d3401786acbe5fef6dbfeaf9193e00000000000000002458833f389294bdccbc95401786acbe5fef6dbfeaf9193e000000000000000089cb473f6915ed3e1108d34097b213be7aca553edb9e773f00000000000000006ad2883f78573a3d5b20954097b2133e7aca55bedb9e77bf0000000000000000fdd63c3feca5b03e82a4d34097b213be7aca553edb9e773f00000000000000002458833f389294bdccbc954097b2133e7aca55bedb9e77bf0000000000000000764e593fde5be03e5e85d3404628ab3e1c426e3f6b1118be00000000d99d093e4620903f68fdf03cbe8095404628ab3e1c426e3f6b1118be0000803fd99d093e21704e3f5dd7a33ede1fd4404628abbe1c426ebf6b11183e00000000000000001bb18a3faad2b5bd3e1b96404628abbe1c426ebf6b11183e0000000000000000764e593fde5be03e5e85d3402de40dbe074c513e8012783f00000000000000004620903f68fdf03cbe8095402de40d3e074c51be801278bf000000000000000021704e3f5dd7a33ede1fd4402de40dbe074c513e8012783f00000000000000001bb18a3faad2b5bd3e1b96402de40d3e074c51be801278bf0000000000000000c7dc6a3f73a9d33e46fed34090c3a93e51956e3f932616be00000000502d0d3ec863973fa0c25d3ce0dc954090c3a93e51956e3f932616be0000803f502d0d3e1815603fd00f973ed496d44090c3a9be51956ebf9326163e0000000000000000f1ff913f3aaed6bd6e75964090c3a9be51956ebf9326163e0000000000000000c7dc6a3f73a9d33e46fed34094d507be5ebb4c3e9985783f0000000000000000c863973fa0c25d3ce0dc954094d5073e5ebb4cbe998578bf00000000000000001815603fd00f973ed496d44094d507be5ebb4c3e9985783f0000000000000000f1ff913f3aaed6bd6e75964094d5073e5ebb4cbe998578bf0000000000000000ab767c3f8afec63ea172d4400558a83ef4e86e3fec3814be00000000f0b9103ebe9c9e3f40ec0cbbab3496400558a83ef4e86e3fec3814be0000803ff0b9103e12c6713fa84f8a3e3909d5400558a8bef4e86ebfec38143e00000000000000007244993fea22f7bd43cb96400558a8bef4e86ebfec38143e0000000000000000ab767c3f8afec63ea172d440a48501be6318483ed6f7783f0000000000000000be9c9e3f40ec0cbbab349640a485013e631848bed6f778bf000000000000000012c6713fa84f8a3e3909d540a48501be6318483ed6f7783f00000000000000007244993fea22f7bd43cb9640a485013e631848bed6f778bf00000000000000001f0e873f665bba3e45e2d440ace5a63e033d6f3faf4712be00000000b243143ef5caa53fe87490bc0b889640ace5a63e033d6f3faf4712be0000803fb243143e95c1813f542e7b3ee476d540ace5a6be033d6fbfaf47123e00000000000000006b7ea03f14970bbeaa1c9740ace5a6be033d6fbfaf47123e00000000000000001f0e873f665bba3e45e2d440b5e6f5bdb562433ee668793f0000000000000000f5caa53fe87490bc0b889640b5e6f53db56243bee66879bf000000000000000095c1813f542e7b3ee476d540b5e6f5bdb562433ee668793f00000000000000006b7ea03f14970bbeaa1c9740b5e6f53db56243bee66879bf0000000000000000d9e68f3f9ec0ad3e0a4dd5409d6ca53e70916f3fc85210be0000000095ca173e37eeac3f34d006bdf0d696409d6ca53e70916f3fc85210be0000803f95ca173e47a68a3fe1cd613eacdfd5409d6ca5be70916fbfc852103e0000000000000000a5ada73f68671bbe926997409d6ca5be70916fbfc852103e0000000000000000d9e68f3f9ec0ad3e0a4dd540f43ae8bda59a3e3e6bd8793f000000000000000037eeac3f34d006bdf0d69640f43ae83da59a3ebe6bd879bf000000000000000047a68a3fe1cd613eacdfd540f43ae8bda59a3e3e6bd8793f0000000000000000a5ada73f68671bbe92699740f43ae83da59a3ebe6bd879bf000000000000000099c5983f9d2ea13ec8b2d540eaeca33e33e66f3fc0590ebe00000000984e1b3e5106b43f688c44bd46219740eaeca33e33e66f3fc0590ebe0000803f984e1b3e3691933fd07e483e6943d640eaeca3be33e66fbfc0590e3e0000000000000000eed1ae3f84012bbee7b19740eaeca3be33e66fbfc0590e3e000000000000000099c5983f9d2ea13ec8b2d540bc05dabd2ac0393e04467a3f00000000000000005106b43f688c44bd46219740bc05da3d2ac039be04467abf00000000000000003691933fd07e483e6943d640bc05dabd2ac0393e04467a3f0000000000000000eed1ae3f84012bbee7b19740bc05da3d2ac039be04467abf00000000000000006aaaa13faaa5943e5013d640a366a23e483b703fb65b0cbe00000000b8cf1e3e1013bb3f02b580bdfc669740a366a23e483b703fb65b0cbe0000803fb8cf1e3e6b829c3fb1412f3eeba1d640a366a2be483b70bfb65b0c3e000000000000000011ebb53f24643abe97f59740a366a2be483b70bfb65b0c3e00000000000000006aaaa13faaa5943e5013d6403445cbbdebd2343e53b17a3f00000000000000001013bb3f02b580bdfc6697403445cb3debd234be53b17abf00000000000000006b829c3fb1412f3eeba1d6403445cbbdebd2343e53b17a3f000000000000000011ebb53f24643abe97f597403445cb3debd234be53b17abf00000000000000006495aa3f5426883e7b6ed640e2d9a03ea490703f73580abe00000000f94d223e4414c23f5ab39ebd01a89740e2d9a03ea490703f73580abe0000803ff94d223efe79a53fa817163e0afbd640e2d9a0bea49070bf73580a3e0000000000000000def8bc3fac8e49be90349840e2d9a0bea49070bf73580a3e00000000000000006495aa3f5426883e7b6ed64001f7bbbd2bd32f3ee8197b3f00000000000000004414c23f5ab39ebd01a8974001f7bb3d2bd32fbee8197bbf0000000000000000fe79a53fa817163e0afbd64001f7bbbd2bd32f3ee8197b3f0000000000000000def8bc3fac8e49be9034984001f7bb3d2bd32fbee8197bbf00000000000000009786b33f6a62773e1cc4d640c5469f3e37e6703fb54f08be000000005bc9253eb509c93f1440bcbd48e49740c5469f3e37e6703fb54f08be0000803f5bc9253efe77ae3fe303fa3d9a4ed740c5469fbe37e670bfb54f083e00000000000000001cfbc33f828058bec66e9840c5469fbe37e670bfb54f083e00000000000000009786b33f6a62773e1cc4d640ee18acbd3ac12a3e517f7b3f0000000000000000b509c93f1440bcbd48e49740ee18ac3d3ac12abe517f7bbf0000000000000000fe77ae3fe303fa3d9a4ed740ee18acbd3ac12a3e517f7b3f00000000000000001cfbc33f828058bec66e9840ee18ac3d3ac12abe517f7bbf0000000000000000147ebc3f258d5e3e0514d74062ad9d3efb3b713f944006be00000000e441293e3cf3cf3ff258d9bdbf1b984062ad9d3efb3b713f944006be0000803fe441293e7a7cb73f3602c83d6b9cd74062ad9dbefb3b71bf9440063e0000000000000000a2f1ca3f833867be25a4984062ad9dbefb3b71bf9440063e0000000000000000147ebc3f258d5e3e0514d74046a99bbdcf9c253e19e17b3f00000000000000003cf3cf3ff258d9bdbf1b984046a99b3dcf9c25be19e17bbf00000000000000007a7cb73f3602c83d6b9cd74046a99bbdcf9c253e19e17b3f0000000000000000a2f1ca3f833867be25a4984046a99b3dcf9c25be19e17bbf0000000000000000e37bc53fefcd453e095ed740e10d9c3ee691713f8d2a04be0000000099b72c3ea9d0d63f5efcf5bd574e9840e10d9c3ee691713f8d2a04be0000803f99b72c3e7a87c03f7f2c963d51e4d740e10d9cbee69171bf8d2a043e000000000000000040dcd13fdeb575be9fd49840e10d9cbee69171bf8d2a043e0000000000000000e37bc53fefcd453e095ed74031a68abd0f66203ec63e7c3f0000000000000000a9d0d63f5efcf5bd574e984031a68a3d0f6620bec63e7cbf00000000000000007a87c03f7f2c963d51e4d74031a68abd0f66203ec63e7c3f000000000000000040dcd13fdeb575be9fd4984031a68a3d0f6620bec63e7cbf00000000000000001480ce3f09262d3ef8a1d74061689a3ee9e7713f530d02be00000000802a303ecca1dd3fa91409be047c984061689a3ee9e7713f530d02be0000803f802a303e0d99c93fa00a493d1a26d84061689abee9e771bf530d023e0000000000000000c5bad83f05fc81be2600994061689abee9e771bf530d023e00000000000000001480ce3f09262d3ef8a1d740771b72bd591d1b3ed2977c3f0000000000000000cca1dd3fa91409be047c9840771b723d591d1bbed2977cbf00000000000000000d99c93fa00a493d1a26d840771b72bd591d1b3ed2977c3f0000000000000000c5bad83f05fc81be26009940771b723d591d1bbed2977cbf0000000000000000b18ad73f5d96143ea8dfd7400cbd983ef93d723f75d0ffbd00000000a49a333e7f66e43f2def16bebaa498400cbd983ef93d723f75d0ffbd0000803fa49a333e3cb1d23f1c3acc3c9c61d8400cbd98bef93d72bf75d0ff3d00000000000000000a8ddf3f23ff88beae2699400cbd98bef93d72bf75d0ff3d0000000000000000b18ad73f5d96143ea8dfd740dabc4dbdc5c2153eb4eb7c3f00000000000000007f66e43f2def16bebaa49840dabc4d3dc5c215beb4eb7cbf00000000000000003cb1d23f1c3acc3c9c61d840dabc4dbdc5c2153eb4eb7c3f00000000000000000a8ddf3f23ff88beae269940dabc4d3dc5c215beb4eb7cbf0000000000000000be9be03fe83ff83de416d8400f0c973e0894723f3275fbbd000000001008373e981eeb3ff48c24be6cc898400f0c973e0894723f3275fbbd0000803f1008373e08d0db3f0023653aa296d8400f0c97be089472bf3275fb3d0000000000000000e252e63fe2e38fbe2a4899400f0c97be089472bf3275fb3d0000000000000000be9be03fe83ff83de416d840ac2d28bd7456103ede397d3f0000000000000000981eeb3ff48c24be6cc89840ac2d283d745610bede397dbf000000000000000008d0db3f0023653aa296d840ac2d28bd7456103ede397d3f0000000000000000e252e63fe2e38fbe2a489940ac2d283d745610bede397dbf000000000000000043b3e93fa088c73d7d47d8409a55953e05ea723f6b08f7bd00000000cf723a3ef5c9f13fb8ed31be0fe798409a55953e05ea723f6b08f7bd0000803fcf723a3e79f5e43f7c11bdbcfbc4d8409a5595be05ea72bf6b08f73d00000000000000002b0ced3f1caa96be8d6499409a5595be05ea72bf6b08f73d000000000000000043b3e93fa088c73d7d47d8401b6b01bd04d90a3eb8817d3f0000000000000000f5c9f13fb8ed31be0fe798401b6b013d04d90abeb8817dbf000000000000000079f5e43f7c11bdbcfbc4d8401b6b01bd04d90a3eb8817d3f00000000000000002b0ced3f1caa96be8d6499401b6b013d04d90abeb8817dbf00000000000000003ed1f23f9408973d4171d840e699933ee93f733f4288f2bd00000000f1da3d3e7468f83f92103fbe97009940e699933ee93f733f4288f2bd0000803ff1da3d3e8a21ee3f5e3740bd76ecd840e69993bee93f73bf4288f23d0000000000000000c0b8f33f5a519dbecc7b9940e69993bee93f73bf4288f23d00000000000000003ed1f23f9408973d4171d840dde6b2bc6e4a053eaac27d3f00000000000000007468f83f92103fbe97009940dde6b23c6e4a05beaac27dbf00000000000000008a21ee3f5e3740bd76ecd840dde6b2bc6e4a053eaac27d3f0000000000000000c0b8f33f5a519dbecc7b9940dde6b23c6e4a05beaac27dbf0000000000000000acf5fb3f80844d3d0094d84028d9913e9b95733f97f3edbd000000008640413efcf9fe3f10f54bbefc14994028d9913e9b95733f97f3edbd0000803f8640413e3854f73f14b990bde10cd94028d991be9b9573bf97f3ed3d00000000000000008858fa3f5dd9a3bedd8d994028d991be9b9573bf97f3ed3d0000000000000000acf5fb3f80844d3d0094d840de1341bc3056ff3d10fc7d3f0000000000000000fcf9fe3f10f54bbefc149940de13413c3056ffbd10fc7dbf00000000000000003854f73f14b990bde10cd940de1341bc3056ff3d10fc7d3f00000000000000008858fa3f5dd9a3bedd8d9940de13413c3056ffbd10fc7dbf00000000000000004490024050e4da3c85afd840a713903e11eb733f054ae9bd00000000a1a3443e36bf0240129b58be33249940a713903e11eb733f054ae9bd0000803fa1a3443ebd4600401419c1bd0826d940a71390be11eb73bf054ae93d0000000000000000af7500401342aabeb69a9940a71390be11eb73bf054ae93d00000000000000004490024050e4da3c85afd8400cc6bbba9cf7f33d452d7e3f000000000000000036bf0240129b58be332499400cc6bb3a9cf7f3bd452d7ebf0000000000000000bd4600401419c1bd0826d9400cc6bbba9cf7f33d452d7e3f0000000000000000af7500401342aabeb69a99400cc6bb3a9cf7f3bd452d7ebf0000000000000000e328074000df5d3b9ec3d840a2498e3e3740743fa289e4bd000000005604483edbfa0540e40165be382e9940a2498e3e3740743fa289e4bd0000803f5604483ea1e60440b339f1bdb737d940a2498ebe374074bfa289e43d000000000000000099b803401d8bb0be51a29940a2498ebe374074bfa289e43d0000000000000000e328074000df5d3b9ec3d8402104173c6079e83d9c557e3f0000000000000000dbfa0540e40165be382e9940210417bc6079e8bd9c557ebf0000000000000000a1e60440b339f1bdb737d9402104173c6079e83d9c557e3f000000000000000099b803401d8bb0be51a29940210417bc6079e8bd9c557ebf0000000000000000a9c40b409863a2bc16d0d8406a7b8c3efc94743f8cb1dfbd00000000bd624b3ee32f0940452971befe3299406a7b8c3efc94743f8cb1dfbd0000803fbd624b3ebe890940d88b10beb941d9406a7b8cbefc9474bf8cb1df3d0000000000000000f8f4064055b4b6bea1a499406a7b8cbefc9474bf8cb1df3d0000000000000000a9c40b409863a2bc16d0d840b831a53cd2dcdc3d63747e3f0000000000000000e32f0940452971befe329940b831a5bcd2dcdcbd63747ebf0000000000000000be890940d88b10beb941d940b831a53cd2dcdc3d63747e3f0000000000000000f8f4064055b4b6bea1a49940b831a5bcd2dcdcbd63747ebf00000000000000008e6310408cb72fbdb9d4d84051a98a3e4ee9743f66c0dabd00000000eebe4e3e4a5e0c40d5107dbe7f32994051a98a3e4ee9743f66c0dabd0000803feebe4e3e09300e401e5828bed943d94051a98abe4ee974bf66c0da3d0000000000000000c52a0a4088bdbcbe9fa1994051a98abe4ee974bf66c0da3d00000000000000008e6310408cb72fbdb9d4d8406ba8003df222d13de5887e3f00000000000000004a5e0c40d5107dbe7f3299406ba800bdf222d1bde5887ebf000000000000000009300e401e5828bed943d9406ba8003df222d13de5887e3f0000000000000000c52a0a4088bdbcbe9fa199406ba800bdf222d1bde5887ebf00000000000000008205154020d686bd51d1d840b0d3883e163d753f90b5d5bd000000000419523e0e860f40505c84beb72c9940b0d3883e163d753f90b5d5bd0000803f0419523e71d91240dbff3fbee13dd940b0d388be163d75bf90b5d53d0000000000000000fd590d40b6a6c2be47999940b0d388be163d75bf90b5d53d00000000000000008205154020d686bd51d1d84087ee2f3d904dc53d66927e3f00000000000000000e860f40505c84beb72c994087ee2fbd904dc5bd66927ebf000000000000000071d91240dbff3fbee13dd94087ee2f3d904dc53d66927e3f0000000000000000fd590d40b6a6c2be4799994087ee2fbd904dc5bd66927ebf000000000000000077aa1940ac84b5bda9c5d840e3fa863e4190753f0490d0bd000000001c71553e2fa7124045108abe9f219940e3fa863e4190753f0490d0bd0000803f1c71553ee8851740618157be9c2fd940e3fa86be419075bf0490d03d0000000000000000a0821040ca6fc8be928b9940e3fa86be419075bf0490d03d000000000000000077aa1940ac84b5bda9c5d8400969603d345eb93d29907e3f00000000000000002fa7124045108abe9f219940096960bd345eb9bd29907ebf0000000000000000e8851740618157be9c2fd9400969603d345eb93d29907e3f0000000000000000a0821040ca6fc8be928b9940096960bd345eb9bd29907ebf000000000000000055521e40d0e4e3bd8ab1d840551f853ebfe2753fe64dcbbd0000000056c7583eb1c115400ca48fbe2e119940551f853ebfe2753fe64dcbbd0000803f56c7583e53351c405adb6ebed118d940551f85bebfe275bfe64dcb3d0000000000000000afa413408518cebe75789940551f85bebfe275bfe64dcb3d000000000000000055521e40d0e4e3bd8ab1d840430a893db055ad3d71817e3f0000000000000000b1c115400ca48fbe2e119940430a89bdb055adbd71817ebf000000000000000053351c405adb6ebed118d940430a893db055ad3d71817e3f0000000000000000afa413408518cebe75789940430a89bdb055adbd71817ebf000000000000000007fd22403cf908bebf94d8407241833e7334763fc1eec5bd00000000d61b5c3e9dd51840c61795be61fb98407241833e7334763fc1eec5bd0000803fd61b5c3e9be72040d80583be4cf9d840724183be733476bfc1eec53d000000000000000031c0164000a1d3beee5f9940724183be733476bfc1eec53d000000000000000007fd22403cf908bebf94d840a576a23d5036a13d78657e3f00000000000000009dd51840c61795be61fb9840a576a2bd5036a1bd78657ebf00000000000000009be72040d80583be4cf9d840a576a23d5036a13d78657e3f000000000000000031c0164000a1d3beee5f9940a576a2bd5036a1bd78657ebf000000000000000071aa2740d2d41fbe116fd840aa61813e4985763f2272c0bd00000000be6e5f3efbe21b409f6b9abe33e09840aa61813e4985763f2272c0bd0000803fbe6e5f3ea39c25402b888ebed4d0d840aa6181be498576bf2272c03d00000000000000002dd519406109d9bef6419940aa6181be498576bf2272c03d000000000000000071aa2740d2d41fbe116fd8406f77bc3d6c02953d793b7e3f0000000000000000fbe21b409f6b9abe33e098406f77bcbd6c0295bd793b7ebf0000000000000000a39c25402b888ebed4d0d8406f77bc3d6c02953d793b7e3f00000000000000002dd519406109d9bef64199406f77bcbd6c0295bd793b7ebf0000000000000000745a2c40978336be4a40d840fa007f3e2ad5763f5fd6babd0000000035c0623edce91e40749f9fbe9ebf9840fa007f3e2ad5763f5fd6babd0000803f35c0623e49542a40d8f399be349fd840fa007fbe2ad576bf5fd6ba3d0000000000000000b1e31c408051debe881e9940fa007fbe2ad576bf5fd6ba3d0000000000000000745a2c40978336be4a40d8407a09d73d52bb883db4027e3f0000000000000000dce91e40749f9fbe9ebf98407a09d7bd52bb88bdb4027ebf000000000000000049542a40d8f399be349fd8407a09d73d52bb883db4027e3f0000000000000000b1e31c408051debe881e99407a09d7bd52bb88bdb4027ebf0000000000000000eb0c314092034dbe3408d840e33c7b3e0124773fbe1ab5bd000000006610663e55ea214067b3a4be9a999840e33c7b3e0124773fbe1ab5bd0000803f6610663e670e2f40dc47a5be3464d840e33c7bbe012477bfbe1ab53d0000000000000000d1eb1f407a79e3be9af59840e33c7bbe012477bfbe1ab53d0000000000000000eb0c314092034dbe3408d8406f29f23d78c6783d66ba7d3f000000000000000055ea214067b3a4be9a9998406f29f2bd78c678bd66ba7dbf0000000000000000670e2f40dc47a5be3464d8406f29f23d78c6783d66ba7d3f0000000000000000d1eb1f407a79e3be9af598406f29f2bd78c678bd66ba7dbf0000000000000000b2c13540695263be97c6d7401078773eaf71773f273fafbd000000007b5f693e7ae42440c4a7a9be256e98401078773eaf71773f273fafbd0000803f7b5f693ed7ca33400283b0be9d1fd840107877beaf7177bf273faf3d00000000000000009fed22409281e8be2bc79840107877beaf7177bf273faf3d0000000000000000b2c13540695263be97c6d740c2e9063e3cfa5f3dcb617d3f00000000000000007ae42440c4a7a9be256e9840c2e906be3cfa5fbdcb617dbf0000000000000000d7ca33400283b0be9d1fd840c2e9063e3cfa5f3dcb617d3f00000000000000009fed22409281e8be2bc79840c2e906be3cfa5fbdcb617dbf00000000000000009b783a40526e79be3f7bd740b2b3733e22be773f3f42a9bd00000000a3ad6c3e69d82740837caebe353d9840b2b3733e22be773f3f42a9bd0000803fa3ad6c3e6789384062a4bbbe3bd1d740b2b373be22be77bf3f42a93d000000000000000035e92540bc69edbe31939840b2b373be22be77bf3f42a93d00000000000000009b783a40526e79be3f7bd7408a01153e6815473d28f87c3f000000000000000069d82740837caebe353d98408a0115be681547bd28f87cbf00000000000000006789384062a4bbbe3bd1d7408a01153e6815473d28f87c3f000000000000000035e92540bc69edbe319398408a0115be681547bd28f87cbf000000000000000075313f4096aa87bef825d740f5f06f3e3f09783f8a23a3bd000000000efb6f3e43c62a40e631b3bec6069840f5f06f3e3f09783f8a23a3bd0000803f0efb6f3ee5493d40e3aac6bed878d740f5f06fbe3f0978bf8a23a33d0000000000000000b3de28403332f2bea6599840f5f06fbe3f0978bf8a23a33d000000000000000075313f4096aa87bef825d7408d59233e441d2e3dc67c7c3f000000000000000043c62a40e631b3bec60698408d5923be441d2ebdc67c7cbf0000000000000000e5493d40e3aac6bed878d7408d59233e441d2e3dc67c7c3f0000000000000000b3de28403332f2bea65998408d5923be441d2ebdc67c7cbf00000000000000000dec4340428292be8cc6d6400e316c3eeb52783fffe29cbd00000000f147733e2bae2d403ec8b7bed0ca97400e316c3eeb52783fffe29cbd0000803ff147733e1c0c42404695d1be3f16d7400e316cbeeb5278bfffe29c3d00000000000000003ace2b4042dbf6be831a98400e316cbeeb5278bfffe29c3d00000000000000000dec4340428292be8cc6d64012ef313ef017153dedee7b3f00000000000000002bae2d403ec8b7bed0ca974012ef31bef01715bdedee7bbf00000000000000001c0c42404695d1be3f16d74012ef313ef017153dedee7b3f00000000000000003ace2b4042dbf6be831a984012ef31bef01715bdedee7bbf00000000000000002aa84840133d9dbec75cd6404375683e109b783f1d8096bd000000008294763e4a903040c13fbcbe498997404375683e109b783f1d8096bd0000803f8294763ecfcf46406a62dcbe3ba9d640437568be109b78bf1d80963d0000000000000000efb72e401865fbbebdd59740437568be109b78bf1d80963d00000000000000002aa84840133d9dbec75cd640fbbe403e7015f83cf54d7b3f00000000000000004a903040c13fbcbe49899740fbbe40be7015f8bcf54d7bbf0000000000000000cfcf46406a62dcbe3ba9d640fbbe403e7015f83cf54d7b3f0000000000000000efb72e401865fbbebdd59740fbbe40be7015f8bcf54d7bbf00000000000000008d654d40e3d9a7be78e8d540efbe643e91e1783fadfa8fbd00000000f8e0793ecf6c3340b998c0be2a429740efbe643e91e1783fadfa8fbd0000803ff8e0793ebd944b402211e7be9c31d640efbe64be91e178bfadfa8f3d0000000000000000ff9b3140f8cfffbe4e8b9740efbe64be91e178bfadfa8f3d00000000000000008d654d40e3d9a7be78e8d540f1c54f3eb0f6c53c3a997a3f0000000000000000cf6c3340b998c0be2a429740f1c54fbeb0f6c5bc3a997abf0000000000000000bd944b402211e7be9c31d640f1c54f3eb0f6c53c3a997a3f0000000000000000ff9b3140f8cfffbe4e8b9740f1c54fbeb0f6c5bc3a997abf0000000000000000f42352408057b2be6e69d540610f613e5726793fa05289bd000000008f2d7d3eea43364078d3c4be66f59640610f613e5726793fa05289bd0000803f8f2d7d3ea25a504037a0f1be31afd540610f61be572679bfa052893d0000000000000000987a3440180e02bf293b9740610f61be572679bfa052893d0000000000000000f42352408057b2be6e69d5404b005f3eb8df933c23d0793f0000000000000000ea43364078d3c4be66f596404b005fbeb8df93bc23d079bf0000000000000000a25a504037a0f1be31afd5404b005f3eb8df933c23d0793f0000000000000000987a3440180e02bf293b97404b005fbeb8df93bc23d079bf000000000000000019e35640b2b4bcbe79dfd4400c685d3e4969793f158882bd00000000413d803ed31539404ef0c8beefa296400c685d3e4969793f158882bd0000803f413d803e332155406a0efcbec821d5400c685dbe496979bf1588823d0000000000000000ed533740032504bf3ee596400c685dbe496979bf1588823d000000000000000019e35640b2b4bcbe79dfd4402b6a6e3ec0b9433c25f2783f0000000000000000d31539404ef0c8beefa296402b6a6ebec0b943bc25f278bf0000000000000000332155406a0efcbec821d5402b6a6e3ec0b9433c25f2783f0000000000000000ed533740032504bf3ee596402b6a6ebec0b943bc25f278bf0000000000000000afa25b4052f0c6be6a4ad44054ca593e4faa793f083677bd000000000be4813ec5e23b408eefccbeba4a964054ca593e4faa793f083677bd0000803f0be4813e22e85940472d03bf3589d44054ca59be4faa79bf0836773d000000000000000038283a40e52c06bf8589964054ca59be4faa79bf0836773d0000000000000000afa25b4052f0c6be6a4ad44054ff7d3e60e7bf3bc1fe773f0000000000000000c5e23b408eefccbeba4a964054ff7dbe60e7bfbbc1fe77bf000000000000000022e85940472d03bf3589d44054ff7d3e60e7bf3bc1fe773f000000000000000038283a40e52c06bf8589964054ff7dbe60e7bfbbc1fe77bf00000000000000006b626040f208d1be18aad3409f37563e4fe9793f181969bd00000000448b833efdaa3e40bad1d0beb8ec95409f37563e4fe9793f181969bd0000803f448b833e21af5e40974108bf4de5d3409f3756be4fe979bf1819693d0000000000000000b3f73c40fb2508bfed2796409f3756be4fe979bf1819693d00000000000000006b626040f208d1be18aad340badd863e00e45cb984f5763f0000000000000000fdaa3e40bad1d0beb8ec9540badd86be00e45c3984f576bf000000000000000021af5e40974108bf4de5d340badd863e00e45cb984f5763f0000000000000000b3f73c40fb2508bfed279640badd86be00e45c3984f576bf0000000000000000f82165408efddabe58fed2407ab1523e35267a3fa8b85abd000000001133853ec06e4140fa96d4bed48895407ab1523e35267a3fa8b85abd0000803f1133853ed7756340a1430dbfe635d3407ab152be35267abfa8b85a3d00000000000000009fc23f4057100abf62c095407ab152be35267abfa8b85a3d0000000000000000f82165408efddabe58fed240e2cc8e3e70d2ccbb13d6753f0000000000000000c06e4140fa96d4bed4889540e2cc8ebe70d2cc3b13d675bf0000000000000000d7756340a1430dbfe635d340e2cc8e3e70d2ccbb13d6753f00000000000000009fc23f4057100abf62c09540e2cc8ebe70d2cc3b13d675bf000000000000000000e16940bbcce4be0247d24044394f3eea607a3f75174cbd0000000095db863e522e4440d93fd8befa1e954044394f3eea607a3f75174cbd0000803f95db863eec3b6840ac3212bfd97ad24044394fbeea607abf75174c3d00000000000000003e8942403bec0bbfd152954044394fbeea607abf75174c3d000000000000000000e16940bbcce4be0247d240bcca963e18ce48bc1ca0743f0000000000000000522e4440d93fd8befa1e9540bcca96be18ce483c1ca074bf0000000000000000ec3b6840ac3212bfd97ad240bcca963e18ce48bc1ca0743f00000000000000003e8942403bec0bbfd1529540bcca96be18ce483c1ca074bf00000000000000002c9f6e403475eebeef83d14074d04b3e5c997a3f64373dbd00000000f484883efce94640b8ccdbbe15af944074d04b3e5c997a3f64373dbd0000803ff484883e05016d40140e17bfffb3d14074d04bbe5c997abf64373d3d0000000000000000d54b4540d6b90dbf25df944074d04bbe5c997abf64373d3d00000000000000002c9f6e403475eebeef83d140bdd49e3ed84395bc6553733f0000000000000000fce94640b8ccdbbe15af9440bdd49ebed843953c655373bf000000000000000005016d40140e17bfffb3d140bdd49e3ed84395bc6553733f0000000000000000d54b4540d6b90dbf25df9440bdd49ebed843953c655373bf00000000000000001c5c7340eaf5f7befcb4d0409878483e71cf7a3f21192ebd00000000552f8a3e0ca24940c63ddfbe0c3994409878483e71cf7a3f21192ebd0000803f552f8a3ec1c471404dd51bbf35e1d040987848be71cf7abf21192e3d0000000000000000b10a48403b790fbf45659440987848be71cf7abf21192e3d00000000000000001c5c7340eaf5f7befcb4d0403de8a63e18c1c5bcc4ef713f00000000000000000ca24940c63ddfbe0c3994403de8a6be18c1c53cc4ef71bf0000000000000000c1c471404dd51bbf35e1d0403de8a63e18c1c5bcc4ef713f0000000000000000b10a48403b790fbf456594403de8a6be18c1c53cc4ef71bf000000000000000074177840baa600bf0ddacf400433453e1a037b3f9bc01ebd00000000dfda8b3ed0564c409493e2bec3bc93400433453e1a037b3f9bc01ebd0000803fdfda8b3ebf867640a28720bf6002d040043345be1a037bbf9bc01e3d00000000000000001bc64a40b22a11bf16e59340043345be1a037bbf9bc01e3d000000000000000074177840baa600bf0ddacf408d02af3efccef5bc2775703f0000000000000000d0564c409493e2bec3bc93408d02afbefccef53c277570bf0000000000000000bf867640a28720bf6002d0408d02af3efccef5bc2775703f00000000000000001bc64a40b22a11bf16e593408d02afbefccef53c277570bf0000000000000000d2d07c40523d05bf00f3ce402501423e46347b3f23300fbd00000000ba878d3e96084f4064cee5be1c3a93402501423e46347b3f23300fbd0000803fba878d3e9a467b40792425bf5f17cf40250142be46347bbf23300f3d00000000000000005e7e4d4059ce12bf7b5e9340250142be46347bbf23300f3d0000000000000000d2d07c40523d05bf00f3ce40ec20b73e00b112bd91e36e3f000000000000000096084f4064cee5be1c3a9340ec20b7be00b1123d91e36ebf00000000000000009a467b40792425bf5f17cf40ec20b73e00b112bd91e36e3f00000000000000005e7e4d4059ce12bf7b5e9340ec20b7be00b1123d91e36ebf0000000000000000ebc380402cbe09bfbcffcd406be43e3ee6627b3fc7d4febc000000000f368f3eb4b7514078eee8bef6b092406be43e3ee6627b3fc7d4febc0000803f0f368f3ef90180403eab29bf1920ce406be43ebee6627bbfc7d4fe3c0000000000000000cf3350404e6414bf53d192406be43ebee6627bbfc7d4fe3c0000000000000000ebc380402cbe09bfbcffcd408640bf3e7c372abd1a3b6d3f0000000000000000b4b7514078eee8bef6b092408640bfbe7c372a3d1a3b6dbf0000000000000000f90180403eab29bf1920ce408640bf3e7c372abd1a3b6d3f0000000000000000cf3350404e6414bf53d192408640bfbe7c372a3d1a3b6dbf00000000000000000e1e8340a4280ebf2800cd4012de3b3eef8e7b3f63e7debc000000000ae6903e7a64544041f4ebbe2c21924012de3b3eef8e7b3f63e7debc0000803f0ae6903e2e5f82404e1b2ebf771ccd4012de3bbeef8e7bbf63e7de3c0000000000000000bbe65240cbec15bf7b3d924012de3bbeef8e7bbf63e7de3c00000000000000000e1e8340a4280ebf2800cd408a5ec73e1a7441bdf17b6b3f00000000000000007a64544041f4ebbe2c2192408a5ec7be1a74413df17b6bbf00000000000000002e5f82404e1b2ebf771ccd408a5ec73e1a7441bdf17b6b3f0000000000000000bbe65240cbec15bf7b3d92408a5ec7be1a74413df17b6bbf0000000000000000a1768540247c12bf30f4cb405eef383e52b87b3fad9fbebc00000000d497923e3a0f5740ffdfeebe9a8a91405eef383e52b87b3fad9fbebc0000803fd497923ebcba8440107432bf660ccc405eef38be52b87bbfad9fbe3c000000000000000070975540eb6717bfd0a291405eef38be52b87bbfad9fbe3c0000000000000000a1768540247c12bf30f4cb401e78cf3e266158bd5ba6693f00000000000000003a0f5740ffdfeebe9a8a91401e78cfbe2661583d5ba669bf0000000000000000bcba8440107432bf660ccc401e78cf3e266158bd5ba6693f000000000000000070975540eb6717bfd0a291401e78cfbe2661583d5ba669bf000000000000000071cd874038b816bfc0dbca40aa19363e04df7b3ffe029ebc000000009b4b943e4ab85940c1b1f1be14ed9040aa19363e04df7b3ffe029ebc0000803f9b4b943e6d1487400eb536bfd1efca40aa1936be04df7bbffe029e3c000000000000000043465840b6d518bf25019140aa1936be04df7bbffe029e3c000000000000000071cd874038b816bfc0dbca40638ad73eb8fa6ebdb4ba673f00000000000000004ab85940c1b1f1be14ed9040638ad7beb8fa6e3db4ba67bf00000000000000006d1487400eb536bfd1efca40638ad73eb8fa6ebdb4ba673f000000000000000043465840b6d518bf25019140638ad7beb8fa6e3db4ba67bf00000000000000004f228a4048dc1abfcab6c9400a5e333e02037c3f88367abc000000008b01963efb5f5c40cf69f4be6e4890400a5e333e02037c3f88367abc0000803f8b01963e126c8940b0dd3abfadc6c9400a5e33be02037cbf88367a3c000000000000000082f35a4050361abf515890400a5e33be02037cbf88367a3c00000000000000004f228a4048dc1abfcab6c9408b92df3e849d82bd6eb9653f0000000000000000fb5f5c40cf69f4be6e4890408b92dfbe849d823d6eb965bf0000000000000000126c8940b0dd3abfadc6c9408b92df3e849d82bd6eb9653f000000000000000082f35a4050361abf515890408b92dfbe849d823d6eb965bf000000000000000009758c40c2e71ebf3f85c8406fbd303e45247c3f18e737bc00000000d3b9973e9d065f407308f7be7b9c8f406fbd303e45247c3f18e737bc0000803fd3b9973e78c18b4064ed3ebfed90c8406fbd30be45247cbf18e7373c00000000000000007a9f5d40db891bbf29a88f406fbd30be45247cbf18e7373c000000000000000009758c40c2e71ebf3f85c840d58de73e238e8dbd10a3633f00000000000000009d065f407308f7be7b9c8f40d58de7be238e8d3d10a363bf000000000000000078c18b4064ed3ebfed90c840d58de73e238e8dbd10a3633f00000000000000007a9f5d40db891bbf29a88f40d58de7be238e8d3d10a363bf000000000000000070c58e403eda22bf1747c740fe382e3ec9427c3ff94aeabb00000000a074993e80ac61409c8df9be09e98e40fe382e3ec9427c3ff94aeabb0000803fa074993e6d148e40c0e342bf874ec740fe382ebec9427cbff94aea3b00000000000000007b4a604050d01cbf79f08e40fe382ebec9427cbff94aea3b000000000000000070c58e403eda22bf1747c7408079ef3ec24d98bd3778613f000000000000000080ac61409c8df9be09e98e408079efbec24d983d377861bf00000000000000006d148e40c0e342bf874ec7408079ef3ec24d98bd3778613f00000000000000007b4a604050d01cbf79f08e408079efbec24d983d377861bf0000000000000000551391404ab326bf47fcc540a7d12b3e8d5e7c3f5e1248bb0000000024329b3ef251644054f9fbbee32d8e40a7d12b3e8d5e7c3f5e1248bb0000803f24329b3ec464904052c046bf74ffc540a7d12bbe8d5e7cbf5e12483b0000000000000000cff46240b2091ebf10318e40a7d12bbe8d5e7cbf5e12483b0000000000000000551391404ab326bf47fcc540dd52f73e82daa2bd92395f3f0000000000000000f251644054f9fbbee32d8e40dd52f7be82daa23d92395fbf0000000000000000c464904052c046bf74ffc540dd52f73e82daa2bd92395f3f0000000000000000cff46240b2091ebf10318e40dd52f7be82daa23d92395fbf00000000000000008b5e93405d722abfcda4c4400788293e92777c3ff3158b3a000000008cf29c3e3bf76640be4bfebed36a8d400788293e92777c3ff3158b3a0000803f8cf29c3e4db2924093824abfb2a3c440078829be92777cbff3158bba0000000000000000be9e654015361fbfb8698d40078829be92777cbff3158bba00000000000000008b5e93405d722abfcda4c4406917ff3ef631adbde5e75c3f00000000000000003bf76640be4bfebed36a8d406917ffbef631ad3de5e75cbf00000000000000004db2924093824abfb2a3c4406917ff3ef631adbde5e75c3f0000000000000000be9e654015361fbfb8698d406917ffbef631ad3de5e75cbf0000000000000000e7a6954022172ebfa040c340035d273eda8d7c3fcd00aa3b000000000bb69e3ea39c6940524200bfa09f8c40035d273eda8d7c3fcd00aa3b0000803f0bb69e3edcfc94402c2a4ebf3a3bc340035d27beda8d7cbfcd00aabb00000000000000008e4868405c5520bf3a9a8c40035d27beda8d7cbfcd00aabb0000000000000000e7a6954022172ebfa040c3405562033f4153b7bd01845a3f0000000000000000a39c6940524200bfa09f8c40556203bf4153b73d01845abf0000000000000000dcfc94402c2a4ebf3a3bc3405562033f4153b7bd01845a3f00000000000000008e4868405c5520bf3a9a8c40556203bf4153b73d01845abf000000000000000076ef9740460331bff0cfc1400eff233e54b07c3f22f5ed3b00000000d07ca03efc3b6c40eeef01bfe8cb8b400eff233e54b07c3f22f5ed3b0000803fd07ca03ed7489740b11a51bf62c8c1400eff23be54b07cbf22f5edbb0000000000000000beee6a40590722bf5ac48b400eff23be54b07cbf22f5edbb000000000000000076ef9740460331bff0cfc140de45073f644dbcbd1f10583f0000000000000000fc3b6c40eeef01bfe8cb8b40de4507bf644dbc3d1f1058bf0000000000000000d7489740b11a51bf62c8c140de45073f644dbcbd1f10583f0000000000000000beee6a40590722bf5ac48b40de4507bf644dbc3d1f1058bf00000000000000006a359a407ba932bff255c0406d741b3e87067d3fe381f63b00000000733ca23e73b06e40b99204bfbef98a406d741b3e87067d3fe381f63b0000803f733ca23e79979940d8cb52bf1e4ec0406d741bbe87067dbfe381f6bb000000000000000091746d4016b524bfeaf18a406d741bbe87067dbfe381f6bb00000000000000006a359a407ba932bff255c040c4740b3f075bb8bdd470553f000000000000000073b06e40b99204bfbef98a40c4740bbf075bb83dd47055bf000000000000000079979940d8cb52bf1e4ec040c4740b3f075bb8bdd470553f000000000000000091746d4016b524bfeaf18a40c4740bbf075bb83dd47055bf00000000000000000d749c40c81d34bf9cd1be40f801133e14577d3f9907013c0000000038fda33e51247140341e07bf901f8a40f801133e14577d3f9907013c0000803f38fda33eb1de9b40604a54bf6ac9be40f80113be14577dbf990701bc000000000000000099f96f40cc4a27bf5e178a40f80113be14577dbf990701bc00000000000000000d749c40c81d34bf9cd1be4093870f3f4efeb3bd30c8523f000000000000000051247140341e07bf901f8a4093870fbf4efeb33d30c852bf0000000000000000b1de9b40604a54bf6ac9be4093870f3f4efeb3bd30c8523f000000000000000099f96f40cc4a27bf5e178a4093870fbf4efeb33d30c852bf00000000000000004cab9e40466135bf3043bd408fa70a3e26a27d3f3c38083c0000000020bfa53e27977340529209bf763d89408fa70a3e26a27d3f3c38083c0000803f20bfa53e6d1e9e40679755bf8a3abd408fa70abe26a27dbf3c3808bc0000000000000000687d724073c829bfd03489408fa70abe26a27dbf3c3808bc00000000000000004cab9e40466135bf3043bd40e37e133fd33bafbde816503f000000000000000027977340529209bf763d8940e37e13bfd33baf3de81650bf00000000000000006d1e9e40679755bf8a3abd40e37e133fd33bafbde816503f0000000000000000687d724073c829bfd0348940e37e13bfd33baf3de81650bf000000000000000019dba0402a7536bff0aabb401965023ee9e77d3f95c1103c000000002c82a73e860876400aef0bbf8a5388401965023ee9e77d3f95c1103c0000803f2c82a73e9e56a04027b456bfbfa1bb40196502bee9e77dbf95c110bc000000000000000090ff7440072e2cbf594a8840196502bee9e77dbf95c110bc000000000000000019dba0402a7536bff0aabb40565b173f7f18aabd9c5d4d3f0000000000000000860876400aef0bbf8a538840565b17bf7f18aa3d9c5d4dbf00000000000000009e56a04027b456bfbfa1bb40565b173f7f18aabd9c5d4d3f000000000000000090ff7440072e2cbf594a8840565b17bf7f18aa3d9c5d4dbf00000000000000006003a3408b5a37bf1c09ba40b074f43d86287e3fcd921a3c000000005946a93ef877784055340ebfe6618740b074f43d86287e3fcd921a3c0000803f5946a93e3187a240bda157bf4bffb940b074f4bd86287ebfcd921abc00000000000000009a7f7740877b2ebf15588740b074f4bd86287ebfcd921abc00000000000000006003a3408b5a37bf1c09ba408f1d1b3fd598a4bdd59c4a3f0000000000000000f877784055340ebfe66187408f1d1bbfd598a43dd59c4abf00000000000000003187a240bda157bf4bffb9408f1d1b3fd598a4bdd59c4a3f00000000000000009a7f7740877b2ebf155887408f1d1bbfd598a43dd59c4abf00000000000000001624a540801238bfed5db840034ee43d25647e3f409c253c00000000a60bab3e0fe57a40386210bfab688640034ee43d25647e3f409c253c0000803fa60bab3e1bb0a440446158bf6953b840034ee4bd25647ebf409c25bc00000000000000001afd7940fcb030bf275e8640034ee4bd25647ebf409c25bc00000000000000001624a540801238bfed5db8403bc61e3f20c19ebd0bd5473f00000000000000000fe57a40386210bfab6886403bc61ebf20c19e3d0bd547bf00000000000000001bb0a440446158bf6953b8403bc61e3f20c19ebd0bd5473f00000000000000001afd7940fcb030bf275e86403bc61ebf20c19e3d0bd547bf00000000000000002a3da7401c9e38bfa3a9b6407255d43df09a7e3ffacf313c000000000bd2ac3e534f7d40c07812bff96785407255d43df09a7e3ffacf313c0000803f0bd2ac3e4cd1a640d6f358bf589eb6407255d4bdf09a7ebffacf31bc000000000000000098777c407ace32bfae5c85407255d4bdf09a7ebffacf31bc00000000000000002a3da7401c9e38bfa3a9b6400356223f719598bda906453f0000000000000000534f7d40c07812bff9678540035622bf7195983da90645bf00000000000000004cd1a640d6f358bf589eb6400356223f719598bda906453f000000000000000098777c407ace32bfae5c8540035622bf7195983da90645bf00000000000000008c4ea94068fe38bf71ecb4402a8ac43d0acd7e3fb9213f3c000000008499ae3e4fb67f40fc7714bff15f84402a8ac43d0acd7e3fb9213f3c0000803f8499ae3eb4eaa8407e5a59bf4ee0b4402a8ac4bd0acd7ebfb9213fbc0000000000000000a0ee7e4012d434bfce5384402a8ac4bd0acd7ebfb9213fbc00000000000000008c4ea94068fe38bf71ecb44093cd253fac1992bd0332423f00000000000000004fb67f40fc7714bff15f844093cd25bfac19923d033242bf0000000000000000b4eaa8407e5a59bf4ee0b44093cd253fac1992bd0332423f0000000000000000a0ee7e4012d434bfce53844093cd25bfac19923d033242bf00000000000000002f58ab406f3439bf9026b3406febb43d99fa7e3fe5874d3c000000000b62b03ec90c8140016016bfba5083406febb43d99fa7e3fe5874d3c0000803f0b62b03e47fcaa404f9659bf8319b3406febb4bd99fa7ebfe5874dbc0000000000000000e1b08040e1c136bfad4383406febb4bd99fa7ebfe5874dbc00000000000000002f58ab406f3439bf9026b3409a2d293fba518bbd5c573f3f0000000000000000c90c8140016016bfba5083409a2d29bfba518b3d5c573fbf000000000000000047fcaa404f9659bf8319b3409a2d293fba518bbd5c573f3f0000000000000000e1b08040e1c136bfad4383409a2d29bfba518b3d5c573fbf0000000000000000035aad40244139bf3658b1402578a53dc4237f3f93f75c3c00000000972bb23e533c8240f03018bf7a3a82402578a53dc4237f3f93f75c3c0000803f972bb23ef405ad403ea859bf2e4ab1402578a5bdc4237fbf93f75cbc000000000000000044e881400a9838bf722c82402578a5bdc4237fbf93f75cbc0000000000000000035aad40244139bf3658b140c1762c3fd14084bdf2763c3f0000000000000000533c8240f03018bf7a3a8240c1762cbfd140843df2763cbf0000000000000000f405ad403ea859bf2e4ab140c1762c3fd14084bdf2763c3f000000000000000044e881400a9838bf722c8240c1762cbfd140843df2763cbf0000000000000000f853af407a2539bf9381af401a2f963da6487f3f8b676d3c000000001ff6b33e8c698340faea19bf591d81401a2f963da6487f3f8b676d3c0000803f1ff6b33ead07af40439159bf8072af401a2f96bda6487fbf8b676dbc0000000000000000411d8340c3563abf460e81401a2f96bda6487fbf8b676dbc0000000000000000f853af407a2539bf9381af40b4a92f3ffdd379bde690393f00000000000000008c698340faea19bf591d8140b4a92fbffdd3793de69039bf0000000000000000ad07af40439159bf8072af40b4a92f3ffdd379bde690393f0000000000000000411d8340c3563abf460e8140b4a92fbffdd3793de69039bf00000000000000000146b14063e238bfd8a2ad406f0f873d65697f3f43d27e3c0000000099c1b53e3b948440418e1bbf04f37f406f0f873d65697f3f43d27e3c0000803f99c1b53e6501b140555259bfaa92ad406f0f87bd65697fbf43d27ebc00000000000000009f4f844033fe3bbfa7d27f406f0f87bd65697fbf43d27ebc00000000000000000146b14063e238bfd8a2ad4015c7323f13a16abd57a5363f00000000000000003b948440418e1bbf04f37f4015c732bf13a16a3d57a536bf00000000000000006501b140555259bfaa92ad4015c7323f13a16abd57a5363f00000000000000009f4f844033fe3bbfa7d27f4015c732bf13a16a3d57a536bf00000000000000000a30b340d57838bf35bcab407130703d19867f3f0b9a883c00000000fb8db73e28bc8540ef1a1dbf429e7d407130703d19867f3f0b9a883c0000803ffb8db73e08f3b2406cec58bfdcaaab40713070bd19867fbf0b9a88bc0000000000000000267f8540868e3dbf907b7d40713070bd19867fbf0b9a88bc00000000000000000a30b340d57838bf35bcab4086cf353f2cef5abd50b4333f000000000000000028bc8540ef1a1dbf429e7d4086cf35bf2cef5a3d50b433bf000000000000000008f3b2406cec58bfdcaaab4086cf353f2cef5abd50b4333f0000000000000000267f8540868e3dbf907b7d4086cf35bf2cef5a3d50b433bf00000000000000000412b540a2e937bfd9cda9400a90523de39e7f3fe742923c00000000375bb93e1ae186404e911ebfc63c7b400a90523de39e7f3fe742923c0000803f375bb93e88dcb4405f6058bf46bba9400a9052bde39e7fbfe74292bc00000000000000009eab86400b083fbfa0177b400a9052bde39e7fbfe74292bc00000000000000000412b540a2e937bfd9cda940a5c3383f98c24abdd8bd303f00000000000000001ae186404e911ebfc63c7b40a5c338bf98c24a3dd8bd30bf000000000000000088dcb4405f6058bf46bba940a5c3383f98c24abdd8bd303f00000000000000009eab86400b083fbfa0177b40a5c338bf98c24a3dd8bd30bf0000000000000000dcebb640a43537bfeed7a740703b353dddb37f3f62629c3c000000004229bb3eda02884098f11fbfecce7840703b353dddb37f3f62629c3c0000803f4229bb3ed4bdb6400baf57bf12c4a740703b35bdddb37fbf62629cbc0000000000000000d2d48740ff6a40bf33a77840703b35bdddb37fbf62629cbc0000000000000000dcebb640a43537bfeed7a7400ba43b3f5d203abde0c12d3f0000000000000000da02884098f11fbfecce78400ba43bbf5d203a3de0c12dbf0000000000000000d4bdb6400baf57bf12c4a7400ba43b3f5d203abde0c12d3f0000000000000000d2d48740ff6a40bf33a778400ba43bbf5d203a3de0c12dbf000000000000000081bdb840d35d36bfa1daa540a231183d1fc57f3fa7f9a63c000000000ef8bc3e2f218940fd3b21bf16557640a231183d1fc57f3fa7f9a63c0000803f0ef8bc3ed996b8406bd956bf6cc5a540a23118bd1fc57fbfa7f9a6bc000000000000000087fa884095b741bfad2a7640a23118bd1fc57fbfa7f9a6bc000000000000000081bdb840d35d36bfa1daa54047713e3faf0e29bd58c02a3f00000000000000002f218940fd3b21bf1655764047713ebfaf0e293d58c02abf0000000000000000d996b8406bd956bf6cc5a54047713e3faf0e29bd58c02a3f000000000000000087fa884095b741bfad2a764047713ebfaf0e293d58c02abf0000000000000000e186ba40de6235bf1ad6a34052def63cc0d27f3f2e06b23c000000008fc7be3ee73b8a40da7022bfa7cf734052def63cc0d27f3f2e06b23c0000803f8fc7be3e8767ba4031e055bf7ebfa34052def6bcc0d27fbf2e06b2bc00000000000000008d1c8a402dee42bf6fa2734052def6bcc0d27fbf2e06b2bc0000000000000000e186ba40de6235bf1ad6a340e92b413f259017bd1cb9273f0000000000000000e73b8a40da7022bfa7cf7340e92b41bf2590173d1cb927bf00000000000000008767ba4031e055bf7ebfa340e92b413f259017bd1cb9273f00000000000000008d1c8a402dee42bf6fa27340e92b41bf2590173d1cb927bf0000000000000000e647bc40ad4534bf84caa140a7e5bd3cd7dc7f3fc989bd3c00000000b497c03eca528b406f9023bf043f7140a7e5bd3cd7dc7f3fc989bd3c0000803fb497c03ec82fbc4048c454bf72b2a140a7e5bdbcd7dc7fbfc989bdbc0000000000000000ac3a8b400a0f44bfdf0e7140a7e5bdbcd7dc7fbfc989bdbc0000000000000000e647bc40ad4534bf84caa14071d4433ff0a905bd0aac243f0000000000000000ca528b406f9023bf043f714071d443bff0a9053d0aac24bf0000000000000000c82fbc4048c454bf72b2a14071d4433ff0a905bd0aac243f0000000000000000ac3a8b400a0f44bfdf0e714071d443bff0a9053d0aac24bf00000000000000007d00be40f20633bf05b89f404073853c79e37f3fb483c93c000000006f68c23ea5658c40229b24bf92a36e404073853c79e37f3fb483c93c0000803f6f68c23e8aefbd40658653bf6d9e9f40407385bc79e37fbfb483c9bc0000000000000000b2548c40951a45bf63706e40407385bc79e37fbfb483c9bc00000000000000007d00be40f20633bf05b89f40626b463f0cbde6bcf098213f0000000000000000a5658c40229b24bf92a36e40626b46bf0cbde63cf09821bf00000000000000008aefbd40658653bf6d9e9f40626b463f0cbde6bcf098213f0000000000000000b2548c40951a45bf63706e40626b46bf0cbde63cf09821bf00000000000000008fb0bf407aa731bfc39e9d401e081b3cb6e67f3fecf5d53c00000000b139c43e43748d403e9125bfbdfd6b401e081b3cb6e67f3fecf5d53c0000803fb139c43eb7a6bf40562752bf97839d401e081bbcb6e67fbfecf5d5bc00000000000000006b6a8d401a1146bf64c76b401e081bbcb6e67fbfecf5d5bc00000000000000008fb0bf407aa731bfc39e9d4032f1483fb663c1bc937f1e3f000000000000000043748d403e9125bfbdfd6b4032f148bfb663c13c937f1ebf0000000000000000b7a6bf40562752bf97839d4032f1483fb663c1bc937f1e3f00000000000000006b6a8d401a1146bf64c76b4032f148bfb663c13c937f1ebf00000000000000000758c1400e2830bfe57e9b40cea7303b9ee67f3fd0e2e23c00000000690bc63e737e8e401e7326bff14d6940cea7303b9ee67f3fd0e2e23c0000803f690bc63e3955c140e7a750bf14629b40cea730bb9ee67fbfd0e2e2bc0000000000000000a57b8e40f7f246bf50146940cea730bb9ee67fbfd0e2e2bc00000000000000000758c1400e2830bfe57e9b404f664b3f004f9bbcb35f1b3f0000000000000000737e8e401e7326bff14d69404f664bbf004f9b3cb35f1bbf00000000000000003955c140e7a750bf14629b404f664b3f004f9bbcb35f1b3f0000000000000000a57b8e40f7f246bf501469404f664bbf004f9b3cb35f1bbf0000000000000000ccf6c24051892ebf8f5899407b7d83bb45e37f3f464bf03c0000000089ddc73e02848f402b4127bf9a9466407b7d83bb45e37f3f464bf03c0000803f89ddc73ef9fac240be084fbf0b3a99407b7d833b45e37fbf464bf0bc00000000000000002f888f4098c047bf915766407b7d833b45e37fbf464bf0bc0000000000000000ccf6c24051892ebf8f58994024cb4d3fb00469bc0739183f000000000000000002848f402b4127bf9a94664024cb4dbfb004693c073918bf0000000000000000f9fac240be084fbf0b3a994024cb4d3fb00469bc0739183f00000000000000002f888f4098c047bf9157664024cb4dbfb004693c073918bf0000000000000000c58cc44008cc2cbfe32b97408bb72ebcb6dc7f3f8332fe3c00000000ffafc93ec1849040ccfb27bf26d263408bb72ebcb6dc7f3f8332fe3c0000803fffafc93edd97c4409f4a4dbf9b0b97408bb72e3cb6dc7fbf8332febc0000000000000000d98f9040637a48bf959163408bb72e3cb6dc7fbf8332febc0000000000000000c58cc44008cc2cbfe32b97400e20503f60071abc410b153f0000000000000000c1849040ccfb27bf26d263400e2050bf60071a3c410b15bf0000000000000000dd97c4409f4a4dbf9b0b97400e20503f60071abc410b153f0000000000000000d98f9040637a48bf959163400e2050bf60071a3c410b15bf0000000000000000da19c640e4f02abf05f99440ed628dbcffd27f3f064e063d00000000ba82cb3e8080914060a328bf06076140ed628dbcffd27f3f064e063d0000803fba82cb3ecf2bc6403f6e4bbfe8d69440ed628d3cffd27fbf064e06bd000000000000000075929140bb2049bfccc26040ed628d3cffd27fbf064e06bd0000000000000000da19c640e4f02abf05f994406665523f306193bb0ad6113f00000000000000008080914060a328bf06076140666552bf3061933b0ad611bf0000000000000000cf2bc6403f6e4bbfe8d694406665523f306193bb0ad6113f000000000000000075929140bb2049bfccc26040666552bf3061933b0ad611bf0000000000000000ef9dc74082f828bf19c092402afac2bc29c67f3fedc40d3d00000000ab55cd3e117792406a3829bfae335e402afac2bc29c67f3fedc40d3d0000803fab55cd3eb2b6c7403c7449bf179c92402afac23c29c67fbfedc40dbd0000000000000000d48f924024b449bfa9eb5d402afac23c29c67fbfedc40dbd0000000000000000ef9dc74082f828bf19c09240799b543f00a2ff3907990e3f0000000000000000117792406a3829bfae335e40799b54bf00a2ffb907990ebf0000000000000000b2b6c7403c7449bf179c9240799b543f00a2ff3907990e3f0000000000000000d48f924024b449bfa9eb5d40799b54bf00a2ffb907990ebf0000000000000000eb18c940abe326bf3d8190400d21f8bc3db67f3ff780153d00000000c028cf3e4768934041bb29bf91585b400d21f8bc3db67f3ff780153d0000803fc028cf3e6e38c9405f5d47bf445b90400d21f83c3db67fbff78015bd0000000000000000ca879340f5344abf9e0c5b400d21f83c3db67fbff78015bd0000000000000000eb18c940abe326bf3d8190408dc2563f60e5b53bd3530b3f00000000000000004768934041bb29bf91585b408dc256bf60e5b5bbd3530bbf00000000000000006e38c9405f5d47bf445b90408dc2563f60e5b53bd3530b3f0000000000000000ca879340f5344abf9e0c5b408dc256bf60e5b5bbd3530bbf0000000000000000ac8aca40e9b224bf953c8e40636e16bd48a37f3f77831d3d00000000e8fbd03ef45394406b2c2abf23765840636e16bd48a37f3f77831d3d0000803fe8fbd03ee2b0ca40352a45bf93148e40636e163d48a37fbf77831dbd00000000000000002a7a9440b7a34abf1f265840636e163d48a37fbf77831dbd0000000000000000ac8aca40e9b224bf953c8e40e0da583f38302f3c0d06083f0000000000000000f45394406b2c2abf23765840e0da58bf38302fbc0d0608bf0000000000000000e2b0ca40352a45bf93148e40e0da583f38302f3c0d06083f00000000000000002a7a9440b7a34abf1f265840e0da58bf38302fbc0d0608bf000000000000000019f3cb40f46622bf3df28b40089730bd4b8d7f3f3ecf253d0000000014cfd23eef399540588c2abfd98c5540089730bd4b8d7f3f3ecf253d0000803f14cfd23ef41fcc4075db42bf1fc88b400897303d4b8d7fbf3ecf25bd0000000000000000ca669540d9004bbf9e3855400897303d4b8d7fbf3ecf25bd000000000000000019f3cb40f46622bf3df28b40a5e45a3f5056823c43af043f0000000000000000ef399540588c2abfd98c5540a5e45abf505682bc43af04bf0000000000000000f41fcc4075db42bf1fc88b40a5e45a3f5056823c43af043f0000000000000000ca669540d9004bbf9e385540a5e45abf505682bc43af04bf00000000000000000e52cd40570020bf58a28940348c4abd52747f3f57662e3d0000000030a2d43e0e1a96408ddb2abf2c9d5240348c4abd52747f3f57662e3d0000803f30a2d43e8085cd40ac7140bf0c768940348c4a3d52747fbf57662ebd0000000000000000804d9640e24c4bbf94445240348c4a3d52747fbf57662ebd00000000000000000e52cd40570020bf58a2894004e05c3f6cb3ad3c074f013f00000000000000000e1a96408ddb2abf2c9d524004e05cbf6cb3adbc074f01bf00000000000000008085cd40ac7140bf0c76894004e05c3f6cb3ad3c074f013f0000000000000000804d9640e24c4bbf9444524004e05cbf6cb3adbc074f01bf000000000000000070a7ce40ba7f1dbf044d87406e4e64bd5e587f3fb84b373d000000002e75d63e28f49640861a2bbf96a74f406e4e64bd5e587f3fb84b373d0000803f2e75d63e6de1ce4082ed3dbf751e87406e4e643d5e587fbfb84b37bd0000000000000000252e97404e884bbf794a4f406e4e643d5e587fbfb84b37bd000000000000000070a7ce40ba7f1dbf044d874020cd5e3fb8acd93cc8c9fb3e000000000000000028f49640861a2bbf96a74f4020cd5ebfb8acd9bcc8c9fbbe00000000000000006de1ce4082ed3dbf751e874020cd5e3fb8acd93cc8c9fb3e0000000000000000252e97404e884bbf794a4f4020cd5ebfb8acd9bcc8c9fbbe000000000000000018f3cf40b3e51abf5ff284406dde7dbd70397f3f2382403d00000000fe47d83e16c89740c1492bbf8eac4c406dde7dbd70397f3f2382403d0000803ffe47d83e9433d0408e4f3bbf79c184406dde7d3d70397fbf238240bd0000000000000000920898409cb34bbfc34a4c406dde7d3d70397fbf238240bd000000000000000018f3cf40b3e51abf5ff284400cac603f6c20033dc1e0f43e000000000000000016c89740c1492bbf8eac4c400cac60bf6c2003bdc1e0f4be00000000000000009433d0408e4f3bbf79c184400cac603f6c20033dc1e0f43e0000000000000000920898409cb34bbfc34a4c400cac60bf6c2003bdc1e0f4be0000000000000000e634d140ea3218bf87928240159e8bbd8e177f3ff80c4a3d000000008d1ada3eb0959840be692bbf8eac4940159e8bbd8e177f3ff80c4a3d0000803f8d1ada3ed37bd140779838bf355f8240159e8b3d8e177fbff80c4abd00000000000000009ddc98404bcf4bbfea454940159e8b3d8e177fbff80c4abd0000000000000000e634d140ea3218bf87928240d47c623fa5b6193d03e2ed3e0000000000000000b0959840be692bbf8eac4940d47c62bfa5b619bd03e2edbe0000000000000000d37bd140779838bf355f8240d47c623fa5b6193d03e2ed3e00000000000000009ddc98404bcf4bbfea454940d47c62bfa5b619bd03e2edbe0000000000000000b46cd240e36715bf9b2d8040413498bdbcf27e3f1def533d00000000ccecdb3ed65c9940097b2bbf12a84640413498bdbcf27e3f1def533d0000803fccecdb3e06bad240c3c835bf8cef7f404134983dbcf27ebf1def53bd000000000000000028aa9940e9db4bbf683c46404134983dbcf27ebf1def53bd0000000000000000b46cd240e36715bf9b2d80407a3f643f3799303d8fcce63e0000000000000000d65c9940097b2bbf12a846407a3f64bf379930bd8fcce6be000000000000000006bad240c3c835bf8cef7f407a3f643f3799303d8fcce63e000000000000000028aa9940e9db4bbf683c46407a3f64bf379930bd8fcce6be00000000000000005e9ad340288512bf6e877b400ab2a4bdf5ca7e3faa2b5e3d00000000adbedd3e621d9a40347e2bbf969f43400ab2a4bdf5ca7e3faa2b5e3d0000803fadbedd3e08eed340fbe032bf91167b400ab2a43df5ca7ebfaa2b5ebd00000000000000000c719a4007da4bbfb92e43400ab2a43df5ca7ebfaa2b5ebd00000000000000005e9ad340288512bf6e877b40f1f3653f67c8473d609fdf3e0000000000000000621d9a40347e2bbf969f4340f1f365bf67c847bd609fdfbe000000000000000008eed340fbe032bf91167b40f1f3653f67c8473d609fdf3e00000000000000000c719a4007da4bbfb92e4340f1f365bf67c847bd609fdfbe0000000000000000b9bdd4404e8b0fbff2a976405817b1bd37a07e3f3ac6683d000000002190df3e31d79a40ca732bbf969340405817b1bd37a07e3f3ac6683d0000803f2190df3eaf17d540b3e12fbfb23376405817b13d37a07ebf3ac668bd000000000000000027319b402fca4bbf561d40405817b13d37a07ebf3ac668bd0000000000000000b9bdd4404e8b0fbff2a97640229a673fe3435f3d7059d83e000000000000000031d79a40ca732bbf96934040229a67bfe3435fbd7059d8be0000000000000000af17d540b3e12fbfb2337640229a673fe3435f3d7059d83e000000000000000027319b402fca4bbf561d4040229a67bfe3435fbd7059d8be0000000000000000a1d6d540f77a0cbff9c271406863bdbd85727e3f0ac3733d000000001861e13e258a9b40415c2bbf8d843d406863bdbd85727e3f0ac3733d0000803f1861e13ed736d6408ecb2cbf244771406863bd3d85727ebf0ac373bd00000000000000005bea9b40d8ac4bbfb8083d406863bd3d85727ebf0ac373bd0000000000000000a1d6d540f77a0cbff9c27140ef31693f4a0a773db0f9d03e0000000000000000258a9b40415c2bbf8d843d40ef3169bf4a0a77bdb0f9d0be0000000000000000d736d6408ecb2cbf24477140ef31693f4a0a773db0f9d03e00000000000000005bea9b40d8ac4bbfb8083d40ef3169bf4a0a77bdb0f9d0be0000000000000000e8e4d640985409bfbfd26c409b96c9bdda417e3f48257f3d000000008431e33e1e369c403c382bbff9723a409b96c9bdda417e3f48257f3d0000803f8431e33e504bd740019f29bf22516c409b96c93dda417ebf48257fbd0000000000000000869c9c40a5824bbf5cf139409b96c93dda417ebf48257fbd0000000000000000e8e4d640985409bfbfd26c4028bb6a3f8d8e873d177fc93e00000000000000001e369c403c382bbff9723a4028bb6abf8d8e87bd177fc9be0000000000000000504bd740019f29bf22516c4028bb6a3f8d8e873d177fc93e0000000000000000869c9c40a5824bbf5cf1394028bb6abf8d8e87bd177fc9be000000000000000064e8d740c71806bf7cd967406ab0d5bd320e7e3f8378853d000000005801e53e00db9c404d082bbf585f37406ab0d5bd320e7e3f8378853d0000803f5801e53ef254d840a15c26bfe15167406ab0d53d320e7ebf837885bd00000000000000008e479d40274c4bbfbdd736406ab0d53d320e7ebf837885bd000000000000000064e8d740c71806bf7cd9674092356c3f16be933d94e8c13e000000000000000000db9c404d082bbf585f374092356cbf16be93bd94e8c1be0000000000000000f254d840a15c26bfe151674092356c3f16be933d94e8c13e00000000000000008e479d40274c4bbfbdd7364092356cbf16be93bd94e8c1be0000000000000000e7e0d8400cc802bf6bd7624035b0e1bd86d77d3f33958b3d0000000087d0e63ead789d40fccc2abf254a344035b0e1bd86d77d3f33958b3d0000803f87d0e63e8d53d940f40423bf9a49624035b0e13d86d77dbf33958bbd000000000000000053eb9d40e4094bbf54bc334035b0e13d86d77dbf33958bbd0000000000000000e7e0d8400cc802bf6bd76240e6a06d3fc313a03d1b35ba3e0000000000000000ad789d40fccc2abf254a3440e6a06dbfc313a0bd1b35babe00000000000000008d53d940f40423bf9a496240e6a06d3fc313a03d1b35ba3e000000000000000053eb9d40e4094bbf54bc3340e6a06dbfc313a0bd1b35babe000000000000000043ced940fec5febec5cc5d40f694edbdd59d7d3ff0ea913d00000000069fe83e0f0f9e40d5862abfdf333140f694edbdd59d7d3ff0ea913d0000803f069fe83ef446da4094981fbf84385d40f694ed3dd59d7dbff0ea91bd0000000000000000c0879e406abc4abf9e9f3040f694ed3dd59d7dbff0ea91bd000000000000000043ced940fec5febec5cc5d40d3fc6e3f5a8fac3d9763b23e00000000000000000f0f9e40d5862abfdf333140d3fc6ebf5a8facbd9763b2be0000000000000000f446da4094981fbf84385d40d3fc6e3f5a8fac3d9763b23e0000000000000000c0879e406abc4abf9e9f3040d3fc6ebf5a8facbd9763b2be000000000000000045b0da400bd4f7bec1b95840ce5ef9bd18617d3f807b983d00000000c96cea3e099e9e4086362abfff1c2e40ce5ef9bd18617d3f807b983d0000803fc96cea3ef32edb40e4171cbfd51e5840ce5ef93d18617dbf807b98bd0000000000000000b71c9f4064644abf13822d40ce5ef93d18617dbf807b98bd000000000000000045b0da400bd4f7bec1b95840f248703f0432b93d0b73aa3e0000000000000000099e9e4086362abfff1c2e40f24870bf0432b9bd0b73aabe0000000000000000f32edb40e4171cbfd51e5840f248703f0432b93d0b73aa3e0000000000000000b71c9f4064644abf13822d40f24870bf0432b9bd0b73aabe0000000000000000be86db4064bbf0be9f9e5340358602be45217d3f39499f3d00000000c539ec3e88259f4096dc29bf03062b40358602be45217d3f39499f3d0000803fc539ec3e5b0bdc40758318bfc9fc52403586023e45217dbf39499fbd000000000000000025aa9f4059024abf2d642a403586023e45217dbf39499fbd0000000000000000be86db4064bbf0be9f9e5340d484713f8ffbc53d6f62a23e000000000000000088259f4096dc29bf03062b40d48471bf8ffbc5bd6f62a2be00000000000000005b0bdc40758318bfc9fc5240d484713f8ffbc53d6f62a23e000000000000000025aa9f4059024abf2d642a40d48471bf8ffbc5bd6f62a2be00000000000000007551dc40277de9be967b4e404e4e08be57de7c3f5b56a63d00000000f305ee3e75a59f409c7929bf66ef27404e4e08be57de7c3f5b56a63d0000803ff305ee3ef2dbdc40d6db14bf96d24d404e4e083e57de7cbf5b56a6bd0000000000000000f22fa040df9649bf664627404e4e083e57de7cbf5b56a6bd00000000000000007551dc40277de9be967b4e40fdaf723f24ecd23dc2309a3e000000000000000075a59f409c7929bf66ef2740fdaf72bf24ecd2bdc2309abe0000000000000000f2dbdc40d6db14bf96d24d40fdaf723f24ecd23dc2309a3e0000000000000000f22fa040df9649bf66462740fdaf72bf24ecd2bdc2309abe00000000000000003710dd40651ae2bee6504940fa060ebe46987c3f34a5ad3d0000000048d1ef3ebf1da040250e29bfa2d92440fa060ebe46987c3f34a5ad3d0000803f48d1ef3e84a0dd40902111bf7aa04840fa060e3e46987cbf34a5adbd00000000000000000caea040822249bf36292440fa060e3e46987cbf34a5adbd00000000000000003710dd40651ae2bee6504940dfc9733fcb03e03d0fdd913e0000000000000000bf1da040250e29bfa2d92440dfc973bfcb03e0bd0fdd91be000000000000000084a0dd40902111bf7aa04840dfc9733fcb03e03d0fdd913e00000000000000000caea040822249bf36292440dfc973bfcb03e0bd0fdd91be0000000000000000cbc2dd40fb93dabeca1e4440dfaf13be064f7c3fd037b53d00000000bf9bf13e558ea040de9a28bf2ec52140dfaf13be064f7c3fd037b53d0000803fbf9bf13ed858de400d550dbfac664340dfaf133e064f7cbfd037b5bd00000000000000006224a140eea548bf100d2140dfaf133e064f7cbfd037b5bd0000000000000000cbc2dd40fb93dabeca1e4440dbd1743f8343ed3d7166893e0000000000000000558ea040de9a28bf2ec52140dbd174bf8343edbd716689be0000000000000000d858de400d550dbfac664340dbd1743f8343ed3d7166893e00000000000000006224a140eea548bf100d2140dbd174bf8343edbd716689be0000000000000000f868de4026ebd2be83e53e40d54719be90027c3fac10bd3d000000004f65f33e26f7a040452028bf81b21e40d54719be90027c3fac10bd3d0000803f4f65f33eb404df40ec7609bf6c253e40d547193e90027cbfac10bdbd0000000000000000e292a1409e2148bf6af21d40d547193e90027cbfac10bdbd0000000000000000f868de4026ebd2be83e53e4049c7753fcaaafa3d08cc803e000000000000000026f7a040452028bf81b21e4049c775bfcaaafabd08cc80be0000000000000000b404df40ec7609bf6c253e4049c7753fcaaafa3d08cc803e0000000000000000e292a1409e2148bf6af21d4049c775bfcaaafabd08cc80be00000000000000008202df40e820cbbe53a5394004ce1ebedcb27b3f0632c53d00000000f52df53e2658a140f09e27bf11a21b4004ce1ebedcb27b3f0632c53d0000803ff52df53edaa3df40ae8705bff9dc384004ce1e3edcb27bbf0632c5bd00000000000000007ef9a1402a9647bfb7d91a4004ce1e3edcb27bbf0632c5bd00000000000000008202df40e820cbbe53a5394070a9763ff81c043e0f1a703e00000000000000002658a140f09e27bf11a21b4070a976bff81c04be0f1a70be0000000000000000daa3df40ae8705bff9dc384070a9763ff81c043e0f1a703e00000000000000007ef9a1402a9647bfb7d91a4070a976bff81c04be0f1a70be00000000000000002b8fdf405436c3be7c5e3440804124bee05f7b3f1e9ecd3d00000000acf5f63e49b1a1407a1727bf4e941840804124bee05f7b3f1e9ecd3d0000803facf5f63e0d36e040da8701bf948d33408041243ee05f7bbf1e9ecdbd00000000000000002b58a2402a0447bf66c317408041243ee05f7bbf1e9ecdbd00000000000000002b8fdf405436c3be7c5e34408577773fa1f80a3e6a515e3e000000000000000049b1a1407a1727bf4e941840857777bfa1f80abe6a515ebe00000000000000000d36e040da8701bf948d33408577773fa1f80a3e6a515e3e00000000000000002b58a2402a0447bf66c31740857777bfa1f80abe6a515ebe0000000000000000b30ee040572cbbbe46112f4061a129be92097b3f1957d63d0000000074bcf83e8702a2407c8a26bfaa89154061a129be92097b3f1957d63d0000803f74bcf83e0bbbe040cceffabe81372e4061a1293e92097bbf1957d6bd0000000000000000dfaea240366c46bfe5af144061a1293e92097bbf1957d6bd0000000000000000b30ee040572cbbbe46112f40ae30783fa2e8113ee53c4c3e00000000000000008702a2407c8a26bfaa891540ae3078bfa2e811bee53c4cbe00000000000000000bbbe040cceffabe81372e40ae30783fa2e8113ee53c4c3e0000000000000000dfaea240366c46bfe5af1440ae3078bfa2e811bee53c4cbe0000000000000000d780e0402d04b3befdbd29404aec2ebee4af7a3f3f5fdf3d000000004982fa3ed74ba24082f825bf918212404aec2ebee4af7a3f3f5fdf3d0000803f4982fa3e9032e140dab0f2be0bdb28404aec2e3ee4af7abf3f5fdfbd000000000000000090fda240d9ce45bf9f9f11404aec2e3ee4af7abf3f5fdfbd0000000000000000d780e0402d04b3befdbd294000d4783fd6ec183e64db393e0000000000000000d74ba24082f825bf9182124000d478bfd6ec18be64db39be00000000000000009032e140dab0f2be0bdb284000d4783fd6ec183e64db393e000000000000000090fda240d9ce45bf9f9f114000d478bfd6ec18be64db39be000000000000000057e5e040d8beaabeec6424400b2134bed2527a3fadb8e83d000000002f47fc3e358da240186225bf6a7f0f400b2134bed2527a3fadb8e83d0000803f2f47fc3e5a9ce140e253eabe7a7823400b21343ed2527abfadb8e8bd00000000000000003844a3409d2c45bff8920e400b21343ed2527abfadb8e8bd000000000000000057e5e040d8beaabeec6424408760793f5905203e132c273e0000000000000000358da240186225bf6a7f0f40876079bf590520be132c27be00000000000000005a9ce140e253eabe7a7823408760793f5905203e132c273e00000000000000003844a3409d2c45bff8920e40876079bf590520be132c27be0000000000000000eb3be140935da2be65061f400c3e39be50f2793f8265f23d00000000270bfe3e9bc6a240c2c724bf9b800c400c3e39be50f2793f8265f23d0000803f270bfe3e20f8e14019dae1be1f101e400c3e393e50f279bf8265f2bd0000000000000000d082a340058644bf558a0b400c3e393e50f279bf8265f2bd0000000000000000eb3be140935da2be65061f403ed5793ff231273e532e143e00000000000000009bc6a240c2c724bf9b800c403ed579bff23127be532e14be000000000000000020f8e14019dae1be1f101e403ed5793ff231273e532e143e0000000000000000d082a340058644bf558a0b403ed579bff23127be532e14be00000000000000004c84e14070e199bebfa21940fa413ebe568e793fa467fc3d0000000036ceff3e0af8a240142a24bf83860940fa413ebe568e793fa467fc3d0000803f36ceff3e9945e2409144d9be4ea21840fa413e3e568e79bfa467fcbd000000000000000057b9a340a5db43bf12860840fa413e3e568e79bfa467fcbd00000000000000004c84e14070e199bebfa219400c317a3fb7722e3edbe1003e00000000000000000af8a240142a24bf838609400c317abfb7722ebedbe100be00000000000000009945e2409144d9be4ea218400c317a3fb7722e3edbe1003e000000000000000057b9a340a5db43bf128608400c317abfb7722ebedbe100be000000000000000033bee140954b91be553a1440502b43bed726793f7260033e0000000030c8003f7f21a3409a8923bf7f910640502b43bed726793f7260033e0000803f30c8003f7e84e2406c94d0be602f1340502b433ed72679bf726003be0000000000000000cae7a340062e43bf8a860540502b433ed72679bf726003be000000000000000033bee140954b91be553a1440ce727a3f9ec7353e5f8dda3d00000000000000007f21a3409a8923bf7f910640ce727abf9ec735be5f8ddabd00000000000000007e84e2406c94d0be602f1340ce727a3f9ec7353e5f8dda3d0000000000000000cae7a340062e43bf8a860540ce727abf9ec735be5f8ddabd000000000000000053e9e140299d88be89cd0e405ff847becbbb783f7cb9083e00000000d7a8013ffd42a340d4e622bfe3a103405ff847becbbb783f7cb9083e0000803fd7a8013f7eb4e240d0cac7beb6b70d405ff8473ecbbb78bf7cb908be0000000000000000280ea440a87d42bf108c02405ff8473ecbbb78bf7cb908be000000000000000053e9e140299d88be89cd0e4055997a3f7e303d3e63bab23d0000000000000000fd42a340d4e622bfe3a1034055997abf7e303dbe63bab2bd00000000000000007eb4e240d0cac7beb6b70d4055997a3f7e303d3e63bab23d0000000000000000280ea440a87d42bf108c024055997abf7e303dbe63bab2bd00000000000000006305e24031af7fbec05c0940ffa64cbe334d783fbe3f0e3e000000001489023f875ca3402a4222bffeb70040ffa64cbe334d783fbe3f0e3e0000803f1489023f50d5e24028e9bebeb33b0840ffa64c3e334d78bfbe3f0ebe0000000000000000742ca440f2ca41bfe22dff3fffa64c3e334d78bfbe3f0ebe00000000000000006305e24031af7fbec05c09406da37a3fbbac443e284c8a3d0000000000000000875ca3402a4222bffeb700406da37abfbbac44be284c8abd000000000000000050d5e24028e9bebeb33b08406da37a3fbbac443e284c8a3d0000000000000000742ca440f2ca41bfe22dff3f6da37abfbbac44be284c8abd00000000000000001212e240f9f76dbe6ae80340943551be02db773fdbf3133e00000000ed68033f206ea340269c21bf30a8fb3f943551be02db773fdbf3133e0000803fed68033fa0e6e2408bf0b5bec6bb02409435513e02db77bfdbf313be0000000000000000ae42a4406d1641bfe94ef93f9435513e02db77bfdbf313be00000000000000001212e240f9f76dbe6ae80340ca8f7a3f4f3c4c3e358a423d0000000000000000206ea340269c21bf30a8fb3fca8f7abf4f3c4cbe358a42bd0000000000000000a0e6e2408bf0b5bec6bb0240ca8f7a3f4f3c4c3e358a423d0000000000000000ae42a4406d1641bfe94ef93fca8f7abf4f3c4cbe358a42bd0000000000000000160fe24086175cbef7e1fc3ff4a155be3465773f61d6193e000000006a48043fce77a34036f520bfe7ecf53ff4a155be3465773f61d6193e0000803f6a48043f23e8e24065e2acbec570fa3ff4a1553e346577bf61d619be0000000000000000db50a440876040bfb57bf33ff4a1553e346577bf61d619be0000000000000000160fe24086175cbef7e1fc3f235d7a3faade533ee1a1de3c0000000000000000ce77a34036f520bfe7ecf53f235d7abfaade53bee1a1debc000000000000000023e8e24065e2acbec570fa3f235d7a3faade533ee1a1de3c0000000000000000db50a440876040bfb57bf33f235d7abfaade53bee1a1debc000000000000000020fce140a2104abee0edf13ff1e959bec9eb763fc1e71f3e000000009127053f9679a340c44d20bf923ef03ff1e959bec9eb763fc1e71f3e0000803f9127053f87d9e2401cc0a3be0564ef3ff1e9593ec9eb76bfc1e71fbe0000000000000000fd56a440aaa93fbfb7b4ed3ff1e9593ec9eb76bfc1e71fbe000000000000000020fce140a2104abee0edf13f280a7a3f36935b3e40a7d73b00000000000000009679a340c44d20bf923ef03f280a7abf36935bbe40a7d7bb000000000000000087d9e2401cc0a3be0564ef3f280a7a3f36935b3e40a7d73b0000000000000000fd56a440aaa93fbfb7b4ed3f280a7abf36935bbe40a7d7bb0000000000000000ded8e140cfe537bea0f5e63f990b5ebeba6e763f4228263e000000006d06063f7e73a3403ea61fbf929dea3f990b5ebeba6e763f4228263e0000803f6d06063f77bae240ef8a9abe5d52e43f990b5e3eba6e76bf422826be00000000000000001755a44042f23ebf4ffae73f990b5e3eba6e76bf422826be0000000000000000ded8e140cfe537bea0f5e63f7d95793f9559633e5efc69bc00000000000000007e73a3403ea61fbf929dea3f7d9579bf955963be5efc693c000000000000000077bae240ef8a9abe5d52e43f7d95793f9559633e5efc69bc00000000000000001755a44042f23ebf4ffae73f7d9579bf955963be5efc693c000000000000000002a5e140659a25be50fadb3f500462be09ee753f06982c3e0000000006e5063f8e65a340f7fe1ebf380ae53f500462be09ee753f06982c3e0000803f06e5063fa48ae2408a4491bee43cd93f5004623e09ee75bf06982cbe0000000000000000304ba440a33a3ebfcc4ce23f5004623e09ee75bf06982cbe000000000000000002a5e140659a25be50fadb3fcdfd783fbb306b3e7ffe10bd00000000000000008e65a340f7fe1ebf380ae53fcdfd78bfbb306bbe7ffe103d0000000000000000a48ae2408a4491bee43cd93fcdfd783fbb306b3e7ffe10bd0000000000000000304ba440a33a3ebfcc4ce23fcdfd78bfbb306bbe7ffe103d00000000000000003c60e140183113be20fdd03f08d265beb969753f0737333e000000006ac3073fcc4fa34052581ebfc084df3f08d265beb969753f0737333e0000803f6ac3073fbb49e24048ee87becc24ce3f08d2653eb96975bf073733be00000000000000004b39a44030833dbf6cacdc3f08d2653eb96975bf073733be00000000000000003c60e140183113be20fdd03fc141783f1818733ef17968bd0000000000000000cc4fa34052581ebfc084df3fc14178bf181873bef179683d0000000000000000bb49e24048ee87becc24ce3fc141783f1818733ef17968bd00000000000000004b39a44030833dbf6cacdc3fc14178bf181873bef179683d00000000000000003d0ae14034ad00be55ffc53f447269becee1743f0b053a3e00000000a4a1083f3b32a3409db21dbf530dda3f447269becee1743f0b053a3e0000803fa4a1083f6bf7e140a0137dbe590bc33f4472693ecee174bf0b053abe0000000000000000691fa44038cc3cbf5719d73f4472693ecee174bf0b053abe00000000000000003d0ae14034ad00be55ffc53f0860773fa00e7b3ef66fa0bd00000000000000003b32a3409db21dbf530dda3f086077bfa00e7bbef66fa03d00000000000000006bf7e140a0137dbe590bc33f0860773fa00e7b3ef66fa0bd0000000000000000691fa44038cc3cbf5719d73f086077bfa00e7bbef66fa03d0000000000000000baa2e0404824dcbd4302bb3f78e26cbe4e56743fa301413e00000000c27f093fe20ca3401b0e1dbf09a4d43f78e26cbe4e56743fa301413e0000803fc27f093f6793e140b2316abee2f1b73f78e26c3e4e5674bfa30141be00000000000000008ffda340ff153cbfa893d13f78e26c3e4e5674bfa30141be0000000000000000baa2e0404824dcbd4302bb3f5c57763f9289813e2c0ecdbd0000000000000000e20ca3401b0e1dbf09a4d43f5c5776bf928981be2c0ecd3d00000000000000006793e140b2316abee2f1b73f5c57763f9289813e2c0ecdbd00000000000000008ffda340ff153cbfa893d13f5c5776bf928981be2c0ecd3d00000000000000006429e0407cc6b6bd5807b03f3f2070be46c7733f312c483e00000000d35d0a3fc4dfa2400e6b1cbfe248cf3f3f2070be46c7733f312c483e0000803fd35d0a3f5c1de140243a57bed8d9ac3f3f20703e46c773bf312c48be0000000000000000bcd3a340c7603bbf621bcc3f3f20703e46c773bf312c48be00000000000000006429e0407cc6b6bd5807b03f8426753f3f92853e4a0cfabd0000000000000000c4dfa2400e6b1cbfe248cf3f842675bf3f9285be4a0cfa3d00000000000000005c1de140243a57bed8d9ac3f8426753f3f92853e4a0cfabd0000000000000000bcd3a340c7603bbf621bcc3f842675bf3f9285be4a0cfa3d0000000000000000f49ddf40504891bd1410a53f142973bebc34733fd2834f3e00000000e83b0b3fe0aaa240aec91bbfc8fbc93f142973bebc34733fd2834f3e0000803fe83b0b3f0195e0409c3044bebdc4a13f1429733ebc3473bfd2834fbe0000000000000000eda1a340cbac3abf71b0c63f1429733ebc3473bfd2834fbe0000000000000000f49ddf40504891bd1410a53f52cc733fa4a0893ed1ae13be0000000000000000e0aaa240aec91bbfc8fbc93f52cc73bfa4a089bed1ae133e00000000000000000195e0409c3044bebdc4a13f52cc733fa4a0893ed1ae13be0000000000000000eda1a340cbac3abf71b0c63f52cc73bfa4a089bed1ae133e00000000000000002200df40b06257bd0c1e9a3f60fa75bec99e723f6e07573e00000000121a0c3f346ea2401b2a1bbf96bcc43f60fa75bec99e723f6e07573e0000803f121a0c3f0cfadf40f41831be2bb4963f60fa753ec99e72bf6e0757be00000000000000001e68a3402dfa39bfb552c13f60fa753ec99e72bf6e0757be00000000000000002200df40b06257bd0c1e9a3fb847723ff0b38d3e267a2abe0000000000000000346ea2401b2a1bbf96bcc43fb84772bff0b38dbe267a2a3e00000000000000000cfadf40f41831be2bb4963fb847723ff0b38d3e267a2abe00000000000000001e68a3402dfa39bfb552c13fb84772bff0b38dbe267a2a3e0000000000000000a94fde4080110cbdec328f3ff89178be7505723fb7b55e3e0000000064f80c3fbb29a2408e8c1abf0c8bbf3ff89178be7505723fb7b55e3e0000803f64f80c3f354cdf40c4f61dbed4a98b3ff891783e750572bfb7b55ebe00000000000000004726a340274939bff401bc3ff891783e750572bfb7b55ebe0000000000000000a94fde4080110cbdec328f3fb597703f76cb913e7c6041be0000000000000000bb29a2408e8c1abf0c8bbf3fb59770bf76cb91be7c60413e0000000000000000354cdf40c4f61dbed4a98b3fb597703f76cb913e7c6041be00000000000000004726a340274939bff401bc3fb59770bf76cb91be7c60413e00000000000000004c8cdd40205c81bc7050843f42ed7abee268713f0b8d663e00000000f4d60d3f6edda14015f119bfd866ba3f42ed7abee268713f0b8d663e0000803ff4d60d3f3d8bde405ece0abe7aa7803f42ed7a3ee26871bf0b8d66be00000000000000005fdca240cb9938bfe2bdb63f42ed7a3ee26871bf0b8d66be00000000000000004c8cdd40205c81bc7050843f77bb6e3f34e6953e9e5958be00000000000000006edda14015f119bfd866ba3f77bb6ebf34e695be9e59583e00000000000000003d8bde405ece0abe7aa7803f77bb6e3f34e6953e9e5958be00000000000000005fdca240cb9938bfe2bdb63f77bb6ebf34e695be9e59583e000000000000000096bedc400004c5ba27ae723f93e478bece1e713fcc7e6d3e00000000d6b50e3f7280a140d04918bfed70b53f93e478bece1e713fcc7e6d3e0000803fd6b50e3f76bbdd40800ef8bdca236b3f93e4783ece1e71bfcc7e6dbe0000000000000000527da2401ee936bfbfabb13f93e4783ece1e71bfcc7e6dbe000000000000000096bedc400004c5ba27ae723f8cf86c3f4ee7973e656770be00000000000000007280a140d04918bfed70b53f8cf86cbf4ee797be6567703e000000000000000076bbdd40800ef8bdca236b3f8cf86c3f4ee7973e656770be0000000000000000527da2401ee936bfbfabb13f8cf86cbf4ee797be6567703e000000000000000023eada40d095ea3ca98d473fa21175be074b703f134b7e3e00000000fb74103fa9ada040965e15bf886dab3fa21175be074b703f134b7e3e0000803ffb74103f20e3db40d17db9bdc47a3f3fa211753e074b70bf134b7ebe0000000000000000a6a6a140ffe233bf1564a73fa211753e074b70bf134b7ebe000000000000000023eada40d095ea3ca98d473febf1683f45b39c3e664d8fbe0000000000000000a9ada040965e15bf886dab3febf168bf45b39cbe664d8f3e000000000000000020e3db40d17db9bdc47a3f3febf1683f45b39c3e664d8fbe0000000000000000a6a6a140ffe233bf1564a73febf168bf45b39cbe664d8f3e000000000000000083e6d940d0ac363da59a323fe13473be15bf6f3fa812843e00000000e053113f0338a040391314bf9e62a63fe13473be15bf6f3fa812843e0000803fe053113f9cddda40ae3e98bdab372a3fe134733e15bf6fbfa81284be00000000000000001c2fa140dc8532bf2131a23fe134733e15bf6fbfa81284be000000000000000083e6d940d0ac363da59a323fffb9663f067e9f3e962a9abe00000000000000000338a040391314bf9e62a63fffb966bf067e9fbe962a9a3e00000000000000009cddda40ae3e98bdab372a3fffb9663f067e9f3e962a9abe00000000000000001c2fa140dc8532bf2131a23fffb966bf067e9fbe962a9a3e000000000000000006d3d840f07a783d22f91d3faf1971be78316f3fd0f5883e00000000e331123f96ba9f408dc312bfd567a13faf1971be78316f3fd0f5883e0000803fe331123ffbc7d9407a8f6dbdb546153faf19713e78316fbfd0f588be00000000000000008bafa040342431bf9f0e9d3faf19713e78316fbfd0f588be000000000000000006d3d840f07a783d22f91d3fc461643f3c4ba23e88d6a4be000000000000000096ba9f408dc312bfd567a13fc46164bf3c4ba2be88d6a43e0000000000000000fbc7d9407a8f6dbdb546153fc461643f3c4ba23e88d6a4be00000000000000008bafa040342431bf9f0e9d3fc46164bf3c4ba2be88d6a43e000000000000000014b0d74030549d3deeaa093fa6c16ebe63a26e3f08cd8d3e00000000210f133f5c359f403a6f11bf397c9c3fa6c16ebe63a26e3f08cd8d3e0000803f210f133fa8a2d8404c3f2abdd0a9003fa6c16e3e63a26ebf08cd8dbe0000000000000000f027a040b5bd2fbfaafb973fa6c16e3e63a26ebf08cd8dbe000000000000000014b0d74030549d3deeaa093fddea613fc019a53e834dafbe00000000000000005c359f403a6f11bf397c9c3fddea61bfc019a5be834daf3e0000000000000000a8a2d8404c3f2abdd0a9003fddea613fc019a53e834dafbe0000000000000000f027a040b5bd2fbfaafb973fddea61bfc019a5be834daf3e0000000000000000147ed6401c95be3d7763eb3e382f6cbe07126e3f9596923e00000000b5eb133f54a89e401c1610bfe49e973f382f6cbe07126e3f9596923e0000803fb5eb133f0b6ed7403830cdbc97c5d83e382f6c3e07126ebf959692be00000000000000004b989f4041522ebf6cf7923f382f6c3e07126ebf959692be0000000000000000147ed6401c95be3d7763eb3e01575f3fbfe8a73e0d8cb9be000000000000000054a89e401c1610bfe49e973f01575fbfbfe8a7be0d8cb93e00000000000000000b6ed7403830cdbc97c5d83e01575f3fbfe8a73e0d8cb9be00000000000000004b989f4041522ebf6cf7923f01575fbfbfe8a7be0d8cb93e0000000000000000763dd540f8fadf3d0f1ec43ee86469be95806d3fd550973e00000000b9c7143f76139e40ffb70ebf0ccf923fe86469be95806d3fd550973e0000803fb9c7143f972ad64068930abc7be6b03ee864693e95806dbfd55097be000000000000000097009f40ace12cbf27018e3fe864693e95806dbfd55097be0000000000000000763dd540f8fadf3d0f1ec43effa75c3f5eb7aa3e118fc3be000000000000000076139e40ffb70ebf0ccf923fffa75cbf5eb7aabe118fc33e0000000000000000972ad64068930abc7be6b03effa75c3f5eb7aa3e118fc3be000000000000000097009f40ace12cbf27018e3fffa75cbf5eb7aabe118fc33e0000000000000000a4eed34044c0003e4d889d3e6c6566be38ee6c3f4ffa9b3e0000000047a3153fb8769d40bd540dbffd0b8e3f6c6566be38ee6c3f4ffa9b3e0000803f47a3153fb9d8d440c03e063c27b9893e6c65663e38ee6cbf4ffa9bbe0000000000000000cd609e40d36b2bbf3318893f6c65663e38ee6cbf4ffa9bbe0000000000000000a4eed34044c0003e4d889d3eaedf593fce84ad3ed353cdbe0000000000000000b8769d40bd540dbffd0b8e3faedf59bfce84adbed353cd3e0000000000000000b9d8d440c03e063c27b9893eaedf593fce84ad3ed353cdbe0000000000000000cd609e40d36b2bbf3318893faedf59bfce84adbed353cd3e00000000000000000c92d2402290113ece486f3e513363be245b6c3f9c91a03e00000000797e163f0ed29c401aec0bbf1c55893f513363be245b6c3f9c91a03e0000803f797e163fe278d34008f4cb3cfb7f463e5133633e245b6cbf9c91a0be0000000000000000e4b89d4082f029bf023c843f5133633e245b6cbf9c91a0be00000000000000000c92d2402290113ece486f3efaff563f2350b03e05d8d6be00000000000000000ed29c401aec0bbf1c55893ffaff56bf2350b0be05d8d63e0000000000000000e278d34008f4cb3cfb7f463efaff563f2350b03e05d8d6be0000000000000000e4b89d4082f029bf023c843ffaff56bf2350b0be05d8d63e00000000000000002328d140966a223e58e8243e80d15fbe81c76b3f8c15a53e000000006359173f6f259c40fc7d0abfe5a9843f80d15fbe81c76b3f8c15a53e0000803f6359173f890bd240d48f2a3dd2f3f53d80d15f3e81c76bbf8c15a5be0000000000000000d5089d40a46f28bf2ed87e3f80d15f3e81c76bbf8c15a5be00000000000000002328d140966a223e58e8243ecd0a543fa118b33eb419e0be00000000000000006f259c40fc7d0abfe5a9843fcd0a54bfa118b3beb419e03e0000000000000000890bd240d48f2a3dd2f3f53dcd0a543fa118b33eb419e0be0000000000000000d5089d40a46f28bf2ed87e3fcd0a54bfa118b3beb419e03e000000000000000052b1cf405a4d333e10e5b73d04435cbe7c336b3f1485a93e000000001c34183fcc709b40440a09bfed09803f04435cbe7c336b3f1485a93e0000803f1c34183f1b91d040aa476f3db18e433d04435c3e7c336bbf1485a9be000000000000000095509c4020e926bf2350753f04435c3e7c336bbf1485a9be000000000000000052b1cf405a4d333e10e5b73d1602513f9bddb53e3817e9be0000000000000000cc709b40440a09bfed09803f160251bf9bddb5be3817e93e00000000000000001b91d040aa476f3db18e433d1602513f9bddb53e3817e9be000000000000000095509c4020e926bf2350753f160251bf9bddb5be3817e93e00000000000000000d2ece40f435443e704ba33cb48a58be3a9f6a3f44dfad3e00000000b90e193f1db49a40d99007bfb8e9763fb48a58be3a9f6a3f44dfad3e0000803fb90e193f0f0acf40ab0b9a3d7603bebcb48a583e3a9f6abf44dfadbe00000000000000001f909b40e15c25bf41df6b3fb48a583e3a9f6abf44dfadbe00000000000000000d2ece40f435443e704ba33cbfe74d3f569eb83e5dcff1be00000000000000001db49a40d99007bfb8e9763fbfe74dbf569eb8be5dcff13e00000000000000000f0acf40ab0b9a3d7603bebcbfe74d3f569eb83e5dcff1be00000000000000001f909b40e15c25bf41df6b3fbfe74dbf569eb8be5dcff13e0000000000000000c29ecc40f621553eb0c546bd5fab54beec0a6a3f4a23b23e000000004de9193f56ef99409e1106bfefd46d3f5fab54beec0a6a3f4a23b23e0000803f4de9193fd476cd405c7abc3d50e1bdbd5fab543eec0a6abf4a23b2be000000000000000068c79a40d0ca23bf2085623f5fab543eec0a6abf4a23b2be0000000000000000c29ecc40f621553eb0c546bdb3bd4a3f1b5abb3e4a41fabe000000000000000056ef99409e1106bfefd46d3fb3bd4abf1b5abbbe4a41fa3e0000000000000000d476cd405c7abc3d50e1bdbdb3bd4a3f1b5abb3e4a41fabe000000000000000068c79a40d0ca23bf2085623fb3bd4abf1b5abbbe4a41fa3e0000000000000000de03cb407c0f663ed0b9ecbd1ea850bead76693f8e50b63e00000000eac31a3f6c2299408b8c04bf2ad5643f1ea850bead76693f8e50b63e0000803feac31a3fddd7cb4006ecde3dbcab24be1ea8503ead7669bf8e50b6be00000000000000006bf69940e93222bf7541593f1ea8503ead7669bf8e50b6be0000000000000000de03cb407c0f663ed0b9ecbdc685473f6a10be3e323601bf00000000000000006c2299408b8c04bf2ad5643fc68547bf6a10bebe3236013f0000000000000000ddd7cb4006ecde3dbcab24bec685473f6a10be3e323601bf00000000000000006bf69940e93222bf7541593fc68547bf6a10bebe3236013f0000000000000000cb5dc94092fc763ed09839bef3834cbe9de2683f9866ba3e00000000a39e1b3f5b4d9840a80103bf34ea5b3ff3834cbe9de2683f9866ba3e0000803fa39e1b3f952dca4050ae003e56f168bef3834c3e9de268bf9866babe0000000000000000251d9940389520bf1214503ff3834c3e9de268bf9866babe0000000000000000cb5dc94092fc763ed09839bec241443fcdc0c03e342805bf00000000000000005b4d9840a80103bf34ea5b3fc24144bfcdc0c0be3428053f0000000000000000952dca4050ae003e56f168bec241443fcdc0c03e342805bf0000000000000000251d9940389520bf1214503fc24144bfcdc0c0be3428053f0000000000000000f6acc74088f3833e6c657bbe824148bee74e683ff964be3e0000000085791c3f1c709740e87001bf1314533f824148bee74e683ff964be3e0000803f85791c3f6c78c840d8e3113ed0e095be8241483ee74e68bff964bebe0000000000000000923b9840b6f11ebf06fd463f8241483ee74e68bff964bebe0000000000000000f6acc74088f3833e6c657bbe6af3403fac6ac33eb7f608bf00000000000000001c709740e87001bf1314533f6af340bfac6ac3beb7f6083f00000000000000006c78c840d8e3113ed0e095be6af3403fac6ac33eb7f608bf0000000000000000923b9840b6f11ebf06fd463f6af340bfac6ac3beb7f6083f0000000000000000c1f1c540ae668c3ec0e19dbeb8e343be99bb673f794bc23e00000000a1541d3fa98a9640bab4ffbed0524a3fb8e343be99bb673f794bc23e0000803fa1541d3fc7b8c640f814233eaa8eb6beb8e3433e99bb67bf794bc2be0000000000000000af51974076481dbf5bfc3d3fb8e3433e99bb67bf794bc2be0000000000000000c1f1c540ae668c3ec0e19dbe629c3d3fb40dc63ed8a10cbf0000000000000000a98a9640bab4ffbed0524a3f629c3dbfb40dc6bed8a10c3f0000000000000000c7b8c640f814233eaa8eb6be629c3d3fb40dc63ed8a10cbf0000000000000000af51974076481dbf5bfc3d3f629c3dbfb40dc6bed8a10c3f0000000000000000962cc440cbd6943e1c5abdbe1e6d3fbed728673fe819c63e0000000002301e3f069d95401b7cfcbebea6413f1e6d3fbed728673fe819c63e0000803f02301e3f13efc440c03f343ec782d6be1e6d3f3ed72867bfe819c6be0000000000000000835f964083991bbf6912353f1e6d3f3ed72867bfe819c6be0000000000000000962cc440cbd6943e1c5abdbe443e3a3f73a9c83ee62910bf0000000000000000069d95401b7cfcbebea6413f443e3abf73a9c8bee629103f000000000000000013efc440c03f343ec782d6be443e3a3f73a9c83ee62910bf0000000000000000835f964083991bbf6912353f443e3abf73a9c8bee629103f0000000000000000d65dc24024439d3eb61cdcbe70e03abeb496663f4ad0c93e00000000b70b1f3f32a794403c38f9be1b10393f70e03abeb496663f4ad0c93e0000803fb70b1f3fb41bc340af62453e13bef5be70e03a3eb49666bf4ad0c9be00000000000000001065954004e519bf6c3f2c3f70e03a3eb49666bf4ad0c9be0000000000000000d65dc24024439d3eb61cdcbe8dda363fb03dcb3e3b8f13bf000000000000000032a794403c38f9be1b10393f8dda36bfb03dcbbe3b8f133f0000000000000000b41bc340af62453e13bef5be8dda363fb03dcb3e3b8f13bf00000000000000001065954004e519bf6c3f2c3f8dda36bfb03dcbbe3b8f133f0000000000000000df85c040deaaa53e962afabeee3f36be4805663f966ecd3e00000000c8e71f3f35a993402ee9f5be638f303fee3f36be4805663f966ecd3e0000803fc8e71f3f093fc140027c563ecc200abfee3f363e480566bf966ecdbe00000000000000005f629440052b18bfe283233fee3f363e480566bf966ecdbe0000000000000000df85c040deaaa53e962afabea872333f06cacd3e57d216bf000000000000000035a993402ee9f5be638f303fa87233bf06cacdbe57d2163f0000000000000000093fc140027c563ecc200abfa872333f06cacd3e57d216bf00000000000000005f629440052b18bfe283233fa87233bf06cacdbe57d2163f00000000000000000ca5be406a0dae3e7ac20bbf218e31bea274653f0af5d03e0000000043c4203f14a392405a8ff2be1225283f218e31bea274653f0af5d03e0000803f43c4203f7159bf40968a673e490719bf218e313ea27465bf0af5d0be000000000000000079579340bc6b16bf43e01a3f218e313ea27465bf0af5d0be00000000000000000ca5be406a0dae3e7ac20bbfe307303f624ed03ec6f319bf000000000000000014a392405a8ff2be1225283fe30730bf624ed0bec6f3193f00000000000000007159bf40968a673e490719bfe307303f624ed03ec6f319bf000000000000000079579340bc6b16bf43e01a3fe30730bf624ed0bec6f3193f0000000000000000b8bbbc40ef69b63e92161abf05cd2cbed4e4643fbc63d43e000000002da1213fda949140ef2aefbecad11f3f05cd2cbed4e4643fbc63d43e0000803f2da1213f496bbd40ae8c783e2d9327bf05cd2c3ed4e464bfbc63d4be00000000000000006b44924044a714bf2f55123f05cd2c3ed4e464bfbc63d4be0000000000000000b8bbbc40ef69b63e92161abf7c9b2c3f6fcad23e2ef41cbf0000000000000000da949140ef2aefbecad11f3f7c9b2cbf6fcad2be2ef41c3f0000000000000000496bbd40ae8c783e2d9327bf7c9b2c3f6fcad23e2ef41cbf00000000000000006b44924044a714bf2f55123f7c9b2cbf6fcad2be2ef41c3f000000000000000039caba40f3bfbe3e631228bfd0fe27beef55643f0bbbd73e00000000927e223f957e90405bbcebbe2396173fd0fe27beef55643f0bbbd73e0000803f927e223fe874bb40a6c0843e4ec535bfd0fe273eef5564bf0bbbd7be000000000000000044299140d4dd12bf38e3093fd0fe273eef5564bf0bbbd7be000000000000000039caba40f3bfbe3e631228bf932e293f273ed53e43d41fbf0000000000000000957e90405bbcebbe2396173f932e29bf273ed5be43d41f3f0000000000000000e874bb40a6c0843e4ec535bf932e293f273ed53e43d41fbf000000000000000044299140d4dd12bf38e3093f932e29bf273ed5be43d41f3f0000000000000000e3d0b840ce0ec73ea0b635bf5c2523bef8c7633f42fbda3e00000000755c233f57608f40fe43e8bee8720f3f5c2523bef8c7633f42fbda3e0000803f755c233fa576b94090338d3e639e43bf5c25233ef8c763bf42fbdabe0000000000000000190690409e0f11bf258b013f5c25233ef8c763bf42fbdabe0000000000000000e3d0b840ce0ec73ea0b635bf2ec2253f66a9d73ec49422bf000000000000000057608f40fe43e8bee8720f3f2ec225bf66a9d7bec494223f0000000000000000a576b94090338d3e639e43bf2ec2253f66a9d73ec49422bf0000000000000000190690409e0f11bf258b013f2ec225bf66a9d7bec494223f000000000000000004d0b6401e56cf3e2c0443bfaa421ebef43a633fe124de3e00000000df3a243f343a8e4066c2e4bebc68073faa421ebef43a633fe124de3e0000803fdf3a243fcf70b740b29e953e581f51bfaa421e3ef43a63bfe124debe0000000000000000ffda8e40e93c0fbf1f9bf23eaa421e3ef43a63bfe124debe000000000000000004d0b6401e56cf3e2c0443bf4057223f420cda3e743625bf0000000000000000343a8e4066c2e4bebc68073f405722bf420cdabe7436253f0000000000000000cf70b740b29e953e581f51bf4057223f420cda3e743625bf0000000000000000ffda8e40e93c0fbf1f9bf23e405722bf420cdabe7436253f0000000000000000ecc7b4402095d73eebfb4fbf045819befaae623f2738e13e00000000d419253f420c8d40c837e1be06f1fe3e045819befaae623f2738e13e0000803fd419253fb863b54042019e3e15495ebf0458193efaae62bf2738e1be00000000000000000ea88d40d3650dbfb156e23e0458193efaae62bf2738e1be0000000000000000ecc7b4402095d73eebfb4fbfa6ee1e3f7466dc3e37ba27bf0000000000000000420c8d40c837e1be06f1fe3ea6ee1ebf7466dcbe37ba273f0000000000000000b863b54042019e3e15495ebfa6ee1e3f7466dc3e37ba27bf00000000000000000ea88d40d3650dbfb156e23ea6ee1ebf7466dcbe37ba273f0000000000000000e4b8b2406fcbdf3ec89e5cbf156714be0a24623fa135e43e0000000058f9253f9ad68b40c3a4ddbef045ef3e156714be0a24623fa135e43e0000803f58f9253fab4fb340db5aa63e8e1c6bbf1567143e0a2462bfa135e4be0000000000000000616d8c40ac8a0bbf644ad23e1567143e0a2462bfa135e4be0000000000000000e4b8b2406fcbdf3ec89e5cbf26891b3f19b8de3ee0202abf00000000000000009ad68b40c3a4ddbef045ef3e26891bbf19b8debee0202a3f0000000000000000ab4fb340db5aa63e8e1c6bbf26891b3f19b8de3ee0202abf0000000000000000616d8c40ac8a0bbf644ad23e26891bbf19b8debee0202a3f000000000000000034a3b040a4f8e73ea1ed68bf45710fbe249a613fd11de73e000000006ed9263f58998a40dc09dabef2d1df3e45710fbe249a613fd11de73e0000803f6ed9263ff134b14017abae3ea99a77bf45710f3e249a61bfd11de7be0000000000000000152b8b40b5ab09bfe377c23e45710f3e249a61bfd11de7be000000000000000034a3b040a4f8e73ea1ed68bf6d27183f4001e13e4d6b2cbf000000000000000058998a40dc09dabef2d1df3e6d2718bf4001e1be4d6b2c3f0000000000000000f134b14017abae3ea99a77bf6d27183f4001e13e4d6b2cbf0000000000000000152b8b40b5ab09bfe377c23e6d2718bf4001e1be4d6b2c3f00000000000000002287ae40551cf03e63e974bfe1770abe4911613f47f1e93e0000000018ba273f9e548940b167d6beb696d03ee1770abe4911613f47f1e93e0000803f18ba273fd113af408af1b63e2ee281bfe1770a3e491161bf47f1e9be00000000000000004de189403ec907bfc6e0b23ee1770a3e491161bf47f1e9be00000000000000002287ae40551cf03e63e974bf11ca143f0342e33e5f9a2ebf00000000000000009e548940b167d6beb696d03e11ca14bf0342e3be5f9a2e3f0000000000000000d113af408af1b63e2ee281bf11ca143f0342e33e5f9a2ebf00000000000000004de189403ec907bfc6e0b23e11ca14bf0342e3be5f9a2e3f0000000000000000f164ac40fc35f83e884980bfe07b05be8389603f72b0ec3e00000000589b283f89088840a8bed2bed095c13ee07b05be8389603f72b0ec3e0000803f589b283f90ecac40ae2dbf3e57cd87bfe07b053e838960bf72b0ecbe0000000000000000289088407be305bf9286a33ee07b053e838960bf72b0ecbe0000000000000000f164ac40fc35f83e884980bfa071113f527ae53efcae30bf000000000000000089088840a8bed2bed095c13ea07111bf527ae5befcae303f000000000000000090ecac40ae2dbf3e57cd87bfa071113f527ae53efcae30bf0000000000000000289088407be305bf9286a33ea07111bf527ae5befcae303f0000000000000000e03caa40a222003fc4f585bf567e00bece02603fec5bef3e000000002f7d293f3eb58640700fcfbe0ed1b23e567e00bece02603fec5bef3e0000803f2f7d293f6dbfaa402d5fc73e478f8dbf567e003ece0260bfec5befbe0000000000000000cb378740c3fa03bf036b943e567e003ece0260bfec5befbe0000000000000000e03caa40a222003fc4f585bf8b1e0e3f5aaae73e07aa32bf00000000000000003eb58640700fcfbe0ed1b23e8b1e0ebf5aaae7be07aa323f00000000000000006dbfaa402d5fc73e478f8dbf8b1e0e3f5aaae73e07aa32bf0000000000000000cb378740c3fa03bf036b943e8b1e0ebf5aaae7be07aa323f0000000000000000300fa840e724043fdc798bbf4900f7bd277d5f3f41f4f13e000000009c5f2a3fe25a85409a5acbbe104aa43e4900f7bd277d5f3f41f4f13e0000803f9c5f2a3faa8ca840aa85cf3e762893bf4900f73d277d5fbf41f4f1be00000000000000005cd885405f0f02bfa68f853e4900f73d277d5fbf41f4f1be0000000000000000300fa840e724043fdc798bbf35d10a3f34d2e93e608c34bf0000000000000000e25a85409a5acbbe104aa43e35d10abf34d2e9be608c343f0000000000000000aa8ca840aa85cf3e762893bf35d10a3f34d2e93e608c34bf00000000000000005cd885405f0f02bfa68f853e35d10abf34d2e9be608c343f00000000000000001bdca540a221083f46d690bf2c04edbd8df85e3f087af43e000000009f422b3f9ff98340cda0c7be7a02963e2c04edbd8df85e3f087af43e0000803f9f422b3f8254a640cea0d73e619998bf2c04ed3d8df85ebf087af4be000000000000000006728440a12100bf1aec6d3e2c04ed3d8df85ebf087af4be00000000000000001bdca540a221083f46d690bfef89073f08f2eb3ee55636bf00000000000000009ff98340cda0c7be7a02963eef8907bf08f2ebbee556363f00000000000000008254a640cea0d73e619998bfef89073f08f2eb3ee55636bf000000000000000006728440a12100bf1aec6d3eef8907bf08f2ebbee556363f0000000000000000dda3a340ab180c3f6e0b96bfd409e3bdf9745e3fdeedf63e0000000036262c3f9d918240bce2c3bef8fb873ed409e3bdf9745e3fdeedf63e0000803f36262c3f3317a4404cb0df3e78e29dbfd409e33df9745ebfdeedf6be0000000000000000f3048340c663fcbe9d3f513ed409e33df9745ebfdeedf6be0000000000000000dda3a340ab180c3f6e0b96bffd48043f090aee3e6c0a38bf00000000000000009d918240bce2c3bef8fb873efd4804bf090aeebe6c0a383f00000000000000003317a4404cb0df3e78e29dbffd48043f090aee3e6c0a38bf0000000000000000f3048340c663fcbe9d3f513efd4804bf090aeebe6c0a383f0000000000000000ae66a140c609103fdb199bbff511d9bd72f25d3f2a50f93e00000000600a2d3f08238140d520c0bef86f743ef511d9bd72f25d3f2a50f93e0000803f600a2d3ff4d4a140a9b3e73e4604a3bff511d93d72f25dbf2a50f9be00000000000000004e918140b880f8bea21c353ef511d93d72f25dbf2a50f9be0000000000000000ae66a140c609103fdb199bbf940e013f311af03edaa739bf000000000000000008238140d520c0bef86f743e940e01bf311af0bedaa7393f0000000000000000f4d4a140a9b3e73e4604a3bf940e013f311af03edaa739bf00000000000000004e918140b880f8bea21c353e940e01bf311af0bedaa7393f0000000000000000c3249f40d0f4133fe701a0bfb81dcfbdf0705d3f8fa1fb3e0000000018ef2d3f195c7f40dd5bbcbe9870593eb81dcfbdf0705d3f8fa1fb3e0000803f18ef2d3ffa8d9f40a2aaef3e29ffa7bfb81dcf3df0705dbf8fa1fbbe000000000000000044178040da9af4be8886193eb81dcf3df0705dbf8fa1fbbe0000000000000000c3249f40d0f4133fe701a0bfb5b5fb3ebe22f23efa2f3bbf0000000000000000195c7f40dd5bbcbe9870593eb5b5fbbebe22f2befa2f3b3f0000000000000000fa8d9f40a2aaef3e29ffa7bfb5b5fb3ebe22f23efa2f3bbf000000000000000044178040da9af4be8886193eb5b5fbbebe22f2befa2f3b3f000000000000000055de9c40a6d9173f0cc4a4bfef2dc5bd6af05c3f9ae2fd3e000000005cd42e3fb6657c407594b8be5cfc3e3eef2dc5bd6af05c3f9ae2fd3e0000803f5cd42e3f80429d40f494f73ea0d3acbfef2dc53d6af05cbf9ae2fdbe00000000000000000c2e7d40ceb2f0be76fffc3def2dc53d6af05cbf9ae2fdbe000000000000000055de9c40a6d9173f0cc4a4bfd15bf53ee123f43e97a33cbf0000000000000000b6657c407594b8be5cfc3e3ed15bf5bee123f4be97a33c3f000000000000000080429d40f494f73ea0d3acbfd15bf53ee123f43e97a33cbf00000000000000000c2e7d40ceb2f0be76fffc3dd15bf5bee123f4be97a33c3f000000000000000096939a401bb81b3fa760a9bf3843bbbdd8705c3feb09003f0000000028ba2f3f446379405acbb4be7816253e3843bbbdd8705c3feb09003f0000803f28ba2f3fb7f29a404572ff3e0d82b1bf3843bb3dd8705cbfeb0900bf000000000000000086217a404bc9ecbe9216c83d3843bb3dd8705cbfeb0900bf000000000000000096939a401bb81b3fa760a9bf9e0fef3ec81df63e76033ebf0000000000000000446379405acbb4be7816253e9e0fefbec81df6be76033e3f0000000000000000b7f29a404572ff3e0d82b1bf9e0fef3ec81df63e76033ebf000000000000000086217a404bc9ecbe9216c83d9e0fefbec81df6be76033e3f0000000000000000b74498400a901f3f28d8adbfe95db1bd3ff25b3fe01a013f0000000076a0303f265576401901b1bec0c10b3ee95db1bd3ff25b3fe01a013f0000803f76a0303fd19e984025a1033fe30ab6bfe95db13d3ff25bbfe01a01bf00000000000000005a097740e2dee8becf57943de95db13d3ff25bbfe01a01bf0000000000000000b74498400a901f3f28d8adbf24d1e83e9610f83e60503fbf0000000000000000265576401901b1bec0c10b3e24d1e8be9610f8be60503f3f0000000000000000d19e984025a1033fe30ab6bf24d1e83e9610f83e60503fbf00000000000000005a097740e2dee8becf57943d24d1e8be9610f8be60503f3f0000000000000000ecf195404c61233fee2ab2bf727ea7bd8c745b3f7324023f000000004287313fc33b73407536adbe6801e63d727ea7bd8c745b3f7324023f0000803f4287313f024796405e82073f866ebabf727ea73d8c745bbf732402bf0000000000000000f0e5734051f4e4beca8f433d727ea73d8c745bbf732402bf0000000000000000ecf195404c61233fee2ab2bf57a0e23e86fcf93e058b40bf0000000000000000c33b73407536adbe6801e63d57a0e2be86fcf9be058b403f0000000000000000024796405e82073f866ebabf57a0e23e86fcf93e058b40bf0000000000000000f0e5734051f4e4beca8f433d57a0e2be86fcf9be058b403f0000000000000000659b9340b22b273f5859b6bfcba49dbdc3f75a3fd926033f00000000866e323f83177040016ca9be88acb53dcba49dbdc3f75a3fd926033f0000803f866e323f7aeb93409d5c0b3f59adbebfcba49d3dc3f75abfd92603bf0000000000000000aeb770402b0ae1bef0b1c13ccba49d3dc3f75abfd92603bf0000000000000000659b9340b22b273f5859b6bf197ddc3eb2e1fb3e21b441bf000000000000000083177040016ca9be88acb53d197ddcbeb2e1fbbe21b4413f00000000000000007aeb93409d5c0b3f59adbebf197ddc3eb2e1fb3e21b441bf0000000000000000aeb770402b0ae1bef0b1c13c197ddcbeb2e1fbbe21b4413f00000000000000005041914022ef2a3fc463babf3ed193bdd67b5a3f5d22043f000000003c56333fd0e86c4089a2a5be3889863d3ed193bdd67b5a3f5d22043f0000803f3c56333f678c9140ca2f0f3fbdc7c2bf3ed1933dd67b5abf5d2204bf0000000000000000ff7e6d403921ddbe004413393ed1933dd67b5abf5d2204bf00000000000000005041914022ef2a3fc463babf3f67d63e67c0fd3e57cc42bf0000000000000000d0e86c4089a2a5be3889863d3f67d6be67c0fdbe57cc423f0000000000000000678c9140ca2f0f3fbdc7c2bf3f67d63e67c0fd3e57cc42bf0000000000000000ff7e6d403921ddbe004413393f67d6be67c0fdbe57cc423f0000000000000000dce38e406bab2e3f884abebf76038abdc2005a3f2c17053f000000005c3e343f15b0694096daa1be9039313d76038abdc2005a3f2c17053f0000803f5c3e343ff8298f40b5fb123f0dbec6bf76038a3dc2005abf2c1705bf00000000000000004e3c6a40033ad9be206ebabc76038a3dc2005abf2c1705bf0000000000000000dce38e406bab2e3f884abebf895ed03eb698ff3e55d443bf000000000000000015b0694096daa1be9039313d895ed0beb698ffbe55d4433f0000000000000000f8298f40b5fb123f0dbec6bf895ed03eb698ff3e55d443bf00000000000000004e3c6a40033ad9be206ebabc895ed0beb698ffbe55d4433f000000000000000035838c407060323ffb0dc2bf743b80bd7c86593f8a05063f00000000e126353fbe6d6640f1149ebec0adaf3c743b80bd7c86593f8a05063f0000803fe126353f59c48c4041c0163fa390cabf743b803d7c8659bf8a0506bf000000000000000007f066404f55d5be1c7e38bd743b803d7c8659bf8a0506bf000000000000000035838c407060323ffb0dc2bfaf62ca3e74b5003fb2cc44bf0000000000000000be6d6640f1149ebec0adaf3caf62cabe74b500bfb2cc443f000000000000000059c48c4041c0163fa390cabfaf62ca3e74b5003fb2cc44bf000000000000000007f066404f55d5be1c7e38bdaf62cabe74b500bfb2cc443f0000000000000000881f8a40fc0d363f70aec5bf72f16cbd040d593fa2ed063f00000000c30f363f3b22634029529abe0070733972f16cbd040d593fa2ed063f0000803fc30f363fb75b8a403a7d1a3fd53fcebf72f16c3d040d59bfa2ed06bf0000000000000000999a6340ad73d1be959c88bd72f16c3d040d59bfa2ed06bf0000000000000000881f8a40fc0d363f70aec5bf5673c43e889b013f0bb645bf00000000000000003b22634029529abe007073395673c4be889b01bf0bb6453f0000000000000000b75b8a403a7d1a3fd53fcebf5673c43e889b013f0bb645bf0000000000000000999a6340ad73d1be959c88bd5673c4be889b01bf0bb6453f000000000000000003b98740efb3393f302cc9bff57559bd4c94583fadcf073f00000000f9f8363ffecd5f40fa9296bee0d0a6bcf57559bd4c94583fadcf073f0000803ff9f8363f3ff0874082321e3fefcbd1bff575593d4c9458bfadcf07bf0000000000000000763c6040d495cdbe2eb0b3bdf575593d4c9458bfadcf07bf000000000000000003b98740efb3393f302cc9bf1d90be3eb67e023fed9046bf0000000000000000fecd5f40fa9296bee0d0a6bc1d90bebeb67e02bfed90463f00000000000000003ff0874082321e3fefcbd1bf1d90be3eb67e023fed9046bf0000000000000000763c6040d495cdbe2eb0b3bd1d90bebeb67e02bfed90463f0000000000000000d04f85402a523d3f8a87ccbf990346bd4b1c583fe3ab083f000000007be2373f7a715c401cd892beb03525bd990346bd4b1c583fe3ab083f0000803f7be2373f1c828540fadf213f4535d5bf9903463d4b1c58bfe3ab08bf000000000000000011d65c407bbcc9be8a76ddbd9903463d4b1c58bfe3ab08bf0000000000000000d04f85402a523d3f8a87ccbf97b8b83e1c5f033fdd5d47bf00000000000000007a715c401cd892beb03525bd97b8b8be1c5f03bfdd5d473f00000000000000001c828540fadf213f4535d5bf97b8b83e1c5f033fdd5d47bf000000000000000011d65c407bbcc9be8a76ddbd97b8b8be1c5f03bfdd5d473f000000000000000018e4824075e8403fc4c0cfbfd79832bd02a5573f6482093f0000000041cc383f1e0d594012228fbe006c74bdd79832bd02a5573f6482093f0000803f41cc383f751183406c85253f1e7cd8bfd798323d02a557bf648209bf0000000000000000d867594024e8c5bed0f502bed798323d02a557bf648209bf000000000000000018e4824075e8403fc4c0cfbf49ecb23ebf3c043f641d48bf00000000000000001e0d594012228fbe006c74bd49ecb2bebf3c04bf641d483f0000000000000000751183406c85253f1e7cd8bf49ecb23ebf3c043f641d48bf0000000000000000d867594024e8c5bed0f502be49ecb2bebf3c04bf641d483f000000000000000007768040b476443f1ed8d2bfb7341fbd632e573f6a530a3f0000000041b6393f61a15540a9718bbe6882a0bdb7341fbd632e573f6a530a3f0000803f41b6393f779e8040bb22293fbea0dbbfb7341f3d632e57bf6a530abf000000000000000041f255409a19c2be348616beb7341f3d632e57bf6a530abf000000000000000007768040b476443f1ed8d2bfb72aad3ec417053ff7cf48bf000000000000000061a15540a9718bbe6882a0bdb72aadbec41705bff7cf483f0000000000000000779e8040bb22293fbea0dbbfb72aad3ec417053ff7cf48bf000000000000000041f255409a19c2be348616beb72aadbec41705bff7cf483f00000000000000008b0b7c40b8fc473fd6cdd5bfa1d50bbd67b8563f1a1f0b3f0000000073a03a3fb52e52407fc787bea87cc5bda1d50bbd67b8563f1a1f0b3f0000803f73a03a3f94527c40bbb72c3f65a3debfa1d50b3d67b856bf1a1f0bbf0000000000000000be7552407851bebecd6a29bea1d50b3d67b856bf1a1f0bbf00000000000000008b0b7c40b8fc473fd6cdd5bf5573a73e3cf0053f0b7649bf0000000000000000b52e52407fc787bea87cc5bd5573a7be3cf005bf0b76493f000000000000000094527c40bbb72c3f65a3debf5573a73e3cf0053f0b7649bf0000000000000000be7552407851bebecd6a29be5573a7be3cf005bf0b76493f0000000000000000f92677406a7a4b3f2ea2d8bf77f4f0bc0443563fa8e50b3f00000000cd8a3b3f95b54e404b2484be6022e9bd77f4f0bc0443563fa8e50b3f0000803fcd8a3b3f2d6477405644303f5984e1bf77f4f03c044356bfa8e50bbf0000000000000000c9f24e407490babe86a23bbe77f4f03c044356bfa8e50bbf0000000000000000f92677406a7a4b3f2ea2d8bf92c5a13e48c6063f08104abf000000000000000095b54e404b2484be6022e9bd92c5a1be48c606bf08104a3f00000000000000002d6477405644303f5984e1bf92c5a13e48c6063f08104abf0000000000000000c9f24e407490babe86a23bbe92c5a1be48c606bf08104a3f0000000000000000ab3e724084ef4e3f6055dbbf8540cabc3cce553f20a70c3f0000000044753c3f75364b40888880be00b805be8540cabc3cce553f20a70c3f0000803f44753c3f0a72724044c8333fd443e4bf8540ca3c3cce55bf20a70cbf0000000000000000d4694b4007d7b6be9e2b4dbe8540ca3c3cce55bf20a70cbf0000000000000000ab3e724084ef4e3f6055dbbfd9209c3ee499073f609e4abf000000000000000075364b40888880be00b805bed9209cbee49907bf609e4a3f00000000000000000a72724044c8333fd443e4bfd9209c3ee499073f609e4abf0000000000000000d4694b4007d7b6be9e2b4dbed9209cbee49907bf609e4a3f0000000000000000f0526d40e85b523f9ee7ddbf448ca3bc035a553fb2630d3f00000000cf5f3d3fccb14740eee979be8c3116be448ca3bc035a553fb2630d3f0000803fcf5f3d3f7b7c6d406b43373f0be2e6bf448ca33c035a55bfb2630dbf000000000000000057db4740f125b3bef6045ebe448ca33c035a55bfb2630dbf0000000000000000f0526d40e85b523f9ee7ddbf8d84963e326b083f6d214bbf0000000000000000ccb14740eee979be8c3116be8d8496be326b08bf6d214b3f00000000000000007b7c6d406b43373f0be2e6bf8d84963e326b083f6d214bbf000000000000000057db4740f125b3bef6045ebe8d8496be326b08bf6d214b3f0000000000000000176468406ebf553f1c59e0bf67a779bc50e6543f7e1b0e3f00000000634a3e3f1528444078d472bea4fc25be67a779bc50e6543f7e1b0e3f0000803f634a3e3fcc836840a3b53a3f355fe9bf67a7793c50e654bf7e1b0ebf0000000000000000ca474440d27dafbe6c2d6ebe67a7793c50e654bf7e1b0ebf0000000000000000176468406ebf553f1c59e0bf05f0903e463a093f87994bbf00000000000000001528444078d472bea4fc25be05f090be463a09bf87994b3f0000000000000000cc836840a3b53a3f355fe9bf05f0903e463a093f87994bbf0000000000000000ca474440d27dafbe6c2d6ebe05f090be463a09bf87994b3f00000000000000006f726340f019593f06aae2bfaf252cbc1b73543fa9ce0e3f00000000f6343f3fc999404012d26bbe341835beaf252cbc1b73543fa9ce0e3f0000803ff6343f3f4c886340c61e3e3f80bbebbfaf252c3c1b7354bfa9ce0ebf0000000000000000a6af40405cdfabbe01a47dbeaf252c3c1b7354bfa9ce0ebf00000000000000006f726340f019593f06aae2bf9b628b3e3a070a3fff064cbf0000000000000000c999404012d26bbe341835be9b628bbe3a070abfff064c3f00000000000000004c886340c61e3e3f80bbebbf9b628b3e3a070a3fff064cbf0000000000000000a6af40405cdfabbe01a47dbe9b628bbe3a070abfff064c3f0000000000000000487e5e40356b5c3f90dae4bf9612bdbb6400543f407d0f3f000000007d1f403f60073d40b4e364be3c8343be9612bdbb6400543f407d0f3f0000803f7d1f403f4a8a5e409d7e413f20f7edbf9612bd3b640054bf407d0fbf000000000000000062133d400a4ba8bedd3386be9612bd3b640054bf407d0fbf0000000000000000487e5e40356b5c3f90dae4bfa2db853e11d20a3f296a4cbf000000000000000060073d40b4e364be3c8343bea2db85be11d20abf296a4c3f00000000000000004a8a5e409d7e413f20f7edbfa2db853e11d20a3f296a4cbf000000000000000062133d400a4ba8bedd3386bea2db85be11d20abf296a4c3f0000000000000000ee87594018b35f3fdaeae6bffe4d86ba218e533f6327103f00000000ec09413f56713940ce0a5ebeac3c51befe4d86ba218e533f6327103f0000803fec09413f108a594003d5443f3812f0bffe4d863a218e53bf632710bf00000000000000007873394091c1a4becc3b8dbefe4d863a218e53bf632710bf0000000000000000ee87594018b35f3fdaeae6bf645a803ee69a0b3f45c34cbf000000000000000056713940ce0a5ebeac3c51be645a80bee69a0bbf45c34c3f0000000000000000108a594003d5443f3812f0bf645a803ee69a0b3f45c34cbf00000000000000007873394091c1a4becc3b8dbe645a80bee69a0bbf45c34c3f0000000000000000b08f544068f1623f16dbe8bf978c743b4c1c533f24cd103f0000000039f4413f26d83540964857beec435ebe978c743b4c1c533f24cd103f0000803f39f4413fec875440c821483ffa0cf2bf978c74bb4c1c53bf24cd10bf000000000000000062d035408c43a1be86e993be978c74bb4c1c53bf24cd10bf0000000000000000b08f544068f1623f16dbe8bf4bbc753ec7610c3f99124dbf000000000000000026d83540964857beec435ebe4bbc75bec7610cbf99124d3f0000000000000000ec875440c821483ffa0cf2bf4bbc753ec7610c3f99124dbf000000000000000062d035408c43a1be86e993be4bbc75bec7610cbf99124d3f0000000000000000d8954f400a26663f56abeabf69460b3cd5aa523faa6e113f0000000058de423f4c3c32407e9e50be30986abe69460b3cd5aa523faa6e113f0000803f58de423f28844f40d3644b3f7ce7f3bf69460bbcd5aa52bfaa6e11bf00000000000000009c2a3240aed19dbeaf3c9abe69460bbcd5aa52bfaa6e11bf0000000000000000d8954f400a26663f56abeabf5dcc6a3ed5260d3f50584dbf00000000000000004c3c32407e9e50be30986abe5dcc6abed5260dbf50584d3f000000000000000028844f40d3644b3f7ce7f3bf5dcc6a3ed5260d3f50584dbf00000000000000009c2a3240aed19dbeaf3c9abe5dcc6abed5260dbf50584d3f0000000000000000b39a4a40b050693fca5becbfaaac593cc839523fe70b123f000000003ec8433f459e2e405e0d4abeb03876beaaac593cc839523fe70b123f0000803f3ec8433f0e7f4a40d49d4e3feca1f5bfaaac59bcc83952bfe70b12bf0000000000000000a0822e40666c9abedf34a0beaaac59bcc83952bfe70b12bf0000000000000000b39a4a40b050693fca5becbf72e35f3e04ea0d3fb4944dbf0000000000000000459e2e405e0d4abeb03876be72e35fbe04ea0dbfb4944d3f00000000000000000e7f4a40d49d4e3feca1f5bf72e35f3e04ea0d3fb4944dbf0000000000000000a0822e40666c9abedf34a0be72e35fbe04ea0dbfb4944d3f00000000000000008c9e45403e716c3f8cecedbf0230943c18c9513ffaa4123f00000000dfb1443f8cfe2a40969643be809280be0230943c18c9513ffaa4123f0000803fdfb1443fe8784540b2cc513f663cf7bf023094bc18c951bffaa412bf0000000000000000e8d82a40631497bee8d1a5be023094bc18c951bffaa412bf00000000000000008c9e45403e716c3f8cecedbf0400553e72ab0e3fecc74dbf00000000000000008cfe2a40969643be809280be040055be72ab0ebfecc74d3f0000000000000000e8784540b2cc513f663cf7bf0400553e72ab0e3fecc74dbf0000000000000000e8d82a40631497bee8d1a5be040055be72ab0ebfecc74d3f0000000000000000ada1404081876f3fb25defbfecb5bb3cbd58513fee39133f000000002f9b453f9f5d27405c3b3dbe5aae85beecb5bb3cbd58513fee39133f0000803f2f9b453fff7140403af1543f02b7f8bfecb5bbbcbd5851bfee3913bf0000000000000000f12d27403cca93be9813abbeecb5bbbcbd5851bfee3913bf0000000000000000ada1404081876f3fb25defbf74204a3e2c6b0f3f1bf24dbf00000000000000009f5d27405c3b3dbe5aae85be74204abe2c6b0fbf1bf24d3f0000000000000000ff7140403af1543f02b7f8bf74204a3e2c6b0f3f1bf24dbf0000000000000000f12d27403cca93be9813abbe74204abe2c6b0fbf1bf24d3f000000000000000063a43b404b93723f50aff0bff46de33cb0e8503fcfca133f000000002284463ffdbb2340f4fc36beae6f8abef46de33cb0e8503fcfca133f0000803f2284463f9f6a3b403f0b583fd311fabff46de3bcb0e850bfcfca13bf000000000000000039822340928e90beb9f9afbef46de3bcb0e850bfcfca13bf000000000000000063a43b404b93723f50aff0bf30433f3e4429103f65134ebf0000000000000000fdbb2340f4fc36beae6f8abe30433fbe442910bf65134e3f00000000000000009f6a3b403f0b583fd311fabf30433f3e4429103f65134ebf000000000000000039822340928e90beb9f9afbe30433fbe442910bf65134e3f0000000000000000f6a636406494753f84e1f1bf36af053df478503f9e57143f00000000ad6c473f241a20406adc30be62d68ebe36af053df478503f9e57143f0000803fad6c473f0d633640881a5b3ff84cfbbf36af05bdf47850bf9e5714bf00000000000000003bd61f40ec618dbe3084b4be36af05bdf47850bf9e5714bf0000000000000000f6a636406494753f84e1f1bf8a66343ebfe5103feb2b4ebf0000000000000000241a20406adc30be62d68ebe8a6634bebfe510bfeb2b4e3f00000000000000000d633640881a5b3ff84cfbbf8a66343ebfe5103feb2b4ebf00000000000000003bd61f40ec618dbe3084b4be8a6634bebfe510bfeb2b4e3f0000000000000000aea93140a08a783f55f4f2bfc7c6193d7b09503f64e0143f00000000c354483f94781c4006db2abe5ce292bec7c6193d7b09503f64e0143f0000803fc354483f905b3140ed1e5e3f7868fcbfc7c619bd7b0950bf64e014bf0000000000000000762a1c40ea448abee8b2b8bec7c619bd7b0950bf64e014bf0000000000000000aea93140a08a783f55f4f2bfd788293eb1a0113fbe3b4ebf000000000000000094781c4006db2abe5ce292bed78829beb1a011bfbe3b4e3f0000000000000000905b3140ed1e5e3f7868fcbfd788293eb1a0113fbe3b4ebf0000000000000000762a1c40ea448abee8b2b8bed78829beb1a011bfbe3b4e3f0000000000000000d6ac2c40c6757b3fdae7f3bf0a012e3d4a9a4f3f1a65153f00000000593c493fcad71840caf924be989396be0a012e3d4a9a4f3f1a65153f0000803f593c493f71542c403218613f6a64fdbf0a012ebd4a9a4fbf1a6515bf0000000000000000657f18400e3887beda85bcbe0a012ebd4a9a4fbf1a6515bf0000000000000000d6ac2c40c6757b3fdae7f3bf5aa81e3e1c5a123ff4424ebf0000000000000000cad71840caf924be989396be5aa81ebe1c5a12bff4424e3f000000000000000071542c403218613f6a64fdbf5aa81e3e1c5a123ff4424ebf0000000000000000657f18400e3887beda85bcbe5aa81ebe1c5a12bff4424e3f0000000000000000b3b02740a8557e3f1abcf4bf5561423d592b4f3fc7e5153f0000000061234a3f49381540f6391fbe0aea99be5561423d592b4f3fc7e5153f0000803f61234a3ff44d27402b06643fd640febf556142bd592b4fbfc7e515bf00000000000000008ad51440f63b84befafcbfbe556142bd592b4fbfc7e515bf0000000000000000b3b02740a8557e3f1abcf4bf57c3133e1312133f97414ebf000000000000000049381540f6391fbe0aea99be57c313be131213bf97414e3f0000000000000000f44d27402b06643fd640febf57c3133e1312133f97414ebf00000000000000008ad51440f63b84befafcbfbe57c313be131213bf97414e3f000000000000000090b522400a95803f1c71f5bf24eb563da1bc4e3f6662163f00000000d0094b3f909a1140b29c19bedee59cbe24eb563da1bc4e3f6662163f0000803fd0094b3f62482240a6e8663fc2fdfebf24eb56bda1bc4ebf666216bf0000000000000000622d1140345181be7618c3be24eb56bda1bc4ebf666216bf000000000000000090b522400a95803f1c71f5bf07d8083ea0c8133fa5374ebf0000000000000000909a1140b29c19bedee59cbe07d808bea0c813bfa5374e3f000000000000000062482240a6e8663fc2fdfebf07d8083ea0c8133fa5374ebf0000000000000000622d1140345181be7618c3be07d808bea0c813bfa5374e3f0000000000000000b2bb1d4067f9813fe606f6bf1da26b3d214e4e3fedda163f000000009bef4b3f20ff0d400a2314be1a879fbe1da26b3d214e4e3fedda163f0000803f9bef4b3ffe431d4069bf693f339bffbf1da26bbd214e4ebfedda16bf00000000000000006c870d409ef07cbe4fd8c5be1da26bbd214e4ebfedda16bf0000000000000000b2bb1d4067f9813fe606f6bf29c9fb3dc87d143f1f254ebf000000000000000020ff0d400a2314be1a879fbe29c9fbbdc87d14bf1f254e3f0000000000000000fe431d4069bf693f339bffbf29c9fb3dc87d143f1f254ebf00000000000000006c870d409ef07cbe4fd8c5be29c9fbbdc87d14bf1f254e3f000000000000000060c31840ce57833f7e7df6bf0545803ddcdf4d3f4a4f173f00000000b4d44c3f7c660a4004ce0ebee8cda1be0545803ddcdf4d3f4a4f173f0000803fb4d44c3f0e411840388a6c3f970c00c0054580bddcdf4dbf4a4f17bf00000000000000002ae40940946377beac3cc8be054580bddcdf4dbf4a4f17bf000000000000000060c31840ce57833f7e7df6bf41cee53d8e31153f040a4ebf00000000000000007c660a4004ce0ebee8cda1be41cee5bd8e3115bf040a4e3f00000000000000000e411840388a6c3f970c00c041cee53d8e31153f040a4ebf00000000000000002ae40940946377beac3cc8be41cee5bd8e3115bf040a4e3f0000000000000000decc134025b0843fded4f6bf59d38a3dc9714d3f77bf173f000000000fb94d3f26d10640c69e09be88baa3be59d38a3dc9714d3f77bf173f0000803f0fb94d3fd23f1340e1486f3fd73b00c059d38abdc9714dbf77bf17bf00000000000000001a4406406bfc71beca45cabe59d38abdc9714dbf77bf17bf0000000000000000decc134025b0843fded4f6bf90bbcf3dfee3153f3ce64dbf000000000000000026d10640c69e09be88baa3be90bbcfbdfee315bf3ce64d3f0000000000000000d23f1340e1486f3fd73b00c090bbcf3dfee3153f3ce64dbf00000000000000001a4406406bfc71beca45cabe90bbcfbdfee315bf3ce64d3f000000000000000074d80e405502863ffd0cf7bf047e953de7034d3f692b183f00000000a19c4e3fa03f0340809604be2c4da5be047e953de7034d3f692b183f0000803fa19c4e3f92400e4035fb713f545b00c0047e95bde7034dbf692b18bf0000000000000000bea7024052bc6cbed9f3cbbe047e95bde7034dbf692b18bf000000000000000074d80e405502863ffd0cf7bf3c8db93d2595163fb2b94dbf0000000000000000a03f0340809604be2c4da5be3c8db9bd259516bfb2b94d3f000000000000000092400e4035fb713f545b00c03c8db93d2595163fb2b94dbf0000000000000000bea7024052bc6cbed9f3cbbe3c8db9bd259516bfb2b94d3f000000000000000064e60940394e873fdc25f7bf1c47a03d35964c3ffa92183f000000005c7f4f3fdf64ff3f046cffbd3e86a6be1c47a03d35964c3ffa92183f0000803f5c7f4f3f8c430940eca0743f0d6b00c01c47a0bd35964cbffa9218bf0000000000000000301ffe3f1ba467be3947cdbe1c47a0bd35964cbffa9218bf000000000000000064e60940394e873fdc25f7bf4d3fa33df944173f4d844dbf0000000000000000df64ff3f046cffbd3e86a6be4d3fa3bdf94417bf4d844d3f00000000000000008c430940eca0743f0d6b00c04d3fa33df944173f4d844dbf0000000000000000301ffe3f1ba467be3947cdbe4d3fa3bdf94417bf4d844d3f0000000000000000f4f60440b693883f681ff7bfba30ab3db6284c3f1cf6183f000000003661503f3054f83ff8fcf5bd0066a7beba30ab3db6284c3f1cf6183f0000803f3661503f06490440ce39773ff96a00c0ba30abbdb6284cbf1cf618bf000000000000000054f8f63ff6b462be2940cebeba30abbdb6284cbf1cf618bf0000000000000000f4f60440b693883f681ff7bfbdcd8c3d86f3173fe8454dbf00000000000000003054f83ff8fcf5bd0066a7bebdcd8cbd86f317bfe8454d3f000000000000000006490440ce39773ff96a00c0bdcd8c3d86f3173fe8454dbf000000000000000054f8f63ff6b462be2940cebebdcd8cbd86f317bfe8454d3f0000000000000000c407004086a3893f041df7bfa973b63df0014c3fc6f5183f000000002142513f8553f13f18efe9bd405fa7bea973b63df0014c3fc6f5183f0000803f2142513fca9cfe3f5a5e793fc46900c0a973b6bdf0014cbfc6f518bf0000000000000000c7e0ef3f539a5cbe5339cebea973b6bdf0014cbfc6f518bf0000000000000000c407004086a3893f041df7bf21c06b3d7842183f34454dbf00000000000000008553f13f18efe9bd405fa7be21c06bbd784218bf34454d3f0000000000000000ca9cfe3f5a5e793fc46900c021c06b3d7842183f34454dbf0000000000000000c7e0ef3f539a5cbe5339cebe21c06bbd784218bf34454d3f00000000000000002d74f43fd9d98a3f6ee0f6bf6819d03d3bac4b3f04e5183f00000000e727523f0bb2eb3f3486e0bdc8e9a6be6819d03d3bac4b3f04e5183f0000803fe727523f51cdf23fe3d57b3ff14a00c06819d0bd3bac4bbf04e518bf00000000000000002f0bea3f57ba57be9abfcdbe6819d0bd3bac4bbf04e518bf00000000000000002d74f43fd9d98a3f6ee0f6bf23220c3d3ce2183ffc254dbf00000000000000000bb2eb3f3486e0bdc8e9a6be23220cbd3ce218bffc254d3f000000000000000051cdf23fe3d57b3ff14a00c023220c3d3ce2183ffc254dbf00000000000000002f0bea3f57ba57be9abfcdbe23220cbd3ce218bffc254d3f0000000000000000fbeee83f26028c3f2556f6bf07b3e93deb594b3f9bbe183f00000000a10b533fe323e63f2498d7bd1cdfa5be07b3e93deb594b3f9bbe183f0000803fa10b533f1a14e73ff1307e3f940400c007b3e9bdeb594bbf9bbe18bf00000000000000000249e43f7e1953be2cabccbe07b3e9bdeb594bbf9bbe18bf0000000000000000fbeee83f26028c3f2556f6bfc6c5323ca87b193f5ede4cbf0000000000000000e323e63f2498d7bd1cdfa5bec6c532bca87b19bf5ede4c3f00000000000000001a14e73ff1307e3f940400c0c6c5323ca87b193f5ede4cbf00000000000000000249e43f7e1953be2cabccbec6c532bca87b19bf5ede4c3f00000000000000008181dd3f721c8d3f8a7ff5bf8e97013e3c0b4b3fc782183f0000000081ed533f93a6e03f681ecfbdc642a4be8e97013e3c0b4b3fc782183f0000803f81ed533fd872db3fc437803fc12effbf8e9701be3c0b4bbfc78218bf0000000000000000ea97de3fa8b44ebea4ffcabe8e9701be3c0b4bbfc78218bf00000000000000008181dd3f721c8d3f8a7ff5bf964449bc590e1a3fd96e4cbf000000000000000093a6e03f681ecfbdc642a4be9644493c590e1abfd96e4c3f0000000000000000d872db3fc437803fc12effbf964449bc590e1a3fd96e4cbf0000000000000000ea97de3fa8b44ebea4ffcabe9644493c590e1abfd96e4c3f00000000000000005e2dd23fce288e3f215ef4bf323e0e3e50c04a3ff831183f00000000bccd543fb237db3f1013c7bd9c17a2be323e0e3e50c04a3ff831183f0000803fbccd543f4bebcf3fe248813f3708febf323e0ebe50c04abff83118bf00000000000000009ff5d83fec884abef3bfc8be323e0ebe50c04abff83118bf00000000000000005e2dd23fce288e3f215ef4bf42a510bdff991a3f3ad84bbf0000000000000000b237db3f1013c7bd9c17a2be42a5103dff991abf3ad84b3f00000000000000004bebcf3fe248813f3708febf42a510bdff991a3f3ad84bbf00000000000000009ff5d83fec884abef3bfc8be42a5103dff991abf3ad84b3f000000000000000020f4c63f4e278f3f8af3f2bf0bc51a3e4c794a3fcfcc173f000000007eac553fe4d4d53f2071bfbd965f9fbe0bc51a3e4c794a3fcfcc173f0000803f7eac553f247fc43fe44b823f3397fcbf0bc51abe4c794abfcfcc17bf0000000000000000e85fd33fe19346be3beec5be0bc51abe4c794abfcfcc17bf000000000000000020f4c63f4e278f3f8af3f2bf400c6ebd601e1b3fa51b4bbf0000000000000000e4d4d53f2071bfbd965f9fbe400c6e3d601e1bbfa51b4b3f0000000000000000247fc43fe44b823f3397fcbf400c6ebd601e1b3fa51b4bbf0000000000000000e85fd33fe19346be3beec5be400c6e3d601e1bbfa51b4b3f000000000000000043d7bb3f0e18903fa441f1bf0324273e4b364a3f0e54173f00000000f889563fe37bd03f6033b8bd501c9cbe0324273e4b364a3f0e54173f0000803ff889563f0130b93fe540833fa2ddfabf032427be4b364abf0e5417bf0000000000000000a1d4cd3ff7d242be4a8cc2be032427be4b364abf0e5417bf000000000000000043d7bb3f0e18903fa441f1bfff24a5bd449b1b3f903a4abf0000000000000000e37bd03f6033b8bd501c9cbeff24a53d449b1bbf903a4a3f00000000000000000130b93fe540833fa2ddfabfff24a5bd449b1b3f903a4abf0000000000000000a1d4cd3ff7d242be4a8cc2beff24a53d449b1bbf903a4a3f000000000000000029d8b03f36fb903f6c4aefbf7853333e5ef7493fa8c8163f000000005566573f812acb3fd855b1bdd04e98be7853333e5ef7493fa8c8163f0000803f5566573f61ffad3f0c28843f90ddf8bf785333be5ef749bfa8c816bf0000000000000000b951c83f3c443fbe619bbebe785333be5ef749bfa8c816bf000000000000000029d8b03f36fb903f6c4aefbfbc92d2bd93101c3fb83649bf0000000000000000812acb3fd855b1bdd04e98bebc92d23d93101cbfb836493f000000000000000061ffad3f0c28843f90ddf8bfbc92d2bd93101c3fb83649bf0000000000000000b951c83f3c443fbe619bbebebc92d23d93101cbfb836493f000000000000000018f8a53ff2d0913ff40fedbf474c3f3e8abc493fab2b163f00000000c241583faedec53f70d4aabd7ef793be474c3f3e8abc493fab2b163f0000803fc241583fa9eea23f8401853f2099f6bf474c3fbe8abc49bfab2b16bf00000000000000003fd5c23fa5e53bbe2f1cbabe474c3fbe8abc49bfab2b16bf000000000000000018f8a53ff2d0913ff40fedbfb834ffbd397e1c3f151248bf0000000000000000aedec53f70d4aabd7ef793beb834ff3d397e1cbf1512483f0000000000000000a9eea23f8401853f2099f6bfb834ffbd397e1c3f151248bf00000000000000003fd5c23fa5e53bbe2f1cbabeb834ff3d397e1cbf1512483f00000000000000002e389b3f7999923f7094eabfdf074b3ed385493f477e153f00000000671c593f7e96c03f00aca4bd40168fbedf074b3ed385493f477e153f0000803f671c593f10ff973f85cd853f9a12f4bfdf074bbed38549bf477e15bf0000000000000000605dbd3fa2b538bee60eb5bedf074bbed38549bf477e15bf00000000000000002e389b3f7999923f7094eabf3e7915be39e41c3fe0ce46bf00000000000000007e96c03f00aca4bd40168fbe3e79153e39e41cbfe0ce463f000000000000000010ff973f85cd853f9a12f4bf3e7915be39e41c3fe0ce46bf0000000000000000605dbd3fa2b538bee60eb5be3e79153e39e41cbfe0ce463f00000000000000006a99903f0855933f33dae7bf4f80563e2e53493fc3c1143f0000000069f6593f2650bb3fa0d99ebdf4aa89be4f80563e2e53493fc3c1143f0000803f69f6593fae318d3f4b8c863f644cf1bf4f8056be2e5349bfc3c114bf00000000000000006ae8b73fb8b235beb873afbe4f8056be2e5349bfc3c114bf00000000000000006a99903f0855933f33dae7bff2da2abea2421d3f766f45bf00000000000000002650bb3fa0d99ebdf4aa89bef2da2a3ea2421dbf766f453f0000000000000000ae318d3f4b8c863f644cf1bff2da2abea2421d3f766f45bf00000000000000006ae8b73fb8b235beb873afbef2da2a3ea2421dbf766f453f0000000000000000a31c863fe103943f92e3e4bf4fb0613e8b24493f76f7133f00000000eecf5a3f090ab63fd05a99bdcab483be4fb0613e8b24493f76f7133f0000803feecf5a3f7087823f1a3e873feb48eebf4fb061be8b2449bf76f713bf0000000000000000d674b23f9edb32be2c4aa9be4fb061be8b2449bf76f713bf0000000000000000a31c863fe103943f92e3e4bf9ab53fbe8e991d3f5ff643bf0000000000000000090ab63fd05a99bdcab483be9ab53f3e8e991dbf5ff6433f00000000000000007087823f1a3e873feb48eebf9ab53fbe8e991d3f5ff643bf0000000000000000d674b23f9edb32be2c4aa9be9ab53f3e8e991dbf5ff6433f00000000000000000185773f51a6943f00b3e1bf45936c3ed6f9483fce20133f000000001ba95b3fabc2b03fb02d94bd24667abe45936c3ed6f9483fce20133f0000803f1ba95b3f1f02703f40e3873fb70aebbf45936cbed6f948bfce2013bf00000000000000003a01ad3f5c2f30beee91a2be45936cbed6f948bfce2013bf00000000000000000185773f51a6943f00b3e1bfab0054be2ce91d3f3b6642bf0000000000000000abc2b03fb02d94bd24667abeab00543e2ce91dbf3b66423f00000000000000001f02703f40e3873fb70aebbfab0054be2ce91d3f3b6642bf00000000000000003a01ad3f5c2f30beee91a2beab00543e2ce91dbf3b66423f00000000000000001117633fa53c953fea4adebf4b25773ef1d2483f373f123f000000000d825c3fc078ab3f70508fbd90496cbe4b25773ef1d2483f373f123f0000803f0d825c3f443e5b3f0d7c883f4e94e7bf4b2577bef1d248bf373f12bf00000000000000005a8ca73ffaac2dbe584a9bbe4b2577bef1d248bf373f12bf00000000000000001117633fa53c953fea4adebfddb467beac311e3fb8c140bf0000000000000000c078ab3f70508fbd90496cbeddb4673eac311ebfb8c1403f0000000000000000443e5b3f0d7c883f4e94e7bfddb467beac311e3fb8c140bf00000000000000005a8ca73ffaac2dbe584a9bbeddb4673eac311ebfb8c1403f00000000000000002df04e3f34c7953fcbaddabf93b1803ebaaf483f2854113f00000000e55a5d3f222ba63fc0c18abde8115dbe93b1803ebaaf483f2854113f0000803fe55a5d3f22c4463fd808893f42e8e3bf93b180bebaaf48bf285411bf00000000000000001c15a23fbe532bbecf7293be93b180bebaaf48bf285411bf00000000000000002df04e3f34c7953fcbaddabf2dcc7abe50731e3f8e0b3fbf0000000000000000222ba63fc0c18abde8115dbe2dcc7a3e50731ebf8e0b3f3f000000000000000022c4463fd808893f42e8e3bf2dcc7abe50731e3f8e0b3fbf00000000000000001c15a23fbe532bbecf7293be2dcc7a3e50731ebf8e0b3f3f0000000000000000b2103b3f5646963f12ded6bf25a5853e0c90483f1261103f00000000be335e3fd0d8a03f688086bd0cbd4cbe25a5853e0c90483f1261103f0000803fbe335e3f2994323ffd89893f1909e0bf25a585be0c9048bf126110bf00000000000000008c9a9c3ffb2229bea30a8bbe25a585be0c9048bf126110bf0000000000000000b2103b3f5646963f12ded6bfeda086be5cae1e3f71463dbf0000000000000000d0d8a03f688086bd0cbd4cbeeda0863e5cae1ebf71463d3f00000000000000002994323ffd89893f1909e0bfeda086be5cae1e3f71463dbf00000000000000008c9a9c3ffb2229bea30a8bbeeda0863e5cae1ebf71463d3f0000000000000000c678273f68ba963f3aded2bf676c8a3ebd73483f69670f3f00000000b40c5f3ff5809b3fa88b82bd6c493bbe676c8a3ebd73483f69670f3f0000803fb40c5f3f90ae1e3fdbff893f67f9dbbf676c8abebd7348bf69670fbf0000000000000000da1b973f3a1a27be691182be676c8abebd7348bf69670fbf0000000000000000c678273f68ba963f3aded2bf24898fbe23e31e3f0d753bbf0000000000000000f5809b3fa88b82bd6c493bbe24898f3e23e31ebf0d753b3f000000000000000090ae1e3fdbff893f67f9dbbf24898fbe23e31e3f0d753bbf0000000000000000da1b973f3a1a27be691182be24898f3e23e31ebf0d753b3f00000000000000003128143fc823973f9fb0cebfad068f3ea05a483f8f680e3f00000000dde55f3fda22963f70c57dbd08b528bead068f3ea05a483f8f680e3f0000803fdde55f3f29130b3fd46a8a3f9dbbd7bfad068fbea05a48bf8f680ebf00000000000000005698913f003925bef60c71bead068fbea05a48bf8f680ebf00000000000000003128143fc823973f9fb0cebf841d98bef4111f3ffe9939bf0000000000000000da22963f70c57dbd08b528be841d983ef4111fbffe99393f000000000000000029130b3fd46a8a3f9dbbd7bf841d98bef4111f3ffe9939bf00000000000000005698913f003925bef60c71be841d983ef4111fbffe99393f0000000000000000841e013fd782973fa857cabf9773933e8644483fde650d3f0000000051bf603feebd903fe00977bdfcfe14be9773933e8644483fde650d3f0000803f51bf603f1683ef3e4acb8a3f3952d3bf977393be864448bfde650dbf0000000000000000720f8c3fe17e23be80d35cbe977393be864448bfde650dbf0000000000000000841e013fd782973fa857cabf595da0be263b1f3fc9b737bf0000000000000000eebd903fe00977bdfcfe14be595da03e263b1fbfc9b7373f00000000000000001683ef3e4acb8a3f3952d3bf595da0be263b1f3fc9b737bf0000000000000000720f8c3fe17e23be80d35cbe595da03e263b1fbfc9b7373f000000000000000025b6dc3ef9d7973fa1d5c5bf0ab3973e3f31483fa4600c3f000000002399613fbd518b3fa0e370bd582600be0ab3973e3f31483fa4600c3f0000803f2399613f1872c93ea5218b3f9bbfcebf0ab397be3f3148bfa4600cbf0000000000000000ba80863f86eb21be287647be0ab397be3f3148bfa4600cbf000000000000000025b6dc3ef9d7973fa1d5c5bf6748a8be165f1f3fd6d035bf0000000000000000bd518b3fa0e370bd582600be6748a83e165f1fbfd6d0353f00000000000000001872c93ea5218b3f9bbfcebf6748a8be165f1f3fd6d035bf0000000000000000ba80863f86eb21be287647be6748a83e165f1fbfd6d0353f0000000000000000ecb9b73e8e23983fca2cc1bf18c59b3e9920483f1b5a0b3f000000006573623febdd853f90516bbd6055d4bd18c59b3e9920483f1b5a0b3f0000803f6573623f88f1a33e496e8b3f1806cabf18c59bbe992048bf1b5a0bbf0000000000000000d2eb803f8d7e20be22f530be18c59bbe992048bf1b5a0bbf0000000000000000ecb9b73e8e23983fca2cc1bfe0deafbe1b7e1f3f74e733bf0000000000000000ebdd853f90516bbd6055d4bde0deaf3e1b7e1fbf74e7333f000000000000000088f1a33e496e8b3f1806cabfe0deafbe1b7e1f3f74e733bf0000000000000000d2eb803f8d7e20be22f530bee0deaf3e1b7e1fbf74e7333f00000000000000003746933efa65983f5a5fbcbf16aa9f3e6812483f6d530a3f00000000294e633f3862803fd05266bda018a6bd16aa9f3e6812483f6d530a3f0000803f294e633f69fe7d3e9cb18b3ffa27c5bf16aa9fbe681248bf6d530abf0000000000000000efa0763fa8371fbe515119be16aa9fbe681248bf6d530abf00000000000000003746933efa65983f5a5fbcbf5521b7be91981f3fd0fd31bf00000000000000003862803fd05266bda018a6bd5521b73e91981fbfd0fd313f000000000000000069fe7d3e9cb18b3ffa27c5bf5521b7be91981f3fd0fd31bf0000000000000000efa0763fa8371fbe515119be5521b73e91981fbfd0fd313f0000000000000000feb05e3ea19f983f686fb7bf8162a33e7706483fb14d093f000000007c29643ff4bc753f60e661bd702f6bbd8162a33e7706483fb14d093f0000803f7c29643f0f31353e05ec8b3f6927c0bf8162a3be770648bfb14d09bf0000000000000000f85c6b3f7a161ebee78b00be8162a3be770648bfb14d09bf0000000000000000feb05e3ea19f983f686fb7bfb510bebed4ae1f3fed1530bf0000000000000000f4bc753f60e661bd702f6bbdb510be3ed4ae1fbfed15303f00000000000000000f31353e05ec8b3f6927c0bfb510bebed4ae1f3fed1530bf0000000000000000f85c6b3f7a161ebee78b00beb510be3ed4ae1fbfed15303f0000000000000000f4db173ee4d0983f0a5fb2bffeeea63e97fc473fee49083f000000006a05653f27a56a3f500b5ebdd0aa05bdfeeea63e97fc473fee49083f0000803f6a05653f88eada3de81d8c3f8d06bbbffeeea6be97fc47bfee4908bf00000000000000007b0b603fb21a1dbe934dcdbdfeeea6be97fc47bfee4908bf0000000000000000f4db173ee4d0983f0a5fb2bf2aaec4be3fc11f3fb3312ebf000000000000000027a56a3f500b5ebdd0aa05bd2aaec43e3fc11fbfb3312e3f000000000000000088eada3de81d8c3f8d06bbbf2aaec4be3fc11f3fb3312ebf00000000000000007b0b603fb21a1dbe934dcdbd2aaec43e3fc11fbfb3312e3f0000000000000000b00ea43d24fa983f3130adbf4d50aa3e98f4473f0d49073f00000000ffe1653ffe7c5f3ff0bf5abd0053ddbb4d50aa3e98f4473f0d49073f0000803fffe1653f78131b3daa478c3f64c7b5bf4d50aabe98f447bf0d4907bf000000000000000060ac543fca431cbe5e4897bd4d50aabe98f447bf0d4907bf0000000000000000b00ea43d24fa983f3130adbf28fbcabe23d01f3fde522cbf0000000000000000fe7c5f3ff0bf5abd0053ddbb28fbca3e23d01fbfde522c3f000000000000000078131b3daa478c3f64c7b5bf28fbcabe23d01f3fde522cbf000000000000000060ac543fca431cbe5e4897bd28fbca3e23d01fbfde522c3f0000000000000000c0ca523cbf1b993fcce4a7bf5187ad3e51ee473ff14b063f0000000045bf663f7944543f400358bd0090a53c5187ad3e51ee473ff14b063f0000803f45bf663fce36f7bcab698c3fec6bb0bf5187adbe51ee47bff14b06bf0000000000000000983f493f6e911bbe0c1c3ebd5187adbe51ee47bff14b06bf0000000000000000c0ca523cbf1b993fcce4a7bf4ef9d0bed9db1f3f0c7b2abf00000000000000007944543f400358bd0090a53c4ef9d03ed9db1fbf0c7b2a3f0000000000000000ce36f7bcab698c3fec6bb0bf4ef9d0bed9db1f3f0c7b2abf0000000000000000983f493f6e911bbe0c1c3ebd4ef9d03ed9db1fbf0c7b2a3f000000000000000030eb5abd1436993fae7ea2bffe94b03e93e9473f5e53053f00000000409d673fb3fb483f50d355bdb0a0453dfe94b03e93e9473f5e53053f0000803f409d673fbb29c7bd4d848c3f06f6aabffe94b0be93e947bf5e5305bf00000000000000002fc53d3f0a031bbe809492bcfe94b0be93e947bf5e5305bf000000000000000030eb5abd1436993fae7ea2bf66aad6beafe41f3fb3ab28bf0000000000000000b3fb483f50d355bdb0a0453d66aad63eafe41fbfb3ab283f0000000000000000bb29c7bd4d848c3f06f6aabf66aad6beafe41f3fb3ab28bf00000000000000002fc53d3f0a031bbe809492bc66aad63eafe41fbfb3ab283f0000000000000000146cf3bd8049993fa0ff9cbf5b7ab33e37e6473f1060043f00000000f87b683fd2a23d3f802e54bd78689e3d5b7ab33e37e6473f1060043f0000803ff87b683f6a4c27bef0978c3f8467a5bf5b7ab3be37e647bf106004bf00000000000000003a3d323f20981abe90513f3c5b7ab3be37e647bf106004bf0000000000000000146cf3bd8049993fa0ff9cbf5510dcbef4ea1f3f27e626bf0000000000000000d2a23d3f802e54bd78689e3d5510dc3ef4ea1fbf27e6263f00000000000000006a4c27bef0978c3f8467a5bf5510dcbef4ea1f3f27e626bf00000000000000003a3d323f20981abe90513f3c5510dc3ef4ea1fbf27e6263f00000000000000003ccc3bbe5a56993f546997bf7638b63e13e4473fa672033f00000000725b693f0f3a323f901253bd8024dc3d7638b63e13e4473fa672033f0000803f725b693ff2146abeeda48c3f25c29fbf7638b6be13e447bfa67203bf0000000000000000e2a7263f0e501abee22e2d3d7638b6be13e447bfa67203bf00000000000000003ccc3bbe5a56993f546997bf1e2de1beefee1f3f9c2b25bf00000000000000000f3a323f901253bd8024dc3d1e2de13eefee1fbf9c2b253f0000000000000000f2146abeeda48c3f25c29fbf1e2de1beefee1f3f9c2b25bf0000000000000000e2a7263f0e501abee22e2d3d1e2de13eefee1fbf9c2b253f0000000000000000b6047dbefd5c993f6ebd91bf6cd0b83e04e3473fb98b023f00000000b23b6a3f9ac1263f607d52bdccfd0d3e6cd0b83e04e3473fb98b023f0000803fb23b6a3f08fb95bea1ab8c3f95079abf6cd0b8be04e347bfb98b02bf000000000000000043051b3f382a1abe2859973d6cd0b8be04e347bfb98b02bf0000000000000000b6047dbefd5c993f6ebd91bfc702e6bee8f01f3f277d23bf00000000000000009ac1263f607d52bdccfd0d3ec702e63ee8f01fbf277d233f000000000000000008fb95bea1ab8c3f95079abfc702e6bee8f01f3f277d23bf000000000000000043051b3f382a1abe2859973dc702e63ee8f01fbf277d233f00000000000000005db39ebec05d993f89fd8bbf5a43bb3ee6e2473fceab013f00000000b81c6b3fba391b3f406c52bda8f12e3e5a43bb3ee6e2473fceab013f0000803fb81c6b3fa97bb6be66ac8c3f783994bf5a43bbbee6e247bfceab01bf000000000000000094550f3fe1251abe6024da3d5a43bbbee6e247bfceab01bf00000000000000005db39ebec05d993f89fd8bbf6993eabe22f11f3fbedb21bf0000000000000000ba391b3f406c52bda8f12e3e6993ea3e22f11fbfbedb213f0000000000000000a97bb6be66ac8c3f783994bf6993eabe22f11f3fbedb21bf000000000000000094550f3fe1251abe6024da3d6993ea3e22f11fbfbedb213f0000000000000000d07cbebef258993f2b2b86bf5892bd3e97e3473f56d3003f0000000085fe6b3faca20f3f50dc52bd98e8503e5892bd3e97e3473f56d3003f0000803f85fe6b3f2b90d6be8da78c3f5b598ebf5892bdbe97e347bf56d300bf0000000000000000ff98033f3f421abe17770f3e5892bdbe97e347bf56d300bf0000000000000000d07cbebef258993f2b2b86bf14e1eebed5ef1f3f3e4820bf0000000000000000aca20f3f50dc52bd98e8503e14e1ee3ed5ef1fbf3e48203f00000000000000002b90d6be8da78c3f5b598ebf14e1eebed5ef1f3f3e4820bf0000000000000000ff98033f3f421abe17770f3e14e1ee3ed5ef1fbf3e48203f000000000000000064e2ddbeec4e993fcc4780bf8cbebf3efae4473fbd02003f0000000017e16c3faafc033fb0ca53bde0dc733e8cbebf3efae4473fbd02003f0000803f17e16c3f623cf6be709d8c3fbd6888bf8cbebfbefae447bfbd0200bf0000000000000000569fef3e8c7e1abe57d5323e8cbebfbefae447bfbd0200bf000000000000000064e2ddbeec4e993fcc4780bfdcedf2be41ed1f3f68c31ebf0000000000000000aafc033fb0ca53bde0dc733edcedf23e41ed1fbf68c31e3f0000000000000000623cf6be709d8c3fbd6888bfdcedf2be41ed1f3f68c31ebf0000000000000000569fef3e8c7e1abe57d5323edcedf23e41ed1fbf68c31e3f0000000000000000b8e7fcbef93f993fc9a974bf06c9c13ef1e6473fba74fe3e000000006cc46d3fe08ff03ec03355bd02e48b3e06c9c13ef1e6473fba74fe3e0000803f6cc46d3f08c20abf5d8e8c3f1c6982bf06c9c1bef1e647bfba74febe000000000000000087f3d73ecfd91abe4626573e06c9c1bef1e647bfba74febe0000000000000000b8e7fcbef93f993fc9a974bfccbbf6be97e91f3fe54d1dbf0000000000000000e08ff03ec03355bd02e48b3eccbbf63e97e91fbfe54d1d3f000000000000000008c20abf5d8e8c3f1c6982bfccbbf6be97e91f3fe54d1dbf000000000000000087f3d73ecfd91abe4626573eccbbf63e97e91fbfe54d1d3f00000000000000002ec80dbf6a2c993fada768bfddb2c33e61e9473f10f5fc3e0000000084a86e3f6309d93e501457bdda519e3eddb2c33e61e9473f10f5fc3e0000803f84a86e3f75351abfa67a8c3fc0b778bfddb2c3be61e947bf10f5fcbe0000000000000000d52ec03e30531bbe68637c3eddb2c3be61e947bf10f5fcbe00000000000000002ec80dbf6a2c993fada768bfdf4cfabe0de51f3f4de81bbf00000000000000006309d93e501457bdda519e3edf4cfa3e0de51fbf4de81b3f000000000000000075351abfa67a8c3fc0b778bfdf4cfabe0de51f3f4de81bbf0000000000000000d52ec03e30531bbe68637c3edf4cfa3e0de51fbf4de81b3f0000000000000000ecef1cbf8a14993ff88b5cbf147dc53e33ec473f0287fb3e00000000588d6f3f2f66c13e406859bd9034b13e147dc53e33ec473f0287fb3e0000803f588d6f3f4c7a29bf99628c3fcc846cbf147dc5be33ec47bf0287fbbe00000000000000006f51a83e9be91bbee842913e147dc5be33ec47bf0287fbbe0000000000000000ecef1cbf8a14993ff88b5cbf03a3fdbeccdf1f3f20931abf00000000000000002f66c13e406859bd9034b13e03a3fd3eccdf1fbf20931a3f00000000000000004c7a29bf99628c3fcc846cbf03a3fdbeccdf1f3f20931abf00000000000000006f51a83e9be91bbee842913e03a3fd3eccdf1fbf20931a3f0000000000000000cfec2bbfa4f8983f4a5950bfac28c73e4def473f0b2bfa3e00000000e672703f86a6a93ec02b5cbda488c43eac28c73e4def473f0b2bfa3e0000803fe672703f569238bf80468c3f063c60bfac28c7be4def47bf0b2bfabe0000000000000000785b903e0e9c1cbe2cc3a43eac28c7be4def47bf0b2bfabe0000000000000000cfec2bbfa4f8983f4a5950bf096000bf02da1f3fce4e19bf000000000000000086a6a93ec02b5cbda488c43e0960003f02da1fbfce4e193f0000000000000000569238bf80468c3f063c60bf096000bf02da1f3fce4e19bf0000000000000000785b903e0e9c1cbe2cc3a43e0960003f02da1fbfce4e193f00000000000000008cc03abf03d9983f4d1244bf9fb6c83e9ef2473f92e1f83e000000002559713fa0ca913e605a5fbd4a4ad83e9fb6c83e9ef2473f92e1f83e0000803f2559713f587f47bfa9268c3f1de053bf9fb6c8be9ef247bf92e1f8be0000000000000000109a703e66691dbeaaaeb83e9fb6c8be9ef247bf92e1f8be00000000000000008cc03abf03d9983f4d1244bfeed201bfd6d31f3fb91b18bf0000000000000000a0ca913e605a5fbd4a4ad83eeed2013fd6d31fbfb91b183f0000000000000000587f47bfa9268c3f1de053bfeed201bfd6d31f3fb91b18bf0000000000000000109a703e66691dbeaaaeb83eeed2013fd6d31fbfb91b183f0000000000000000c16c49bfeab5983f78b937bfcf27ca3e10f6473febaaf73e000000001140723f34a5733ed0ef62bdd075ec3ecf27ca3e10f6473febaaf73e0000803f1140723ffe4256bf58038c3f8e7347bfcf27cabe10f647bfebaaf7be00000000000000003e4c403e82501ebea401cd3ecf27cabe10f647bfebaaf7be0000000000000000c16c49bfeab5983f78b937bf072b03bf68cd1f3f30fa16bf000000000000000034a5733ed0ef62bdd075ec3e072b033f68cd1fbf30fa163f0000000000000000fe4256bf58038c3f8e7347bf072b03bf68cd1f3f30fa16bf00000000000000003e4c403e82501ebea401cd3e072b033f68cd1fbf30fa163f000000000000000005f357bfa08f983f52512bbf1a7dcb3e93f9473f6887f63e00000000a227733fe47c433e50e766bdaa83003f1a7dcb3e93f9473f6887f63e0000803fa227733feede64bfd5dc8b3fe5f83abf1a7dcbbe93f947bf6887f6be00000000000000003ecd0f3e2a501fbe2eb8e13e1a7dcbbe93f947bf6887f6be000000000000000005f357bfa08f983f52512bbf1f6904bfdbc61f3f7eea15bf0000000000000000e47c433e50e766bdaa83003f1f69043fdbc61fbf7eea153f0000000000000000eede64bfd5dc8b3fe5f83abf1f6904bfdbc61f3f7eea15bf00000000000000003ecd0f3e2a501fbe2eb8e13e1f69043fdbc61fbf7eea153f0000000000000000ef5466bf6c66983f4bdc1ebf51b7cc3e17fd473f4277f53e00000000cf0f743f2c1c133e303c6bbd6bfd0a3f51b7cc3e17fd473f4277f53e0000803fcf0f743fcc5473bf68b38b3f96722ebf51b7ccbe17fd47bf4277f5be00000000000000006d39be3d2c6720be40cef63e51b7ccbe17fd47bf4277f5be0000000000000000ef5466bf6c66983f4bdc1ebffd8d05bf4dc01f3fdbec14bf00000000000000002c1c133e303c6bbd6bfd0a3ffd8d053f4dc01fbfdbec143f0000000000000000cc5473bf68b38b3f96722ebffd8d05bf4dc01f3fdbec14bf00000000000000006d39be3d2c6720be40cef63efd8d053f4dc01fbfdbec143f0000000000000000f39374bf8e3a983fbf5c12bf39d7cd3e8d00483fb77af43e0000000091f8743f7805c53d80e96fbd2fa6153f39d7cd3e8d00483fb77af43e0000803f91f8743f0cd380bf52878b3f01e321bf39d7cdbe8d0048bfb77af4be000000000000000097e8383d429421beed1f063f39d7cdbe8d0048bfb77af4be0000000000000000f39374bf8e3a983fbf5c12bf519a06bfdab91f3f770114bf00000000000000007805c53d80e96fbd2fa6153f519a063fdab91fbf7701143f00000000000000000cd380bf52878b3f01e321bf519a06bfdab91f3f770114bf000000000000000097e8383d429421beed1f063f519a063fdab91fbf7701143f0000000000000000c95881bf480c983f17d505bf7fddce3ee903483feb91f33e00000000dfe1753f60bf463df0e974bde77b203f7fddce3ee903483feb91f33e0000803fdfe1753f30ea87bfd5588b3f904c15bf7fddcebee90348bfeb91f3be000000000000000010d736bb12d622be6e04113f7fddcebee90348bfeb91f3be0000000000000000c95881bf480c983f17d505bfc48e07bf97b31f3f7f2813bf000000000000000060bf463df0e974bde77b203fc48e073f97b31fbf7f28133f000000000000000030ea87bfd5588b3f904c15bfc48e07bf97b31f3f7f2813bf000000000000000010d736bb12d622be6e04113fc48e073f97b31fbf7f28133f000000000000000007478fbf85a9973f9c6dd9beb69fd03e210a483f23fcf13e00000000f1b5773f609442bde0ce7fbdcea5363fb69fd03e210a483f23fcf13e0000803ff1b5773fb9e695bfadf58a3f0629f8beb69fd0be210a48bf23fcf1be00000000000000004e45cbbd779225be1948273fb69fd0be210a48bf23fcf1be000000000000000007478fbf85a9973f9c6dd9be643209bffca71f3f4eae11bf0000000000000000609442bde0ce7fbdcea5363f6432093ffca71fbf4eae113f0000000000000000b9e695bfadf58a3f0629f8be643209bffca71f3f4eae11bf00000000000000004e45cbbd779225be1948273f6432093ffca71fbf4eae113f00000000000000007cfa9cbf1840973fb427a7be8302d23e760f483fcdb6f03e00000000b68b793f54eb13be98df85bd4a6a4d3f8302d23e760f483fcdb6f03e0000803fb68b793f72a5a3bfe98b8a3fcdb9c5be8302d2be760f48bfcdb6f0be0000000000000000024349be409128be3e213e3f8302d2be760f48bfcdb6f0be00000000000000007cfa9cbf1840973fb427a7be117d0abf119e1f3f127f10bf000000000000000054eb13be98df85bd4a6a4d3f117d0a3f119e1fbf127f103f000000000000000072a5a3bfe98b8a3fcdb9c5be117d0abf119e1f3f127f10bf0000000000000000024349be409128be3e213e3f117d0a3f119e1fbf127f103f0000000000000000f661cbbf4cb5953f407c613c8118d43e3018483f91c3ee3e000000000000803fd0ccfbbef8879dbdbc70903f8118d43e3018483f91c3ee3e0000803f0000803fe01dd2bf9000893f7c363abd8118d4be301848bf91c3eebe00000000000000003c5e0bbfe06934be10dc883f8118d4be301848bf91c3eebe0000000000000000f661cbbf4cb5953f407c613cc26e0cbfcb8d1f3fc3ad0ebf0000000000000000d0ccfbbef8879dbdbc70903fc26e0c3fcb8d1fbfc3ad0e3f0000000000000000e01dd2bf9000893f7c363abdc26e0cbfcb8d1f3fc3ad0ebf00000000000000003c5e0bbfe06934be10dc883fc26e0c3fcb8d1fbfc3ad0e3f0000000000000000 + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 2.7212982, y: 0.23887771, z: 2.391499} + m_Extent: {x: 4.369539, y: 1.0891011, z: 4.398033} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!1 &1777349640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1777349643} + - component: {fileID: 1777349642} + - component: {fileID: 1777349641} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1777349641 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1777349640} + m_Enabled: 1 +--- !u!20 &1777349642 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1777349640} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1777349643 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1777349640} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12.48, y: -0.52, z: -31.62} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2092520649 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2092520651} + - component: {fileID: 2092520650} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &2092520650 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2092520649} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &2092520651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2092520649} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 12.48, y: 1.48, z: -21.62} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} diff --git a/game/Assets/PathCreator/Examples/Scenes/Road.unity.meta b/game/Assets/PathCreator/Examples/Scenes/Road.unity.meta new file mode 100644 index 0000000..e3e4cc7 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scenes/Road.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8f020cfa1fb7ded47926b050b82adbe6 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scripts.meta b/game/Assets/PathCreator/Examples/Scripts.meta new file mode 100644 index 0000000..3ad705f --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4708a8b1933bb914e98024a2cd57b3a8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scripts/Editor.meta b/game/Assets/PathCreator/Examples/Scripts/Editor.meta new file mode 100644 index 0000000..c765fef --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37afd3c65f48fa94bbb5a65473466658 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scripts/Editor/PathSceneToolEditor.cs b/game/Assets/PathCreator/Examples/Scripts/Editor/PathSceneToolEditor.cs new file mode 100644 index 0000000..c8bd736 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/Editor/PathSceneToolEditor.cs @@ -0,0 +1,108 @@ +using UnityEngine; +using UnityEditor; +using PathCreation; + +namespace PathCreation.Examples +{ + [CustomEditor(typeof(PathSceneTool), true)] + public class PathSceneToolEditor : Editor + { + protected PathSceneTool pathTool; + bool isSubscribed; + + public override void OnInspectorGUI() + { + using (var check = new EditorGUI.ChangeCheckScope()) + { + DrawDefaultInspector(); + + if (check.changed) + { + if (!isSubscribed) + { + TryFindPathCreator(); + Subscribe(); + } + + if (pathTool.autoUpdate) + { + TriggerUpdate(); + + } + } + } + + if (GUILayout.Button("Manual Update")) + { + if (TryFindPathCreator()) + { + TriggerUpdate(); + SceneView.RepaintAll(); + } + } + + } + + + void TriggerUpdate() { + if (pathTool.pathCreator != null) { + pathTool.TriggerUpdate(); + } + } + + + protected virtual void OnPathModified() + { + if (pathTool.autoUpdate) + { + TriggerUpdate(); + } + } + + protected virtual void OnEnable() + { + pathTool = (PathSceneTool)target; + pathTool.onDestroyed += OnToolDestroyed; + + if (TryFindPathCreator()) + { + Subscribe(); + TriggerUpdate(); + } + } + + void OnToolDestroyed() { + if (pathTool != null) { + pathTool.pathCreator.pathUpdated -= OnPathModified; + } + } + + + protected virtual void Subscribe() + { + if (pathTool.pathCreator != null) + { + isSubscribed = true; + pathTool.pathCreator.pathUpdated -= OnPathModified; + pathTool.pathCreator.pathUpdated += OnPathModified; + } + } + + bool TryFindPathCreator() + { + // Try find a path creator in the scene, if one is not already assigned + if (pathTool.pathCreator == null) + { + if (pathTool.GetComponent() != null) + { + pathTool.pathCreator = pathTool.GetComponent(); + } + else if (FindObjectOfType()) + { + pathTool.pathCreator = FindObjectOfType(); + } + } + return pathTool.pathCreator != null; + } + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Examples/Scripts/Editor/PathSceneToolEditor.cs.meta b/game/Assets/PathCreator/Examples/Scripts/Editor/PathSceneToolEditor.cs.meta new file mode 100644 index 0000000..bf0c49c --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/Editor/PathSceneToolEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db8aedf6f6cf2734cb24c49646427e96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scripts/GeneratePathExample.cs b/game/Assets/PathCreator/Examples/Scripts/GeneratePathExample.cs new file mode 100644 index 0000000..4659b75 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/GeneratePathExample.cs @@ -0,0 +1,20 @@ +using UnityEngine; + +namespace PathCreation.Examples { + // Example of creating a path at runtime from a set of points. + + [RequireComponent(typeof(PathCreator))] + public class GeneratePathExample : MonoBehaviour { + + public bool closedLoop = true; + public Transform[] waypoints; + + void Start () { + if (waypoints.Length > 0) { + // Create a new bezier path from the waypoints. + BezierPath bezierPath = new BezierPath (waypoints, closedLoop, PathSpace.xyz); + GetComponent ().bezierPath = bezierPath; + } + } + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Examples/Scripts/GeneratePathExample.cs.meta b/game/Assets/PathCreator/Examples/Scripts/GeneratePathExample.cs.meta new file mode 100644 index 0000000..ef2955f --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/GeneratePathExample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f417e74782fffcd40b77b0fdbe82af04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scripts/PathFollower.cs b/game/Assets/PathCreator/Examples/Scripts/PathFollower.cs new file mode 100644 index 0000000..9b9ea27 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/PathFollower.cs @@ -0,0 +1,38 @@ +using UnityEngine; + +namespace PathCreation.Examples +{ + // Moves along a path at constant speed. + // Depending on the end of path instruction, will either loop, reverse, or stop at the end of the path. + public class PathFollower : MonoBehaviour + { + public PathCreator pathCreator; + public EndOfPathInstruction endOfPathInstruction; + public float speed = 5; + float distanceTravelled; + + void Start() { + if (pathCreator != null) + { + // Subscribed to the pathUpdated event so that we're notified if the path changes during the game + pathCreator.pathUpdated += OnPathChanged; + } + } + + void Update() + { + if (pathCreator != null) + { + distanceTravelled += speed * Time.deltaTime; + transform.position = pathCreator.path.GetPointAtDistance(distanceTravelled, endOfPathInstruction); + transform.rotation = pathCreator.path.GetRotationAtDistance(distanceTravelled, endOfPathInstruction); + } + } + + // If the path changes during the game, update the distance travelled so that the follower's position on the new path + // is as close as possible to its position on the old path + void OnPathChanged() { + distanceTravelled = pathCreator.path.GetClosestDistanceAlongPath(transform.position); + } + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Examples/Scripts/PathFollower.cs.meta b/game/Assets/PathCreator/Examples/Scripts/PathFollower.cs.meta new file mode 100644 index 0000000..b353578 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/PathFollower.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33aabe1a2dec93349b06e6e5dc51bc06 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scripts/PathPlacer.cs b/game/Assets/PathCreator/Examples/Scripts/PathPlacer.cs new file mode 100644 index 0000000..8e38ee3 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/PathPlacer.cs @@ -0,0 +1,46 @@ +using PathCreation; +using UnityEngine; + +namespace PathCreation.Examples { + + [ExecuteInEditMode] + public class PathPlacer : PathSceneTool { + + public GameObject prefab; + public GameObject holder; + public float spacing = 3; + + const float minSpacing = .1f; + + void Generate () { + if (pathCreator != null && prefab != null && holder != null) { + DestroyObjects (); + + VertexPath path = pathCreator.path; + + spacing = Mathf.Max(minSpacing, spacing); + float dst = 0; + + while (dst < path.length) { + Vector3 point = path.GetPointAtDistance (dst); + Quaternion rot = path.GetRotationAtDistance (dst); + Instantiate (prefab, point, rot, holder.transform); + dst += spacing; + } + } + } + + void DestroyObjects () { + int numChildren = holder.transform.childCount; + for (int i = numChildren - 1; i >= 0; i--) { + DestroyImmediate (holder.transform.GetChild (i).gameObject, false); + } + } + + protected override void PathUpdated () { + if (pathCreator != null) { + Generate (); + } + } + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Examples/Scripts/PathPlacer.cs.meta b/game/Assets/PathCreator/Examples/Scripts/PathPlacer.cs.meta new file mode 100644 index 0000000..8b69b4a --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/PathPlacer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d12b1fe1b42884d7692049d7f6f79ee9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scripts/PathSceneTool.cs b/game/Assets/PathCreator/Examples/Scripts/PathSceneTool.cs new file mode 100644 index 0000000..a1212c1 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/PathSceneTool.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace PathCreation.Examples +{ + [ExecuteInEditMode] + public abstract class PathSceneTool : MonoBehaviour + { + public event System.Action onDestroyed; + public PathCreator pathCreator; + public bool autoUpdate = true; + + protected VertexPath path { + get { + return pathCreator.path; + } + } + + public void TriggerUpdate() { + PathUpdated(); + } + + + protected virtual void OnDestroy() { + if (onDestroyed != null) { + onDestroyed(); + } + } + + protected abstract void PathUpdated(); + } +} diff --git a/game/Assets/PathCreator/Examples/Scripts/PathSceneTool.cs.meta b/game/Assets/PathCreator/Examples/Scripts/PathSceneTool.cs.meta new file mode 100644 index 0000000..492994c --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/PathSceneTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83aca5399f4e71c44b5d6c1314b5b95f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scripts/PathSpawner.cs b/game/Assets/PathCreator/Examples/Scripts/PathSpawner.cs new file mode 100644 index 0000000..b403917 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/PathSpawner.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using PathCreation; +using UnityEngine; + +namespace PathCreation.Examples { + + public class PathSpawner : MonoBehaviour { + + public PathCreator pathPrefab; + public PathFollower followerPrefab; + public Transform[] spawnPoints; + + void Start () { + foreach (Transform t in spawnPoints) { + var path = Instantiate (pathPrefab, t.position, t.rotation); + var follower = Instantiate (followerPrefab); + follower.pathCreator = path; + path.transform.parent = t; + + } + } + } + +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Examples/Scripts/PathSpawner.cs.meta b/game/Assets/PathCreator/Examples/Scripts/PathSpawner.cs.meta new file mode 100644 index 0000000..5f6171d --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/PathSpawner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b617cc208d0104cad9534d503ff3e1cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/PathCreator/Examples/Scripts/RoadMeshCreator.cs b/game/Assets/PathCreator/Examples/Scripts/RoadMeshCreator.cs new file mode 100644 index 0000000..d201dc4 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/RoadMeshCreator.cs @@ -0,0 +1,155 @@ +using System.Collections.Generic; +using PathCreation.Utility; +using UnityEngine; + +namespace PathCreation.Examples { + public class RoadMeshCreator : PathSceneTool { + [Header ("Road settings")] + public float roadWidth = .4f; + [Range (0, .5f)] + public float thickness = .15f; + public bool flattenSurface; + + [Header ("Material settings")] + public Material roadMaterial; + public Material undersideMaterial; + public float textureTiling = 1; + + [SerializeField, HideInInspector] + GameObject meshHolder; + + MeshFilter meshFilter; + MeshRenderer meshRenderer; + Mesh mesh; + + protected override void PathUpdated () { + if (pathCreator != null) { + AssignMeshComponents (); + AssignMaterials (); + CreateRoadMesh (); + } + } + + void CreateRoadMesh () { + Vector3[] verts = new Vector3[path.NumPoints * 8]; + Vector2[] uvs = new Vector2[verts.Length]; + Vector3[] normals = new Vector3[verts.Length]; + + int numTris = 2 * (path.NumPoints - 1) + ((path.isClosedLoop) ? 2 : 0); + int[] roadTriangles = new int[numTris * 3]; + int[] underRoadTriangles = new int[numTris * 3]; + int[] sideOfRoadTriangles = new int[numTris * 2 * 3]; + + int vertIndex = 0; + int triIndex = 0; + + // Vertices for the top of the road are layed out: + // 0 1 + // 8 9 + // and so on... So the triangle map 0,8,1 for example, defines a triangle from top left to bottom left to bottom right. + int[] triangleMap = { 0, 8, 1, 1, 8, 9 }; + int[] sidesTriangleMap = { 4, 6, 14, 12, 4, 14, 5, 15, 7, 13, 15, 5 }; + + bool usePathNormals = !(path.space == PathSpace.xyz && flattenSurface); + + for (int i = 0; i < path.NumPoints; i++) { + Vector3 localUp = (usePathNormals) ? Vector3.Cross (path.GetTangent (i), path.GetNormal (i)) : path.up; + Vector3 localRight = (usePathNormals) ? path.GetNormal (i) : Vector3.Cross (localUp, path.GetTangent (i)); + + // Find position to left and right of current path vertex + Vector3 vertSideA = path.GetPoint (i) - localRight * Mathf.Abs (roadWidth); + Vector3 vertSideB = path.GetPoint (i) + localRight * Mathf.Abs (roadWidth); + + // Add top of road vertices + verts[vertIndex + 0] = vertSideA; + verts[vertIndex + 1] = vertSideB; + // Add bottom of road vertices + verts[vertIndex + 2] = vertSideA - localUp * thickness; + verts[vertIndex + 3] = vertSideB - localUp * thickness; + + // Duplicate vertices to get flat shading for sides of road + verts[vertIndex + 4] = verts[vertIndex + 0]; + verts[vertIndex + 5] = verts[vertIndex + 1]; + verts[vertIndex + 6] = verts[vertIndex + 2]; + verts[vertIndex + 7] = verts[vertIndex + 3]; + + // Set uv on y axis to path time (0 at start of path, up to 1 at end of path) + uvs[vertIndex + 0] = new Vector2 (0, path.times[i]); + uvs[vertIndex + 1] = new Vector2 (1, path.times[i]); + + // Top of road normals + normals[vertIndex + 0] = localUp; + normals[vertIndex + 1] = localUp; + // Bottom of road normals + normals[vertIndex + 2] = -localUp; + normals[vertIndex + 3] = -localUp; + // Sides of road normals + normals[vertIndex + 4] = -localRight; + normals[vertIndex + 5] = localRight; + normals[vertIndex + 6] = -localRight; + normals[vertIndex + 7] = localRight; + + // Set triangle indices + if (i < path.NumPoints - 1 || path.isClosedLoop) { + for (int j = 0; j < triangleMap.Length; j++) { + roadTriangles[triIndex + j] = (vertIndex + triangleMap[j]) % verts.Length; + // reverse triangle map for under road so that triangles wind the other way and are visible from underneath + underRoadTriangles[triIndex + j] = (vertIndex + triangleMap[triangleMap.Length - 1 - j] + 2) % verts.Length; + } + for (int j = 0; j < sidesTriangleMap.Length; j++) { + sideOfRoadTriangles[triIndex * 2 + j] = (vertIndex + sidesTriangleMap[j]) % verts.Length; + } + + } + + vertIndex += 8; + triIndex += 6; + } + + mesh.Clear (); + mesh.vertices = verts; + mesh.uv = uvs; + mesh.normals = normals; + mesh.subMeshCount = 3; + mesh.SetTriangles (roadTriangles, 0); + mesh.SetTriangles (underRoadTriangles, 1); + mesh.SetTriangles (sideOfRoadTriangles, 2); + mesh.RecalculateBounds (); + } + + // Add MeshRenderer and MeshFilter components to this gameobject if not already attached + void AssignMeshComponents () { + + if (meshHolder == null) { + meshHolder = new GameObject ("Road Mesh Holder"); + } + + meshHolder.transform.rotation = Quaternion.identity; + meshHolder.transform.position = Vector3.zero; + meshHolder.transform.localScale = Vector3.one; + + // Ensure mesh renderer and filter components are assigned + if (!meshHolder.gameObject.GetComponent ()) { + meshHolder.gameObject.AddComponent (); + } + if (!meshHolder.GetComponent ()) { + meshHolder.gameObject.AddComponent (); + } + + meshRenderer = meshHolder.GetComponent (); + meshFilter = meshHolder.GetComponent (); + if (mesh == null) { + mesh = new Mesh (); + } + meshFilter.sharedMesh = mesh; + } + + void AssignMaterials () { + if (roadMaterial != null && undersideMaterial != null) { + meshRenderer.sharedMaterials = new Material[] { roadMaterial, undersideMaterial, undersideMaterial }; + meshRenderer.sharedMaterials[0].mainTextureScale = new Vector3 (1, textureTiling); + } + } + + } +} \ No newline at end of file diff --git a/game/Assets/PathCreator/Examples/Scripts/RoadMeshCreator.cs.meta b/game/Assets/PathCreator/Examples/Scripts/RoadMeshCreator.cs.meta new file mode 100644 index 0000000..64ff6a3 --- /dev/null +++ b/game/Assets/PathCreator/Examples/Scripts/RoadMeshCreator.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: b275c3b78f8717c4cbc60f74a3247f67 +timeCreated: 1546381468 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: + - pathCreator: {instanceID: 0} + - roadMaterial: {fileID: 2100000, guid: b5df4735192845740bd11076dc9cdc99, type: 2} + - undersideMaterial: {fileID: 2100000, guid: c1d8d882244c5344fa86a8fd23246f81, type: 2} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Prefabs/Player.prefab b/game/Assets/Prefabs/Player.prefab index 773f550..6bae7df 100644 --- a/game/Assets/Prefabs/Player.prefab +++ b/game/Assets/Prefabs/Player.prefab @@ -101,6 +101,7 @@ GameObject: - component: {fileID: 2167937473989734407} - component: {fileID: 6606601648879830728} - component: {fileID: 6685677556849761150} + - component: {fileID: 4463072970378110064} m_Layer: 0 m_Name: Player m_TagString: Player @@ -283,6 +284,18 @@ MonoBehaviour: m_CallState: 2 m_ActionId: 0eb55067-1328-4b0a-9494-b427befe049a m_ActionName: CoreMap/New action + - m_PersistentCalls: + m_Calls: [] + m_ActionId: 5b0a923b-469a-4829-8f31-6fcd7cb49281 + m_ActionName: ArtefactPreview/LookEnable[/Mouse/leftButton] + - m_PersistentCalls: + m_Calls: [] + m_ActionId: 0a5c2191-e93e-44ba-880e-189b8b33e10a + m_ActionName: ArtefactPreview/LookVelocity + - m_PersistentCalls: + m_Calls: [] + m_ActionId: b118302a-6162-4223-8a6c-38ff2d6b4133 + m_ActionName: ArtefactPreview/LookDelta[/Mouse/delta] m_NeverAutoSwitchControlSchemes: 0 m_DefaultControlScheme: Gamepad m_DefaultActionMap: CoreMap @@ -458,6 +471,23 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 +--- !u!114 &4463072970378110064 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 13726836969441781} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bb840fd42f6526f4893e136a093cf1bd, type: 3} + m_Name: + m_EditorClassIdentifier: + animator: {fileID: 0} + fadeScreen: {fileID: 0} + _respawnPosition: {fileID: 11400000, guid: 20fad56702134eb469a652ba680b48b2, type: 2} + _playerDeath: {fileID: 11400000, guid: 22fd384aef0d08146831d35c2ab7f983, type: 2} + _playerRespawn: {fileID: 11400000, guid: 6e31084a96bb93a44a85563a6208d0da, type: 2} --- !u!1 &13726837642651461 GameObject: m_ObjectHideFlags: 0 diff --git a/game/Assets/Prefabs/Spline Paths.meta b/game/Assets/Prefabs/Spline Paths.meta new file mode 100644 index 0000000..8ca78ad --- /dev/null +++ b/game/Assets/Prefabs/Spline Paths.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9f94535f728259a4d828f7ec52f5b6f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Prefabs/Spline Paths/Tunnel Section.prefab b/game/Assets/Prefabs/Spline Paths/Tunnel Section.prefab new file mode 100644 index 0000000..f69c7e4 --- /dev/null +++ b/game/Assets/Prefabs/Spline Paths/Tunnel Section.prefab @@ -0,0 +1,95 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8577947204617752460 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8577947204617752461} + m_Layer: 0 + m_Name: Tunnel Section + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8577947204617752461 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8577947204617752460} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8106555150569253846} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &8577947205056744509 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 8577947204617752461} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_LocalPosition.z + value: -0.788 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_LocalRotation.y + value: -0.70710677 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -90 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 3ea432459c1408040880f4c027fab559, type: 3} + propertyPath: m_Name + value: Walkway_Spline + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!4 &8106555150569253846 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_PrefabInstance: {fileID: 8577947205056744509} + m_PrefabAsset: {fileID: 0} diff --git a/game/Assets/Prefabs/Spline Paths/Tunnel Section.prefab.meta b/game/Assets/Prefabs/Spline Paths/Tunnel Section.prefab.meta new file mode 100644 index 0000000..31fca4d --- /dev/null +++ b/game/Assets/Prefabs/Spline Paths/Tunnel Section.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 37dbeaf1971de0541b362313837e974c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Prefabs/Spline Paths/Walkway.prefab b/game/Assets/Prefabs/Spline Paths/Walkway.prefab new file mode 100644 index 0000000..377a858 --- /dev/null +++ b/game/Assets/Prefabs/Spline Paths/Walkway.prefab @@ -0,0 +1,170 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6613058589454542450 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6613058589454542448} + - component: {fileID: 6613058589454542451} + m_Layer: 0 + m_Name: Path + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6613058589454542448 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6613058589454542450} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6613058589667321331} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6613058589454542451 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6613058589454542450} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e5ac92bc18f545cc84cd886ece82b4d, type: 3} + m_Name: + m_EditorClassIdentifier: + editorData: + _bezierPath: + points: + - {x: -8.389767, y: -0.001953125, z: 0.7526444} + - {x: -5.03024, y: -0.0078125, z: -1.8659576} + - {x: -0.942536, y: -0.006255277, z: -1.2865765} + - {x: 0.8134645, y: -0.00390625, z: -0.8305894} + - {x: 3.7335591, y: 0, z: -0.07231885} + - {x: 5.0149193, y: -0.005859375, z: -0.010671109} + - {x: 8.749307, y: -0.001953125, z: -0.9521763} + isClosed: 0 + space: 0 + controlMode: 0 + autoControlLength: 0.3 + boundsUpToDate: 0 + bounds: + m_Center: {x: 0.123571396, y: -0.5054387, z: 0.53130627} + m_Extent: {x: 7.8713465, y: 0.76677597, z: 1.1122656} + perAnchorNormalsAngle: + - 0 + - 0 + - 358.8847 + globalNormalsAngle: 90 + flipNormals: 0 + vertexPathUpToDate: 1 + vertexPathMaxAngleError: 0.3 + vertexPathMinVertexSpacing: 0.01 + showTransformTool: 1 + showPathBounds: 0 + showPerSegmentBounds: 0 + displayAnchorPoints: 1 + displayControlPoints: 1 + bezierHandleScale: 1 + globalDisplaySettingsFoldout: 0 + keepConstantHandleSize: 0 + showNormalsInVertexMode: 0 + showBezierPathInVertexMode: 0 + showDisplayOptions: 1 + showPathOptions: 1 + showVertexPathDisplayOptions: 0 + showVertexPathOptions: 1 + showNormals: 1 + showNormalsHelpInfo: 0 + tabIndex: 0 + initialized: 1 +--- !u!1 &6613058589667321101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6613058589667321331} + - component: {fileID: 6613058589667321330} + m_Layer: 0 + m_Name: Walkway + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6613058589667321331 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6613058589667321101} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6613058589454542448} + - {fileID: 6613058589800293244} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6613058589667321330 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6613058589667321101} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d12b1fe1b42884d7692049d7f6f79ee9, type: 3} + m_Name: + m_EditorClassIdentifier: + pathCreator: {fileID: 6613058589454542451} + autoUpdate: 0 + prefab: {fileID: 8577947204617752460, guid: 37dbeaf1971de0541b362313837e974c, type: 3} + holder: {fileID: 6613058589800293247} + spacing: 1.41 +--- !u!1 &6613058589800293247 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6613058589800293244} + m_Layer: 0 + m_Name: Sections + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6613058589800293244 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6613058589800293247} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6613058589667321331} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/game/Assets/Prefabs/Spline Paths/Walkway.prefab.meta b/game/Assets/Prefabs/Spline Paths/Walkway.prefab.meta new file mode 100644 index 0000000..38c54e5 --- /dev/null +++ b/game/Assets/Prefabs/Spline Paths/Walkway.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9dc0ffd7f5e4855429cfdf90601da8ce +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Prefabs/Traps/ArrowWall.prefab b/game/Assets/Prefabs/Traps/ArrowWall.prefab new file mode 100644 index 0000000..f68aa0a --- /dev/null +++ b/game/Assets/Prefabs/Traps/ArrowWall.prefab @@ -0,0 +1,1286 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8768409224428472402 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409224428472403} + - component: {fileID: 8768409224428472364} + - component: {fileID: 8768409224428472367} + - component: {fileID: 8768409224428472366} + - component: {fileID: 8768409224428472401} + - component: {fileID: 8768409224428472400} + - component: {fileID: 8768409224428472365} + m_Layer: 0 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409224428472403 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224428472402} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 26.82, y: 0.44, z: -27.803524} + m_LocalScale: {x: 0.10000001, y: 1, z: 0.1} + m_Children: [] + m_Father: {fileID: 8768409224895496785} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!33 &8768409224428472364 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224428472402} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8768409224428472367 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224428472402} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &8768409224428472366 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224428472402} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &8768409224428472401 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224428472402} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 6.61, z: 1} + m_Center: {x: 0.26, y: -3.33, z: -0.03} +--- !u!114 &8768409224428472400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224428472402} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ba21ce2fa4afd344ea4d6e0cc7932d32, type: 3} + m_Name: + m_EditorClassIdentifier: + speed: 4 + waitToDestroy: 3 + direction: {x: 1, y: 0, z: 0} + pd: {fileID: 0} +--- !u!54 &8768409224428472365 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224428472402} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &8768409224455791807 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409224455791803} + - component: {fileID: 8768409224455791802} + - component: {fileID: 8768409224455791805} + - component: {fileID: 8768409224455791804} + m_Layer: 0 + m_Name: Wall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409224455791803 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224455791807} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 20.04, y: 0.4399997, z: -27.803524} + m_LocalScale: {x: 0.5, y: 3, z: 5} + m_Children: [] + m_Father: {fileID: 8768409224895496785} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8768409224455791802 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224455791807} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8768409224455791805 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224455791807} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &8768409224455791804 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224455791807} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &8768409224737162605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409224737162602} + - component: {fileID: 8768409224737162596} + - component: {fileID: 8768409224737162599} + - component: {fileID: 8768409224737162598} + - component: {fileID: 8768409224737162601} + - component: {fileID: 8768409224737162600} + - component: {fileID: 8768409224737162603} + m_Layer: 0 + m_Name: Arrow (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409224737162602 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224737162605} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 26.82, y: -0.27, z: -28.061} + m_LocalScale: {x: 0.10000001, y: 1, z: 0.1} + m_Children: [] + m_Father: {fileID: 8768409224895496785} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!33 &8768409224737162596 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224737162605} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8768409224737162599 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224737162605} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &8768409224737162598 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224737162605} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &8768409224737162601 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224737162605} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 5.02, z: 1} + m_Center: {x: 0.26, y: 3.52, z: -0.03} +--- !u!114 &8768409224737162600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224737162605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ba21ce2fa4afd344ea4d6e0cc7932d32, type: 3} + m_Name: + m_EditorClassIdentifier: + speed: 4 + waitToDestroy: 3 + direction: {x: -1, y: 0, z: 0} + pd: {fileID: 0} +--- !u!54 &8768409224737162603 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224737162605} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &8768409224895496784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409224895496785} + m_Layer: 0 + m_Name: ArrowWall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409224895496785 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409224895496784} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -26.51, y: 1.0225053, z: 41.31} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8768409224455791803} + - {fileID: 8768409225266781300} + - {fileID: 8768409225703569844} + - {fileID: 8768409225590013105} + - {fileID: 8768409224428472403} + - {fileID: 8768409225812382151} + - {fileID: 8768409226032736458} + - {fileID: 8768409224737162602} + - {fileID: 8768409225049831781} + - {fileID: 8768409225739548458} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8768409225049831780 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409225049831781} + - component: {fileID: 8768409225049831807} + - component: {fileID: 8768409225049831806} + - component: {fileID: 8768409225049831777} + - component: {fileID: 8768409225049831776} + - component: {fileID: 8768409225049831779} + - component: {fileID: 8768409225049831778} + m_Layer: 0 + m_Name: Arrow (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409225049831781 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225049831780} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 26.82, y: -0.27, z: -27.76} + m_LocalScale: {x: 0.10000001, y: 1, z: 0.1} + m_Children: [] + m_Father: {fileID: 8768409224895496785} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!33 &8768409225049831807 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225049831780} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8768409225049831806 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225049831780} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &8768409225049831777 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225049831780} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &8768409225049831776 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225049831780} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 6.61, z: 1} + m_Center: {x: 0.26, y: -3.33, z: -0.03} +--- !u!114 &8768409225049831779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225049831780} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ba21ce2fa4afd344ea4d6e0cc7932d32, type: 3} + m_Name: + m_EditorClassIdentifier: + speed: 4 + waitToDestroy: 3 + direction: {x: 1, y: 0, z: 0} + pd: {fileID: 0} +--- !u!54 &8768409225049831778 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225049831780} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &8768409225266781303 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409225266781300} + - component: {fileID: 8768409225266781299} + - component: {fileID: 8768409225266781298} + - component: {fileID: 8768409225266781301} + m_Layer: 0 + m_Name: Wall (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409225266781300 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225266781303} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 26.84, y: 0.4399997, z: -29.39} + m_LocalScale: {x: 1.9113, y: 3, z: 2.0194502} + m_Children: [] + m_Father: {fileID: 8768409224895496785} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8768409225266781299 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225266781303} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8768409225266781298 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225266781303} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &8768409225266781301 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225266781303} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &8768409225590013104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409225590013105} + - component: {fileID: 8768409225590013068} + - component: {fileID: 8768409225590013071} + - component: {fileID: 8768409225590013070} + m_Layer: 0 + m_Name: Wall (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409225590013105 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225590013104} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 33.99, y: 0.52, z: -27.803524} + m_LocalScale: {x: 0.5, y: 3, z: 5} + m_Children: [] + m_Father: {fileID: 8768409224895496785} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8768409225590013068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225590013104} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8768409225590013071 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225590013104} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &8768409225590013070 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225590013104} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &8768409225703569847 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409225703569844} + - component: {fileID: 8768409225703569843} + - component: {fileID: 8768409225703569842} + - component: {fileID: 8768409225703569845} + m_Layer: 0 + m_Name: Wall (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409225703569844 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225703569847} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 26.84, y: 0.4399997, z: -26.06} + m_LocalScale: {x: 1.9113, y: 3, z: 2.0194502} + m_Children: [] + m_Father: {fileID: 8768409224895496785} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8768409225703569843 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225703569847} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8768409225703569842 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225703569847} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &8768409225703569845 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225703569847} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &8768409225739548461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409225739548458} + - component: {fileID: 8768409225739548452} + - component: {fileID: 8768409225739548455} + - component: {fileID: 8768409225739548454} + - component: {fileID: 8768409225739548457} + - component: {fileID: 8768409225739548456} + - component: {fileID: 8768409225739548459} + m_Layer: 0 + m_Name: Arrow (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409225739548458 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225739548461} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 26.82, y: -0.27, z: -27.39} + m_LocalScale: {x: 0.10000001, y: 1, z: 0.1} + m_Children: [] + m_Father: {fileID: 8768409224895496785} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!33 &8768409225739548452 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225739548461} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8768409225739548455 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225739548461} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &8768409225739548454 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225739548461} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &8768409225739548457 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225739548461} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 5.02, z: 1} + m_Center: {x: 0.26, y: 3.52, z: -0.03} +--- !u!114 &8768409225739548456 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225739548461} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ba21ce2fa4afd344ea4d6e0cc7932d32, type: 3} + m_Name: + m_EditorClassIdentifier: + speed: 4 + waitToDestroy: 3 + direction: {x: -1, y: 0, z: 0} + pd: {fileID: 0} +--- !u!54 &8768409225739548459 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225739548461} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &8768409225812382150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409225812382151} + - component: {fileID: 8768409225812382145} + - component: {fileID: 8768409225812382144} + - component: {fileID: 8768409225812382147} + - component: {fileID: 8768409225812382146} + - component: {fileID: 8768409225812382149} + - component: {fileID: 8768409225812382148} + m_Layer: 0 + m_Name: Arrow (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409225812382151 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225812382150} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 26.82, y: 0.44, z: -27.476} + m_LocalScale: {x: 0.10000001, y: 1, z: 0.1} + m_Children: [] + m_Father: {fileID: 8768409224895496785} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!33 &8768409225812382145 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225812382150} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8768409225812382144 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225812382150} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &8768409225812382147 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225812382150} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &8768409225812382146 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225812382150} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 5.02, z: 1} + m_Center: {x: 0.26, y: 3.52, z: -0.03} +--- !u!114 &8768409225812382149 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225812382150} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ba21ce2fa4afd344ea4d6e0cc7932d32, type: 3} + m_Name: + m_EditorClassIdentifier: + speed: 4 + waitToDestroy: 3 + direction: {x: -1, y: 0, z: 0} + pd: {fileID: 0} +--- !u!54 &8768409225812382148 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409225812382150} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &8768409226032736461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8768409226032736458} + - component: {fileID: 8768409226032736452} + - component: {fileID: 8768409226032736455} + - component: {fileID: 8768409226032736454} + - component: {fileID: 8768409226032736457} + - component: {fileID: 8768409226032736456} + - component: {fileID: 8768409226032736459} + m_Layer: 0 + m_Name: Arrow (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8768409226032736458 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409226032736461} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 26.82, y: 0.44, z: -28.061} + m_LocalScale: {x: 0.10000001, y: 1, z: 0.1} + m_Children: [] + m_Father: {fileID: 8768409224895496785} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!33 &8768409226032736452 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409226032736461} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8768409226032736455 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409226032736461} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &8768409226032736454 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409226032736461} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &8768409226032736457 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409226032736461} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 6.61, z: 1} + m_Center: {x: 0.26, y: -3.33, z: -0.03} +--- !u!114 &8768409226032736456 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409226032736461} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ba21ce2fa4afd344ea4d6e0cc7932d32, type: 3} + m_Name: + m_EditorClassIdentifier: + speed: 4 + waitToDestroy: 3 + direction: {x: 1, y: 0, z: 0} + pd: {fileID: 0} +--- !u!54 &8768409226032736459 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8768409226032736461} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 diff --git a/game/Assets/Prefabs/Traps/ArrowWall.prefab.meta b/game/Assets/Prefabs/Traps/ArrowWall.prefab.meta new file mode 100644 index 0000000..2a02cec --- /dev/null +++ b/game/Assets/Prefabs/Traps/ArrowWall.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 55fadb9f11c9ea74fb586631ce45bd14 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Scenes/BezierPaths.unity b/game/Assets/Scenes/BezierPaths.unity new file mode 100644 index 0000000..8957a44 --- /dev/null +++ b/game/Assets/Scenes/BezierPaths.unity @@ -0,0 +1,1819 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &34119098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 34119099} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &34119099 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34119098} + m_LocalRotation: {x: 0.00007252892, y: 0.81986743, z: -0.00039208462, w: 0.5725532} + m_LocalPosition: {x: -5.9334064, y: -0.004946349, z: -0.60919935} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 172809210} + m_Father: {fileID: 1059149510} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &156553098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 156553101} + - component: {fileID: 156553100} + - component: {fileID: 156553099} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &156553099 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156553098} + m_Enabled: 1 +--- !u!20 &156553100 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156553098} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &156553101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156553098} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &172809209 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 172809210} + - component: {fileID: 172809212} + - component: {fileID: 172809211} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &172809210 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 172809209} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 34119099} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &172809211 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 172809209} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &172809212 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 172809209} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &189885645 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 189885646} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &189885646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 189885645} + m_LocalRotation: {x: 0.00030181243, y: 0.89854443, z: -0.00061804074, w: 0.43888205} + m_LocalPosition: {x: -8.389767, y: -0.001953125, z: 0.7526444} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1349056874} + m_Father: {fileID: 1059149510} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &210913536 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 210913537} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &210913537 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 210913536} + m_LocalRotation: {x: -0.006507241, y: 0.7670465, z: -0.0053217122, w: 0.64153636} + m_LocalPosition: {x: 6.5825243, y: -0.003323041, z: -0.4706609} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 787962626} + m_Father: {fileID: 1059149510} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &329882620 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 329882621} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &329882621 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 329882620} + m_LocalRotation: {x: -0.00026137696, y: 0.69157827, z: -0.000040746672, w: 0.72230154} + m_LocalPosition: {x: -1.7744825, y: -0.0058036298, z: -1.2131205} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1246766656} + m_Father: {fileID: 1059149510} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &372570169 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 372570170} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &372570170 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 372570169} + m_LocalRotation: {x: -0.0045261714, y: 0.7339458, z: -0.0044065914, w: 0.6791787} + m_LocalPosition: {x: 5.185472, y: -0.0032034542, z: -0.28451023} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 404869093} + m_Father: {fileID: 1059149510} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &404869092 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 404869093} + - component: {fileID: 404869095} + - component: {fileID: 404869094} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &404869093 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404869092} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 372570170} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &404869094 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404869092} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &404869095 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404869092} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &501093349 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 501093350} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &501093350 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 501093349} + m_LocalRotation: {x: -0.0076825237, y: 0.78350955, z: -0.005621673, w: 0.62130684} + m_LocalPosition: {x: 7.9622, y: -0.0026594575, z: -0.7606919} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1338173042} + m_Father: {fileID: 1059149510} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &543610030 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 543610031} + - component: {fileID: 543610033} + - component: {fileID: 543610032} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &543610031 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 543610030} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 1078729744} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &543610032 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 543610030} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &543610033 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 543610030} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &666311459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 666311460} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &666311460 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666311459} + m_LocalRotation: {x: -0.001145853, y: 0.6362858, z: -0.0011306577, w: 0.7714518} + m_LocalPosition: {x: 2.3805633, y: -0.0025861629, z: -0.46585888} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 807317057} + m_Father: {fileID: 1059149510} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &742915098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 742915099} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &742915099 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742915098} + m_LocalRotation: {x: -0.00039259432, y: 0.6506827, z: 0.00009685929, w: 0.7593497} + m_LocalPosition: {x: -0.37209514, y: -0.0050798412, z: -1.0738391} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 954671392} + m_Father: {fileID: 1059149510} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &787962625 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 787962626} + - component: {fileID: 787962628} + - component: {fileID: 787962627} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &787962626 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 787962625} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 210913537} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &787962627 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 787962625} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &787962628 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 787962625} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &807317056 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 807317057} + - component: {fileID: 807317059} + - component: {fileID: 807317058} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &807317057 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807317056} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 666311460} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &807317058 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807317056} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &807317059 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807317056} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &872260722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 872260723} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &872260723 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 872260722} + m_LocalRotation: {x: -0.000612749, y: 0.6143365, z: 0.00015857899, w: 0.7890439} + m_LocalPosition: {x: 1.0065165, y: -0.003670007, z: -0.7813039} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1780469921} + m_Father: {fileID: 1059149510} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &954671391 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 954671392} + - component: {fileID: 954671394} + - component: {fileID: 954671393} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &954671392 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954671391} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 742915099} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &954671393 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954671391} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &954671394 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954671391} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1001 &1059149509 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6613058589667321101, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_Name + value: Walkway + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6613058589667321331, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} +--- !u!4 &1059149510 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 6613058589800293244, guid: 9dc0ffd7f5e4855429cfdf90601da8ce, type: 3} + m_PrefabInstance: {fileID: 1059149509} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1078729743 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1078729744} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1078729744 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1078729743} + m_LocalRotation: {x: 0.00018839574, y: 0.8615855, z: -0.0005081365, w: 0.5076122} + m_LocalPosition: {x: -7.2147, y: -0.003679617, z: -0.024055535} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 543610031} + m_Father: {fileID: 1059149510} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1246766655 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1246766656} + - component: {fileID: 1246766658} + - component: {fileID: 1246766657} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1246766656 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1246766655} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 329882621} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &1246766657 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1246766655} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1246766658 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1246766655} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &1249071551 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1249071552} + - component: {fileID: 1249071554} + - component: {fileID: 1249071553} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1249071552 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1249071551} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 1563069404} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &1249071553 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1249071551} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1249071554 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1249071551} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &1338173041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1338173042} + - component: {fileID: 1338173044} + - component: {fileID: 1338173043} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1338173042 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338173041} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 501093350} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &1338173043 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338173041} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1338173044 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338173041} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &1349056873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1349056874} + - component: {fileID: 1349056876} + - component: {fileID: 1349056875} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1349056874 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349056873} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 189885646} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &1349056875 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349056873} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1349056876 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349056873} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &1418787611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1418787612} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1418787612 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418787611} + m_LocalRotation: {x: -0.0001504369, y: 0.73315537, z: -0.00015924296, w: 0.68006116} + m_LocalPosition: {x: -3.1834958, y: -0.0060074735, z: -1.1920276} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1674193028} + m_Father: {fileID: 1059149510} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1457237770 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1457237772} + - component: {fileID: 1457237771} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1457237771 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457237770} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1457237772 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457237770} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1504592679 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1504592680} + - component: {fileID: 1504592682} + - component: {fileID: 1504592681} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1504592680 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504592679} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 1665314352} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &1504592681 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504592679} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1504592682 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504592679} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &1563069403 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1563069404} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1563069404 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1563069403} + m_LocalRotation: {x: -0.00004078806, y: 0.77626526, z: -0.00027510794, w: 0.63040644} + m_LocalPosition: {x: -4.578725, y: -0.0057226163, z: -0.9957544} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1249071552} + m_Father: {fileID: 1059149510} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1665314351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1665314352} + m_Layer: 0 + m_Name: Tunnel Section(Clone) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1665314352 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665314351} + m_LocalRotation: {x: -0.0025767467, y: 0.6824028, z: -0.0030089123, w: 0.7309656} + m_LocalPosition: {x: 3.7767901, y: -0.0026511457, z: -0.27591902} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1504592680} + m_Father: {fileID: 1059149510} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1674193027 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1674193028} + - component: {fileID: 1674193030} + - component: {fileID: 1674193029} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1674193028 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1674193027} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 1418787612} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &1674193029 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1674193027} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1674193030 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1674193027} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} +--- !u!1 &1780469920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1780469921} + - component: {fileID: 1780469923} + - component: {fileID: 1780469922} + m_Layer: 0 + m_Name: Walkway_Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1780469921 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780469920} + m_LocalRotation: {x: -0, y: -0.70710677, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.788} + m_LocalScale: {x: 160, y: 250, z: 200} + m_Children: [] + m_Father: {fileID: 872260723} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!23 &1780469922 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780469920} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1294284738371021749, guid: 3ea432459c1408040880f4c027fab559, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1780469923 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780469920} + m_Mesh: {fileID: 7417876984985573820, guid: 3ea432459c1408040880f4c027fab559, type: 3} diff --git a/game/Assets/Scenes/BezierPaths.unity.meta b/game/Assets/Scenes/BezierPaths.unity.meta new file mode 100644 index 0000000..163dd19 --- /dev/null +++ b/game/Assets/Scenes/BezierPaths.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dc3ea3cae1a378c4bbbc2387b2edf202 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Scenes/Main.unity b/game/Assets/Scenes/Main.unity index ec4ec86..8364a9f 100644 --- a/game/Assets/Scenes/Main.unity +++ b/game/Assets/Scenes/Main.unity @@ -1452,6 +1452,10 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 3340651998927408399, guid: e182e6daf2f187b45a07e7c89e3f1b55, type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} - target: {fileID: 3340651998927408401, guid: e182e6daf2f187b45a07e7c89e3f1b55, type: 3} propertyPath: m_Name value: Kill Plane @@ -4068,6 +4072,14 @@ PrefabInstance: propertyPath: m_Name value: Safe Zone objectReference: {fileID: 0} + - target: {fileID: 4449396798674854632, guid: 373acc46f7fa7eb4b9cfba9c3e17b6ca, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4449396798674854633, guid: 373acc46f7fa7eb4b9cfba9c3e17b6ca, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} - target: {fileID: 4449396798674854634, guid: 373acc46f7fa7eb4b9cfba9c3e17b6ca, type: 3} propertyPath: m_RootOrder value: 0 @@ -5249,6 +5261,10 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1112305614} m_Modifications: + - target: {fileID: 2663749718261374877, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} - target: {fileID: 3201523991801391447, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} propertyPath: _data value: @@ -5301,6 +5317,10 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 8781564214893312960, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} --- !u!4 &1689233312 stripped @@ -5497,6 +5517,10 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1112305614} m_Modifications: + - target: {fileID: 2663749718261374877, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} - target: {fileID: 3201523991801391447, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} propertyPath: _data value: @@ -5549,6 +5573,10 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 8781564214893312960, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} --- !u!1 &1746912635 stripped @@ -6013,6 +6041,10 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1112305614} m_Modifications: + - target: {fileID: 2663749718261374877, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} - target: {fileID: 3201523991801391447, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} propertyPath: _data value: @@ -6065,6 +6097,10 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 8781564214893312960, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b3a3678d38e60164dbd4f343e28f69e1, type: 3} --- !u!4 &1887796315 stripped @@ -57972,6 +58008,14 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 1833095293156707977, guid: 8a3f2b3b16275e540b349897292a42ac, type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - target: {fileID: 1833095293156707977, guid: 8a3f2b3b16275e540b349897292a42ac, type: 3} + propertyPath: m_sharedMaterial + value: + objectReference: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - target: {fileID: 6808448287154422772, guid: 8a3f2b3b16275e540b349897292a42ac, type: 3} propertyPath: _preview value: diff --git a/game/Assets/Scripts/ArrowWall.meta b/game/Assets/Scripts/ArrowWall.meta new file mode 100644 index 0000000..c8fd663 --- /dev/null +++ b/game/Assets/Scripts/ArrowWall.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4cc71201ee62efb488f75c38d71a1bba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Scripts/ArrowWall/Arrow.cs b/game/Assets/Scripts/ArrowWall/Arrow.cs new file mode 100644 index 0000000..bcfec99 --- /dev/null +++ b/game/Assets/Scripts/ArrowWall/Arrow.cs @@ -0,0 +1,52 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Arrow : MonoBehaviour +{ + Rigidbody rb; + // Float for speed of the arrow. + [SerializeField] private float speed; + // Float for time in seconds to wait to destroy the arrow on contact with any other gameobject that is no the player. + [SerializeField] private float waitToDestroy; + // Vector3 to set direction of travel for the arrow once the trigger is activated. + [SerializeField] private Vector3 direction; + + private void Start() + { + rb = GetComponent(); + } + + private void OnTriggerEnter(Collider other) + { + // Checks to make sure other collider is the Player using tag. + if (other.gameObject.CompareTag("Player")) + { + rb.velocity = direction * speed; + } + } + + private void OnCollisionEnter(Collision collision) + { + if (collision.gameObject.TryGetComponent(out PlayerDeath playerDeath)) + { + // Start Respawn coroutine. + playerDeath.Respawn(); + // Destroy arrow on contact with player. + Destroy(gameObject); + } + else + { + // If arrow makes contact with any other gameobject start DestroyArrow corountine. + StartCoroutine(DestoryArrow()); + } + } + + public IEnumerator DestoryArrow() + { + // set arrow velocity to zero wait for destory time and then destory the arrow. + rb.velocity = Vector3.zero; + yield return new WaitForSeconds(waitToDestroy); + Destroy(gameObject); + } +} diff --git a/game/Assets/Scripts/ArrowWall/Arrow.cs.meta b/game/Assets/Scripts/ArrowWall/Arrow.cs.meta new file mode 100644 index 0000000..2d792fd --- /dev/null +++ b/game/Assets/Scripts/ArrowWall/Arrow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba21ce2fa4afd344ea4d6e0cc7932d32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Scripts/Checkpoint/SafeZone.cs b/game/Assets/Scripts/Checkpoint/SafeZone.cs index 3a13557..a83e92d 100644 --- a/game/Assets/Scripts/Checkpoint/SafeZone.cs +++ b/game/Assets/Scripts/Checkpoint/SafeZone.cs @@ -12,9 +12,9 @@ public class SafeZone : MonoBehaviour private void OnTriggerStay(Collider other) { // Check if other game object is Player. - if (other.gameObject.name == "Player") + if (other.gameObject.CompareTag("Player")) { _respawnPosition.Value = other.gameObject.transform.position; } } -} +} \ No newline at end of file diff --git a/game/Assets/Scripts/Death & Respawn/DeathZone.cs b/game/Assets/Scripts/Death & Respawn/DeathZone.cs index a12e09d..7d261f2 100644 --- a/game/Assets/Scripts/Death & Respawn/DeathZone.cs +++ b/game/Assets/Scripts/Death & Respawn/DeathZone.cs @@ -1,45 +1,14 @@ using System; -using System.Collections; -using System.Collections.Generic; -using Ktyl.Util; using UnityEngine; -using UnityEngine.InputSystem; -public class DeathZone : MonoBehaviour -{ - private GameObject player; - [SerializeField] private SerialVector3 _respawnPosition; - [SerializeField] private GameEvent _playerDeath; - [SerializeField] private GameEvent _playerRespawn; - +public class DeathZone : MonoBehaviour +{ private void OnTriggerEnter(Collider other) { // Checks to make sure other collider is the Player. Sets player variable as Player game object and starts the coroutine. - if (other.gameObject.CompareTag("Player")) + if (other.TryGetComponent(out PlayerDeath playerDeath)) { - player = other.gameObject; - StartCoroutine(RespawnPlayer()); + playerDeath.Respawn(); } } - - // Corountine to trigger death animation, disable player movement, play fade, respawn player at last safe position and then play fade in animation and re-enable player movement. - public IEnumerator RespawnPlayer() - { - _playerDeath.Raise(); - - // yield return new WaitForSeconds(0.5f); - - // fadeScreen.GetComponent().SetTrigger("fadeToBlack"); - yield return new WaitForSeconds(1.5f); - - // move player to respawn position - player.transform.position = _respawnPosition; - - // fadeScreen.GetComponent().SetTrigger("fadeToClear"); - yield return new WaitForSeconds(0.5f); - - _playerRespawn.Raise(); - - yield return null; - } } \ No newline at end of file diff --git a/game/Assets/Scripts/Death & Respawn/PlayerDeath.cs b/game/Assets/Scripts/Death & Respawn/PlayerDeath.cs new file mode 100644 index 0000000..3e74dc1 --- /dev/null +++ b/game/Assets/Scripts/Death & Respawn/PlayerDeath.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Ktyl.Util; + +public class PlayerDeath : MonoBehaviour +{ + [SerializeField] private SerialVector3 _respawnPosition; + [SerializeField] private GameEvent _playerDeath; + [SerializeField] private GameEvent _playerRespawn; + + public void Respawn() + { + StartCoroutine(RespawnPlayerCR()); + } + + // raise death/respawn events with a given intermediate delay + public IEnumerator RespawnPlayerCR() + { + _playerDeath.Raise(); + + yield return new WaitForSeconds(1.5f); + + // move player to respawn position + transform.position = _respawnPosition; + + // need to wait a bit for the respawn to actually work?? >:v + yield return new WaitForSeconds(0.5f); + + _playerRespawn.Raise(); + } +} diff --git a/game/Assets/Scripts/Death & Respawn/PlayerDeath.cs.meta b/game/Assets/Scripts/Death & Respawn/PlayerDeath.cs.meta new file mode 100644 index 0000000..b278e2c --- /dev/null +++ b/game/Assets/Scripts/Death & Respawn/PlayerDeath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb840fd42f6526f4893e136a093cf1bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Scripts/Traps/FallingRocks.cs b/game/Assets/Scripts/Traps/FallingRocks.cs index 7181e88..c9eee22 100644 --- a/game/Assets/Scripts/Traps/FallingRocks.cs +++ b/game/Assets/Scripts/Traps/FallingRocks.cs @@ -25,12 +25,9 @@ public class FallingRocks : MonoBehaviour // Use OnCollison to call respawn method from DeathZone script. private void OnCollisionEnter(Collision collision) { - if (collision.gameObject.CompareTag("Player")) + if (collision.gameObject.TryGetComponent(out PlayerDeath playerDeath)) { - // Check code is working in log. Can be deleted at a later stage. - Debug.Log("Dead"); - // Call respawn coroutine from DeathZone script. - StartCoroutine(_dz.RespawnPlayer()); + playerDeath.Respawn(); } } }