From 1ed2291844add8081b3e43b0b23806748e9bd237 Mon Sep 17 00:00:00 2001 From: Braedon Date: Sat, 22 Jan 2022 05:44:19 -0500 Subject: [PATCH] Command pattern (Undo/Redo) system began. (Read desc) I spent about 6 hours trying to fix this one specific bug involving the move undo. Turns out all I had to do was calm down and think logically instead of typing random bullshit for a few hours until it worked. I'm tired and I thank this for ruining my sleep schedule. --- Assets/Plugins/Starpelly/Extensions.cs | 18 + Assets/Plugins/Starpelly/Extensions.cs.meta | 11 + Assets/Resources/Sprites/Editor/ui/redo.png | Bin 0 -> 22304 bytes .../Resources/Sprites/Editor/ui/redo.png.meta | 96 ++ Assets/Resources/Sprites/Editor/ui/undo.png | Bin 0 -> 23402 bytes .../Resources/Sprites/Editor/ui/undo.png.meta | 96 ++ Assets/Scenes/Editor.unity | 664 +++++++++++- Assets/Scenes/Test.unity | 942 ++++++++++++++++++ Assets/Scenes/Test.unity.meta | 7 + Assets/Scripts/LevelEditor/Commands.meta | 8 + .../LevelEditor/Commands/CommandManager.cs | 75 ++ .../Commands/CommandManager.cs.meta | 11 + .../Scripts/LevelEditor/Commands/IAction.cs | 13 + .../LevelEditor/Commands/IAction.cs.meta | 11 + .../LevelEditor/Commands/Selections.cs | 129 +++ .../LevelEditor/Commands/Selections.cs.meta | 11 + .../LevelEditor/Commands/TestCommand.cs | 34 + .../LevelEditor/Commands/TestCommand.cs.meta | 11 + Assets/Scripts/LevelEditor/Editor.cs | 39 + .../EventSelector/GridGameSelector.cs | 4 +- Assets/Scripts/LevelEditor/Selector.cs | 6 +- Assets/Scripts/LevelEditor/Timeline.cs | 40 +- .../Scripts/LevelEditor/TimelineEventObj.cs | 45 +- Assets/Scripts/WTF.cs | 8 + Assets/karatekacombos.json | 2 +- ProjectSettings/TagManager.asset | 2 +- 26 files changed, 2206 insertions(+), 77 deletions(-) create mode 100644 Assets/Plugins/Starpelly/Extensions.cs create mode 100644 Assets/Plugins/Starpelly/Extensions.cs.meta create mode 100644 Assets/Resources/Sprites/Editor/ui/redo.png create mode 100644 Assets/Resources/Sprites/Editor/ui/redo.png.meta create mode 100644 Assets/Resources/Sprites/Editor/ui/undo.png create mode 100644 Assets/Resources/Sprites/Editor/ui/undo.png.meta create mode 100644 Assets/Scenes/Test.unity create mode 100644 Assets/Scenes/Test.unity.meta create mode 100644 Assets/Scripts/LevelEditor/Commands.meta create mode 100644 Assets/Scripts/LevelEditor/Commands/CommandManager.cs create mode 100644 Assets/Scripts/LevelEditor/Commands/CommandManager.cs.meta create mode 100644 Assets/Scripts/LevelEditor/Commands/IAction.cs create mode 100644 Assets/Scripts/LevelEditor/Commands/IAction.cs.meta create mode 100644 Assets/Scripts/LevelEditor/Commands/Selections.cs create mode 100644 Assets/Scripts/LevelEditor/Commands/Selections.cs.meta create mode 100644 Assets/Scripts/LevelEditor/Commands/TestCommand.cs create mode 100644 Assets/Scripts/LevelEditor/Commands/TestCommand.cs.meta diff --git a/Assets/Plugins/Starpelly/Extensions.cs b/Assets/Plugins/Starpelly/Extensions.cs new file mode 100644 index 00000000..bee2c930 --- /dev/null +++ b/Assets/Plugins/Starpelly/Extensions.cs @@ -0,0 +1,18 @@ +using System; +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; + +public static class Extensions +{ + public static T DeepClone(this T obj) + { + using (MemoryStream stream = new MemoryStream()) + { + BinaryFormatter formatter = new BinaryFormatter(); + formatter.Serialize(stream, obj); + stream.Position = 0; + + return (T)formatter.Deserialize(stream); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Starpelly/Extensions.cs.meta b/Assets/Plugins/Starpelly/Extensions.cs.meta new file mode 100644 index 00000000..01c4d9a0 --- /dev/null +++ b/Assets/Plugins/Starpelly/Extensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98be75cbdf7662d43bf84e7f1ac7d58e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sprites/Editor/ui/redo.png b/Assets/Resources/Sprites/Editor/ui/redo.png new file mode 100644 index 0000000000000000000000000000000000000000..18450b3bc7f6a2444124b2f495502a9a6b055a85 GIT binary patch literal 22304 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 SaDD_#wG5uFelF{r5}E+883h~w literal 0 HcmV?d00001 diff --git a/Assets/Resources/Sprites/Editor/ui/undo.png.meta b/Assets/Resources/Sprites/Editor/ui/undo.png.meta new file mode 100644 index 00000000..cb400c51 --- /dev/null +++ b/Assets/Resources/Sprites/Editor/ui/undo.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 348825b5c77b9d143961119fc008e631 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Editor.unity b/Assets/Scenes/Editor.unity index 0668d4e2..7f3b6286 100644 --- a/Assets/Scenes/Editor.unity +++ b/Assets/Scenes/Editor.unity @@ -899,7 +899,7 @@ GameObject: - component: {fileID: 163092849} - component: {fileID: 163092851} - component: {fileID: 163092850} - m_Layer: 5 + m_Layer: 7 m_Name: 2 m_TagString: Untagged m_Icon: {fileID: 0} @@ -974,7 +974,7 @@ GameObject: - component: {fileID: 163256866} - component: {fileID: 163256868} - component: {fileID: 163256867} - m_Layer: 5 + m_Layer: 7 m_Name: ResizeLeft m_TagString: Untagged m_Icon: {fileID: 0} @@ -1014,7 +1014,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0.6156863} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -1050,7 +1050,7 @@ GameObject: - component: {fileID: 184364179} - component: {fileID: 184364178} - component: {fileID: 184364177} - m_Layer: 5 + m_Layer: 7 m_Name: ResizeRight m_TagString: Untagged m_Icon: {fileID: 0} @@ -1315,6 +1315,9 @@ RectTransform: - {fileID: 1665554290} - {fileID: 678553525} - {fileID: 903653565} + - {fileID: 839543766} + - {fileID: 1747099762} + - {fileID: 2131880461} m_Father: {fileID: 1791483803} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1412,7 +1415,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -1656,7 +1659,7 @@ GameObject: - component: {fileID: 258006092} - component: {fileID: 258006094} - component: {fileID: 258006093} - m_Layer: 5 + m_Layer: 7 m_Name: EventLabel m_TagString: Untagged m_Icon: {fileID: 0} @@ -1696,7 +1699,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -1924,7 +1927,7 @@ GameObject: - component: {fileID: 321288860} - component: {fileID: 321288862} - component: {fileID: 321288861} - m_Layer: 5 + m_Layer: 7 m_Name: Image (3) m_TagString: Untagged m_Icon: {fileID: 0} @@ -2209,6 +2212,49 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 411779173} m_CullTransparentMesh: 1 +--- !u!1 &423099697 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 423099698} + - component: {fileID: 423099699} + m_Layer: 0 + m_Name: CommandManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &423099698 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 423099697} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -3.8390641, y: 1.7596253, z: -0.85742325} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &423099699 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 423099697} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6187911411a100640b5f4f3f2f84b912, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &424396916 GameObject: m_ObjectHideFlags: 0 @@ -2730,7 +2776,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -3546,7 +3592,7 @@ GameObject: - component: {fileID: 660967737} - component: {fileID: 660967739} - component: {fileID: 660967738} - m_Layer: 5 + m_Layer: 7 m_Name: Block m_TagString: Untagged m_Icon: {fileID: 0} @@ -3627,7 +3673,7 @@ GameObject: - component: {fileID: 678553527} - component: {fileID: 678553526} m_Layer: 5 - m_Name: SaveBTN + m_Name: Save m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -4353,13 +4399,13 @@ GameObject: - component: {fileID: 798021451} - component: {fileID: 798021452} - component: {fileID: 798021450} - m_Layer: 5 + m_Layer: 7 m_Name: EventObj m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &798021449 RectTransform: m_ObjectHideFlags: 0 @@ -4399,6 +4445,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: eb5481d804b2aec42a04ea8f659fdc5a, type: 3} m_Name: m_EditorClassIdentifier: + lastPos_: {x: 0, y: 0} PosPreview: {fileID: 0} PosPreviewRef: {fileID: 2142375787} Icon: {fileID: 820032006} @@ -4407,12 +4454,22 @@ MonoBehaviour: resizeGraphic: {fileID: 880758902} leftDrag: {fileID: 2046851080} rightDrag: {fileID: 184364176} + entity: + beat: 0 + track: 0 + length: 0 + valA: 0 + type: 0 + datamodel: + eventObj: {fileID: 0} length: 0 selected: 0 mouseHovering: 0 resizable: 0 resizing: 0 moving: 0 + lastMovePos: {x: 0, y: 0} + eventObjID: NormalCol: {r: 0.8470589, g: 0.8470589, b: 1, a: 1} --- !u!222 &798021451 CanvasRenderer: @@ -4478,8 +4535,8 @@ GameObject: - component: {fileID: 820032005} - component: {fileID: 820032007} - component: {fileID: 820032006} - m_Layer: 5 - m_Name: Image + m_Layer: 7 + m_Name: IconGraphic m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -4518,7 +4575,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0.46666667} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -4542,6 +4599,81 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 820032004} m_CullTransparentMesh: 1 +--- !u!1 &839543765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 839543766} + - component: {fileID: 839543768} + - component: {fileID: 839543767} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &839543766 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839543765} + 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: 202724642} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 122, y: 0} + m_SizeDelta: {x: 2, y: -4} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &839543767 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839543765} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6226415, g: 0.6226415, b: 0.6226415, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &839543768 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839543765} + m_CullTransparentMesh: 1 --- !u!1 &841081095 GameObject: m_ObjectHideFlags: 0 @@ -4626,7 +4758,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 880758902} - m_Layer: 5 + m_Layer: 7 m_Name: ResizeGraphic m_TagString: Untagged m_Icon: {fileID: 0} @@ -4691,7 +4823,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -432, y: 0} + m_AnchoredPosition: {x: -270, y: 0} m_SizeDelta: {x: 160, y: 35} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &903653566 @@ -4852,7 +4984,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &932211466 GameObject: @@ -5208,7 +5340,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.69803923, g: 0.69803923, b: 0.69803923, a: 1} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -5243,7 +5375,7 @@ GameObject: - component: {fileID: 1031646381} - component: {fileID: 1031646383} - component: {fileID: 1031646382} - m_Layer: 5 + m_Layer: 7 m_Name: Image (1) m_TagString: Untagged m_Icon: {fileID: 0} @@ -5561,6 +5693,97 @@ MonoBehaviour: m_EditorClassIdentifier: m_Padding: {x: 0, y: 0, z: 0, w: 0} m_Softness: {x: 0, y: 0} +--- !u!1 &1071942424 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1071942425} + - component: {fileID: 1071942428} + - component: {fileID: 1071942427} + - component: {fileID: 1071942426} + m_Layer: 5 + m_Name: Graphic + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1071942425 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1071942424} + 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: 1747099762} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 35, y: 35} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1071942426 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1071942424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7b30dd83a12669d4f973ff5a79ca9842, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} + m_EffectDistance: {x: 2, y: -2} + m_UseGraphicAlpha: 1 +--- !u!114 &1071942427 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1071942424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.7455157, g: 0.4481132, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 348825b5c77b9d143961119fc008e631, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1071942428 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1071942424} + m_CullTransparentMesh: 1 --- !u!1 &1090036109 GameObject: m_ObjectHideFlags: 0 @@ -6420,7 +6643,7 @@ GameObject: m_Component: - component: {fileID: 1231936949} - component: {fileID: 1231936951} - m_Layer: 5 + m_Layer: 7 m_Name: Outline m_TagString: Untagged m_Icon: {fileID: 0} @@ -6469,7 +6692,7 @@ GameObject: - component: {fileID: 1237250188} - component: {fileID: 1237250190} - component: {fileID: 1237250189} - m_Layer: 5 + m_Layer: 7 m_Name: 3 m_TagString: Untagged m_Icon: {fileID: 0} @@ -6900,7 +7123,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -7261,6 +7484,97 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1380319272} m_CullTransparentMesh: 1 +--- !u!1 &1412492898 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1412492899} + - component: {fileID: 1412492902} + - component: {fileID: 1412492901} + - component: {fileID: 1412492900} + m_Layer: 5 + m_Name: Graphic + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1412492899 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1412492898} + 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: 2131880461} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 35, y: 35} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1412492900 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1412492898} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7b30dd83a12669d4f973ff5a79ca9842, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} + m_EffectDistance: {x: 2, y: -2} + m_UseGraphicAlpha: 1 +--- !u!114 &1412492901 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1412492898} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.4470588, g: 0.60128987, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 0c2c8bed0306b7d408a268884c6af79b, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1412492902 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1412492898} + m_CullTransparentMesh: 1 --- !u!1 &1423699435 GameObject: m_ObjectHideFlags: 0 @@ -7319,6 +7633,8 @@ MonoBehaviour: NewBTN: {fileID: 1683100750} OpenBTN: {fileID: 1665554291} SaveBTN: {fileID: 678553526} + UndoBTN: {fileID: 1747099763} + RedoBTN: {fileID: 2131880462} --- !u!114 &1423699438 MonoBehaviour: m_ObjectHideFlags: 0 @@ -7331,8 +7647,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f86858990a87c764892672104bdaef1f, type: 3} m_Name: m_EditorClassIdentifier: - level: {fileID: 4900000, guid: 5e794baa94fb06d4f939aaf032fab5ea, type: 3} - music: {fileID: 8300000, guid: f3b9f9179bad8394a98f617bda265a62, type: 3} + level: {fileID: 4900000, guid: 244c565c8088cfa4597e0ebda9c7de98, type: 3} + music: {fileID: 8300000, guid: e5cf71158cc9bff4a8fbfbca1e73e500, type: 3} debugUI: 0 playOnStart: 0 editor: 1 @@ -7402,7 +7718,7 @@ GameObject: - component: {fileID: 1474986788} - component: {fileID: 1474986790} - component: {fileID: 1474986789} - m_Layer: 5 + m_Layer: 7 m_Name: Image (2) m_TagString: Untagged m_Icon: {fileID: 0} @@ -8067,7 +8383,7 @@ GameObject: - component: {fileID: 1665554292} - component: {fileID: 1665554291} m_Layer: 5 - m_Name: OpenBTN + m_Name: Open m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -8307,7 +8623,7 @@ GameObject: - component: {fileID: 1683100751} - component: {fileID: 1683100750} m_Layer: 5 - m_Name: NewBTN + m_Name: New m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -8426,7 +8742,7 @@ GameObject: - component: {fileID: 1701256165} - component: {fileID: 1701256167} - component: {fileID: 1701256166} - m_Layer: 5 + m_Layer: 7 m_Name: ResizeRight m_TagString: Untagged m_Icon: {fileID: 0} @@ -8466,7 +8782,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0.6156863} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -8585,6 +8901,139 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1709317942} m_CullTransparentMesh: 1 +--- !u!1 &1747099761 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1747099762} + - component: {fileID: 1747099765} + - component: {fileID: 1747099764} + - component: {fileID: 1747099763} + m_Layer: 5 + m_Name: Undo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1747099762 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747099761} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000798, y: 1.0000798, z: 1.0000798} + m_Children: + - {fileID: 1071942425} + m_Father: {fileID: 202724642} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 128.70001, y: 0} + m_SizeDelta: {x: 35, y: 35} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &1747099763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747099761} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.7490196, g: 1, b: 1, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1747099764} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 423099699} + m_TargetAssemblyTypeName: RhythmHeavenMania.Editor.CommandManager, Assembly-CSharp + m_MethodName: Undo + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1747099764 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747099761} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 77703dfffd29ca6439338d6adfc62c9b, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 10 +--- !u!222 &1747099765 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747099761} + m_CullTransparentMesh: 1 --- !u!1 &1747224095 GameObject: m_ObjectHideFlags: 0 @@ -8990,7 +9439,7 @@ RectTransform: - {fileID: 1344377689} - {fileID: 1090036110} m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -9008,7 +9457,7 @@ GameObject: - component: {fileID: 1799484112} - component: {fileID: 1799484114} - component: {fileID: 1799484113} - m_Layer: 5 + m_Layer: 7 m_Name: ResizeLine m_TagString: Untagged m_Icon: {fileID: 0} @@ -9048,7 +9497,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0.6156863} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -9083,7 +9532,7 @@ GameObject: - component: {fileID: 1837496588} - component: {fileID: 1837496590} - component: {fileID: 1837496589} - m_Layer: 5 + m_Layer: 7 m_Name: 4 m_TagString: Untagged m_Icon: {fileID: 0} @@ -9478,7 +9927,7 @@ GameObject: - component: {fileID: 1921041735} - component: {fileID: 1921041737} - component: {fileID: 1921041736} - m_Layer: 5 + m_Layer: 7 m_Name: Image m_TagString: Untagged m_Icon: {fileID: 0} @@ -9628,7 +10077,7 @@ GameObject: - component: {fileID: 1953621882} - component: {fileID: 1953621884} - component: {fileID: 1953621883} - m_Layer: 5 + m_Layer: 7 m_Name: 1 m_TagString: Untagged m_Icon: {fileID: 0} @@ -9971,7 +10420,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.454902, g: 0.454902, b: 0.454902, a: 1} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -10007,7 +10456,7 @@ GameObject: - component: {fileID: 2046851082} - component: {fileID: 2046851081} - component: {fileID: 2046851083} - m_Layer: 5 + m_Layer: 7 m_Name: ResizeLeft m_TagString: Untagged m_Icon: {fileID: 0} @@ -10242,7 +10691,7 @@ GameObject: - component: {fileID: 2127582757} - component: {fileID: 2127582759} - component: {fileID: 2127582758} - m_Layer: 5 + m_Layer: 7 m_Name: SelectedGraphic m_TagString: Untagged m_Icon: {fileID: 0} @@ -10282,7 +10731,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0.2901961} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -10306,6 +10755,139 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2127582756} m_CullTransparentMesh: 1 +--- !u!1 &2131880460 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2131880461} + - component: {fileID: 2131880464} + - component: {fileID: 2131880463} + - component: {fileID: 2131880462} + m_Layer: 5 + m_Name: Redo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2131880461 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2131880460} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000798, y: 1.0000798, z: 1.0000798} + m_Children: + - {fileID: 1412492899} + m_Father: {fileID: 202724642} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 168.7, y: 0} + m_SizeDelta: {x: 35, y: 35} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &2131880462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2131880460} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.7490196, g: 1, b: 1, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2131880463} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 423099699} + m_TargetAssemblyTypeName: RhythmHeavenMania.Editor.CommandManager, Assembly-CSharp + m_MethodName: Redo + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &2131880463 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2131880460} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 77703dfffd29ca6439338d6adfc62c9b, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 10 +--- !u!222 &2131880464 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2131880460} + m_CullTransparentMesh: 1 --- !u!1 &2142375786 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/Test.unity b/Assets/Scenes/Test.unity new file mode 100644 index 00000000..edfc8917 --- /dev/null +++ b/Assets/Scenes/Test.unity @@ -0,0 +1,942 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &477918638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 477918639} + - component: {fileID: 477918642} + - component: {fileID: 477918641} + - component: {fileID: 477918640} + m_Layer: 5 + m_Name: Undo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &477918639 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477918638} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 823867629} + m_Father: {fileID: 1549258973} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -478.5, y: 310.8} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &477918640 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477918638} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 477918641} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1408700917} + m_TargetAssemblyTypeName: RhythmHeavenMania.Editor.CommandManager, Assembly-CSharp + m_MethodName: Undo + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &477918641 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477918638} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &477918642 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477918638} + m_CullTransparentMesh: 1 +--- !u!1 &520344657 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 520344658} + - component: {fileID: 520344660} + - component: {fileID: 520344659} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &520344658 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 520344657} + 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: 984212318} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &520344659 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 520344657} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Redo + +' +--- !u!222 &520344660 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 520344657} + m_CullTransparentMesh: 1 +--- !u!1 &593752857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 593752860} + - component: {fileID: 593752859} + - component: {fileID: 593752858} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &593752858 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593752857} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &593752859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593752857} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &593752860 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593752857} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &660085351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 660085353} + - component: {fileID: 660085352} + m_Layer: 0 + m_Name: Square + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &660085352 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 660085351} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 7482667652216324306, guid: 48e93eef0688c4a259cb0eddcd8661f7, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &660085353 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 660085351} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -3.8390641, y: 1.7596253, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &823867628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 823867629} + - component: {fileID: 823867631} + - component: {fileID: 823867630} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &823867629 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 823867628} + 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: 477918639} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &823867630 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 823867628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Undo + +' +--- !u!222 &823867631 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 823867628} + m_CullTransparentMesh: 1 +--- !u!1 &984212317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 984212318} + - component: {fileID: 984212321} + - component: {fileID: 984212320} + - component: {fileID: 984212319} + m_Layer: 5 + m_Name: Redo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &984212318 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 984212317} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 520344658} + m_Father: {fileID: 1549258973} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -298.8, y: 310.8} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &984212319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 984212317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 984212320} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1408700917} + m_TargetAssemblyTypeName: RhythmHeavenMania.Editor.CommandManager, Assembly-CSharp + m_MethodName: Redo + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &984212320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 984212317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &984212321 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 984212317} + m_CullTransparentMesh: 1 +--- !u!1 &1408700916 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1408700918} + - component: {fileID: 1408700917} + - component: {fileID: 1408700919} + m_Layer: 0 + m_Name: Test + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1408700917 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1408700916} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6187911411a100640b5f4f3f2f84b912, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1408700918 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1408700916} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -7.0898438, y: 4.4694767, z: -0.10655786} + 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 &1408700919 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1408700916} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 490e729f742a40644a3a2abd88fce1a3, type: 3} + m_Name: + m_EditorClassIdentifier: + test: {fileID: 660085351} +--- !u!1 &1505402500 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1505402503} + - component: {fileID: 1505402502} + - component: {fileID: 1505402501} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1505402501 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1505402500} + m_Enabled: 1 +--- !u!20 &1505402502 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1505402500} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1505402503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1505402500} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1549258969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1549258973} + - component: {fileID: 1549258972} + - component: {fileID: 1549258971} + - component: {fileID: 1549258970} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1549258970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1549258969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1549258971 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1549258969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1280, y: 720} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1549258972 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1549258969} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 1505402502} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1549258973 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1549258969} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 477918639} + - {fileID: 984212318} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} diff --git a/Assets/Scenes/Test.unity.meta b/Assets/Scenes/Test.unity.meta new file mode 100644 index 00000000..8c9d8dd6 --- /dev/null +++ b/Assets/Scenes/Test.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7f473b35a9dae6345816dc95decb921b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LevelEditor/Commands.meta b/Assets/Scripts/LevelEditor/Commands.meta new file mode 100644 index 00000000..9a19b87d --- /dev/null +++ b/Assets/Scripts/LevelEditor/Commands.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5ceae4229e792d42aa0c1f6ad1e7ef6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LevelEditor/Commands/CommandManager.cs b/Assets/Scripts/LevelEditor/Commands/CommandManager.cs new file mode 100644 index 00000000..dae1835c --- /dev/null +++ b/Assets/Scripts/LevelEditor/Commands/CommandManager.cs @@ -0,0 +1,75 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using RhythmHeavenMania.Editor.Commands; + +namespace RhythmHeavenMania.Editor +{ + public class CommandManager : MonoBehaviour + { + private Stack historyStack = new Stack(); + private Stack redoHistoryStack = new Stack(); + + int maxItems = 128; + + public bool canUndo() + { + return historyStack.Count > 0; + } + public bool canRedo() + { + return redoHistoryStack.Count > 0; + } + + public static CommandManager instance { get; private set; } + + private void Awake() + { + instance = this; + } + + public void Execute(IAction action) + { + action.Execute(); + historyStack.Push(action); + redoHistoryStack.Clear(); + } + + public void Undo() + { + if (!canUndo()) return; + + if (historyStack.Count > 0) + { + redoHistoryStack.Push(historyStack.Peek()); + historyStack.Pop().Undo(); + } + } + + public void Redo() + { + if (!canRedo()) return; + + if (redoHistoryStack.Count > 0) + { + historyStack.Push(redoHistoryStack.Peek()); + redoHistoryStack.Pop().Redo(); + } + } + + // this is here as to not hog up memory, "max undos" basically + private void EnsureCapacity() + { + if (maxItems > 0) + { + } + } + + private void Clear() + { + historyStack.Clear(); + redoHistoryStack.Clear(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/LevelEditor/Commands/CommandManager.cs.meta b/Assets/Scripts/LevelEditor/Commands/CommandManager.cs.meta new file mode 100644 index 00000000..d171339b --- /dev/null +++ b/Assets/Scripts/LevelEditor/Commands/CommandManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6187911411a100640b5f4f3f2f84b912 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LevelEditor/Commands/IAction.cs b/Assets/Scripts/LevelEditor/Commands/IAction.cs new file mode 100644 index 00000000..5bc98826 --- /dev/null +++ b/Assets/Scripts/LevelEditor/Commands/IAction.cs @@ -0,0 +1,13 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace RhythmHeavenMania.Editor.Commands +{ + public interface IAction + { + void Execute(); + void Undo(); + void Redo(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/LevelEditor/Commands/IAction.cs.meta b/Assets/Scripts/LevelEditor/Commands/IAction.cs.meta new file mode 100644 index 00000000..9ef7f1ec --- /dev/null +++ b/Assets/Scripts/LevelEditor/Commands/IAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64b35e3b4d623144a82ed956ee52a136 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LevelEditor/Commands/Selections.cs b/Assets/Scripts/LevelEditor/Commands/Selections.cs new file mode 100644 index 00000000..a8fd3df9 --- /dev/null +++ b/Assets/Scripts/LevelEditor/Commands/Selections.cs @@ -0,0 +1,129 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace RhythmHeavenMania.Editor.Commands +{ + public class Selection : IAction + { + public void Execute() + { + throw new System.NotImplementedException(); + } + + public void Redo() + { + throw new System.NotImplementedException(); + } + + public void Undo() + { + throw new System.NotImplementedException(); + } + } + + // I spent 7 hours trying to fix this instead of sleeping, which would've probably worked better. + // I'll go fuck myself later I'm just glad it works + // I give massive props to people who code undo/redo systems + // -- Starpelly + + public class Move : IAction + { + public List pos = new List(); + + public class Pos + { + public TimelineEventObj eventObj; + + public Vector2 lastPos_; + public Vector3 previousPos; + } + + public Move(List eventObjs) + { + pos.Clear(); + + for (int i = 0; i < eventObjs.Count; i++) + { + Pos p = new Pos(); + p.eventObj = eventObjs[i]; + p.lastPos_ = eventObjs[i].lastPos_; + p.previousPos = eventObjs[i].transform.localPosition; + this.pos.Add(p); + } + } + + public void Execute() + { + } + + public void Redo() + { + for (int i = 0; i < pos.Count; i++) + { + EnsureEventObj(i); + pos[i].eventObj.transform.localPosition = pos[i].previousPos; + } + } + + public void Undo() + { + + for (int i = 0; i < pos.Count; i++) + { + EnsureEventObj(i); + pos[i].eventObj.transform.localPosition = pos[i].lastPos_; + } + } + + private void EnsureEventObj(int id) + { + if (pos[id].eventObj == null) + { + pos[id].eventObj = GameManager.instance.Beatmap.entities.Find(c => c.eventObj.eventObjID == pos[id].eventObj.eventObjID).eventObj; + } + } + } + + public class Deletion : IAction + { + List eventObjs; + + List deletedObjs; + + public Deletion(List eventObjs) + { + this.eventObjs = eventObjs; + } + + public void Execute() + { + deletedObjs = eventObjs; + for (int i = 0; i < eventObjs.Count; i++) + { + Selections.instance.Deselect(eventObjs[i]); + Timeline.instance.DestroyEventObject(eventObjs[i].entity); + } + } + + public void Redo() + { + deletedObjs = eventObjs; + for (int i = 0; i < eventObjs.Count; i++) + { + Selections.instance.Deselect(eventObjs[i]); + Timeline.instance.DestroyEventObject(eventObjs[i].entity); + } + } + + public void Undo() + { + for (int i = 0; i < deletedObjs.Count; i++) + { + Beatmap.Entity e = deletedObjs[i].entity; + eventObjs[i] = Timeline.instance.AddEventObject(e.datamodel, false, new Vector3(e.beat, -e.track * Timeline.instance.LayerHeight()), e, true, e.eventObj.eventObjID); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/LevelEditor/Commands/Selections.cs.meta b/Assets/Scripts/LevelEditor/Commands/Selections.cs.meta new file mode 100644 index 00000000..cbde7c0b --- /dev/null +++ b/Assets/Scripts/LevelEditor/Commands/Selections.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e13e41a59182b74ba7f0be1e3b58ff9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LevelEditor/Commands/TestCommand.cs b/Assets/Scripts/LevelEditor/Commands/TestCommand.cs new file mode 100644 index 00000000..2f07c743 --- /dev/null +++ b/Assets/Scripts/LevelEditor/Commands/TestCommand.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using RhythmHeavenMania.Editor.Commands; + +public class TestCommand : IAction +{ + private GameObject prefab; + private Vector3 pos; + + private GameObject spawnedgameObj; + + public TestCommand(GameObject prefab, Vector3 pos) + { + this.prefab = prefab; + this.pos = pos; + } + + public void Execute() + { + spawnedgameObj = GameObject.Instantiate(prefab, pos, Quaternion.identity); + } + + public void Redo() + { + throw new System.NotImplementedException(); + } + + public void Undo() + { + GameObject.Destroy(spawnedgameObj); + } +} diff --git a/Assets/Scripts/LevelEditor/Commands/TestCommand.cs.meta b/Assets/Scripts/LevelEditor/Commands/TestCommand.cs.meta new file mode 100644 index 00000000..c01683e0 --- /dev/null +++ b/Assets/Scripts/LevelEditor/Commands/TestCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e32a4a20b85d944aa030268410b0101 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LevelEditor/Editor.cs b/Assets/Scripts/LevelEditor/Editor.cs index 3f89301f..2a41cc3d 100644 --- a/Assets/Scripts/LevelEditor/Editor.cs +++ b/Assets/Scripts/LevelEditor/Editor.cs @@ -6,6 +6,7 @@ using UnityEngine.UI; using Newtonsoft.Json; using TMPro; +using Starpelly; namespace RhythmHeavenMania.Editor { @@ -29,6 +30,8 @@ namespace RhythmHeavenMania.Editor [SerializeField] private Button NewBTN; [SerializeField] private Button OpenBTN; [SerializeField] private Button SaveBTN; + [SerializeField] private Button UndoBTN; + [SerializeField] private Button RedoBTN; public static List EventObjs = new List(); @@ -60,6 +63,8 @@ namespace RhythmHeavenMania.Editor Tooltip.AddTooltip(NewBTN.gameObject, "New"); Tooltip.AddTooltip(OpenBTN.gameObject, "Open"); Tooltip.AddTooltip(SaveBTN.gameObject, "Save"); + Tooltip.AddTooltip(UndoBTN.gameObject, "Undo"); + Tooltip.AddTooltip(RedoBTN.gameObject, "Redo"); } public void Update() @@ -77,6 +82,40 @@ namespace RhythmHeavenMania.Editor GetComponent().enabled = true; GetComponent().enabled = true; }*/ + + if (Input.GetKeyDown(KeyCode.Delete)) + { + List ev = new List(); + for (int i = 0; i < Selections.instance.eventsSelected.Count; i++) ev.Add(Selections.instance.eventsSelected[i]); + CommandManager.instance.Execute(new Commands.Deletion(ev)); + } + + if (CommandManager.instance.canUndo()) + UndoBTN.transform.GetChild(0).GetComponent().color = "BE72FF".Hex2RGB(); + else + UndoBTN.transform.GetChild(0).GetComponent().color = Color.gray; + + if (CommandManager.instance.canRedo()) + RedoBTN.transform.GetChild(0).GetComponent().color = "7299FF".Hex2RGB(); + else + RedoBTN.transform.GetChild(0).GetComponent().color = Color.gray; + + if (Input.GetMouseButtonUp(0) && Timeline.instance.CheckIfMouseInTimeline()) + { + List selectedEvents = Timeline.instance.eventObjs.FindAll(c => c.selected == true && c.eligibleToMove == true); + + if (selectedEvents.Count > 0) + { + List result = new List(); + + for (int i = 0; i < selectedEvents.Count; i++) + { + result.Add(selectedEvents[i]); + selectedEvents[i].OnUp(); + } + CommandManager.instance.Execute(new Commands.Move(result)); + } + } } public static Sprite GameIcon(string name) diff --git a/Assets/Scripts/LevelEditor/EventSelector/GridGameSelector.cs b/Assets/Scripts/LevelEditor/EventSelector/GridGameSelector.cs index 2a8141f5..a3d53a4b 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/GridGameSelector.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/GridGameSelector.cs @@ -161,11 +161,11 @@ namespace RhythmHeavenMania.Editor dragTimes++; if (currentEventIndex == 0) { - Timeline.instance.AddEventObject($"gameManager/switchGame/{mg.name}", true, new Vector3(0, 0)); + Timeline.instance.AddEventObject($"gameManager/switchGame/{mg.name}", true, new Vector3(0, 0), null, true); } else { - Timeline.instance.AddEventObject(mg.name + "/" + mg.actions[currentEventIndex - 1].actionName, true, new Vector3(0, 0)); + Timeline.instance.AddEventObject(mg.name + "/" + mg.actions[currentEventIndex - 1].actionName, true, new Vector3(0, 0), null, true); } } } diff --git a/Assets/Scripts/LevelEditor/Selector.cs b/Assets/Scripts/LevelEditor/Selector.cs index 39be753d..fccad4b7 100644 --- a/Assets/Scripts/LevelEditor/Selector.cs +++ b/Assets/Scripts/LevelEditor/Selector.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.EventSystems; namespace RhythmHeavenMania.Editor { @@ -14,10 +15,5 @@ namespace RhythmHeavenMania.Editor { instance = this; } - - private void Update() - { - - } } } \ No newline at end of file diff --git a/Assets/Scripts/LevelEditor/Timeline.cs b/Assets/Scripts/LevelEditor/Timeline.cs index 50103904..15d870f6 100644 --- a/Assets/Scripts/LevelEditor/Timeline.cs +++ b/Assets/Scripts/LevelEditor/Timeline.cs @@ -51,7 +51,7 @@ namespace RhythmHeavenMania.Editor var entity = GameManager.instance.Beatmap.entities[i]; var e = GameManager.instance.Beatmap.entities[i]; - AddEventObject(e.datamodel, false, new Vector3(e.beat, -e.track * LayerHeight()), i); + AddEventObject(e.datamodel, false, new Vector3(e.beat, -e.track * LayerHeight()), e, false, Starpelly.Random.Strings.RandomString(Starpelly.Enums.Strings.StringType.Alphanumeric, 128)); } TimelineSlider.GetChild(0).GetComponent().color = EditorTheme.theme.properties.BeatMarkerCol.Hex2RGB(); @@ -296,7 +296,7 @@ namespace RhythmHeavenMania.Editor #region Functions - public void AddEventObject(string eventName, bool dragNDrop = false, Vector3 pos = new Vector3(), int entityId = 0) + public TimelineEventObj AddEventObject(string eventName, bool dragNDrop = false, Vector3 pos = new Vector3(), Beatmap.Entity entity = null, bool addEvent = false, string eventId = "") { GameObject g = Instantiate(TimelineEventObjRef.gameObject, TimelineEventObjRef.parent); g.transform.localPosition = pos; @@ -322,9 +322,9 @@ namespace RhythmHeavenMania.Editor else { eventObj.resizable = true; - if (gameAction.defaultLength != GameManager.instance.Beatmap.entities[entityId].length && dragNDrop == false) + if (gameAction.defaultLength != entity.length && dragNDrop == false) { - g.GetComponent().sizeDelta = new Vector2(GameManager.instance.Beatmap.entities[entityId].length, LayerHeight()); + g.GetComponent().sizeDelta = new Vector2(entity.length, LayerHeight()); } else { @@ -340,32 +340,46 @@ namespace RhythmHeavenMania.Editor var mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); g.transform.position = new Vector3(mousePos.x, mousePos.y, 0); - Beatmap.Entity en = new Beatmap.Entity(); - en.datamodel = eventName; - en.eventObj = eventObj; - - GameManager.instance.Beatmap.entities.Add(en); - GameManager.instance.SortEventsList(); - Selections.instance.ClickSelect(eventObj); eventObj.moving = true; } else { - var entity = GameManager.instance.Beatmap.entities[entityId]; - entity.eventObj = g.GetComponent(); entity.track = (int)(g.transform.localPosition.y / LayerHeight() * -1); } + if (addEvent) + { + if (entity == null) + { + Beatmap.Entity en = new Beatmap.Entity(); + en.datamodel = eventName; + en.eventObj = eventObj; + + GameManager.instance.Beatmap.entities.Add(en); + GameManager.instance.SortEventsList(); + } + else + { + GameManager.instance.Beatmap.entities.Add(entity); + GameManager.instance.SortEventsList(); + } + } + Editor.EventObjs.Add(eventObj); eventObjs.Add(eventObj); + + eventObj.eventObjID = eventId; + + return eventObj; } public void DestroyEventObject(Beatmap.Entity entity) { Editor.EventObjs.Remove(entity.eventObj); GameManager.instance.Beatmap.entities.Remove(entity); + Timeline.instance.eventObjs.Remove(entity.eventObj); Destroy(entity.eventObj.gameObject); GameManager.instance.SortEventsList(); diff --git a/Assets/Scripts/LevelEditor/TimelineEventObj.cs b/Assets/Scripts/LevelEditor/TimelineEventObj.cs index a656cf05..65ddecd2 100644 --- a/Assets/Scripts/LevelEditor/TimelineEventObj.cs +++ b/Assets/Scripts/LevelEditor/TimelineEventObj.cs @@ -14,6 +14,7 @@ namespace RhythmHeavenMania.Editor private float startPosY; private Vector3 lastPos; + public Vector2 lastPos_; private RectTransform rectTransform; [Header("Components")] @@ -27,9 +28,9 @@ namespace RhythmHeavenMania.Editor [SerializeField] private RectTransform rightDrag; [Header("Properties")] - private Beatmap.Entity entity; + public Beatmap.Entity entity; public float length; - private bool eligibleToMove = false; + public bool eligibleToMove = false; private bool lastVisible; public bool selected; public bool mouseHovering; @@ -39,18 +40,24 @@ namespace RhythmHeavenMania.Editor private bool resizingLeft; private bool resizingRight; private bool inResizeRegion; + public Vector2 lastMovePos; + public string eventObjID; [Header("Colors")] public Color NormalCol; private void Start() { + lastPos_ = transform.localPosition; + rectTransform = GetComponent(); if (!resizable) { Destroy(resizeGraphic.gameObject); } + + lastMovePos = transform.localPosition; } private void Update() @@ -89,8 +96,8 @@ namespace RhythmHeavenMania.Editor { if (Input.GetKeyDown(KeyCode.Delete)) { - Selections.instance.Deselect(this); - Timeline.instance.DestroyEventObject(entity); + /*Selections.instance.Deselect(this); + Timeline.instance.DestroyEventObject(entity);*/ } selectedImage.gameObject.SetActive(true); @@ -119,18 +126,22 @@ namespace RhythmHeavenMania.Editor } } - OnUp(); + // OnUp(); } if (Timeline.instance.eventObjs.FindAll(c => c.moving).Count > 0 && selected) { Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); + // lastPos_ = transform.localPosition; + this.transform.position = new Vector3(mousePos.x - startPosX, mousePos.y - startPosY - 0.40f, 0); this.transform.localPosition = new Vector3(Mathf.Clamp(Mathp.Round2Nearest(this.transform.localPosition.x, 0.25f), 0, Mathf.Infinity), Timeline.instance.SnapToLayer(this.transform.localPosition.y)); if (lastPos != transform.localPosition) + { OnMove(); + } lastPos = this.transform.localPosition; } @@ -148,7 +159,7 @@ namespace RhythmHeavenMania.Editor rectTransform.sizeDelta = new Vector2(Mathp.Round2Nearest(sizeDelta.x, 0.25f), sizeDelta.y); SetPivot(new Vector2(0, rectTransform.pivot.y)); - OnComplete(); + OnComplete(false); } else if (resizingRight) { @@ -162,7 +173,7 @@ namespace RhythmHeavenMania.Editor rectTransform.sizeDelta = new Vector2(Mathp.Round2Nearest(sizeDelta.x, 0.25f), sizeDelta.y); SetPivot(new Vector2(0, rectTransform.pivot.y)); - OnComplete(); + OnComplete(false); } if (Input.GetMouseButtonUp(0)) @@ -203,6 +214,8 @@ namespace RhythmHeavenMania.Editor { if (selected) { + lastPos_ = transform.localPosition; + for (int i = 0; i < Timeline.instance.eventObjs.Count; i++) { Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); @@ -211,22 +224,26 @@ namespace RhythmHeavenMania.Editor } moving = true; - - OnComplete(); + // lastMovePos = transform.localPosition; + // OnComplete(); } } public void OnUp() { + // lastPos_ = this.lastPos_; + // previousPos = this.transform.localPosition; + if (selected) { - moving = false; - if (eligibleToMove) { - OnComplete(); + + OnComplete(true); } + moving = false; + Cancel(); } } @@ -320,10 +337,10 @@ namespace RhythmHeavenMania.Editor eligibleToMove = true; } - OnComplete(); + OnComplete(true); } - private void OnComplete() + private void OnComplete(bool move) { entity.length = rectTransform.sizeDelta.x; entity.beat = this.transform.localPosition.x; diff --git a/Assets/Scripts/WTF.cs b/Assets/Scripts/WTF.cs index 824ff720..f1191c7b 100644 --- a/Assets/Scripts/WTF.cs +++ b/Assets/Scripts/WTF.cs @@ -2,12 +2,20 @@ using UnityEngine; // this is a script for testing +using RhythmHeavenMania.Editor; + namespace RhythmHeavenMania.Tests { public class WTF : MonoBehaviour { + public GameObject test; + private void Update() { + if (Input.GetKeyDown(KeyCode.Z)) + { + GetComponent().Execute(new TestCommand(test, new Vector3(Random.Range(-8f, 8f), Random.Range(-6f, 6f)))); + } } } } \ No newline at end of file diff --git a/Assets/karatekacombos.json b/Assets/karatekacombos.json index cf58a0ef..449b7004 100644 --- a/Assets/karatekacombos.json +++ b/Assets/karatekacombos.json @@ -1 +1 @@ -{"bpm":180.0,"entities":[{"beat":2.0,"track":1,"length":26.0,"datamodel":"karateman/bop"},{"beat":8.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":8.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":16.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":16.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":24.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":24.0,"track":3,"length":1.0,"datamodel":"karateman/prepare"},{"beat":28.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":28.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":28.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":30.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":30.0,"track":1,"length":1.0,"datamodel":"karateman/prepare"},{"beat":31.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":32.0,"track":0,"length":2.0,"datamodel":"karateman/rock"},{"beat":34.0,"track":2,"length":12.0,"datamodel":"karateman/bop"},{"beat":34.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":36.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":38.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":40.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":42.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":44.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":44.5,"track":0,"length":1.0,"datamodel":"karateman/hit3"},{"beat":46.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":46.0,"track":1,"length":1.0,"datamodel":"karateman/prepare"},{"beat":47.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":48.0,"track":2,"length":2.0,"datamodel":"karateman/rock"},{"beat":50.0,"track":2,"length":48.0,"datamodel":"karateman/bop"},{"beat":50.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":52.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":54.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":56.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":58.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":60.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":62.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":64.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":66.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":68.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":70.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":72.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":74.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":76.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":78.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":80.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":82.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":84.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":86.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":88.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":90.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":92.0,"track":3,"length":2.0,"datamodel":"karateman/bulb"},{"beat":94.0,"track":2,"length":4.0,"datamodel":"karateman/combo"},{"beat":98.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":98.0,"track":2,"length":0.5,"datamodel":"karateman/bop"},{"beat":99.5,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":99.5,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":102.0,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":102.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":103.5,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":103.5,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":106.0,"track":3,"length":5.0,"datamodel":"karateman/bop"},{"beat":106.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":108.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":110.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":111.5,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":114.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":114.0,"track":3,"length":0.5,"datamodel":"karateman/bop"},{"beat":115.5,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":115.5,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":118.0,"track":2,"length":0.5,"datamodel":"karateman/bop"},{"beat":118.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":119.5,"track":0,"length":0.5,"datamodel":"karateman/bop"},{"beat":119.5,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":122.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":122.0,"track":0,"length":5.5,"datamodel":"karateman/bop"},{"beat":124.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":126.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":127.5,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":130.0,"track":2,"length":88.0,"datamodel":"karateman/bop"},{"beat":130.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":132.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":134.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":136.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":138.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":140.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":140.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":142.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":143.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":144.0,"track":2,"length":2.0,"datamodel":"karateman/rock"},{"beat":146.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":148.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":150.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":152.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":154.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":156.0,"track":2,"length":2.0,"datamodel":"karateman/bulb"},{"beat":158.0,"track":0,"length":4.0,"datamodel":"karateman/combo"},{"beat":162.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":164.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":166.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":168.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":170.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":172.0,"track":2,"length":2.0,"datamodel":"karateman/bulb"},{"beat":174.0,"track":2,"length":4.0,"datamodel":"karateman/combo"},{"beat":178.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":180.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":182.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":184.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":186.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":188.0,"track":1,"length":2.0,"datamodel":"karateman/bulb"},{"beat":190.0,"track":0,"length":4.0,"datamodel":"karateman/combo"},{"beat":194.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":196.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":198.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":200.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":202.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":204.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":206.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":208.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":210.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":212.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":214.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":216.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":218.0,"track":2,"length":2.0,"datamodel":"karateman/prepare"},{"beat":219.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":219.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":221.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":222.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":223.0,"track":0,"length":2.0,"datamodel":"karateman/rock"},{"beat":225.0,"track":1,"length":34.5,"datamodel":"karateman/bop"},{"beat":226.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":228.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":230.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":232.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":234.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":236.0,"track":0,"length":2.0,"datamodel":"karateman/bulb"},{"beat":238.0,"track":3,"length":4.0,"datamodel":"karateman/combo"},{"beat":242.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":244.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":246.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":248.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":248.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":250.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":251.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":252.0,"track":0,"length":2.0,"datamodel":"karateman/rock"},{"beat":252.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":254.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":255.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":256.0,"track":2,"length":2.0,"datamodel":"karateman/ball"},{"beat":258.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":259.5,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":262.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":262.0,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":263.5,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":263.5,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":266.0,"track":2,"length":5.5,"datamodel":"karateman/bop"},{"beat":266.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":268.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":270.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":271.5,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":274.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":274.0,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":275.5,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":278.0,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":278.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":279.5,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":282.0,"track":2,"length":5.0,"datamodel":"karateman/bop"},{"beat":282.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":284.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":286.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":287.5,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":290.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":290.0,"track":3,"length":33.0,"datamodel":"karateman/bop"},{"beat":292.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":294.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":296.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":298.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":300.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":302.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":304.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":306.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":308.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":310.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":312.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":312.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":314.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":315.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":316.0,"track":2,"length":2.0,"datamodel":"karateman/rock"},{"beat":316.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":318.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":319.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":320.0,"track":0,"length":2.0,"datamodel":"karateman/rock"},{"beat":322.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":323.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":326.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":327.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":330.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":331.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":334.0,"track":3,"length":1.0,"datamodel":"karateman/prepare"},{"beat":335.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":338.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":339.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":342.0,"track":0,"length":1.0,"datamodel":"karateman/prepare"},{"beat":343.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":346.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":347.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":350.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":351.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":353.0,"track":3,"length":30.0,"datamodel":"karateman/bop"},{"beat":354.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":356.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":358.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":360.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":362.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":364.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":364.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":366.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":367.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":368.0,"track":2,"length":2.0,"datamodel":"karateman/rock"},{"beat":370.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":372.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":372.5,"track":2,"length":1.0,"datamodel":"karateman/hit3"},{"beat":374.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":375.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":376.0,"track":0,"length":2.0,"datamodel":"karateman/rock"},{"beat":378.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":380.0,"track":2,"length":2.0,"datamodel":"karateman/bulb"},{"beat":382.0,"track":2,"length":4.0,"datamodel":"karateman/combo"}]} \ No newline at end of file +{"bpm":180.0,"entities":[{"beat":8.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":8.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":16.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":16.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":24.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":24.0,"track":3,"length":1.0,"datamodel":"karateman/prepare"},{"beat":28.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":28.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":28.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":30.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":30.0,"track":1,"length":1.0,"datamodel":"karateman/prepare"},{"beat":31.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":32.0,"track":0,"length":2.0,"datamodel":"karateman/rock"},{"beat":34.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":34.0,"track":2,"length":12.0,"datamodel":"karateman/bop"},{"beat":36.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":38.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":40.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":42.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":44.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":44.5,"track":0,"length":1.0,"datamodel":"karateman/hit3"},{"beat":46.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":46.0,"track":1,"length":1.0,"datamodel":"karateman/prepare"},{"beat":47.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":48.0,"track":2,"length":2.0,"datamodel":"karateman/rock"},{"beat":50.0,"track":2,"length":48.0,"datamodel":"karateman/bop"},{"beat":50.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":52.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":54.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":56.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":58.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":60.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":62.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":64.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":66.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":68.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":70.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":72.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":74.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":76.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":78.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":80.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":82.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":84.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":86.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":88.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":90.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":92.0,"track":3,"length":2.0,"datamodel":"karateman/bulb"},{"beat":94.0,"track":2,"length":4.0,"datamodel":"karateman/combo"},{"beat":98.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":98.0,"track":2,"length":0.5,"datamodel":"karateman/bop"},{"beat":99.5,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":99.5,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":102.0,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":102.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":103.5,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":103.5,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":106.0,"track":3,"length":5.0,"datamodel":"karateman/bop"},{"beat":106.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":108.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":110.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":111.5,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":114.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":114.0,"track":3,"length":0.5,"datamodel":"karateman/bop"},{"beat":115.5,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":115.5,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":118.0,"track":2,"length":0.5,"datamodel":"karateman/bop"},{"beat":118.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":119.5,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":119.5,"track":0,"length":0.5,"datamodel":"karateman/bop"},{"beat":122.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":122.0,"track":0,"length":5.5,"datamodel":"karateman/bop"},{"beat":124.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":126.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":127.5,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":130.0,"track":2,"length":88.0,"datamodel":"karateman/bop"},{"beat":130.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":132.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":134.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":136.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":138.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":140.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":140.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":142.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":143.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":144.0,"track":2,"length":2.0,"datamodel":"karateman/rock"},{"beat":146.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":148.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":150.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":152.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":154.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":156.0,"track":2,"length":2.0,"datamodel":"karateman/bulb"},{"beat":158.0,"track":0,"length":4.0,"datamodel":"karateman/combo"},{"beat":162.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":164.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":166.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":168.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":170.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":172.0,"track":2,"length":2.0,"datamodel":"karateman/bulb"},{"beat":174.0,"track":2,"length":4.0,"datamodel":"karateman/combo"},{"beat":178.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":180.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":182.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":184.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":186.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":188.0,"track":1,"length":2.0,"datamodel":"karateman/bulb"},{"beat":190.0,"track":0,"length":4.0,"datamodel":"karateman/combo"},{"beat":194.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":196.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":198.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":200.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":202.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":204.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":206.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":208.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":210.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":212.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":214.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":216.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":218.0,"track":2,"length":2.0,"datamodel":"karateman/prepare"},{"beat":219.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":219.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":221.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":222.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":223.0,"track":0,"length":2.0,"datamodel":"karateman/rock"},{"beat":225.0,"track":1,"length":34.5,"datamodel":"karateman/bop"},{"beat":226.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":228.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":230.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":232.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":234.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":236.0,"track":0,"length":2.0,"datamodel":"karateman/bulb"},{"beat":238.0,"track":3,"length":4.0,"datamodel":"karateman/combo"},{"beat":242.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":244.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":246.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":248.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":248.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":250.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":251.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":252.0,"track":0,"length":2.0,"datamodel":"karateman/rock"},{"beat":252.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":254.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":255.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":256.0,"track":2,"length":2.0,"datamodel":"karateman/ball"},{"beat":258.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":259.5,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":262.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":262.0,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":263.5,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":263.5,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":266.0,"track":2,"length":5.5,"datamodel":"karateman/bop"},{"beat":266.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":268.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":270.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":271.5,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":274.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":274.0,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":275.5,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":278.0,"track":1,"length":0.5,"datamodel":"karateman/bop"},{"beat":278.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":279.5,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":282.0,"track":2,"length":5.0,"datamodel":"karateman/bop"},{"beat":282.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":284.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":286.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":287.5,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":290.0,"track":3,"length":33.0,"datamodel":"karateman/bop"},{"beat":290.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":292.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":294.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":296.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":298.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":300.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":302.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":304.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":306.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":308.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":310.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":312.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":312.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":314.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":315.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":316.0,"track":2,"length":2.0,"datamodel":"karateman/rock"},{"beat":316.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":318.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":319.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":320.0,"track":0,"length":2.0,"datamodel":"karateman/rock"},{"beat":322.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":323.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":326.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":327.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":330.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":331.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":334.0,"track":3,"length":1.0,"datamodel":"karateman/prepare"},{"beat":335.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":338.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":339.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":342.0,"track":0,"length":1.0,"datamodel":"karateman/prepare"},{"beat":343.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":346.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":347.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":350.0,"track":2,"length":1.0,"datamodel":"karateman/prepare"},{"beat":351.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":353.0,"track":3,"length":30.0,"datamodel":"karateman/bop"},{"beat":354.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":356.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":358.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":360.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":362.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":364.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":364.5,"track":1,"length":1.0,"datamodel":"karateman/hit3"},{"beat":366.0,"track":2,"length":2.0,"datamodel":"karateman/pot"},{"beat":367.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":368.0,"track":2,"length":2.0,"datamodel":"karateman/rock"},{"beat":370.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":372.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":372.5,"track":2,"length":1.0,"datamodel":"karateman/hit3"},{"beat":374.0,"track":3,"length":2.0,"datamodel":"karateman/pot"},{"beat":375.0,"track":0,"length":2.0,"datamodel":"karateman/pot"},{"beat":376.0,"track":0,"length":2.0,"datamodel":"karateman/rock"},{"beat":378.0,"track":1,"length":2.0,"datamodel":"karateman/pot"},{"beat":380.0,"track":2,"length":2.0,"datamodel":"karateman/bulb"},{"beat":382.0,"track":2,"length":4.0,"datamodel":"karateman/combo"}]} \ No newline at end of file diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 0a59dc82..2455620e 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -12,7 +12,7 @@ TagManager: - Water - UI - Debug - - + - EventBlocks - - -