From 77924d873c30c3b585823f6cd9dbe71a31f162f0 Mon Sep 17 00:00:00 2001 From: christides11 <29593332+christides11@users.noreply.github.com> Date: Sat, 19 Feb 2022 13:36:01 -0500 Subject: [PATCH] feat: added base classes for state timeline tracks. --- Assembly-CSharp.csproj | 34 +- .../HnSF/Editor/State/StateTimelineEditor.cs | 2 +- .../Samples/TDAction/Fighters/ADV/ADV.prefab | 1186 +++++++++++- .../TDAction/Fighters/ADV/Scripts.meta | 8 + .../ADV/Scripts/ADVEnumStateBinding.cs | 9 + .../ADV/Scripts/ADVEnumStateBinding.cs.meta | 11 + .../Fighters/ADV/Scripts/ADVManager.cs | 22 + .../Fighters/ADV/Scripts/ADVManager.cs.meta | 11 + .../Samples/TDAction/Fighters/ADV/States.meta | 8 + .../TDAction/Fighters/ADV/States/Shared.meta | 8 + .../Fighters/ADV/States/Shared/ADV-Idle.asset | 128 ++ .../ADV/States/Shared/ADV-Idle.asset.meta | 8 + .../Scripts/Fighter/CharacterController2D.cs | 578 ++++++ .../Fighter/CharacterController2D.cs.meta | 11 + .../Scripts/Fighter/EnumStateBinding.cs | 9 + .../Scripts/Fighter/EnumStateBinding.cs.meta | 11 + .../Scripts/Fighter/FighterStateEnum.cs | 15 + .../Scripts/Fighter/FighterStateEnum.cs.meta | 11 + .../Fighter/Managers/FighterInputManager.cs | 75 + .../Managers/FighterInputManager.cs.meta | 11 + .../Fighter/Managers/FighterManager.cs | 30 +- .../Fighter/Managers/FighterPhysicsManager.cs | 93 +- .../Fighter/Managers/FighterStateManager.cs | 95 +- .../HnSF/Samples/TDAction/Scripts/Input.meta | 8 + .../TDAction/Scripts/Input/InputButtonData.cs | 16 + .../Scripts/Input/InputButtonData.cs.meta | 11 + .../TDAction/Scripts/Input/PlayerInputData.cs | 13 + .../Scripts/Input/PlayerInputData.cs.meta | 11 + .../TDAction/Scripts/Managers/BootLoader.cs | 19 +- .../TDAction/Scripts/Managers/GameManager.cs | 55 + .../Scripts/Managers/GameManager.cs.meta | 11 + .../Samples/TDAction/Scripts/Simulation.meta | 8 + .../Scripts/Simulation/ISimulationObject.cs | 16 + .../Simulation/ISimulationObject.cs.meta | 11 + .../Scripts/Simulation/SimulationBehaviour.cs | 33 + .../Simulation/SimulationBehaviour.cs.meta | 11 + .../Scripts/Simulation/SimulationManager.cs | 33 + .../Simulation/SimulationManager.cs.meta | 11 + .../HnSF/Samples/TDAction/Scripts/State.meta | 8 + .../TDAction/Scripts/State/StateTimeline.cs | 12 + .../Scripts/State/StateTimeline.cs.meta | 11 + .../TDAction/Scripts/State/Tracks.meta | 8 + .../State/Tracks/IncrementFrameAsset.cs | 16 + .../State/Tracks/IncrementFrameAsset.cs.meta | 11 + .../State/Tracks/IncrementFrameBehaviour.cs | 14 + .../Tracks/IncrementFrameBehaviour.cs.meta | 11 + Assets/HnSF/Samples/TDAction/TDAction.unity | 1718 ++++++++++++++++- Assets/HnSF/State/FighterStateAsset.cs | 14 + Assets/HnSF/State/FighterStateAsset.cs.meta | 11 + Assets/HnSF/State/FighterStateBehaviour.cs | 11 + .../HnSF/State/FighterStateBehaviour.cs.meta | 11 + Assets/HnSF/State/FighterTrack.cs | 10 + Assets/HnSF/State/FighterTrack.cs.meta | 11 + HnSF.Editor.csproj | 2 +- HnSF.csproj | 30 +- ProjectSettings/Physics2DSettings.asset | 4 +- ProjectSettings/ProjectSettings.asset | 118 +- ProjectSettings/TimelineSettings.asset | 15 + UserSettings/EditorUserSettings.asset | 7 +- 59 files changed, 4486 insertions(+), 208 deletions(-) create mode 100644 Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts.meta create mode 100644 Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVEnumStateBinding.cs create mode 100644 Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVEnumStateBinding.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVManager.cs create mode 100644 Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVManager.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Fighters/ADV/States.meta create mode 100644 Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared.meta create mode 100644 Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared/ADV-Idle.asset create mode 100644 Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared/ADV-Idle.asset.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Fighter/CharacterController2D.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Fighter/CharacterController2D.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Fighter/EnumStateBinding.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Fighter/EnumStateBinding.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Fighter/FighterStateEnum.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Fighter/FighterStateEnum.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterInputManager.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterInputManager.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Input.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Input/InputButtonData.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Input/InputButtonData.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Input/PlayerInputData.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Input/PlayerInputData.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Managers/GameManager.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Managers/GameManager.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Simulation.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Simulation/ISimulationObject.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Simulation/ISimulationObject.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationBehaviour.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationBehaviour.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationManager.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationManager.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/State.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/State/StateTimeline.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/State/StateTimeline.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/State/Tracks.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameAsset.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameAsset.cs.meta create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameBehaviour.cs create mode 100644 Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameBehaviour.cs.meta create mode 100644 Assets/HnSF/State/FighterStateAsset.cs create mode 100644 Assets/HnSF/State/FighterStateAsset.cs.meta create mode 100644 Assets/HnSF/State/FighterStateBehaviour.cs create mode 100644 Assets/HnSF/State/FighterStateBehaviour.cs.meta create mode 100644 Assets/HnSF/State/FighterTrack.cs create mode 100644 Assets/HnSF/State/FighterTrack.cs.meta create mode 100644 ProjectSettings/TimelineSettings.asset diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj index 339c36d2..8538d2e4 100644 --- a/Assembly-CSharp.csproj +++ b/Assembly-CSharp.csproj @@ -638,6 +638,12 @@ C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.VisualStudio.Editor.dll + + C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Juce.ImplementationSelector.Runtime.dll + + + C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.Timeline.dll + C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.TextMeshPro.dll @@ -647,14 +653,17 @@ C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.2D.Sprite.Editor.dll + + C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Malee.ReorderableList.Editor.dll + C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.RenderPipelines.Core.Runtime.dll C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/UnityEditor.UI.dll - - C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Malee.ReorderableList.Editor.dll + + C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Juce.ImplementationSelector.Editor.dll C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.Rider.Editor.dll @@ -695,32 +704,23 @@ C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll + + C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.Timeline.Editor.dll + C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/XNodeEditor.dll C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.Mathematics.Editor.dll + + C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Juce.ImplementationSelector.Examples.dll + C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.ProGrids.dll C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.RenderPipelines.Core.Editor.dll - - - C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.Timeline.dll - - - C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Unity.Timeline.Editor.dll - - - C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Juce.ImplementationSelector.Runtime.dll - - - C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Juce.ImplementationSelector.Editor.dll - - - C:/Projects/Unity/hack-and-slash-framework/Library/ScriptAssemblies/Juce.ImplementationSelector.Examples.dll diff --git a/Assets/HnSF/Editor/State/StateTimelineEditor.cs b/Assets/HnSF/Editor/State/StateTimelineEditor.cs index 88e3fa2b..abf0bf78 100644 --- a/Assets/HnSF/Editor/State/StateTimelineEditor.cs +++ b/Assets/HnSF/Editor/State/StateTimelineEditor.cs @@ -14,7 +14,7 @@ public override void OnInspectorGUI() st.totalFrames = (int)(st.duration / (1.0f / 60.0f)); GUILayout.Label($"Total Frames: {st.totalFrames}", EditorStyles.boldLabel); - //base.OnInspectorGUI(); + base.OnInspectorGUI(); } } } \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Fighters/ADV/ADV.prefab b/Assets/HnSF/Samples/TDAction/Fighters/ADV/ADV.prefab index 9d1d9579..a8875863 100644 --- a/Assets/HnSF/Samples/TDAction/Fighters/ADV/ADV.prefab +++ b/Assets/HnSF/Samples/TDAction/Fighters/ADV/ADV.prefab @@ -10,7 +10,7 @@ GameObject: m_Component: - component: {fileID: 5107072908735554658} - component: {fileID: 2309637557716152273} - m_Layer: 0 + m_Layer: 8 m_Name: Visual m_TagString: Untagged m_Icon: {fileID: 0} @@ -92,11 +92,16 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 6164416680294650169} - - component: {fileID: 1199271655} + - component: {fileID: 3204139750782918213} + - component: {fileID: 7070423521996889968} + - component: {fileID: 2446682337119611762} + - component: {fileID: -473810435442433682} - component: {fileID: 1199271652} - component: {fileID: 1199271654} - component: {fileID: 1199271653} - m_Layer: 0 + - component: {fileID: 7836252275299144723} + - component: {fileID: -7738538331312116158} + m_Layer: 8 m_Name: ADV m_TagString: Untagged m_Icon: {fileID: 0} @@ -118,7 +123,71 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1199271655 +--- !u!50 &3204139750782918213 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3890948787661181835} + m_BodyType: 1 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 4 +--- !u!61 &7070423521996889968 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3890948787661181835} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0.875} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.8, y: 1.75} + m_EdgeRadius: 0 +--- !u!320 &2446682337119611762 +PlayableDirector: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3890948787661181835} + m_Enabled: 1 + serializedVersion: 3 + m_PlayableAsset: {fileID: 0} + m_InitialState: 0 + m_WrapMode: 0 + m_DirectorUpdateMode: 3 + m_InitialTime: 0 + m_SceneBindings: [] + m_ExposedReferences: + m_References: [] +--- !u!114 &-473810435442433682 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -127,13 +196,18 @@ MonoBehaviour: m_GameObject: {fileID: 3890948787661181835} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e05af61388a47ce4a91fde260b3186b8, type: 3} + m_Script: {fileID: 11500000, guid: 749ebc8d426ef24429d98e355d5b524c, type: 3} m_Name: m_EditorClassIdentifier: _stateManager: {fileID: 1199271652} _combatManager: {fileID: 1199271654} _physicsManager: {fileID: 1199271653} + _inputManager: {fileID: 7836252275299144723} + gameManager: {fileID: 0} visual: {fileID: 2309637557716152273} + coreStates: + - state: 1 + timeline: {fileID: 11400000, guid: ac16896d22462c7408da5d5d0885ac9d, type: 2} --- !u!114 &1199271652 MonoBehaviour: m_ObjectHideFlags: 0 @@ -146,6 +220,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: da649541cf321194e8b82f361c458e60, type: 3} m_Name: m_EditorClassIdentifier: + director: {fileID: 2446682337119611762} + fighterManager: {fileID: -473810435442433682} --- !u!114 &1199271654 MonoBehaviour: m_ObjectHideFlags: 0 @@ -170,3 +246,1103 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c755a0a27465db8498800adc3146bd94, type: 3} m_Name: m_EditorClassIdentifier: + worldCollider: {fileID: 7070423521996889968} + cc: {fileID: -7738538331312116158} +--- !u!114 &7836252275299144723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3890948787661181835} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ab0b294e2659ae74289ba7599760b0e6, type: 3} + m_Name: + m_EditorClassIdentifier: + manager: {fileID: -473810435442433682} + movement: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} +--- !u!114 &-7738538331312116158 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3890948787661181835} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 27b581bf160cdc44d9abec60c6d7c3d5, type: 3} + m_Name: + m_EditorClassIdentifier: + ignoreOneWayPlatformsThisFrame: 0 + _skinWidth: 0.02 + platformMask: + serializedVersion: 2 + m_Bits: 512 + triggerMask: + serializedVersion: 2 + m_Bits: 0 + oneWayPlatformMask: + serializedVersion: 2 + m_Bits: 0 + slopeLimit: 30 + jumpingThreshold: 0.07 + slopeSpeedMultiplier: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: -90 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 90 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + totalHorizontalRays: 8 + totalVerticalRays: 4 diff --git a/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts.meta b/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts.meta new file mode 100644 index 00000000..65a4b6f4 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4279690e4dc1d474889fc07413d636ff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVEnumStateBinding.cs b/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVEnumStateBinding.cs new file mode 100644 index 00000000..bff67c6e --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVEnumStateBinding.cs @@ -0,0 +1,9 @@ +namespace HnSF.Sample.TDAction +{ + [System.Serializable] + public struct ADVEnumStateBinding + { + public FighterStateEnum state; + public StateTimeline timeline; + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVEnumStateBinding.cs.meta b/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVEnumStateBinding.cs.meta new file mode 100644 index 00000000..7c6690f6 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVEnumStateBinding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d48aecdd3eb9fd24d95cb22753b159f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVManager.cs b/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVManager.cs new file mode 100644 index 00000000..fbc73262 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVManager.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace HnSF.Sample.TDAction +{ + public class ADVManager : FighterManager + { + public EnumStateBinding[] coreStates; + + public override void SimAwake() + { + foreach (var v in coreStates) + { + stateManager.AddState(v.timeline, (int)v.state); + } + + stateManager.ChangeState((int)FighterStateEnum.IDLE); + } + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVManager.cs.meta b/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVManager.cs.meta new file mode 100644 index 00000000..94b2cf8b --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Fighters/ADV/Scripts/ADVManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 749ebc8d426ef24429d98e355d5b524c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Fighters/ADV/States.meta b/Assets/HnSF/Samples/TDAction/Fighters/ADV/States.meta new file mode 100644 index 00000000..431c89f5 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Fighters/ADV/States.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7da89f671b5783a459099927eab24231 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared.meta b/Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared.meta new file mode 100644 index 00000000..14342ce9 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cee6a6858e579204a96b9f61bc7a93b0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared/ADV-Idle.asset b/Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared/ADV-Idle.asset new file mode 100644 index 00000000..b23e22db --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared/ADV-Idle.asset @@ -0,0 +1,128 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8306496220404487545 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 40aa86787b5425249b18778b97430a88, type: 3} + m_Name: Fighter Track + m_EditorClassIdentifier: + m_Version: 3 + m_AnimClip: {fileID: 0} + m_Locked: 0 + m_Muted: 0 + m_CustomPlayableFullTypename: + m_Curves: {fileID: 0} + m_Parent: {fileID: 11400000} + m_Children: [] + m_Clips: + - m_Version: 1 + m_Start: 0.016666666666666666 + m_ClipIn: 0 + m_Asset: {fileID: -6039870183911287914} + m_Duration: 2.9833333333333334 + m_TimeScale: 1 + m_ParentTrack: {fileID: -8306496220404487545} + m_EaseInDuration: 0 + m_EaseOutDuration: 0 + m_BlendInDuration: -1 + m_BlendOutDuration: -1 + m_MixInCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_MixOutCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - 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 + m_BlendInCurveMode: 0 + m_BlendOutCurveMode: 0 + m_ExposedParameterNames: [] + m_AnimationCurves: {fileID: 0} + m_Recordable: 0 + m_PostExtrapolationMode: 0 + m_PreExtrapolationMode: 0 + m_PostExtrapolationTime: 0 + m_PreExtrapolationTime: 0 + m_DisplayName: IncrementFrameAsset + m_Markers: + m_Objects: [] +--- !u!114 &-6039870183911287914 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: db349a1337689a04cab206cbcb47d8a7, type: 3} + m_Name: IncrementFrameAsset + m_EditorClassIdentifier: +--- !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: 40f66a5b733e53543bcb2daa52776331, type: 3} + m_Name: ADV-Idle + m_EditorClassIdentifier: + m_Version: 0 + m_Tracks: + - {fileID: -8306496220404487545} + m_FixedDuration: 3 + m_EditorSettings: + m_Framerate: 60 + m_ScenePreview: 1 + m_DurationMode: 1 + m_MarkerTrack: {fileID: 0} + totalFrames: 179 diff --git a/Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared/ADV-Idle.asset.meta b/Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared/ADV-Idle.asset.meta new file mode 100644 index 00000000..15d36743 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Fighters/ADV/States/Shared/ADV-Idle.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ac16896d22462c7408da5d5d0885ac9d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/CharacterController2D.cs b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/CharacterController2D.cs new file mode 100644 index 00000000..59cdfe07 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/CharacterController2D.cs @@ -0,0 +1,578 @@ +#define DEBUG_CC2D_RAYS +using UnityEngine; +using System; +using System.Collections.Generic; + +namespace HnSF.Sample.TDAction { + // https://github.com/prime31/CharacterController2D + [RequireComponent( typeof( BoxCollider2D ), typeof( Rigidbody2D ) )] + public class CharacterController2D : MonoBehaviour + { + #region internal types + + struct CharacterRaycastOrigins + { + public Vector3 topLeft; + public Vector3 bottomRight; + public Vector3 bottomLeft; + } + + public class CharacterCollisionState2D + { + public bool right; + public bool left; + public bool above; + public bool below; + public bool becameGroundedThisFrame; + public bool wasGroundedLastFrame; + public bool movingDownSlope; + public float slopeAngle; + + + public bool hasCollision() + { + return below || right || left || above; + } + + + public void reset() + { + right = left = above = below = becameGroundedThisFrame = movingDownSlope = false; + slopeAngle = 0f; + } + + + public override string ToString() + { + return string.Format( "[CharacterCollisionState2D] r: {0}, l: {1}, a: {2}, b: {3}, movingDownSlope: {4}, angle: {5}, wasGroundedLastFrame: {6}, becameGroundedThisFrame: {7}", + right, left, above, below, movingDownSlope, slopeAngle, wasGroundedLastFrame, becameGroundedThisFrame ); + } + } + + #endregion + + + #region events, properties and fields + + public event Action onControllerCollidedEvent; + public event Action onTriggerEnterEvent; + public event Action onTriggerStayEvent; + public event Action onTriggerExitEvent; + + + /// + /// when true, one way platforms will be ignored when moving vertically for a single frame + /// + public bool ignoreOneWayPlatformsThisFrame; + + [SerializeField] + [Range( 0.001f, 0.3f )] + float _skinWidth = 0.02f; + + /// + /// defines how far in from the edges of the collider rays are cast from. If cast with a 0 extent it will often result in ray hits that are + /// not desired (for example a foot collider casting horizontally from directly on the surface can result in a hit) + /// + public float skinWidth + { + get { return _skinWidth; } + set + { + _skinWidth = value; + recalculateDistanceBetweenRays(); + } + } + + + /// + /// mask with all layers that the player should interact with + /// + public LayerMask platformMask = 0; + + /// + /// mask with all layers that trigger events should fire when intersected + /// + public LayerMask triggerMask = 0; + + /// + /// mask with all layers that should act as one-way platforms. Note that one-way platforms should always be EdgeCollider2Ds. This is because it does not support being + /// updated anytime outside of the inspector for now. + /// + [SerializeField] + LayerMask oneWayPlatformMask = 0; + + /// + /// the max slope angle that the CC2D can climb + /// + /// The slope limit. + [Range( 0f, 90f )] + public float slopeLimit = 30f; + + /// + /// the threshold in the change in vertical movement between frames that constitutes jumping + /// + /// The jumping threshold. + public float jumpingThreshold = 0.07f; + + + /// + /// curve for multiplying speed based on slope (negative = down slope and positive = up slope) + /// + public AnimationCurve slopeSpeedMultiplier = new AnimationCurve( new Keyframe( -90f, 1.5f ), new Keyframe( 0f, 1f ), new Keyframe( 90f, 0f ) ); + + [Range( 2, 20 )] + public int totalHorizontalRays = 8; + [Range( 2, 20 )] + public int totalVerticalRays = 4; + + + /// + /// this is used to calculate the downward ray that is cast to check for slopes. We use the somewhat arbitrary value 75 degrees + /// to calculate the length of the ray that checks for slopes. + /// + float _slopeLimitTangent = Mathf.Tan( 75f * Mathf.Deg2Rad ); + + + [HideInInspector][NonSerialized] + public new Transform transform; + [HideInInspector][NonSerialized] + public BoxCollider2D boxCollider; + [HideInInspector][NonSerialized] + public Rigidbody2D rigidBody2D; + + [HideInInspector][NonSerialized] + public CharacterCollisionState2D collisionState = new CharacterCollisionState2D(); + [HideInInspector][NonSerialized] + public Vector3 velocity; + public bool isGrounded { get { return collisionState.below; } } + + const float kSkinWidthFloatFudgeFactor = 0.001f; + + #endregion + + + /// + /// holder for our raycast origin corners (TR, TL, BR, BL) + /// + CharacterRaycastOrigins _raycastOrigins; + + /// + /// stores our raycast hit during movement + /// + RaycastHit2D _raycastHit; + + /// + /// stores any raycast hits that occur this frame. we have to store them in case we get a hit moving + /// horizontally and vertically so that we can send the events after all collision state is set + /// + List _raycastHitsThisFrame = new List( 2 ); + + // horizontal/vertical movement data + float _verticalDistanceBetweenRays; + float _horizontalDistanceBetweenRays; + + // we use this flag to mark the case where we are travelling up a slope and we modified our delta.y to allow the climb to occur. + // the reason is so that if we reach the end of the slope we can make an adjustment to stay grounded + bool _isGoingUpSlope = false; + + + #region Monobehaviour + + public void Awake() + { + // add our one-way platforms to our normal platform mask so that we can land on them from above + platformMask |= oneWayPlatformMask; + + // cache some components + transform = GetComponent(); + boxCollider = GetComponent(); + rigidBody2D = GetComponent(); + + // here, we trigger our properties that have setters with bodies + skinWidth = _skinWidth; + + // we want to set our CC2D to ignore all collision layers except what is in our triggerMask + for( var i = 0; i < 32; i++ ) + { + // see if our triggerMask contains this layer and if not ignore it + if( ( triggerMask.value & 1 << i ) == 0 ) + Physics2D.IgnoreLayerCollision( gameObject.layer, i ); + } + } + + + public void OnTriggerEnter2D( Collider2D col ) + { + if( onTriggerEnterEvent != null ) + onTriggerEnterEvent( col ); + } + + + public void OnTriggerStay2D( Collider2D col ) + { + if( onTriggerStayEvent != null ) + onTriggerStayEvent( col ); + } + + + public void OnTriggerExit2D( Collider2D col ) + { + if( onTriggerExitEvent != null ) + onTriggerExitEvent( col ); + } + + #endregion + + + [System.Diagnostics.Conditional( "DEBUG_CC2D_RAYS" )] + void DrawRay( Vector3 start, Vector3 dir, Color color ) + { + Debug.DrawRay( start, dir, color ); + } + + + #region Public + + /// + /// + /// attempts to move the character to position + deltaMovement. Any colliders in the way will cause the movement to + /// stop when run into. + /// + /// Delta movement. + public void move( Vector3 deltaMovement ) + { + deltaMovement *= Time.fixedDeltaTime; + // save off our current grounded state which we will use for wasGroundedLastFrame and becameGroundedThisFrame + collisionState.wasGroundedLastFrame = collisionState.below; + + // clear our state + collisionState.reset(); + _raycastHitsThisFrame.Clear(); + _isGoingUpSlope = false; + + primeRaycastOrigins(); + + + // first, we check for a slope below us before moving + // only check slopes if we are going down and grounded + if( deltaMovement.y < 0f && collisionState.wasGroundedLastFrame ) + handleVerticalSlope( ref deltaMovement ); + + // now we check movement in the horizontal dir + if( deltaMovement.x != 0f ) + moveHorizontally( ref deltaMovement ); + + // next, check movement in the vertical dir + if( deltaMovement.y != 0f ) + moveVertically( ref deltaMovement ); + + // move then update our state + deltaMovement.z = 0; + transform.Translate( deltaMovement, Space.World ); + + // only calculate velocity if we have a non-zero deltaTime + //if( Time.deltaTime > 0f ) + // velocity = deltaMovement / Time.fixed + velocity = deltaMovement; + + // set our becameGrounded state based on the previous and current collision state + if( !collisionState.wasGroundedLastFrame && collisionState.below ) + collisionState.becameGroundedThisFrame = true; + + // if we are going up a slope we artificially set a y velocity so we need to zero it out here + if( _isGoingUpSlope ) + velocity.y = 0; + + // send off the collision events if we have a listener + if( onControllerCollidedEvent != null ) + { + for( var i = 0; i < _raycastHitsThisFrame.Count; i++ ) + onControllerCollidedEvent( _raycastHitsThisFrame[i] ); + } + + ignoreOneWayPlatformsThisFrame = false; + } + + + /// + /// moves directly down until grounded + /// + public void warpToGrounded() + { + do + { + move( new Vector3( 0, -1f, 0 ) ); + } while( !isGrounded ); + } + + + /// + /// this should be called anytime you have to modify the BoxCollider2D at runtime. It will recalculate the distance between the rays used for collision detection. + /// It is also used in the skinWidth setter in case it is changed at runtime. + /// + public void recalculateDistanceBetweenRays() + { + // figure out the distance between our rays in both directions + // horizontal + var colliderUseableHeight = boxCollider.size.y * Mathf.Abs( transform.localScale.y ) - ( 2f * _skinWidth ); + _verticalDistanceBetweenRays = colliderUseableHeight / ( totalHorizontalRays - 1 ); + + // vertical + var colliderUseableWidth = boxCollider.size.x * Mathf.Abs( transform.localScale.x ) - ( 2f * _skinWidth ); + _horizontalDistanceBetweenRays = colliderUseableWidth / ( totalVerticalRays - 1 ); + } + + #endregion + + + #region Movement Methods + + /// + /// resets the raycastOrigins to the current extents of the box collider inset by the skinWidth. It is inset + /// to avoid casting a ray from a position directly touching another collider which results in wonky normal data. + /// + /// Future position. + /// Delta movement. + void primeRaycastOrigins() + { + // our raycasts need to be fired from the bounds inset by the skinWidth + var modifiedBounds = boxCollider.bounds; + modifiedBounds.Expand( -2f * _skinWidth ); + + _raycastOrigins.topLeft = new Vector2( modifiedBounds.min.x, modifiedBounds.max.y ); + _raycastOrigins.bottomRight = new Vector2( modifiedBounds.max.x, modifiedBounds.min.y ); + _raycastOrigins.bottomLeft = modifiedBounds.min; + } + + + /// + /// we have to use a bit of trickery in this one. The rays must be cast from a small distance inside of our + /// collider (skinWidth) to avoid zero distance rays which will get the wrong normal. Because of this small offset + /// we have to increase the ray distance skinWidth then remember to remove skinWidth from deltaMovement before + /// actually moving the player + /// + void moveHorizontally( ref Vector3 deltaMovement ) + { + var isGoingRight = deltaMovement.x > 0; + var rayDistance = Mathf.Abs( deltaMovement.x ) + _skinWidth; + var rayDirection = isGoingRight ? Vector2.right : -Vector2.right; + var initialRayOrigin = isGoingRight ? _raycastOrigins.bottomRight : _raycastOrigins.bottomLeft; + + for( var i = 0; i < totalHorizontalRays; i++ ) + { + var ray = new Vector2( initialRayOrigin.x, initialRayOrigin.y + i * _verticalDistanceBetweenRays ); + + DrawRay( ray, rayDirection * rayDistance, Color.red ); + + // if we are grounded we will include oneWayPlatforms only on the first ray (the bottom one). this will allow us to + // walk up sloped oneWayPlatforms + if( i == 0 && collisionState.wasGroundedLastFrame ) + _raycastHit = Physics2D.Raycast( ray, rayDirection, rayDistance, platformMask ); + else + _raycastHit = Physics2D.Raycast( ray, rayDirection, rayDistance, platformMask & ~oneWayPlatformMask ); + + if( _raycastHit ) + { + // the bottom ray can hit a slope but no other ray can so we have special handling for these cases + if( i == 0 && handleHorizontalSlope( ref deltaMovement, Vector2.Angle( _raycastHit.normal, Vector2.up ) ) ) + { + _raycastHitsThisFrame.Add( _raycastHit ); + // if we weren't grounded last frame, that means we're landing on a slope horizontally. + // this ensures that we stay flush to that slope + if ( !collisionState.wasGroundedLastFrame ) + { + float flushDistance = Mathf.Sign( deltaMovement.x ) * ( _raycastHit.distance - skinWidth ); + transform.Translate( new Vector2( flushDistance, 0 ) ); + } + break; + } + + // set our new deltaMovement and recalculate the rayDistance taking it into account + deltaMovement.x = _raycastHit.point.x - ray.x; + rayDistance = Mathf.Abs( deltaMovement.x ); + + // remember to remove the skinWidth from our deltaMovement + if( isGoingRight ) + { + deltaMovement.x -= _skinWidth; + collisionState.right = true; + } + else + { + deltaMovement.x += _skinWidth; + collisionState.left = true; + } + + _raycastHitsThisFrame.Add( _raycastHit ); + + // we add a small fudge factor for the float operations here. if our rayDistance is smaller + // than the width + fudge bail out because we have a direct impact + if( rayDistance < _skinWidth + kSkinWidthFloatFudgeFactor ) + break; + } + } + } + + + /// + /// handles adjusting deltaMovement if we are going up a slope. + /// + /// true, if horizontal slope was handled, false otherwise. + /// Delta movement. + /// Angle. + bool handleHorizontalSlope( ref Vector3 deltaMovement, float angle ) + { + // disregard 90 degree angles (walls) + if( Mathf.RoundToInt( angle ) == 90 ) + return false; + + // if we can walk on slopes and our angle is small enough we need to move up + if( angle < slopeLimit ) + { + // we only need to adjust the deltaMovement if we are not jumping + // TODO: this uses a magic number which isn't ideal! The alternative is to have the user pass in if there is a jump this frame + if( deltaMovement.y < jumpingThreshold ) + { + // apply the slopeModifier to slow our movement up the slope + var slopeModifier = slopeSpeedMultiplier.Evaluate( angle ); + deltaMovement.x *= slopeModifier; + + // we dont set collisions on the sides for this since a slope is not technically a side collision. + // smooth y movement when we climb. we make the y movement equivalent to the actual y location that corresponds + // to our new x location using our good friend Pythagoras + deltaMovement.y = Mathf.Abs( Mathf.Tan( angle * Mathf.Deg2Rad ) * deltaMovement.x ); + var isGoingRight = deltaMovement.x > 0; + + // safety check. we fire a ray in the direction of movement just in case the diagonal we calculated above ends up + // going through a wall. if the ray hits, we back off the horizontal movement to stay in bounds. + var ray = isGoingRight ? _raycastOrigins.bottomRight : _raycastOrigins.bottomLeft; + RaycastHit2D raycastHit; + if( collisionState.wasGroundedLastFrame ) + raycastHit = Physics2D.Raycast( ray, deltaMovement.normalized, deltaMovement.magnitude, platformMask ); + else + raycastHit = Physics2D.Raycast( ray, deltaMovement.normalized, deltaMovement.magnitude, platformMask & ~oneWayPlatformMask ); + + if( raycastHit ) + { + // we crossed an edge when using Pythagoras calculation, so we set the actual delta movement to the ray hit location + deltaMovement = (Vector3)raycastHit.point - ray; + if( isGoingRight ) + deltaMovement.x -= _skinWidth; + else + deltaMovement.x += _skinWidth; + } + + _isGoingUpSlope = true; + collisionState.below = true; + collisionState.slopeAngle = -angle; + } + } + else // too steep. get out of here + { + deltaMovement.x = 0; + } + + return true; + } + + + void moveVertically( ref Vector3 deltaMovement ) + { + var isGoingUp = deltaMovement.y > 0; + var rayDistance = Mathf.Abs( deltaMovement.y ) + _skinWidth; + var rayDirection = isGoingUp ? Vector2.up : -Vector2.up; + var initialRayOrigin = isGoingUp ? _raycastOrigins.topLeft : _raycastOrigins.bottomLeft; + + // apply our horizontal deltaMovement here so that we do our raycast from the actual position we would be in if we had moved + initialRayOrigin.x += deltaMovement.x; + + // if we are moving up, we should ignore the layers in oneWayPlatformMask + var mask = platformMask; + if( ( isGoingUp && !collisionState.wasGroundedLastFrame ) || ignoreOneWayPlatformsThisFrame ) + mask &= ~oneWayPlatformMask; + + for( var i = 0; i < totalVerticalRays; i++ ) + { + var ray = new Vector2( initialRayOrigin.x + i * _horizontalDistanceBetweenRays, initialRayOrigin.y ); + + DrawRay( ray, rayDirection * rayDistance, Color.red ); + _raycastHit = Physics2D.Raycast( ray, rayDirection, rayDistance, mask ); + if( _raycastHit ) + { + // set our new deltaMovement and recalculate the rayDistance taking it into account + deltaMovement.y = _raycastHit.point.y - ray.y; + rayDistance = Mathf.Abs( deltaMovement.y ); + + // remember to remove the skinWidth from our deltaMovement + if( isGoingUp ) + { + deltaMovement.y -= _skinWidth; + collisionState.above = true; + } + else + { + deltaMovement.y += _skinWidth; + collisionState.below = true; + } + + _raycastHitsThisFrame.Add( _raycastHit ); + + // this is a hack to deal with the top of slopes. if we walk up a slope and reach the apex we can get in a situation + // where our ray gets a hit that is less then skinWidth causing us to be ungrounded the next frame due to residual velocity. + if( !isGoingUp && deltaMovement.y > 0.00001f ) + _isGoingUpSlope = true; + + // we add a small fudge factor for the float operations here. if our rayDistance is smaller + // than the width + fudge bail out because we have a direct impact + if( rayDistance < _skinWidth + kSkinWidthFloatFudgeFactor ) + break; + } + } + } + + + /// + /// checks the center point under the BoxCollider2D for a slope. If it finds one then the deltaMovement is adjusted so that + /// the player stays grounded and the slopeSpeedModifier is taken into account to speed up movement. + /// + /// Delta movement. + private void handleVerticalSlope( ref Vector3 deltaMovement ) + { + // slope check from the center of our collider + var centerOfCollider = ( _raycastOrigins.bottomLeft.x + _raycastOrigins.bottomRight.x ) * 0.5f; + var rayDirection = -Vector2.up; + + // the ray distance is based on our slopeLimit + var slopeCheckRayDistance = _slopeLimitTangent * ( _raycastOrigins.bottomRight.x - centerOfCollider ); + + var slopeRay = new Vector2( centerOfCollider, _raycastOrigins.bottomLeft.y ); + DrawRay( slopeRay, rayDirection * slopeCheckRayDistance, Color.yellow ); + _raycastHit = Physics2D.Raycast( slopeRay, rayDirection, slopeCheckRayDistance, platformMask ); + if( _raycastHit ) + { + // bail out if we have no slope + var angle = Vector2.Angle( _raycastHit.normal, Vector2.up ); + if( angle == 0 ) + return; + + // we are moving down the slope if our normal and movement direction are in the same x direction + var isMovingDownSlope = Mathf.Sign( _raycastHit.normal.x ) == Mathf.Sign( deltaMovement.x ); + if( isMovingDownSlope ) + { + // going down we want to speed up in most cases so the slopeSpeedMultiplier curve should be > 1 for negative angles + var slopeModifier = slopeSpeedMultiplier.Evaluate( -angle ); + // we add the extra downward movement here to ensure we "stick" to the surface below + deltaMovement.y += _raycastHit.point.y - slopeRay.y - skinWidth; + deltaMovement = new Vector3( 0, deltaMovement.y, 0 ) + + ( Quaternion.AngleAxis( -angle, Vector3.forward ) * new Vector3( deltaMovement.x * slopeModifier, 0, 0 ) ); + collisionState.movingDownSlope = true; + collisionState.slopeAngle = angle; + } + } + } + + #endregion + + } + +} diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/CharacterController2D.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/CharacterController2D.cs.meta new file mode 100644 index 00000000..7db0a105 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/CharacterController2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27b581bf160cdc44d9abec60c6d7c3d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/EnumStateBinding.cs b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/EnumStateBinding.cs new file mode 100644 index 00000000..13e07856 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/EnumStateBinding.cs @@ -0,0 +1,9 @@ +namespace HnSF.Sample.TDAction +{ + [System.Serializable] + public struct EnumStateBinding + { + public FighterStateEnum state; + public StateTimeline timeline; + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/EnumStateBinding.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/EnumStateBinding.cs.meta new file mode 100644 index 00000000..b81b76b7 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/EnumStateBinding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0908e51173470749a1fe5374f87ba31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/FighterStateEnum.cs b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/FighterStateEnum.cs new file mode 100644 index 00000000..b16b75df --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/FighterStateEnum.cs @@ -0,0 +1,15 @@ +namespace HnSF.Sample.TDAction +{ + public enum FighterStateEnum + { + NULL = 0, + IDLE, + CROUCH, + WALK, + DASH, + RUN, + JUMP_SQUAT, + JUMP, + FALL + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/FighterStateEnum.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/FighterStateEnum.cs.meta new file mode 100644 index 00000000..fca69313 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/FighterStateEnum.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57cb86a64252718409c88e81a6385dce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterInputManager.cs b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterInputManager.cs new file mode 100644 index 00000000..1ef37788 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterInputManager.cs @@ -0,0 +1,75 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +namespace HnSF.Sample.TDAction +{ + public class FighterInputManager : MonoBehaviour + { + public static int inputCapacity = 1024; + public int BufferLimit { get; set; } = 0; + + [SerializeField] private FighterManager manager; + + [HideInInspector] public Vector2[] movement = new Vector2[inputCapacity]; + [HideInInspector] public InputButtonData[] lightAtk = new InputButtonData[inputCapacity]; + [HideInInspector] public InputButtonData[] jump = new InputButtonData[inputCapacity]; + [HideInInspector] public InputButtonData[] dash = new InputButtonData[inputCapacity]; + [HideInInspector] public InputButtonData[] lockOn = new InputButtonData[inputCapacity]; + + public void FeedInput(int frame, PlayerInputData inputData) + { + movement[frame % inputCapacity] = inputData.movement; + lightAtk[frame % inputCapacity] = new InputButtonData(inputData.lightAtk, lightAtk[(frame-1) % inputCapacity]); + jump[frame % inputCapacity] = new InputButtonData(inputData.jump, jump[(frame-1) % inputCapacity]); + dash[frame % inputCapacity] = new InputButtonData(inputData.dash, dash[(frame-1) % inputCapacity]); + lockOn[frame % inputCapacity] = new InputButtonData(inputData.lockOn, lockOn[(frame-1) % inputCapacity]); + } + + public virtual Vector2 GetMovement(int startOffset = 0) + { + return movement[(manager.Manager.Simulation.Tick - startOffset) % inputCapacity]; + } + + public virtual InputButtonData GetLight(out int buttonOffset, int startOffset = 0, int bufferFrames = 0) + { + return GetButton(ref lightAtk, out buttonOffset, startOffset, bufferFrames); + } + + public virtual InputButtonData GetJump(out int buttonOffset, int startOffset = 0, int bufferFrames = 0) + { + return GetButton(ref jump, out buttonOffset, startOffset, bufferFrames); + } + + public virtual InputButtonData GetDash(out int buttonOffset, int startOffset = 0, int bufferFrames = 0) + { + return GetButton(ref dash, out buttonOffset, startOffset, bufferFrames); + } + + public virtual InputButtonData GetLockOn(out int buttonOffset, int startOffset = 0, int bufferFrames = 0) + { + return GetButton(ref lockOn, out buttonOffset, startOffset, bufferFrames); + } + + protected virtual InputButtonData GetButton(ref InputButtonData[] buttonArray, out int buttonOffset, int startOffset = 0, int bufferFrames = 0) + { + buttonOffset = startOffset; + int currentTick = (int)manager.Manager.Simulation.Tick; + for(int i = 0; i < bufferFrames; i++) + { + if (BufferLimit >= currentTick - (bufferFrames + i)) + { + break; + } + + if (buttonArray[(currentTick - (bufferFrames + i)) % inputCapacity].firstPress) + { + buttonOffset = startOffset + i; + return buttonArray[(currentTick - (bufferFrames + i)) % inputCapacity]; + } + } + return buttonArray[(currentTick - startOffset) % inputCapacity]; + } + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterInputManager.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterInputManager.cs.meta new file mode 100644 index 00000000..e62c9883 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterInputManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab0b294e2659ae74289ba7599760b0e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterManager.cs b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterManager.cs index c30c10fe..15a401eb 100644 --- a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterManager.cs +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterManager.cs @@ -5,7 +5,7 @@ namespace HnSF.Sample.TDAction { - public class FighterManager : MonoBehaviour, IFighterBase + public class FighterManager : SimulationBehaviour, IFighterBase { public IFighterCombatManager combatManager { @@ -19,16 +19,44 @@ public IFighterPhysicsManager physicsManager { get { return _physicsManager; } } + + public FighterInputManager inputManager + { + get { return inputManager; } + } [SerializeField] private FighterStateManager _stateManager; [SerializeField] private FighterCombatManager _combatManager; [SerializeField] private FighterPhysicsManager _physicsManager; + [SerializeField] private FighterInputManager _inputManager; public SpriteRenderer visual; + + public virtual void ResetPreview() + { + transform.position = Vector3.zero; + transform.eulerAngles = Vector3.zero; + } + public override void SimUpdate() + { + base.SimUpdate(); + if (combatManager.HitStop == 0) + { + _physicsManager.CheckIfGrounded(); + _stateManager.Tick(); + physicsManager.Tick(); + } + else + { + + } + } + public GameObject GetGameObject() { return gameObject; } + } } \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterPhysicsManager.cs b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterPhysicsManager.cs index bc506a4a..42a5eab1 100644 --- a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterPhysicsManager.cs +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterPhysicsManager.cs @@ -7,31 +7,110 @@ namespace HnSF.Sample.TDAction { public class FighterPhysicsManager : MonoBehaviour, IFighterPhysicsManager { - public bool IsGrounded { get; } = false; - + private const float decelerationFactor = 0.97f; + public bool IsGrounded { get; private set; } = false; + public Vector2 forceMovement { get; set; } = Vector2.zero; + public Vector2 forceDamage { get; set; } = Vector2.zero; + + public BoxCollider2D worldCollider; + public CharacterController2D cc; + public void Tick() { - throw new System.NotImplementedException(); + cc.move(GetOverallForce()); + } + + public virtual Vector2 GetOverallForce() + { + return forceMovement + forceDamage; } public void Freeze() { - throw new System.NotImplementedException(); + cc.move(Vector2.zero); } public void ResetForces() { - throw new System.NotImplementedException(); + forceMovement = Vector2.zero; + forceDamage = Vector2.zero; } public void CheckIfGrounded() { - throw new System.NotImplementedException(); + IsGrounded = cc.isGrounded; } public void SetGrounded(bool value) { - throw new System.NotImplementedException(); + IsGrounded = value; + } + + public virtual void ApplyGravity() + { + /* + FighterManager m = ((FighterManager)manager); + float maxFallSpeed = m.CombatManager.HitStun > 0 ? m.statManager.CurrentStats.hitstunMaxFallSpeed.GetCurrentValue() + : m.statManager.CurrentStats.maxFallSpeed.GetCurrentValue(); + float gravity = m.CombatManager.HitStun > 0 ? m.statManager.CurrentStats.hitstunGravity.GetCurrentValue() + : m.statManager.CurrentStats.gravity.GetCurrentValue(); + HandleGravity(maxFallSpeed, gravity, GravityScale);*/ + } + + public virtual void ApplyGravity(float maxFallSpeed, float gravity, float gravityScale) + { + Vector2 tempMovement = this.forceMovement; + if (tempMovement.y > -(maxFallSpeed)) + { + tempMovement.y -= gravity * gravityScale; + if (tempMovement.y < -(maxFallSpeed)) + { + tempMovement.y = -maxFallSpeed; + } + } + else if (tempMovement.y < -(maxFallSpeed)) + { + tempMovement.y *= decelerationFactor; + } + + this.forceMovement = tempMovement; + } + + public virtual void ApplyMovementFriction(float friction = 1) + { + Vector2 tempMovement = forceMovement; + tempMovement.x = ApplyFriction(forceMovement.x, Mathf.Abs(friction)); + forceMovement = tempMovement; + } + + protected virtual float ApplyFriction(float value, float friction) + { + if (value > 0) + { + value -= friction; + if (value < 0) + { + value = 0; + } + } + else if (value < 0) + { + value += friction; + if (value > 0) + { + value = 0; + } + } + return value; + } + + public virtual void RedirectInertia(float forceMovementX, Vector2 movementInput) + { + float redirectedMovement = Mathf.Sign(movementInput.x) + * forceMovementX; + var tmpMovement = this.forceMovement; + tmpMovement.x = redirectedMovement; + forceMovement = tmpMovement; } } } \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterStateManager.cs b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterStateManager.cs index 5c6d05ad..eb67db48 100644 --- a/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterStateManager.cs +++ b/Assets/HnSF/Samples/TDAction/Scripts/Fighter/Managers/FighterStateManager.cs @@ -1,18 +1,51 @@ +using System; using System.Collections; using System.Collections.Generic; using HnSF.Fighters; using UnityEngine; +using UnityEngine.Playables; namespace HnSF.Sample.TDAction { public class FighterStateManager : MonoBehaviour, IFighterStateManager { - public int CurrentState { get; } = 0; - public int CurrentStateFrame { get; } = 0; + public int CurrentState + { + get { return currentState; } + } + public int CurrentStateFrame + { + get { return currentStateFrame; } + } + + protected Dictionary states = new Dictionary(); + public PlayableDirector director; + + private bool markedForStateChange = false; + private int nextState = 0; + public FighterManager fighterManager; + + public int currentState = 0; + public int currentStateFrame = 0; - public void AddState(StateTimeline state, int stateNumber) + private void Awake() { - throw new System.NotImplementedException(); + director.timeUpdateMode = DirectorUpdateMode.Manual; + } + + public void Tick() + { + if (markedForStateChange) + { + ChangeState(nextState, 0, true); + } + if (CurrentState == 0) return; + director.Evaluate(); + } + + public void AddState(HnSF.StateTimeline state, int stateNumber) + { + states.Add((int)stateNumber, (StateTimeline)state); } public void RemoveState(int stateNumber) @@ -20,24 +53,68 @@ public void RemoveState(int stateNumber) throw new System.NotImplementedException(); } + public void MarkForStateChange(int nextState) + { + markedForStateChange = true; + this.nextState = nextState; + } + public bool ChangeState(int state, int stateFrame = 0, bool callOnInterrupt = true) { - throw new System.NotImplementedException(); + markedForStateChange = false; + int oldState = CurrentState; + int oldStateFrame = CurrentStateFrame; + + if(callOnInterrupt && oldState != 0) + { + SetFrame(states[CurrentState].totalFrames); + director.Evaluate(); + } + + currentStateFrame = stateFrame; + currentState = state; + if(CurrentStateFrame == 0) + { + InitState(); + SetFrame(1); + } + + return true; + } + + public void InitState() + { + if (CurrentState == 0) + { + director.playableAsset = null; + return; + } + + director.playableAsset = states[CurrentState]; + foreach (var pAO in director.playableAsset.outputs) + { + director.SetGenericBinding(pAO.sourceObject, fighterManager); + } + director.Play(); + SetFrame(0); + director.Evaluate(); } - public StateTimeline GetState(int state) + public HnSF.StateTimeline GetState(int state) { - throw new System.NotImplementedException(); + return states[state]; } public void SetFrame(int frame) { - throw new System.NotImplementedException(); + currentStateFrame = frame; + director.time = (float)CurrentStateFrame * fighterManager.Manager.Simulation.TickRate; } public void IncrementFrame() { - throw new System.NotImplementedException(); + currentStateFrame++; + director.time = (float)CurrentStateFrame * fighterManager.Manager.Simulation.TickRate; } } } \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Input.meta b/Assets/HnSF/Samples/TDAction/Scripts/Input.meta new file mode 100644 index 00000000..cd1a886e --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Input.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 438197b373f490746a145cd2cbdfdae5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Input/InputButtonData.cs b/Assets/HnSF/Samples/TDAction/Scripts/Input/InputButtonData.cs new file mode 100644 index 00000000..bd3878d8 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Input/InputButtonData.cs @@ -0,0 +1,16 @@ +namespace HnSF.Sample.TDAction +{ + public struct InputButtonData + { + public bool isDown; + public bool firstPress; + public bool released; + + public InputButtonData(bool value, InputButtonData previousFrame) + { + isDown = value; + firstPress = value == true && (previousFrame.isDown == false) ? true : false; + released = value == false && previousFrame.isDown == true ? true : false; + } + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Input/InputButtonData.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/Input/InputButtonData.cs.meta new file mode 100644 index 00000000..2d813f0d --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Input/InputButtonData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07250a28f445c9d44b8c83fea9ca4947 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Input/PlayerInputData.cs b/Assets/HnSF/Samples/TDAction/Scripts/Input/PlayerInputData.cs new file mode 100644 index 00000000..80bf2c58 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Input/PlayerInputData.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace HnSF.Sample.TDAction +{ + public struct PlayerInputData + { + public Vector2 movement; + public bool lightAtk; + public bool jump; + public bool dash; + public bool lockOn; + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Input/PlayerInputData.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/Input/PlayerInputData.cs.meta new file mode 100644 index 00000000..2d202ba1 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Input/PlayerInputData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69b47c5115083054c8c7cbfd8db6ec6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Managers/BootLoader.cs b/Assets/HnSF/Samples/TDAction/Scripts/Managers/BootLoader.cs index 61f89b09..e31418cb 100644 --- a/Assets/HnSF/Samples/TDAction/Scripts/Managers/BootLoader.cs +++ b/Assets/HnSF/Samples/TDAction/Scripts/Managers/BootLoader.cs @@ -1,18 +1,17 @@ +using System; using System.Collections; using System.Collections.Generic; using UnityEngine; -public class BootLoader : MonoBehaviour +namespace HnSF.Sample.TDAction { - // Start is called before the first frame update - void Start() + public class BootLoader : MonoBehaviour { + public GameManager gameManager; + private void Awake() + { + gameManager.Initialize(); + } } - - // Update is called once per frame - void Update() - { - - } -} +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Managers/GameManager.cs b/Assets/HnSF/Samples/TDAction/Scripts/Managers/GameManager.cs new file mode 100644 index 00000000..538abfd3 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Managers/GameManager.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace HnSF.Sample.TDAction +{ + public class GameManager : MonoBehaviour + { + public SimulationManager Simulation { get; } = new SimulationManager(); + + public FighterManager fighterPrefab; + + public Transform playerSpawn; + public Transform[] cpuSpawns; + + public FighterManager[] players; + public FighterManager[] cpus; + + private bool initialized = false; + + public void Initialize() + { + Simulation.gameManager = this; + players = new FighterManager[1]; + cpus = new FighterManager[cpuSpawns.Length]; + SetupPlayer(); + SetupCPUs(); + initialized = true; + } + + private void FixedUpdate() + { + if (!initialized) return; + Simulation.Increment(); + } + + private void SetupPlayer() + { + players[0] = GameObject.Instantiate(fighterPrefab, playerSpawn.position, Quaternion.identity); + players[0].name = $"P0.{players[0].name}"; + Simulation.RegisterObject(players[0]); + } + + private void SetupCPUs() + { + for (int i = 0; i < cpus.Length; i++) + { + cpus[i] = GameObject.Instantiate(fighterPrefab, cpuSpawns[i].position, Quaternion.identity); + cpus[i].name = $"CPU{i}.{cpus[i].name}"; + Simulation.RegisterObject(cpus[i]); + } + } + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Managers/GameManager.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/Managers/GameManager.cs.meta new file mode 100644 index 00000000..bb83ca0d --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Managers/GameManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 376b34e2bb54cc542a562d5a397af1db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Simulation.meta b/Assets/HnSF/Samples/TDAction/Scripts/Simulation.meta new file mode 100644 index 00000000..0c0de5be --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Simulation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44455c6da8953d94e9249aa674aab50e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Simulation/ISimulationObject.cs b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/ISimulationObject.cs new file mode 100644 index 00000000..9e5ad904 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/ISimulationObject.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace HnSF.Sample.TDAction +{ + public interface ISimulationObject + { + public GameManager Manager { get; } + + public void SimInitialize(GameManager gameManager); + public void SimAwake(); + public void SimUpdate(); + public void SimLateUpdate(); + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Simulation/ISimulationObject.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/ISimulationObject.cs.meta new file mode 100644 index 00000000..f1b7d5af --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/ISimulationObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a016c50c52b48db48b84beb0128217a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationBehaviour.cs b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationBehaviour.cs new file mode 100644 index 00000000..e6126b39 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationBehaviour.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using HnSF.Sample.TDAction; +using UnityEngine; + +public class SimulationBehaviour : MonoBehaviour, ISimulationObject +{ + public GameManager Manager + { + get { return manager; } + } + private GameManager manager; + + public void SimInitialize(GameManager gameManager) + { + manager = gameManager; + } + + public virtual void SimAwake() + { + + } + + public virtual void SimUpdate() + { + + } + + public virtual void SimLateUpdate() + { + + } +} diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationBehaviour.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationBehaviour.cs.meta new file mode 100644 index 00000000..5f514d4e --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c89ce9a24d35af8489e3df924f971c33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationManager.cs b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationManager.cs new file mode 100644 index 00000000..d797fa23 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationManager.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace HnSF.Sample.TDAction +{ + public class SimulationManager + { + public float TickRate { get; } = 1.0f / 60.0f; + public uint Tick { get; protected set; } = 0; + + public List simObjects = new List(); + public GameManager gameManager; + + public void Increment() + { + for (int i = 0; i < simObjects.Count; i++) + { + simObjects[i].SimUpdate(); + } + + Physics2D.Simulate(TickRate); + Tick++; + } + + public void RegisterObject(ISimulationObject simObject) + { + simObject.SimInitialize(gameManager); + simObject.SimAwake(); + simObjects.Add(simObject); + } + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationManager.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationManager.cs.meta new file mode 100644 index 00000000..2526ccf9 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/Simulation/SimulationManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c7bca8178e26ad46858b09d361a91e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/State.meta b/Assets/HnSF/Samples/TDAction/Scripts/State.meta new file mode 100644 index 00000000..c2ddae65 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/State.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 833a52d13f8f0f74a888e37b1fbc38ef +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/State/StateTimeline.cs b/Assets/HnSF/Samples/TDAction/Scripts/State/StateTimeline.cs new file mode 100644 index 00000000..ed51f3a7 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/State/StateTimeline.cs @@ -0,0 +1,12 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace HnSF.Sample.TDAction +{ + [CreateAssetMenu(fileName = "StateTimeline", menuName = "TDAction/StateTimeline")] + public class StateTimeline : HnSF.StateTimeline + { + + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/State/StateTimeline.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/State/StateTimeline.cs.meta new file mode 100644 index 00000000..0741cbe0 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/State/StateTimeline.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40f66a5b733e53543bcb2daa52776331 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks.meta b/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks.meta new file mode 100644 index 00000000..ed3cfc05 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4973dcf0cb854e04cade7f0574631380 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameAsset.cs b/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameAsset.cs new file mode 100644 index 00000000..3037ba7d --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameAsset.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using UnityEngine.Playables; + +namespace HnSF.Sample.TDAction +{ + public class IncrementFrameAsset : FighterStateAsset + { + public IncrementFrameBehaviour template; + + public override Playable CreatePlayable(PlayableGraph graph, GameObject owner) + { + var playable = ScriptPlayable.Create(graph, template); + return playable; + } + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameAsset.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameAsset.cs.meta new file mode 100644 index 00000000..772eda12 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameAsset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db349a1337689a04cab206cbcb47d8a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameBehaviour.cs b/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameBehaviour.cs new file mode 100644 index 00000000..2ec57d09 --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameBehaviour.cs @@ -0,0 +1,14 @@ +using UnityEngine.Playables; + +namespace HnSF.Sample.TDAction +{ + public class IncrementFrameBehaviour : FighterStateBehaviour + { + public override void ProcessFrame(Playable playable, FrameData info, object playerData) + { + FighterManager fm = (FighterManager)playerData; + if (fm == null) return; + fm.stateManager.IncrementFrame(); + } + } +} \ No newline at end of file diff --git a/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameBehaviour.cs.meta b/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameBehaviour.cs.meta new file mode 100644 index 00000000..e95bd22b --- /dev/null +++ b/Assets/HnSF/Samples/TDAction/Scripts/State/Tracks/IncrementFrameBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b9b5ce8be551104bbed5821109eb72a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/Samples/TDAction/TDAction.unity b/Assets/HnSF/Samples/TDAction/TDAction.unity index 6c9f9342..634ea266 100644 --- a/Assets/HnSF/Samples/TDAction/TDAction.unity +++ b/Assets/HnSF/Samples/TDAction/TDAction.unity @@ -123,6 +123,36 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &104573235 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 104573236} + m_Layer: 0 + m_Name: SPAWN_cpu_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &104573236 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 104573235} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6.83, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &164404811 GameObject: m_ObjectHideFlags: 0 @@ -135,7 +165,7 @@ GameObject: - component: {fileID: 164404814} - component: {fileID: 164404813} - component: {fileID: 164404812} - m_Layer: 0 + m_Layer: 9 m_Name: Grid m_TagString: Untagged m_Icon: {fileID: 0} @@ -161,7 +191,7 @@ CompositeCollider2D: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 164404811} - m_Enabled: 0 + m_Enabled: 1 m_Density: 1 m_Material: {fileID: 0} m_IsTrigger: 0 @@ -173,7 +203,35 @@ CompositeCollider2D: m_EdgeRadius: 0 m_ColliderPaths: - m_Collider: {fileID: 1203072683} - m_ColliderPaths: [] + m_ColliderPaths: + - - X: -100000041 + Y: -70000100 + - X: 100000041 + Y: -70000100 + - X: 100000100 + Y: -70000041 + - X: 100000100 + Y: 41 + - X: 100000041 + Y: 100 + - X: 89999959 + Y: 100 + - X: 89999900 + Y: 41 + - X: 89999900 + Y: 0 + - X: -89999900 + Y: 0 + - X: -89999900 + Y: 41 + - X: -89999959 + Y: 100 + - X: -100000041 + Y: 100 + - X: -100000100 + Y: 41 + - X: -100000100 + Y: -70000041 m_CompositePaths: m_Paths: [] m_VertexDistance: 0.0005 @@ -212,8 +270,59 @@ Transform: m_Children: - {fileID: 1203072680} m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &248838088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 248838089} + - component: {fileID: 248838090} + m_Layer: 0 + m_Name: Managers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &248838089 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 248838088} + 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: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &248838090 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 248838088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 376b34e2bb54cc542a562d5a397af1db, type: 3} + m_Name: + m_EditorClassIdentifier: + fighterPrefab: {fileID: -473810435442433682, guid: c86ff37a0b6757340bf69deb357c0acd, + type: 3} + playerSpawn: {fileID: 1164036167} + cpuSpawns: + - {fileID: 104573236} + - {fileID: 1588289817} + players: [] + cpus: [] --- !u!1 &357914672 GameObject: m_ObjectHideFlags: 0 @@ -226,6 +335,7 @@ GameObject: - component: {fileID: 357914675} - component: {fileID: 357914674} - component: {fileID: 357914673} + - component: {fileID: 357914677} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -301,7 +411,7 @@ Camera: far clip plane: 1000 field of view: 60 orthographic: 1 - orthographic size: 5 + orthographic size: 4.734375 m_Depth: -1 m_CullingMask: serializedVersion: 2 @@ -329,77 +439,58 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &1199271650 -PrefabInstance: +--- !u!114 &357914677 +MonoBehaviour: m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 3890948787661181835, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_Name - value: ADV - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_RootOrder - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6164416680294650169, guid: c86ff37a0b6757340bf69deb357c0acd, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: c86ff37a0b6757340bf69deb357c0acd, type: 3} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 357914672} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c88f5cead0c0b2a4eb05b5900433f8d1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_AssetsPPU: 64 + m_RefResolutionX: 1280 + m_RefResolutionY: 720 + m_UpscaleRT: 1 + m_PixelSnapping: 0 + m_CropFrameX: 0 + m_CropFrameY: 0 + m_StretchFill: 0 +--- !u!1 &1164036166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1164036167} + m_Layer: 0 + m_Name: SPAWN_player + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1164036167 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1164036166} + 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: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1203072679 GameObject: m_ObjectHideFlags: 0 @@ -412,7 +503,7 @@ GameObject: - component: {fileID: 1203072683} - component: {fileID: 1203072682} - component: {fileID: 1203072681} - m_Layer: 0 + m_Layer: 9 m_Name: Tilemap m_TagString: Untagged m_Icon: {fileID: 0} @@ -489,17 +580,1447 @@ Tilemap: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1203072679} m_Enabled: 1 - m_Tiles: {} + m_Tiles: + - first: {x: -10, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 3, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 4, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 6, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 7, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 8, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 9, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 3, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 4, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 6, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 7, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 8, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 9, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 3, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 4, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 6, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 7, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 8, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 9, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 3, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 4, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 6, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 7, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 8, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 9, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 3, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 4, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 6, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 7, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 8, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 9, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 3, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 4, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 6, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 7, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 8, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 9, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 3, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 4, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 6, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 7, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 8, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 9, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 m_AnimatedTiles: {} - m_TileAssetArray: [] - m_TileSpriteArray: [] - m_TileMatrixArray: [] - m_TileColorArray: [] + m_TileAssetArray: + - m_RefCount: 20 + m_Data: {fileID: 11400000, guid: ca19bd1c009f31b44a2e355d20c1c9ab, type: 2} + - m_RefCount: 120 + m_Data: {fileID: 11400000, guid: 30fe53f35ff9d2f4cabb7f065eae4d64, type: 2} + m_TileSpriteArray: + - m_RefCount: 20 + m_Data: {fileID: 2064775212213459780, guid: e6a417a569f6fa249b93fb3c3b80343c, + type: 3} + - m_RefCount: 120 + m_Data: {fileID: -5687610715606684794, guid: e6a417a569f6fa249b93fb3c3b80343c, + type: 3} + m_TileMatrixArray: + - m_RefCount: 140 + m_Data: + 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_TileColorArray: + - m_RefCount: 140 + m_Data: {r: 1, g: 1, b: 1, a: 1} m_TileObjectToInstantiateArray: [] m_AnimationFrameRate: 1 m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Origin: {x: 0, y: 0, z: 0} - m_Size: {x: 0, y: 0, z: 1} + m_Origin: {x: -10, y: -7, z: 0} + m_Size: {x: 20, y: 7, z: 1} m_TileAnchor: {x: 0.5, y: 0.5, z: 0} m_TileOrientation: 0 m_TileOrientationMatrix: @@ -535,6 +2056,36 @@ TilemapCollider2D: m_Offset: {x: 0, y: 0} m_MaximumTileChangeCount: 1000 m_ExtrusionFactor: 0.00001 +--- !u!1 &1588289816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1588289817} + m_Layer: 0 + m_Name: SPAWN_cpu_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1588289817 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1588289816} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6.83, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1647344775 GameObject: m_ObjectHideFlags: 0 @@ -564,6 +2115,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4bc923102bce4f849862df1ebf0f2921, type: 3} m_Name: m_EditorClassIdentifier: + gameManager: {fileID: 248838090} --- !u!4 &1647344777 Transform: m_ObjectHideFlags: 0 @@ -606,5 +2158,5 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/HnSF/State/FighterStateAsset.cs b/Assets/HnSF/State/FighterStateAsset.cs new file mode 100644 index 00000000..71fc86de --- /dev/null +++ b/Assets/HnSF/State/FighterStateAsset.cs @@ -0,0 +1,14 @@ +using System; +using UnityEngine; +using UnityEngine.Playables; + +namespace HnSF +{ + public class FighterStateAsset : PlayableAsset + { + public override Playable CreatePlayable(PlayableGraph graph, GameObject owner) + { + throw new NotImplementedException($"{name} does not implement CreatePlayable."); + } + } +} \ No newline at end of file diff --git a/Assets/HnSF/State/FighterStateAsset.cs.meta b/Assets/HnSF/State/FighterStateAsset.cs.meta new file mode 100644 index 00000000..93e5ac40 --- /dev/null +++ b/Assets/HnSF/State/FighterStateAsset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d76ecfbc7b4ef94fa3fb72e272428c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/State/FighterStateBehaviour.cs b/Assets/HnSF/State/FighterStateBehaviour.cs new file mode 100644 index 00000000..d4c66fb3 --- /dev/null +++ b/Assets/HnSF/State/FighterStateBehaviour.cs @@ -0,0 +1,11 @@ +using UnityEngine.Playables; + +namespace HnSF.Sample.TDAction +{ + [System.Serializable] + public class FighterStateBehaviour : PlayableBehaviour + { + //[SelectImplementation(typeof(StateConditionBase))] [SerializeField, SerializeReference] + //public StateConditionBase conditon = new StateConditionBoolean(); + } +} \ No newline at end of file diff --git a/Assets/HnSF/State/FighterStateBehaviour.cs.meta b/Assets/HnSF/State/FighterStateBehaviour.cs.meta new file mode 100644 index 00000000..c9883ac1 --- /dev/null +++ b/Assets/HnSF/State/FighterStateBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9f2ed2b6908e9447a533f38685b1aee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HnSF/State/FighterTrack.cs b/Assets/HnSF/State/FighterTrack.cs new file mode 100644 index 00000000..80fb90b2 --- /dev/null +++ b/Assets/HnSF/State/FighterTrack.cs @@ -0,0 +1,10 @@ +using HnSF.Fighters; +using UnityEngine.Timeline; + +namespace HnSF +{ + [System.Serializable] + [TrackBindingType(typeof(IFighterBase))] + [TrackClipType(typeof(FighterStateAsset))] + public class FighterTrack : TrackAsset { } +} \ No newline at end of file diff --git a/Assets/HnSF/State/FighterTrack.cs.meta b/Assets/HnSF/State/FighterTrack.cs.meta new file mode 100644 index 00000000..7934ef20 --- /dev/null +++ b/Assets/HnSF/State/FighterTrack.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40aa86787b5425249b18778b97430a88 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HnSF.Editor.csproj b/HnSF.Editor.csproj index 1fab0940..2a2b3999 100644 --- a/HnSF.Editor.csproj +++ b/HnSF.Editor.csproj @@ -64,8 +64,8 @@ - + C:/Program Files/Unity/2020.3.28f1/Editor/Data/Managed/UnityEngine/UnityEngine.dll diff --git a/HnSF.csproj b/HnSF.csproj index 81b50db5..8cdda3d9 100644 --- a/HnSF.csproj +++ b/HnSF.csproj @@ -60,8 +60,10 @@ + + @@ -69,10 +71,13 @@ + + + @@ -80,15 +85,17 @@ + + - + @@ -96,12 +103,23 @@ - - - - - + + + + + + + + + + + + + + + + diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset index 1dd9ddac..242213f3 100644 --- a/ProjectSettings/Physics2DSettings.asset +++ b/ProjectSettings/Physics2DSettings.asset @@ -3,7 +3,7 @@ --- !u!19 &1 Physics2DSettings: m_ObjectHideFlags: 0 - serializedVersion: 4 + serializedVersion: 5 m_Gravity: {x: 0, y: 0} m_DefaultMaterial: {fileID: 0} m_VelocityIterations: 8 @@ -38,7 +38,7 @@ Physics2DSettings: m_IslandSolverJointCostScale: 10 m_IslandSolverBodiesPerJob: 50 m_IslandSolverContactsPerJob: 50 - m_AutoSimulation: 0 + m_SimulationMode: 2 m_QueriesHitTriggers: 1 m_QueriesStartInColliders: 1 m_CallbacksOnDisable: 1 diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 168679d4..1b67f43f 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -3,7 +3,7 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 20 + serializedVersion: 22 productGUID: 2c47fe2535572a34ea367dc71bd76ea2 AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 @@ -49,6 +49,8 @@ PlayerSettings: m_StereoRenderingPath: 0 m_ActiveColorSpace: 1 m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 m_StackTraceTypes: 010000000100000001000000010000000100000001000000 iosShowActivityIndicatorOnLoading: -1 androidShowActivityIndicatorOnLoading: -1 @@ -66,6 +68,12 @@ PlayerSettings: androidRenderOutsideSafeArea: 0 androidUseSwappy: 0 androidBlitType: 1 + androidResizableWindow: 0 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 defaultIsNativeResolution: 1 macRetinaSupport: 1 runInBackground: 1 @@ -117,7 +125,9 @@ PlayerSettings: stadiaTargetFramerate: 0 vulkanNumSwapchainBuffers: 3 vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 0 vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 m_SupportedAspectRatios: 4:3: 1 5:4: 1 @@ -132,31 +142,6 @@ PlayerSettings: xboxOneDisableKinectGpuReservation: 1 xboxOneEnable7thCore: 1 vrSettings: - cardboard: - depthFormat: 0 - enableTransitionView: 0 - daydream: - depthFormat: 0 - useSustainedPerformanceMode: 0 - enableVideoLayer: 0 - useProtectedVideoMemory: 0 - minimumSupportedHeadTracking: 0 - maximumSupportedHeadTracking: 1 - hololens: - depthFormat: 1 - depthBufferSharingEnabled: 1 - lumin: - depthFormat: 0 - frameTiming: 2 - enableGLCache: 0 - glCacheMaxBlobSize: 524288 - glCacheMaxFileSize: 8388608 - oculus: - sharedDepthBuffer: 1 - dashSupport: 1 - lowOverheadMode: 0 - protectedContext: 0 - v2Signing: 1 enable360StereoCapture: 0 isWsaHolographicRemotingEnabled: 0 enableFrameTimingStats: 0 @@ -167,8 +152,13 @@ PlayerSettings: resolutionScalingMode: 0 androidSupportedAspectRatio: 1 androidMaxAspectRatio: 2.1 - applicationIdentifier: {} - buildNumber: {} + applicationIdentifier: + Standalone: com.ChrisTides11.HnSF + buildNumber: + Standalone: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 0 AndroidBundleVersionCode: 1 AndroidMinSdkVersion: 19 AndroidTargetSdkVersion: 0 @@ -185,10 +175,10 @@ PlayerSettings: StripUnusedMeshComponents: 0 VertexChannelCompressionMask: 4054 iPhoneSdkVersion: 988 - iOSTargetOSVersionString: 10.0 + iOSTargetOSVersionString: 11.0 tvOSSdkVersion: 0 tvOSRequireExtendedGameController: 0 - tvOSTargetOSVersionString: 10.0 + tvOSTargetOSVersionString: 11.0 uIPrerenderedIcon: 0 uIRequiresPersistentWiFi: 0 uIRequiresFullScreen: 1 @@ -222,8 +212,8 @@ PlayerSettings: iOSLaunchScreeniPadFillPct: 100 iOSLaunchScreeniPadSize: 100 iOSLaunchScreeniPadCustomXibPath: - iOSUseLaunchScreenStoryboard: 0 iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: iOSDeviceRequirements: [] iOSURLSchemes: [] iOSBackgroundModes: 0 @@ -241,10 +231,19 @@ PlayerSettings: iOSRequireARKit: 0 iOSAutomaticallyDetectAndAddCapabilities: 1 appleEnableProMotion: 0 + shaderPrecisionModel: 0 clonedFromGUID: 9870af204204ab84596f8a656f2f2ce6 templatePackageId: com.unity.template.universal@7.3.1 templateDefaultScene: Assets/Scenes/SampleScene.unity + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomProguardFile: 0 AndroidTargetArchitectures: 1 + AndroidTargetDevices: 0 AndroidSplashScreenScale: 0 androidSplashScreen: {fileID: 0} AndroidKeystoreName: @@ -261,6 +260,10 @@ PlayerSettings: height: 180 banner: {fileID: 0} androidGamepadSupportLevel: 0 + chromeosInputEmulation: 1 + AndroidMinifyWithR8: 0 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 AndroidValidateAppBundleSize: 1 AndroidAppBundleSizeToValidate: 100 m_BuildTargetIcons: [] @@ -316,10 +319,10 @@ PlayerSettings: m_BuildTargetGraphicsAPIs: - m_BuildTarget: iOSSupport m_APIs: 10000000 - m_Automatic: 0 + m_Automatic: 1 - m_BuildTarget: AppleTVSupport m_APIs: 10000000 - m_Automatic: 0 + m_Automatic: 1 - m_BuildTarget: AndroidPlayer m_APIs: 150000000b000000 m_Automatic: 0 @@ -339,6 +342,7 @@ PlayerSettings: - m_BuildTarget: Standalone m_EncodingQuality: 1 m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetNormalMapEncoding: [] playModeTestRunnerEnabled: 0 runPlayModeTestAsEditModeTest: 0 actionOnDotNetUnhandledException: 1 @@ -348,12 +352,15 @@ PlayerSettings: cameraUsageDescription: locationUsageDescription: microphoneUsageDescription: + bluetoothUsageDescription: + switchNMETAOverride: switchNetLibKey: switchSocketMemoryPoolSize: 6144 switchSocketAllocatorPoolSize: 128 switchSocketConcurrencyLimit: 14 switchScreenResolutionBehavior: 2 switchUseCPUProfiler: 0 + switchUseGOLDLinker: 0 switchApplicationID: 0x01004b9000490000 switchNSODependencies: switchTitleNames_0: @@ -482,6 +489,7 @@ PlayerSettings: switchSocketInitializeEnabled: 1 switchNetworkInterfaceManagerInitializeEnabled: 1 switchPlayerConnectionEnabled: 1 + switchUseNewStyleFilepaths: 0 switchUseMicroSleepForYield: 1 switchMicroSleepForYieldTime: 25 ps4NPAgeRating: 12 @@ -554,6 +562,7 @@ PlayerSettings: ps4videoRecordingFeaturesUsed: 0 ps4contentSearchFeaturesUsed: 0 ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 ps4GPU800MHz: 1 ps4attribEyeToEyeDistanceSettingVR: 0 ps4IncludedModules: @@ -569,31 +578,6 @@ PlayerSettings: - libSceNpToolkit2.prx - libSceS3DConversion.prx ps4attribVROutputEnabled: 0 - ps5ParamFilePath: - ps5VideoOutPixelFormat: 0 - ps5VideoOutInitialWidth: 1920 - ps5VideoOutOutputMode: 1 - ps5BackgroundImagePath: - ps5StartupImagePath: - ps5Pic2Path: - ps5StartupImagesFolder: - ps5IconImagesFolder: - ps5SaveDataImagePath: - ps5SdkOverride: - ps5BGMPath: - ps5ShareOverlayImagePath: - ps5NPConfigZipPath: - ps5Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ - ps5UseResolutionFallback: 0 - ps5UseAudio3dBackend: 0 - ps5ScriptOptimizationLevel: 2 - ps5Audio3dVirtualSpeakerCount: 14 - ps5UpdateReferencePackage: - ps5disableAutoHideSplash: 0 - ps5OperatingSystemCanDisableSplashScreen: 0 - ps5IncludedModules: [] - ps5SharedBinaryContentLabels: [] - ps5SharedBinarySystemFolders: [] monoEnv: splashScreenBackgroundSourceLandscape: {fileID: 0} splashScreenBackgroundSourcePortrait: {fileID: 0} @@ -610,18 +594,24 @@ PlayerSettings: webGLAnalyzeBuildSize: 0 webGLUseEmbeddedResources: 0 webGLCompressionFormat: 1 + webGLWasmArithmeticExceptions: 0 webGLLinkerTarget: 1 webGLThreadsSupport: 0 - webGLWasmStreaming: 0 + webGLDecompressionFallback: 0 scriptingDefineSymbols: 1: + additionalCompilerArguments: {} platformArchitecture: {} scriptingBackend: Standalone: 0 il2cppCompilerConfiguration: {} managedStrippingLevel: {} incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 allowUnsafeCode: 0 + useDeterministicCompilation: 1 + useReferenceAssemblies: 1 + enableRoslynAnalyzers: 1 additionalIl2CppArgs: scriptingRuntimeVersion: 1 gcIncremental: 0 @@ -686,10 +676,7 @@ PlayerSettings: XboxOneXTitleMemory: 8 XboxOneOverrideIdentityName: XboxOneOverrideIdentityPublisher: - vrEditorSettings: - daydream: - daydreamIconForeground: {fileID: 0} - daydreamIconBackground: {fileID: 0} + vrEditorSettings: {} cloudServicesEnabled: UNet: 1 luminIcon: @@ -704,11 +691,12 @@ PlayerSettings: m_VersionCode: 1 m_VersionName: apiCompatibilityLevel: 6 + activeInputHandler: 2 cloudProjectId: framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] projectName: organizationId: cloudEnabled: 0 - enableNativePlatformBackendsForNewInputSystem: 1 - disableOldInputManagerSupport: 0 legacyClampBlendShapeWeights: 0 + virtualTexturingSupportEnabled: 0 diff --git a/ProjectSettings/TimelineSettings.asset b/ProjectSettings/TimelineSettings.asset new file mode 100644 index 00000000..b4fbdb09 --- /dev/null +++ b/ProjectSettings/TimelineSettings.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + 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: a287be6c49135cd4f9b2b8666c39d999, type: 3} + m_Name: + m_EditorClassIdentifier: + assetDefaultFramerate: 60 diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index 4681d1d2..7ccdd5e4 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -5,6 +5,9 @@ EditorUserSettings: m_ObjectHideFlags: 0 serializedVersion: 4 m_ConfigSettings: + RecentlyUsedScenePath-0: + value: 2242470311464673033d2a6d232252001a120b65180c07333920123dadd41019e1f33fe6e9742a323016f6 + flags: 0 vcSharedLogLevel: value: 0d5e400f0650 flags: 0 @@ -15,5 +18,7 @@ EditorUserSettings: m_SemanticMergeMode: 2 m_VCShowFailedCheckout: 1 m_VCOverwriteFailedCheckoutAssets: 1 - m_VCOverlayIcons: 1 + m_VCProjectOverlayIcons: 1 + m_VCHierarchyOverlayIcons: 1 + m_VCOtherOverlayIcons: 1 m_VCAllowAsyncUpdate: 0