From b9eea180b0046a7d65247dd1f0a224e1ea4a8dc0 Mon Sep 17 00:00:00 2001 From: EpicGamer2469 <62869918+Epicgamer2469@users.noreply.github.com> Date: Thu, 21 Mar 2024 20:37:41 -0500 Subject: [PATCH] Improve note parameters (#798) * Add note parameter * Increase max semitones * Add previewing sounds for notes * Add note preview toggle setting * Fix Launch Party starting note * Fix preview sound pooling + add BTS preview sound * Add previewing note when slider handle is clicked --- .../Editor/EventProperties/Note.prefab | 1206 +++++++++++++++++ .../Editor/EventProperties/Note.prefab.meta | 7 + .../Editor/SettingsMenu/EditorSettings.prefab | 401 +++++- .../Sfx/games/builtToScaleDS/PianoPreview.ogg | Bin 0 -> 10108 bytes .../builtToScaleDS/PianoPreview.ogg.meta | 22 + .../Sfx/games/gleeClub/WailPreview.wav | Bin 0 -> 40946 bytes .../Sfx/games/gleeClub/WailPreview.wav.meta | 22 + Assets/Scenes/Editor.unity | 1 + Assets/Scripts/Games/BonOdori/BonOdori.cs | 4 +- .../Games/BuiltToScaleDS/BuiltToScaleDS.cs | 14 +- Assets/Scripts/Games/GleeClub/GleeClub.cs | 24 +- .../Scripts/Games/LaunchParty/LaunchParty.cs | 68 +- Assets/Scripts/Games/Rockers/Rockers.cs | 44 +- .../EventSelector/EventParameterManager.cs | 2 + .../PropertyPrefabs/NotePropertyPrefab.cs | 127 ++ .../NotePropertyPrefab.cs.meta | 11 + .../PropertyPrefabs/NumberPropertyPrefab.cs | 36 +- .../Scripts/LevelEditor/Timeline/Timeline.cs | 1 + Assets/Scripts/Minigames.cs | 8 +- Assets/Scripts/PersistentDataManager.cs | 5 +- Assets/Scripts/UI/LeftClickEvent.cs | 18 + Assets/Scripts/UI/LeftClickEvent.cs.meta | 11 + .../UI/SettingsDialog/Tabs/EditorSettings.cs | 7 + Assets/Scripts/Util/EntityTypes.cs | 22 + Assets/Scripts/Util/Sound.cs | 15 +- Assets/Scripts/Util/SoundByte.cs | 14 +- 26 files changed, 1989 insertions(+), 101 deletions(-) create mode 100644 Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab create mode 100644 Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab.meta create mode 100644 Assets/Resources/Sfx/games/builtToScaleDS/PianoPreview.ogg create mode 100644 Assets/Resources/Sfx/games/builtToScaleDS/PianoPreview.ogg.meta create mode 100644 Assets/Resources/Sfx/games/gleeClub/WailPreview.wav create mode 100644 Assets/Resources/Sfx/games/gleeClub/WailPreview.wav.meta create mode 100644 Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs create mode 100644 Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs.meta create mode 100644 Assets/Scripts/UI/LeftClickEvent.cs create mode 100644 Assets/Scripts/UI/LeftClickEvent.cs.meta diff --git a/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab b/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab new file mode 100644 index 000000000..f7bbb2a5e --- /dev/null +++ b/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab @@ -0,0 +1,1206 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &255188093623624083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 985107624212317837} + - component: {fileID: 6991969534857496180} + - component: {fileID: 7386330486652876290} + m_Layer: 5 + m_Name: Note Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &985107624212317837 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255188093623624083} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6158244586633658522} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: 0} + m_SizeDelta: {x: 45.77002, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &6991969534857496180 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255188093623624083} + m_CullTransparentMesh: 1 +--- !u!114 &7386330486652876290 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255188093623624083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: C#4 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 78e7291cdeccdfc4fa61249845605144, type: 2} + m_sharedMaterial: {fileID: 5250768452915780979, guid: 78e7291cdeccdfc4fa61249845605144, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 3 + m_fontSizeMax: 20 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &6158244585101124322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244585101124323} + - component: {fileID: 6158244585101124324} + m_Layer: 5 + m_Name: Text Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244585101124323 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585101124322} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6158244586323976422} + m_Father: {fileID: 6158244586579295858} + 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.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &6158244585101124324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585101124322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: {x: -8, y: -5, z: -8, w: -5} + m_Softness: {x: 0, y: 0} +--- !u!1 &6158244585233792464 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244585233792465} + - component: {fileID: 5889849442551835445} + m_Layer: 5 + m_Name: Note + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244585233792465 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585233792464} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6158244585406534008} + - {fileID: 6158244586579295858} + - {fileID: 6158244586633658522} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 459.58514, y: -25} + m_SizeDelta: {x: 879.1703, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &5889849442551835445 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585233792464} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3d8108e287994e145a3ca0b3d19e40c8, type: 3} + m_Name: + m_EditorClassIdentifier: + caption: {fileID: 6158244585406534009} + parameterManager: {fileID: 0} + propertyName: + slider: {fileID: 6158244586633658523} + inputField: {fileID: 6158244586579295859} + noteLabel: {fileID: 7386330486652876290} +--- !u!1 &6158244585406534007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244585406534008} + - component: {fileID: 6158244585406534010} + - component: {fileID: 6158244585406534009} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244585406534008 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585406534007} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6158244585233792465} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 215, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &6158244585406534010 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585406534007} + m_CullTransparentMesh: 1 +--- !u!114 &6158244585406534009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585406534007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Integer + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 78e7291cdeccdfc4fa61249845605144, type: 2} + m_sharedMaterial: {fileID: 5250768452915780979, guid: 78e7291cdeccdfc4fa61249845605144, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 25 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 3 + m_fontSizeMax: 25 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &6158244585562834552 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244585562834553} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244585562834553 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585562834552} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6158244586092265563} + m_Father: {fileID: 6158244586633658522} + m_RootOrder: 2 + 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: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &6158244585657951266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244585657951267} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244585657951267 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585657951266} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6158244586398009706} + m_Father: {fileID: 6158244586633658522} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &6158244585994109201 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244585994109202} + - component: {fileID: 6158244585994109204} + - component: {fileID: 6158244585994109203} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244585994109202 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585994109201} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6158244586633658522} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6158244585994109204 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585994109201} + m_CullTransparentMesh: 1 +--- !u!114 &6158244585994109203 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244585994109201} + 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: 10907, 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!1 &6158244586092265562 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244586092265563} + - component: {fileID: 6158244586092265565} + - component: {fileID: 6158244586092265564} + - component: {fileID: 4416041990617176705} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244586092265563 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586092265562} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6158244585562834553} + m_RootOrder: 0 + 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: 20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6158244586092265565 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586092265562} + m_CullTransparentMesh: 1 +--- !u!114 &6158244586092265564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586092265562} + 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: 10911, 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!114 &4416041990617176705 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586092265562} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e365c37b20b7e15458fab7eef4b17449, type: 3} + m_Name: + m_EditorClassIdentifier: + OnLeftClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 5889849442551835445} + m_TargetAssemblyTypeName: NotePropertyPrefab, Assembly-CSharp + m_MethodName: OnSelectSliderHandle + 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!1 &6158244586323976421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244586323976422} + - component: {fileID: 6158244586323976424} + - component: {fileID: 6158244586323976423} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244586323976422 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586323976421} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6158244585101124323} + 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!222 &6158244586323976424 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586323976421} + m_CullTransparentMesh: 1 +--- !u!114 &6158244586323976423 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586323976421} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "0\n\u200B" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: c2df694f599b22b42817910ff570a9df, type: 2} + m_sharedMaterial: {fileID: -5829441969153149921, guid: c2df694f599b22b42817910ff570a9df, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 14 + m_fontSizeBase: 14 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 3 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 1 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &6158244586398009705 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244586398009706} + - component: {fileID: 6158244586398009708} + - component: {fileID: 6158244586398009707} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244586398009706 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586398009705} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6158244585657951267} + m_RootOrder: 0 + 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: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6158244586398009708 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586398009705} + m_CullTransparentMesh: 1 +--- !u!114 &6158244586398009707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586398009705} + 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!1 &6158244586579295857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244586579295858} + - component: {fileID: 6158244586579295861} + - component: {fileID: 6158244586579295860} + - component: {fileID: 6158244586579295859} + - component: {fileID: 6158244586579295862} + m_Layer: 5 + m_Name: InputField (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244586579295858 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586579295857} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6158244585101124323} + m_Father: {fileID: 6158244585233792465} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 215, y: 0} + m_SizeDelta: {x: 50, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &6158244586579295861 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586579295857} + m_CullTransparentMesh: 1 +--- !u!114 &6158244586579295860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586579295857} + 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: 10911, 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!114 &6158244586579295859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586579295857} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, 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.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: 6158244586579295860} + m_TextViewport: {fileID: 6158244585101124323} + m_TextComponent: {fileID: 6158244586323976423} + m_Placeholder: {fileID: 0} + m_VerticalScrollbar: {fileID: 0} + m_VerticalScrollbarEventHandler: {fileID: 0} + m_LayoutGroup: {fileID: 0} + m_ScrollSensitivity: 1 + m_ContentType: 2 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 4 + m_LineType: 0 + m_HideMobileInput: 0 + m_HideSoftKeyboard: 0 + m_CharacterValidation: 2 + m_RegexValue: + m_GlobalPointSize: 14 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnSelect: + m_PersistentCalls: + m_Calls: [] + m_OnDeselect: + m_PersistentCalls: + m_Calls: [] + m_OnTextSelection: + m_PersistentCalls: + m_Calls: [] + m_OnEndTextSelection: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_OnTouchScreenKeyboardStatusChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: '0 + +' + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_RichText: 1 + m_GlobalFontAsset: {fileID: 11400000, guid: c2df694f599b22b42817910ff570a9df, type: 2} + m_OnFocusSelectAll: 1 + m_ResetOnDeActivation: 1 + m_KeepTextSelectionVisible: 0 + m_RestoreOriginalTextOnEscape: 1 + m_isRichTextEditingAllowed: 0 + m_LineLimit: 0 + isAlert: 0 + m_InputValidator: {fileID: 0} + m_ShouldActivateOnSelect: 1 +--- !u!114 &6158244586579295862 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586579295857} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e4972b7ea15fb7943ad12ed39e229140, type: 3} + m_Name: + m_EditorClassIdentifier: + _events: + - name: Reset + action: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: HeavenStudio.Editor.NumberPropertyPrefab, Assembly-CSharp + m_MethodName: ResetValue + 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 + _masterTrans: {fileID: 0} + _dropDown: {fileID: 8384641343036272350, guid: 56a45ac5cd0da2a4ab398d1a63e18d9f, type: 3} +--- !u!1 &6158244586633658521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6158244586633658522} + - component: {fileID: 6158244586633658523} + - component: {fileID: 6158244586633658524} + - component: {fileID: 1757629852665466133} + m_Layer: 5 + m_Name: Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6158244586633658522 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586633658521} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6158244585994109202} + - {fileID: 6158244585657951267} + - {fileID: 6158244585562834553} + - {fileID: 985107624212317837} + m_Father: {fileID: 6158244585233792465} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 109.5, y: 0.0000097752} + m_SizeDelta: {x: -319, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &6158244586633658523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586633658521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, 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.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: 6158244586092265564} + m_FillRect: {fileID: 6158244586398009706} + m_HandleRect: {fileID: 6158244586092265563} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 1 + m_WholeNumbers: 1 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &6158244586633658524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586633658521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e4972b7ea15fb7943ad12ed39e229140, type: 3} + m_Name: + m_EditorClassIdentifier: + _events: + - name: Reset + action: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 5889849442551835445} + m_TargetAssemblyTypeName: HeavenStudio.Editor.NumberPropertyPrefab, Assembly-CSharp + m_MethodName: ResetValue + 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 + _masterTrans: {fileID: 0} + _dropDown: {fileID: 8384641343036272350, guid: 56a45ac5cd0da2a4ab398d1a63e18d9f, type: 3} +--- !u!114 &1757629852665466133 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158244586633658521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e365c37b20b7e15458fab7eef4b17449, type: 3} + m_Name: + m_EditorClassIdentifier: + OnLeftClick: + m_PersistentCalls: + m_Calls: [] diff --git a/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab.meta b/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab.meta new file mode 100644 index 000000000..8f8d88ede --- /dev/null +++ b/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4c1bba3f89a3b7d4c879e4af8403c1f1 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Prefabs/Editor/SettingsMenu/EditorSettings.prefab b/Assets/Resources/Prefabs/Editor/SettingsMenu/EditorSettings.prefab index 9077d2985..21b10452c 100644 --- a/Assets/Resources/Prefabs/Editor/SettingsMenu/EditorSettings.prefab +++ b/Assets/Resources/Prefabs/Editor/SettingsMenu/EditorSettings.prefab @@ -485,6 +485,221 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1028994901427858970 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 908652766945587376} + - component: {fileID: 2758700610526744123} + - component: {fileID: 2422745793619625157} + m_Layer: 5 + m_Name: PreviewNotes + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &908652766945587376 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1028994901427858970} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3651890366466807628} + m_Father: {fileID: 9208581106298752703} + m_RootOrder: 0 + 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: 1165, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2758700610526744123 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1028994901427858970} + m_CullTransparentMesh: 1 +--- !u!114 &2422745793619625157 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1028994901427858970} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: Preview Note Sounds + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8597c35f18a008c428fc5870aec75766, type: 2} + m_sharedMaterial: {fileID: -6562250930271150993, guid: 8597c35f18a008c428fc5870aec75766, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 32 + m_fontSizeBase: 32 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &1172113606333422830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5150286854848416382} + - component: {fileID: 6563852384367070167} + - component: {fileID: 886629562400260718} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5150286854848416382 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172113606333422830} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6338604730276523721} + m_Father: {fileID: 3651890366466807628} + 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!222 &6563852384367070167 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172113606333422830} + m_CullTransparentMesh: 1 +--- !u!114 &886629562400260718 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172113606333422830} + 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!1 &1684521149580031745 GameObject: m_ObjectHideFlags: 0 @@ -519,7 +734,7 @@ RectTransform: - {fileID: 2807923255578696521} - {fileID: 7824470515256624502} m_Father: {fileID: 9208581106298752703} - 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} @@ -657,7 +872,7 @@ RectTransform: m_Children: - {fileID: 7292326169755866509} m_Father: {fileID: 9208581106298752703} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1008,7 +1223,7 @@ RectTransform: m_Children: - {fileID: 7785783802733199037} m_Father: {fileID: 9208581106298752703} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1699,6 +1914,82 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &5956679122814901227 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6338604730276523721} + - component: {fileID: 3933105462740838126} + - component: {fileID: 2031831209708633745} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6338604730276523721 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5956679122814901227} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5150286854848416382} + 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!222 &3933105462740838126 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5956679122814901227} + m_CullTransparentMesh: 1 +--- !u!114 &2031831209708633745 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5956679122814901227} + 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: 10901, guid: 0000000000000000f000000000000000, type: 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!1 &6125627487853319211 GameObject: m_ObjectHideFlags: 0 @@ -2116,7 +2407,7 @@ RectTransform: - {fileID: 6759422526285834496} - {fileID: 3713617371011422720} m_Father: {fileID: 9208581106298752703} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2149,6 +2440,104 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 +--- !u!1 &7607087763958660443 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3651890366466807628} + - component: {fileID: 8424769098426085944} + m_Layer: 5 + m_Name: Toggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3651890366466807628 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7607087763958660443} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5150286854848416382} + m_Father: {fileID: 908652766945587376} + 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: -181.5, y: -0.0000030994} + m_SizeDelta: {x: 30, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &8424769098426085944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7607087763958660443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, 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: 886629562400260718} + toggleTransition: 1 + graphic: {fileID: 2031831209708633745} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 9208581106079180837} + m_TargetAssemblyTypeName: HeavenStudio.Editor.EditorSettings, Assembly-CSharp + m_MethodName: OnPreviewNoteSoundsChanged + 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 + m_IsOn: 1 --- !u!1 &7720499959914799361 GameObject: m_ObjectHideFlags: 0 @@ -2635,6 +3024,7 @@ MonoBehaviour: editorScaleIncre: {fileID: 383095155661938755} scaleWSS: {fileID: 1122327647812458447} paramTooltipsToggle: {fileID: 6555551389195548591} + previewNoteSoundsToggle: {fileID: 8424769098426085944} --- !u!1 &9208581106298752702 GameObject: m_ObjectHideFlags: 0 @@ -2665,6 +3055,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: + - {fileID: 908652766945587376} - {fileID: 9208581106704273180} - {fileID: 14539832792667216} - {fileID: 6652101627242449918} @@ -2914,7 +3305,7 @@ RectTransform: m_Children: - {fileID: 9208581106828673703} m_Father: {fileID: 9208581106298752703} - m_RootOrder: 0 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Resources/Sfx/games/builtToScaleDS/PianoPreview.ogg b/Assets/Resources/Sfx/games/builtToScaleDS/PianoPreview.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6448d4d5ad14420e6d90b4e6afcebbcdaeef0656 GIT binary patch literal 10108 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 literal 0 HcmV?d00001 diff --git a/Assets/Resources/Sfx/games/builtToScaleDS/PianoPreview.ogg.meta b/Assets/Resources/Sfx/games/builtToScaleDS/PianoPreview.ogg.meta new file mode 100644 index 000000000..07c1871ee --- /dev/null +++ b/Assets/Resources/Sfx/games/builtToScaleDS/PianoPreview.ogg.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 32a60be2b7dcb764a91b761a6a3d3022 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sfx/games/gleeClub/WailPreview.wav b/Assets/Resources/Sfx/games/gleeClub/WailPreview.wav new file mode 100644 index 0000000000000000000000000000000000000000..04b80f00d1bd32a57368432198c0714d72eee3a8 GIT binary patch literal 40946 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 literal 0 HcmV?d00001 diff --git a/Assets/Resources/Sfx/games/gleeClub/WailPreview.wav.meta b/Assets/Resources/Sfx/games/gleeClub/WailPreview.wav.meta new file mode 100644 index 000000000..e5056549b --- /dev/null +++ b/Assets/Resources/Sfx/games/gleeClub/WailPreview.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 129f3ac5047e96247955adaff500b692 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Editor.unity b/Assets/Scenes/Editor.unity index f5214d28c..0baf38754 100644 --- a/Assets/Scenes/Editor.unity +++ b/Assets/Scenes/Editor.unity @@ -23060,6 +23060,7 @@ MonoBehaviour: gridGameSelector: {fileID: 1154875947} IntegerP: {fileID: 2061329665160180680, guid: fe16d477643f72b44b519c07a3012363, type: 3} FloatP: {fileID: 872153477128913846, guid: 59791cf2ac17a4e4989da45598fa57dc, type: 3} + NoteP: {fileID: 6158244585233792464, guid: 4c1bba3f89a3b7d4c879e4af8403c1f1, type: 3} ButtonP: {fileID: 161819469546819110, guid: 950cb35d8fa268649aa7dd8f2eee60ad, type: 3} BooleanP: {fileID: 161819469546819110, guid: a105c1177b918bc4ab70c00bde16f626, type: 3} DropdownP: {fileID: 6474185410112721777, guid: d001cda1595359b4994b07211f2bc938, type: 3} diff --git a/Assets/Scripts/Games/BonOdori/BonOdori.cs b/Assets/Scripts/Games/BonOdori/BonOdori.cs index 423debc6d..250e0a26a 100644 --- a/Assets/Scripts/Games/BonOdori/BonOdori.cs +++ b/Assets/Scripts/Games/BonOdori/BonOdori.cs @@ -52,7 +52,7 @@ namespace HeavenStudio.Games.Loaders new Param("variationPa", BonOdori.variationPa.PaG, "Pa Type", "Set the variation of the voice line."), new Param("variationPa_n", BonOdori.variationPa_n.Pa_nA , "Pa-n Type", "Set the variation of the voice line."), new Param("clapType", BonOdori.typeClap.SideClap, "Clap Type", "Set the type of clap."), - new Param("semitone", new EntityTypes.Integer(-24, 24, 0), "Semitone", "Set the number of semitones up or down this note should be pitched."), + new Param("semitone", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Semitone", "Set the number of semitones up or down this note should be pitched."), } }, @@ -75,7 +75,7 @@ namespace HeavenStudio.Games.Loaders new Param("variationDon", BonOdori.variationDon.DonA, "Don Type", "Set the variation of the voice line."), new Param("variationDo", BonOdori.variationDo.DoC, "Do Type", "Set the variation of the voice line."), new Param("variationDo_n", BonOdori.variationDo_n.Do_nA, "Do-n Type", "Set the variation of the voice line."), - new Param("semitone", new EntityTypes.Integer(-24, 24, 0), "Semitone", "Set the number of semitones up or down this note should be pitched."), + new Param("semitone", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Semitone", "Set the number of semitones up or down this note should be pitched."), } }, diff --git a/Assets/Scripts/Games/BuiltToScaleDS/BuiltToScaleDS.cs b/Assets/Scripts/Games/BuiltToScaleDS/BuiltToScaleDS.cs index 09fcdd71b..7854ab72c 100644 --- a/Assets/Scripts/Games/BuiltToScaleDS/BuiltToScaleDS.cs +++ b/Assets/Scripts/Games/BuiltToScaleDS/BuiltToScaleDS.cs @@ -26,12 +26,12 @@ namespace HeavenStudio.Games.Loaders { new Param.CollapseParam((x, _) => !(bool)x, new string[] { "note1", "note2", "note3", "note4", "note5", "note6"}) }), - new Param("note1", new EntityTypes.Integer(-24, 24, 0), "1st note", "Set the number of semitones up or down this note should be pitched."), - new Param("note2", new EntityTypes.Integer(-24, 24, 2), "2nd note", "Set the number of semitones up or down this note should be pitched."), - new Param("note3", new EntityTypes.Integer(-24, 24, 4), "3rd note", "Set the number of semitones up or down this note should be pitched."), - new Param("note4", new EntityTypes.Integer(-24, 24, 5), "4th note", "Set the number of semitones up or down this note should be pitched."), - new Param("note5", new EntityTypes.Integer(-24, 24, 7), "5th note", "Set the number of semitones up or down this note should be pitched. This note plays together with the 6th note."), - new Param("note6", new EntityTypes.Integer(-24, 24, 12), "6th note", "Set the number of semitones up or down this note should be pitched. This note plays together with the 5th note."), + new Param("note1", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 3, 4, "builtToScaleDS/PianoPreview"), "1st note", "Set the number of semitones up or down this note should be pitched."), + new Param("note2", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 2, 3, 4, "builtToScaleDS/PianoPreview"), "2nd note", "Set the number of semitones up or down this note should be pitched."), + new Param("note3", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 4, 3, 4, "builtToScaleDS/PianoPreview"), "3rd note", "Set the number of semitones up or down this note should be pitched."), + new Param("note4", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 5, 3, 4, "builtToScaleDS/PianoPreview"), "4th note", "Set the number of semitones up or down this note should be pitched."), + new Param("note5", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 7, 3, 4, "builtToScaleDS/PianoPreview"), "5th note", "Set the number of semitones up or down this note should be pitched. This note plays together with the 6th note."), + new Param("note6", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 12, 3, 4, "builtToScaleDS/PianoPreview"), "6th note", "Set the number of semitones up or down this note should be pitched. This note plays together with the 5th note."), } }, new GameAction("play piano", "Play Note") @@ -40,7 +40,7 @@ namespace HeavenStudio.Games.Loaders resizable = true, parameters = new List() { - new Param("type", new EntityTypes.Integer(-24, 24, 0), "Semitones", "Set the number of semitones up or down this note should be pitched.") + new Param("type", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 3, 4, "builtToScaleDS/PianoPreview"), "Semitones", "Set the number of semitones up or down this note should be pitched.") }, }, new GameAction("color", "Color Palette") diff --git a/Assets/Scripts/Games/GleeClub/GleeClub.cs b/Assets/Scripts/Games/GleeClub/GleeClub.cs index f87744499..f9e6334d1 100644 --- a/Assets/Scripts/Games/GleeClub/GleeClub.cs +++ b/Assets/Scripts/Games/GleeClub/GleeClub.cs @@ -26,17 +26,17 @@ namespace HeavenStudio.Games.Loaders resizable = true, parameters = new List() { - new Param("semiTones", new EntityTypes.Integer(-24, 24, -5), "Semitones", "Set the number of semitones up or down this note should be pitched."), - new Param("semiTones1", new EntityTypes.Integer(-24, 24, -1), "Semitones (Next)", "Set the number of semitones up or down this note should be pitched."), - new Param("semiTonesPlayer", new EntityTypes.Integer(-24, 24, 2), "Semitones (Player)", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTones", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -5, 4, 5, "gleeClub/WailPreview"), "Semitones", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTones1", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -1, 4, 5, "gleeClub/WailPreview"), "Semitones (Next)", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTonesPlayer", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 2, 4, 5, "gleeClub/WailPreview"), "Semitones (Player)", "Set the number of semitones up or down this note should be pitched."), new Param("close", GleeClub.MouthOpenClose.Both, "Close/Open Mouth", "Choose if the chorus kids should close or open their mouth."), new Param("repeat", false, "Repeating", "Toggle if the left and middle chorus kid should repeat this singing cue.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "semiTonesLeft2", "semiTonesLeft3", "semiTonesMiddle2" }) }), - new Param("semiTonesLeft2", new EntityTypes.Integer(-24, 24, 0), "Semitones (Repeat Left First)", "Set the number of semitones up or down this note should be pitched."), - new Param("semiTonesLeft3", new EntityTypes.Integer(-24, 24, 0), "Semitones (Repeat Left Last)", "Set the number of semitones up or down this note should be pitched."), - new Param("semiTonesMiddle2", new EntityTypes.Integer(-24, 24, 0), "Semitones (Repeat Middle)", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTonesLeft2", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 4, 5, "gleeClub/WailPreview"), "Semitones (Repeat Left First)", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTonesLeft3", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 4, 5, "gleeClub/WailPreview"), "Semitones (Repeat Left Last)", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTonesMiddle2", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 4, 5, "gleeClub/WailPreview"), "Semitones (Repeat Middle)", "Set the number of semitones up or down this note should be pitched."), } }, new GameAction("baton", "Baton") @@ -50,9 +50,9 @@ namespace HeavenStudio.Games.Loaders defaultLength = 4f, parameters = new List() { - new Param("semiTones", new EntityTypes.Integer(-24, 24, -1), "Semitones", "Set the number of semitones up or down this note should be pitched."), - new Param("semiTones1", new EntityTypes.Integer(-24, 24, 4), "Semitones (Next)", "Set the number of semitones up or down this note should be pitched."), - new Param("semiTonesPlayer", new EntityTypes.Integer(-24, 24, 10), "Semitones (Player)", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTones", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -1, 4, 5, "gleeClub/WailPreview"), "Semitones", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTones1", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 4, 4, 5, "gleeClub/WailPreview"), "Semitones (Next)", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTonesPlayer", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 10, 4, 5, "gleeClub/WailPreview"), "Semitones (Player)", "Set the number of semitones up or down this note should be pitched."), new Param("pitch", new EntityTypes.Float(0f, 5f, 1f), "Conductor Voice Pitch", "Choose the pitch of the conductor's voice. 1 is normal pitch.") } }, @@ -62,9 +62,9 @@ namespace HeavenStudio.Games.Loaders defaultLength = 0.5f, parameters = new List() { - new Param("semiTones", new EntityTypes.Integer(-24, 24, 0), "Semitones", "Set the number of semitones up or down this note should be pitched."), - new Param("semiTones1", new EntityTypes.Integer(-24, 24, 0), "Semitones (Next)", "Set the number of semitones up or down this note should be pitched."), - new Param("semiTonesPlayer", new EntityTypes.Integer(-24, 24, 0), "Semitones (Player)", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTones", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 4, 5, "gleeClub/WailPreview"), "Semitones", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTones1", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 4, 5, "gleeClub/WailPreview"), "Semitones (Next)", "Set the number of semitones up or down this note should be pitched."), + new Param("semiTonesPlayer", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 4, 5, "gleeClub/WailPreview"), "Semitones (Player)", "Set the number of semitones up or down this note should be pitched."), } }, new GameAction("presence", "Toggle Chorus Kids") diff --git a/Assets/Scripts/Games/LaunchParty/LaunchParty.cs b/Assets/Scripts/Games/LaunchParty/LaunchParty.cs index 27dc03f83..23c51b48a 100644 --- a/Assets/Scripts/Games/LaunchParty/LaunchParty.cs +++ b/Assets/Scripts/Games/LaunchParty/LaunchParty.cs @@ -20,10 +20,10 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("offset", new EntityTypes.Float(-1, 2, -1), "Spawn Offset", "Set when the rocket should rise up."), - new Param("note1", new EntityTypes.Integer(-24, 24, 2), "1st Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note2", new EntityTypes.Integer(-24, 24, 4), "2nd Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note3", new EntityTypes.Integer(-24, 24, 5), "3rd Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note4", new EntityTypes.Integer(-24, 24, 7), "4th Note", "Set the number of semitones up or down this note should be pitched.") + new Param("note1", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 2, 0,4, "launchParty/rocket_note"), "1st Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note2", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 4, 0,4, "launchParty/rocket_note"), "2nd Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note3", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 5, 0,4, "launchParty/rocket_note"), "3rd Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note4", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 7, 0,4, "launchParty/rocket_note"), "4th Note", "Set the number of semitones up or down this note should be pitched.") } }, new GameAction("partyCracker", "Party-Popper") @@ -33,12 +33,12 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("offset", new EntityTypes.Float(-1, 1, -1), "Spawn Offset", "Set when the rocket should rise up."), - new Param("note1", new EntityTypes.Integer(-24, 24, 4), "1st Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note2", new EntityTypes.Integer(-24, 24, 5), "2nd Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note3", new EntityTypes.Integer(-24, 24, 7), "3rd Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note4", new EntityTypes.Integer(-24, 24, 9), "4th Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note5", new EntityTypes.Integer(-24, 24, 11), "5th Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note6", new EntityTypes.Integer(-24, 24, 12), "6th Note", "Set the number of semitones up or down this note should be pitched.") + new Param("note1", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 4, 0, 4, "launchParty/popper_note"), "1st Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note2", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 5, 0, 4, "launchParty/popper_note"), "2nd Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note3", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 7, 0, 4, "launchParty/popper_note"), "3rd Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note4", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 9, 0, 4, "launchParty/popper_note"), "4th Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note5", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 11, 0, 4, "launchParty/popper_note"), "5th Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note6", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 12, 0, 4, "launchParty/popper_note"), "6th Note", "Set the number of semitones up or down this note should be pitched.") } }, new GameAction("bell", "Bell") @@ -49,15 +49,15 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("offset", new EntityTypes.Float(-1, 1, -1), "Spawn Offset", "Set when the rocket should rise up."), - new Param("note1", new EntityTypes.Integer(-24, 24, 0), "1st Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note2", new EntityTypes.Integer(-24, 24, 2), "2nd Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note3", new EntityTypes.Integer(-24, 24, 4), "3rd Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note4", new EntityTypes.Integer(-24, 24, 5), "4th Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note5", new EntityTypes.Integer(-24, 24, 7), "5th Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note6", new EntityTypes.Integer(-24, 24, 9), "6th Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note7", new EntityTypes.Integer(-24, 24, 11), "7th Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note8", new EntityTypes.Integer(-24, 24, 12), "8th Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note9", new EntityTypes.Integer(-24, 24, 0), "9th Note (Launch)", "Set the number of semitones up or down this note should be pitched."), + new Param("note1", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 0, 4, "launchParty/bell_note"), "1st Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note2", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 2, 0, 4, "launchParty/bell_short"), "2nd Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note3", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 4, 0, 4, "launchParty/bell_short"), "3rd Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note4", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 5, 0, 4, "launchParty/bell_short"), "4th Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note5", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 7, 0, 4, "launchParty/bell_short"), "5th Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note6", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 9, 0, 4, "launchParty/bell_short"), "6th Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note7", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 11, 0, 4, "launchParty/bell_short"), "7th Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note8", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 12, 0, 4, "launchParty/bell_short"), "8th Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note9", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 0, 4, "launchParty/bell_blast"), "9th Note (Launch)", "Set the number of semitones up or down this note should be pitched."), } }, new GameAction("bowlingPin", "Bowling Pin") @@ -68,21 +68,21 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("offset", new EntityTypes.Float(-1, 1, -1), "Spawn Offset", "Set when the rocket should rise up."), - new Param("note1", new EntityTypes.Integer(-24, 24, 5), "1st Note", "Set the number of semitones up or down this note should be pitched."), - new Param("note2", new EntityTypes.Integer(-24, 24, -1), "2nd Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note3", new EntityTypes.Integer(-24, 24, 0), "3rd Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note4", new EntityTypes.Integer(-24, 24, -1), "4th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note5", new EntityTypes.Integer(-24, 24, 0), "5th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note6", new EntityTypes.Integer(-24, 24, -1), "6th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note7", new EntityTypes.Integer(-24, 24, 0), "7th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note8", new EntityTypes.Integer(-24, 24, -1), "8th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note9", new EntityTypes.Integer(-24, 24, 0), "9th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note10", new EntityTypes.Integer(-24, 24, -1), "10th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note11", new EntityTypes.Integer(-24, 24, 0), "11th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note12", new EntityTypes.Integer(-24, 24, -1), "12th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note13", new EntityTypes.Integer(-24, 24, 0), "13th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note14", new EntityTypes.Integer(-24, 24, 7), "14th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), - new Param("note15", new EntityTypes.Integer(-24, 24, 7), "15th Note", "The number of semitones up or down this note should be pitched") + new Param("note1", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 5, 0, 4, "launchParty/pin"), "1st Note", "Set the number of semitones up or down this note should be pitched."), + new Param("note2", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -1, 0, 4, "launchParty/flute"), "2nd Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note3", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 0, 4, "launchParty/flute"), "3rd Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note4", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -1, 0, 4, "launchParty/flute"), "4th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note5", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 0, 4, "launchParty/flute"), "5th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note6", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -1, 0, 4, "launchParty/flute"), "6th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note7", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 0, 4, "launchParty/flute"), "7th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note8", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -1, 0, 4, "launchParty/flute"), "8th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note9", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 0, 4, "launchParty/flute"), "9th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note10", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -1, 0, 4, "launchParty/flute"), "10th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note11", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 0, 4, "launchParty/flute"), "11th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note12", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -1, 0, 4, "launchParty/flute"), "12th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note13", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 0, 4, "launchParty/flute"), "13th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note14", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 7, 0, 4, "launchParty/flute"), "14th Note (Flute)", "Set the number of semitones up or down this note should be pitched."), + new Param("note15", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 7, 0, 4, "launchParty/pin"), "15th Note", "The number of semitones up or down this note should be pitched") } }, new GameAction("posMove", "Change Launch Pad Position") diff --git a/Assets/Scripts/Games/Rockers/Rockers.cs b/Assets/Scripts/Games/Rockers/Rockers.cs index fb10c438c..63b77e791 100644 --- a/Assets/Scripts/Games/Rockers/Rockers.cs +++ b/Assets/Scripts/Games/Rockers/Rockers.cs @@ -42,7 +42,7 @@ namespace HeavenStudio.Games.Loaders new Param("5JJ", new EntityTypes.Integer(-1, 24, 0), "B3 String (JJ)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("6JJ", new EntityTypes.Integer(-1, 24, 0), "E4 String (JJ)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("sampleJJ", Rockers.PremadeSamples.None, "Premade Sample (JJ)", "Set if this riff should use a premade sample."), - new Param("pitchSampleJJ", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("pitchSampleJJ", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (JJ)", "Set how many semitones the premade sample should be pitched up."), new Param("gcJJ", false, "Glee Club Guitar (JJ)", "Toggle if JJ should use the same guitar as in the Glee Club guitar lessons in DS."), new Param("1S", new EntityTypes.Integer(-1, 24, 0), "E2 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("2S", new EntityTypes.Integer(-1, 24, 0), "A2 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), @@ -51,7 +51,7 @@ namespace HeavenStudio.Games.Loaders new Param("5S", new EntityTypes.Integer(-1, 24, 0), "B3 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("6S", new EntityTypes.Integer(-1, 24, 0), "E4 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("sampleS", Rockers.PremadeSamples.None, "Premade Sample (Soshi)", "Set if this riff should use a premade sample."), - new Param("pitchSampleS", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("pitchSampleS", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (Soshi)", "Set how many semitones the premade sample should be pitched up."), new Param("gcS", false, "Glee Club Guitar (Soshi)", "Toggle if Soshi should use the same guitar as in the Glee Club guitar lessons in DS.") }, }, @@ -62,8 +62,8 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("respond", true, "Respond", "Toggle if this guitar bend will have to be responded to by Soshi (the player)."), - new Param("1JJ", new EntityTypes.Integer(-24, 24, 1), "Pitch Bend (JJ)", "Set how many semitones up the current riff will be pitchbent."), - new Param("1S", new EntityTypes.Integer(-24, 24, 1), "Pitch Bend (Soshi)", "Set how many semitones up the current riff will be pitchbent."), + new Param("1JJ", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 1), "Pitch Bend (JJ)", "Set how many semitones up the current riff will be pitchbent."), + new Param("1S", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 1), "Pitch Bend (Soshi)", "Set how many semitones up the current riff will be pitchbent."), }, }, new GameAction("prepare", "Prepare") @@ -126,21 +126,21 @@ namespace HeavenStudio.Games.Loaders { new Param("moveCamera", true, "Move Camera", "Toggle if the camera should move to the middle."), new Param("JJ1", Rockers.PremadeSamples.ChordG5, "Premade Sample 1 (JJ)", "Set the sample to use for the 1st riff."), - new Param("pJJ1", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 1 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("pJJ1", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 1 (JJ)", "Set how many semitones the premade sample should be pitched up."), new Param("JJ2", Rockers.PremadeSamples.ChordG5, "Premade Sample 2 (JJ)", "Set the sample to use for the 2nd riff."), - new Param("pJJ2", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 2 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("pJJ2", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 2 (JJ)", "Set how many semitones the premade sample should be pitched up."), new Param("JJ3", Rockers.PremadeSamples.ChordG5, "Premade Sample 3 (JJ)", "Set the sample to use for the 3rd riff."), - new Param("pJJ3", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 3 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("pJJ3", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 3 (JJ)", "Set how many semitones the premade sample should be pitched up."), new Param("JJ4", Rockers.PremadeSamples.ChordA, "Premade Sample 4 (JJ)", "Set the sample to use for the final riff."), - new Param("pJJ4", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 4 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("pJJ4", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 4 (JJ)", "Set how many semitones the premade sample should be pitched up."), new Param("S1", Rockers.PremadeSamples.ChordG, "Premade Sample 1 (Soshi)", "Set the sample to use for the 1st riff."), - new Param("pS1", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 1 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("pS1", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 1 (Soshi)", "Set how many semitones the premade sample should be pitched up."), new Param("S2", Rockers.PremadeSamples.ChordG, "Premade Sample 2 (Soshi)", "Set the sample to use for the 2nd riff."), - new Param("pS2", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 2 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("pS2", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 2 (Soshi)", "Set how many semitones the premade sample should be pitched up."), new Param("S3", Rockers.PremadeSamples.ChordG, "Premade Sample 3 (Soshi)", "Set the sample to use for the 3rd riff."), - new Param("pS3", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 3 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("pS3", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 3 (Soshi)", "Set how many semitones the premade sample should be pitched up."), new Param("S4", Rockers.PremadeSamples.ChordA, "Premade Sample 4 (Soshi)", "Set the sample to use for the final riff."), - new Param("pS4", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 4 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("pS4", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 4 (Soshi)", "Set how many semitones the premade sample should be pitched up."), } }, new GameAction("lastOne", "Last One!") @@ -172,17 +172,17 @@ namespace HeavenStudio.Games.Loaders { new Param("moveCamera", true, "Move Camera", "Toggle if the camera should move to the middle."), new Param("JJ1", Rockers.PremadeSamples.ChordAsus4, "Premade Sample 1 (JJ)", "Set the sample to use for the 1st riff."), - new Param("pJJ1", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 1 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("pJJ1", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 1 (JJ)", "Set how many semitones the premade sample should be pitched up."), new Param("JJ2", Rockers.PremadeSamples.ChordAsus4, "Premade Sample 2 (JJ)", "Set the sample to use for the 2nd riff."), - new Param("pJJ2", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 2 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("pJJ2", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 2 (JJ)", "Set how many semitones the premade sample should be pitched up."), new Param("JJ3", Rockers.PremadeSamples.ChordAsus4, "Premade Sample 3 (JJ)", "Set the sample to use for the final riff."), - new Param("pJJ3", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 3 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("pJJ3", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 3 (JJ)", "Set how many semitones the premade sample should be pitched up."), new Param("S1", Rockers.PremadeSamples.ChordDmaj9, "Premade Sample 1 (Soshi)", "Set the sample to use for the 1st riff."), - new Param("pS1", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 1 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("pS1", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 1 (Soshi)", "Set how many semitones the premade sample should be pitched up."), new Param("S2", Rockers.PremadeSamples.ChordDmaj9, "Premade Sample 2 (Soshi)", "Set the sample to use for the 2nd riff."), - new Param("pS2", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 2 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("pS2", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 2 (Soshi)", "Set how many semitones the premade sample should be pitched up."), new Param("S3", Rockers.PremadeSamples.ChordDmaj9, "Premade Sample 3 (Soshi)", "Set the sample to use for the final riff."), - new Param("pS3", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones 3 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("pS3", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 3 (Soshi)", "Set how many semitones the premade sample should be pitched up."), } }, new GameAction("count", "Count") @@ -247,7 +247,7 @@ namespace HeavenStudio.Games.Loaders new Param("5JJ", new EntityTypes.Integer(-1, 24, 0), "B3 String (JJ)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("6JJ", new EntityTypes.Integer(-1, 24, 0), "E4 String (JJ)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("sampleJJ", Rockers.PremadeSamples.None, "Premade Sample (JJ)", "Set if this riff should use a premade sample."), - new Param("pitchSampleJJ", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("pitchSampleJJ", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (JJ)", "Set how many semitones the premade sample should be pitched up."), new Param("gcJJ", false, "Glee Club Guitar (JJ)", "Toggle if JJ should use the same guitar as in the Glee Club guitar lessons in DS."), new Param("1S", new EntityTypes.Integer(-1, 24, 0), "E2 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("2S", new EntityTypes.Integer(-1, 24, 0), "A2 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), @@ -256,7 +256,7 @@ namespace HeavenStudio.Games.Loaders new Param("5S", new EntityTypes.Integer(-1, 24, 0), "B3 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("6S", new EntityTypes.Integer(-1, 24, 0), "E4 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("sampleS", Rockers.PremadeSamples.None, "Premade Sample (Soshi)", "Set if this riff should use a premade sample."), - new Param("pitchSampleS", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("pitchSampleS", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (Soshi)", "Set how many semitones the premade sample should be pitched up."), new Param("gcS", false, "Glee Club Guitar (Soshi)", "Toggle if Soshi should use the same guitar as in the Glee Club guitar lessons in DS.") } }, @@ -272,7 +272,7 @@ namespace HeavenStudio.Games.Loaders new Param("5JJ", new EntityTypes.Integer(-1, 24, 0), "B3 String (JJ)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("6JJ", new EntityTypes.Integer(-1, 24, 0), "E4 String (JJ)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("sampleJJ", Rockers.PremadeSamples.None, "Premade Sample (JJ)", "Set if this riff should use a premade sample."), - new Param("pitchSampleJJ", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("pitchSampleJJ", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (JJ)", "Set how many semitones the premade sample should be pitched up."), new Param("gcJJ", false, "Glee Club Guitar (JJ)", "Toggle if JJ should use the same guitar as in the Glee Club guitar lessons in DS."), new Param("1S", new EntityTypes.Integer(-1, 24, 0), "E2 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("2S", new EntityTypes.Integer(-1, 24, 0), "A2 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), @@ -281,7 +281,7 @@ namespace HeavenStudio.Games.Loaders new Param("5S", new EntityTypes.Integer(-1, 24, 0), "B3 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("6S", new EntityTypes.Integer(-1, 24, 0), "E4 String (Soshi)", "Set how many semitones up the current string will be pitched. If this is left at -1, this string will not play."), new Param("sampleS", Rockers.PremadeSamples.None, "Premade Sample (Soshi)", "Set if this riff should use a premade sample."), - new Param("pitchSampleS", new EntityTypes.Integer(-24, 24, 0), "Sample Semitones (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("pitchSampleS", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (Soshi)", "Set how many semitones the premade sample should be pitched up."), new Param("gcS", false, "Glee Club Guitar (Soshi)", "Toggle if Soshi should use the same guitar as in the Glee Club guitar lessons in DS.") } }, diff --git a/Assets/Scripts/LevelEditor/EventSelector/EventParameterManager.cs b/Assets/Scripts/LevelEditor/EventSelector/EventParameterManager.cs index c16c75c98..3058a2da1 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/EventParameterManager.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/EventParameterManager.cs @@ -19,6 +19,7 @@ namespace HeavenStudio.Editor [Header("Property Prefabs")] [SerializeField] private GameObject IntegerP; [SerializeField] private GameObject FloatP; + [SerializeField] private GameObject NoteP; [SerializeField] private GameObject ButtonP; [SerializeField] private GameObject BooleanP; [SerializeField] private GameObject DropdownP; @@ -44,6 +45,7 @@ namespace HeavenStudio.Editor PropertyPrefabs = new() { { typeof(Integer), IntegerP }, { typeof(Float), FloatP }, + { typeof(Note), NoteP }, { typeof(Dropdown), DropdownP }, { typeof(Button), ButtonP }, { typeof(Color), ColorP }, diff --git a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs new file mode 100644 index 000000000..1fe9c63e4 --- /dev/null +++ b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using HeavenStudio; +using HeavenStudio.Common; +using HeavenStudio.Editor; +using HeavenStudio.Util; +using TMPro; +using UnityEngine; + +public class NotePropertyPrefab : NumberPropertyPrefab +{ + public TMP_Text noteLabel; + + private Sound previewAudioSource; + private EntityTypes.Note note; + private int offsetFromC; + + public override void SetProperties(string propertyName, object type, string caption) + { + base.SetProperties(propertyName, type, caption); + + note = (EntityTypes.Note)type; + + slider.minValue = note.min; + slider.maxValue = note.max; + + slider.wholeNumbers = true; + + offsetFromC = 3 - note.sampleNote; + + slider.value = Convert.ToSingle(parameterManager.entity[propertyName]) - offsetFromC; + _defaultValue = slider.value; + + inputField.text = slider.value.ToString(); + noteLabel.text = GetNoteText(note, (int)slider.value + offsetFromC); + + slider.onValueChanged.AddListener( + _ => + { + int trueSemitones = (int)slider.value + offsetFromC; + inputField.text = slider.value.ToString(); + parameterManager.entity[propertyName] = trueSemitones; + if (slider.value != _defaultValue) + { + this.caption.text = _captionText + "*"; + } + else + { + this.caption.text = _captionText; + } + + noteLabel.text = GetNoteText(note, trueSemitones); + + PlayPreview(note, trueSemitones); + } + ); + + inputField.onSelect.AddListener( + _ => + Editor.instance.editingInputField = true + ); + + inputField.onEndEdit.AddListener( + _ => + { + int trueSemitones = (int)slider.value + offsetFromC; + + slider.value = Convert.ToSingle(inputField.text); + parameterManager.entity[propertyName] = trueSemitones; + Editor.instance.editingInputField = false; + if (slider.value != _defaultValue) + { + this.caption.text = _captionText + "*"; + } + else + { + this.caption.text = _captionText; + } + + noteLabel.text = GetNoteText(note, trueSemitones); + + PlayPreview(note, trueSemitones); + } + ); + } + + public void OnSelectSliderHandle() + { + PlayPreview(note, (int)slider.value + offsetFromC); + } + + private void PlayPreview(EntityTypes.Note note, int currentSemitones) + { + if (note.sampleName.Equals("") || !PersistentDataManager.gameSettings.previewNoteSounds) return; + + if (previewAudioSource != null) + { + previewAudioSource.Stop(true); + previewAudioSource = null; + } + + float pitch = SoundByte.GetPitchFromSemiTones(currentSemitones, true); + previewAudioSource = SoundByte.PlayOneShotGame(note.sampleName, pitch: pitch, volume: 0.75f, forcePlay: true, ignoreConductorPause: true); + } + + private static readonly string[] notes = { "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#" }; + + private static string GetNoteText(EntityTypes.Note note, int currentSemitones) + { + int noteIndex = (note.sampleNote + currentSemitones) % 12; + if (noteIndex < 0) + { + noteIndex += 12; + } + + int octaveOffset = (note.sampleNote + currentSemitones) / 12; + int octave = note.sampleOctave + octaveOffset; + + if ((note.sampleNote + currentSemitones) % 12 < 0) + { + octave--; + } + + return notes[noteIndex] + octave; + } +} diff --git a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs.meta b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs.meta new file mode 100644 index 000000000..f88007ab4 --- /dev/null +++ b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d8108e287994e145a3ca0b3d19e40c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NumberPropertyPrefab.cs b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NumberPropertyPrefab.cs index 25b0f80d9..b2a82b4f6 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NumberPropertyPrefab.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NumberPropertyPrefab.cs @@ -14,8 +14,8 @@ namespace HeavenStudio.Editor [Space(10)] public Slider slider; public TMP_InputField inputField; - - private float _defaultValue; + + protected float _defaultValue; public override void SetProperties(string propertyName, object type, string caption) { @@ -70,7 +70,7 @@ namespace HeavenStudio.Editor } ); break; - + case EntityTypes.Float fl: slider.minValue = fl.min; slider.maxValue = fl.max; @@ -119,6 +119,8 @@ namespace HeavenStudio.Editor ); break; + case EntityTypes.Note: break; + default: throw new ArgumentOutOfRangeException( nameof(type), type, "I don't know how to make a property of this type!" @@ -135,7 +137,7 @@ namespace HeavenStudio.Editor { switch (type) { - case EntityTypes.Integer integer: + case EntityTypes.Integer or EntityTypes.Note: slider.onValueChanged.AddListener(_ => UpdateCollapse((int)slider.value)); inputField.onEndEdit.AddListener(_ => UpdateCollapse((int)slider.value)); @@ -143,19 +145,41 @@ namespace HeavenStudio.Editor break; - case EntityTypes.Float fl: + case EntityTypes.Float: slider.onValueChanged.AddListener(newVal => UpdateCollapse((float)Math.Round(newVal, 4))); inputField.onEndEdit.AddListener(_ => UpdateCollapse(slider.value)); UpdateCollapse((float)Math.Round(slider.value, 4)); break; - + default: throw new ArgumentOutOfRangeException( nameof(type), type, "I don't know how to make a property of this type!" ); } } + + private static readonly string[] notes = { + "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#" + }; + + private static string GetNoteText(EntityTypes.Note note, int newSemitones) + { + int noteIndex = (note.sampleNote + newSemitones) % 12; + if (noteIndex < 0) { + noteIndex += 12; + } + + int octaveOffset = (note.sampleNote + newSemitones) / 12; + int octave = note.sampleOctave + octaveOffset; + + if ((note.sampleNote + newSemitones) % 12 < 0) + { + octave--; + } + + return notes[noteIndex] + octave; + } private void Update() { diff --git a/Assets/Scripts/LevelEditor/Timeline/Timeline.cs b/Assets/Scripts/LevelEditor/Timeline/Timeline.cs index f6543a3ef..d4b825261 100644 --- a/Assets/Scripts/LevelEditor/Timeline/Timeline.cs +++ b/Assets/Scripts/LevelEditor/Timeline/Timeline.cs @@ -890,6 +890,7 @@ namespace HeavenStudio.Editor.Track { object returnVal = ep[i].parameter switch { EntityTypes.Integer intVal => intVal.val, + EntityTypes.Note noteVal => noteVal.val, EntityTypes.Float floatVal => floatVal.val, EntityTypes.Button buttonVal => buttonVal.defaultLabel, EntityTypes.Dropdown ddVal => new EntityTypes.DropdownObj(ddVal), diff --git a/Assets/Scripts/Minigames.cs b/Assets/Scripts/Minigames.cs index bda685143..b0e7d28d3 100644 --- a/Assets/Scripts/Minigames.cs +++ b/Assets/Scripts/Minigames.cs @@ -252,6 +252,8 @@ namespace HeavenStudio e.dynamicData.Add(param.propertyName, ((EntityTypes.Integer)param.parameter).val); else if (type == typeof(EntityTypes.Float)) e.dynamicData.Add(param.propertyName, ((EntityTypes.Float)param.parameter).val); + else if (type == typeof(EntityTypes.Note)) + e.dynamicData.Add(param.propertyName, ((EntityTypes.Note)param.parameter).val); else if (type.IsEnum) e.dynamicData.Add(param.propertyName, (int)param.parameter); else @@ -263,7 +265,7 @@ namespace HeavenStudio { try { - if (type == typeof(EntityTypes.Integer)) + if (type == typeof(EntityTypes.Integer) || type == typeof(EntityTypes.Note)) e.dynamicData[param.propertyName] = (int)e[param.propertyName]; else if (type == typeof(EntityTypes.Float)) e.dynamicData[param.propertyName] = (float)e[param.propertyName]; @@ -295,6 +297,8 @@ namespace HeavenStudio // use default value if (type == typeof(EntityTypes.Integer)) e.dynamicData[param.propertyName] = ((EntityTypes.Integer)param.parameter).val; + else if (type == typeof(EntityTypes.Note)) + e.dynamicData[param.propertyName] = ((EntityTypes.Note)param.parameter).val; else if (type == typeof(EntityTypes.Float)) e.dynamicData[param.propertyName] = ((EntityTypes.Float)param.parameter).val; else if (type.IsEnum && param.propertyName != "ease") @@ -1368,7 +1372,7 @@ namespace HeavenStudio new((x, e) => (bool)x, "semitones", "cents"), new((x, e) => !(bool)x, "pitch"), }), - new Param("semitones", new EntityTypes.Integer(-24, 24, 0), "Semitones", "The semitones of the sfx."), + new Param("semitones", new EntityTypes.Integer(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Semitones", "The semitones of the sfx."), new Param("cents", new EntityTypes.Integer(-100, 100, 0), "Cents", "The cents of the sfx."), new Param("pitch", new EntityTypes.Float(0, 5, 1), "Pitch", "The pitch of the sfx."), new Param("volume", new EntityTypes.Float(0, 2, 1), "Volume", "The volume of the sfx."), diff --git a/Assets/Scripts/PersistentDataManager.cs b/Assets/Scripts/PersistentDataManager.cs index a0206c126..a47e27a4a 100644 --- a/Assets/Scripts/PersistentDataManager.cs +++ b/Assets/Scripts/PersistentDataManager.cs @@ -132,7 +132,8 @@ namespace HeavenStudio.Common bool letterboxFxEnable = true, int editorScale = 0, bool scaleWScreenSize = false, - bool showParamTooltips = true + bool showParamTooltips = true, + bool previewNoteSounds = true ) { this.showSplash = showSplash; @@ -154,6 +155,7 @@ namespace HeavenStudio.Common this.editorScale = editorScale; this.scaleWScreenSize = scaleWScreenSize; this.showParamTooltips = showParamTooltips; + this.previewNoteSounds = previewNoteSounds; this.perfectChallengeType = perfectChallengeType; this.isMedalOn = isMedalOn; @@ -194,6 +196,7 @@ namespace HeavenStudio.Common public int editorScale; public bool scaleWScreenSize; public bool showParamTooltips; + public bool previewNoteSounds; // public bool showCornerTooltips; // Gameplay Settings diff --git a/Assets/Scripts/UI/LeftClickEvent.cs b/Assets/Scripts/UI/LeftClickEvent.cs new file mode 100644 index 000000000..eafdaa098 --- /dev/null +++ b/Assets/Scripts/UI/LeftClickEvent.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +public class LeftClickEvent : Selectable +{ + public UnityEvent OnLeftClick; + public override void OnPointerDown(PointerEventData eventData) + { + base.OnPointerDown(eventData); + + if(eventData.button != PointerEventData.InputButton.Left) return; + OnLeftClick?.Invoke(); + } +} diff --git a/Assets/Scripts/UI/LeftClickEvent.cs.meta b/Assets/Scripts/UI/LeftClickEvent.cs.meta new file mode 100644 index 000000000..b65fdcf3a --- /dev/null +++ b/Assets/Scripts/UI/LeftClickEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e365c37b20b7e15458fab7eef4b17449 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/SettingsDialog/Tabs/EditorSettings.cs b/Assets/Scripts/UI/SettingsDialog/Tabs/EditorSettings.cs index e07593791..92d9d28fb 100644 --- a/Assets/Scripts/UI/SettingsDialog/Tabs/EditorSettings.cs +++ b/Assets/Scripts/UI/SettingsDialog/Tabs/EditorSettings.cs @@ -13,6 +13,7 @@ namespace HeavenStudio.Editor [SerializeField] Button editorScaleDecre, editorScaleIncre; [SerializeField] Toggle scaleWSS; [SerializeField] Toggle paramTooltipsToggle; + [SerializeField] Toggle previewNoteSoundsToggle; // [SerializeField] Toggle cornerTooltipsToggle; private void Start() @@ -21,6 +22,7 @@ namespace HeavenStudio.Editor discordRPCCheckbox.isOn = PersistentDataManager.gameSettings.discordRPCEnable; scaleWSS.isOn = PersistentDataManager.gameSettings.scaleWScreenSize; paramTooltipsToggle.isOn = PersistentDataManager.gameSettings.showParamTooltips; + previewNoteSoundsToggle.isOn = PersistentDataManager.gameSettings.previewNoteSounds; SetDecreIncreInteractable(); } @@ -61,6 +63,11 @@ namespace HeavenStudio.Editor PersistentDataManager.gameSettings.showParamTooltips = paramTooltipsToggle.isOn; } + public void OnPreviewNoteSoundsChanged() + { + PersistentDataManager.gameSettings.previewNoteSounds = previewNoteSoundsToggle.isOn; + } + // public void OnCornerTooltipsChanged() // { // PersistentDataManager.gameSettings.showParamTooltips = cornerTooltipsToggle.isOn; diff --git a/Assets/Scripts/Util/EntityTypes.cs b/Assets/Scripts/Util/EntityTypes.cs index be539739a..b51045c36 100644 --- a/Assets/Scripts/Util/EntityTypes.cs +++ b/Assets/Scripts/Util/EntityTypes.cs @@ -22,7 +22,29 @@ namespace HeavenStudio this.max = max; } } + + public struct Note + { + public static int maxSemitones = 36; + public int min; + public int val; + public int max; + + public int sampleNote; + public int sampleOctave; + public string sampleName; + public Note(int min, int max, int val = 0, int sampleNote = 0, int sampleOctave = 0, string sampleName = "") + { + this.min = min; + this.val = val; + this.max = max; + this.sampleNote = sampleNote; + this.sampleOctave = sampleOctave; + this.sampleName = sampleName; + } + } + public struct Float { public float min; diff --git a/Assets/Scripts/Util/Sound.cs b/Assets/Scripts/Util/Sound.cs index 21586f46a..791732999 100644 --- a/Assets/Scripts/Util/Sound.cs +++ b/Assets/Scripts/Util/Sound.cs @@ -24,6 +24,7 @@ namespace HeavenStudio.Util private AudioSource audioSource; private Conductor cond; + public bool ignoreConductorPause = false; private double startTime; @@ -114,7 +115,7 @@ namespace HeavenStudio.Util double dspTime = AudioSettings.dspTime; if (!(available || played)) { - if (!(cond.isPlaying || cond.isPaused)) + if (!ignoreConductorPause && !(cond.isPlaying || cond.isPaused)) { GameManager.instance.SoundObjects.Release(this); return; @@ -171,7 +172,7 @@ namespace HeavenStudio.Util if (played) { - if (!(cond.isPlaying || cond.isPaused)) + if (!ignoreConductorPause && !(cond.isPlaying || cond.isPaused)) { GameManager.instance.SoundObjects.Release(this); return; @@ -182,7 +183,7 @@ namespace HeavenStudio.Util return; } - if (cond.isPaused || cond.SongPitch == 0) + if ((!ignoreConductorPause && cond.isPaused) || cond.SongPitch == 0) { if (!paused) { @@ -233,8 +234,13 @@ namespace HeavenStudio.Util audioSource.UnPause(); } - public void Stop() + public void Stop(bool releaseToPool = false) { + if(releaseToPool && audioSource.isPlaying) + { + GameManager.instance.SoundObjects.Release(this); + } + available = true; played = false; paused = false; @@ -246,6 +252,7 @@ namespace HeavenStudio.Util loopEndBeat = -1; loopDone = false; startTime = 0; + ignoreConductorPause = false; audioSource.loop = false; audioSource.Stop(); diff --git a/Assets/Scripts/Util/SoundByte.cs b/Assets/Scripts/Util/SoundByte.cs index 51b7981ee..5236b3a29 100644 --- a/Assets/Scripts/Util/SoundByte.cs +++ b/Assets/Scripts/Util/SoundByte.cs @@ -284,7 +284,7 @@ namespace HeavenStudio.Util /// Unpitched, non-scheduled, non-looping sounds are played using a global One-Shot audio source that doesn't create a Sound object. /// Looped sounds return their created Sound object so they can be canceled after creation. /// - public static Sound PlayOneShot(string name, double beat = -1, float pitch = 1f, float volume = 1f, bool looping = false, string game = null, double offset = 0f) + public static Sound PlayOneShot(string name, double beat = -1, float pitch = 1f, float volume = 1f, bool looping = false, string game = null, double offset = 0f, bool ignoreConductorPause = false) { AudioClip clip = null; string soundName = name.Split('/')[^1]; @@ -334,6 +334,7 @@ namespace HeavenStudio.Util snd.volume = volume; snd.looping = looping; snd.offset = offset; + snd.ignoreConductorPause = ignoreConductorPause; snd.Play(); return snd; @@ -355,7 +356,7 @@ namespace HeavenStudio.Util /// /// Schedules a sound to be played at a specific time in seconds. /// - public static Sound PlayOneShotScheduled(string name, double targetTime, float pitch = 1f, float volume = 1f, bool looping = false, string game = null) + public static Sound PlayOneShotScheduled(string name, double targetTime, float pitch = 1f, float volume = 1f, bool looping = false, string game = null, bool ignoreConductorPause = false) { Sound snd = GetAvailableScheduledSound(); AudioClip clip = null; @@ -405,6 +406,7 @@ namespace HeavenStudio.Util snd.scheduled = true; snd.scheduledTime = targetTime; + snd.ignoreConductorPause = ignoreConductorPause; snd.Play(); return snd; @@ -415,13 +417,13 @@ namespace HeavenStudio.Util /// Unpitched, non-scheduled, non-looping sounds are played using a global One-Shot audio source that doesn't create a Sound object. /// Looped sounds return their created Sound object so they can be canceled after creation. /// - public static Sound PlayOneShotGame(string name, double beat = -1, float pitch = 1f, float volume = 1f, bool looping = false, bool forcePlay = false, double offset = 0f) + public static Sound PlayOneShotGame(string name, double beat = -1, float pitch = 1f, float volume = 1f, bool looping = false, bool forcePlay = false, double offset = 0f, bool ignoreConductorPause = false) { string gameName = name.Split('/')[0]; var inf = GameManager.instance.GetGameInfo(gameName); if (GameManager.instance.currentGame == gameName || forcePlay) { - return PlayOneShot($"games/{name}", beat, pitch, volume, looping, inf.usesAssetBundle ? gameName : null, offset); + return PlayOneShot($"games/{name}", beat, pitch, volume, looping, inf.usesAssetBundle ? gameName : null, offset, ignoreConductorPause); } return null; @@ -431,13 +433,13 @@ namespace HeavenStudio.Util /// Schedules a sound to be played at a specific time in seconds. /// Audio clip is fetched from minigame resources /// - public static Sound PlayOneShotScheduledGame(string name, double targetTime, float pitch = 1f, float volume = 1f, bool looping = false, bool forcePlay = false) + public static Sound PlayOneShotScheduledGame(string name, double targetTime, float pitch = 1f, float volume = 1f, bool looping = false, bool forcePlay = false, bool ignoreConductorPause = false) { string gameName = name.Split('/')[0]; var inf = GameManager.instance.GetGameInfo(gameName); if (GameManager.instance.currentGame == gameName || forcePlay) { - return PlayOneShotScheduled($"games/{name}", targetTime, pitch, volume, looping, inf.usesAssetBundle ? gameName : null); + return PlayOneShotScheduled($"games/{name}", targetTime, pitch, volume, looping, inf.usesAssetBundle ? gameName : null, ignoreConductorPause); } return null;