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