From cdd55bb7852f2b5e0948c9e4526e2c03e3ff31ec Mon Sep 17 00:00:00 2001 From: EpicGamer2469 Date: Thu, 21 Mar 2024 14:10:58 -0500 Subject: [PATCH] Add previewing sounds for notes --- .../Editor/EventProperties/Note.prefab | 10 +- .../Sfx/games/gleeClub/WailPreview.wav | Bin 0 -> 40946 bytes .../Sfx/games/gleeClub/WailPreview.wav.meta | 22 ++++ .../Games/BuiltToScaleDS/BuiltToScaleDS.cs | 14 +-- Assets/Scripts/Games/GleeClub/GleeClub.cs | 24 ++-- .../Scripts/Games/LaunchParty/LaunchParty.cs | 68 +++++------ .../PropertyPrefabs/NotePropertyPrefab.cs | 114 ++++++++++++++++++ .../NotePropertyPrefab.cs.meta | 11 ++ .../PropertyPrefabs/NumberPropertyPrefab.cs | 62 +--------- Assets/Scripts/Util/EntityTypes.cs | 4 +- Assets/Scripts/Util/Sound.cs | 8 +- Assets/Scripts/Util/SoundByte.cs | 14 ++- 12 files changed, 225 insertions(+), 126 deletions(-) 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 diff --git a/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab b/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab index ef0e53368..c6799f8a1 100644 --- a/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab +++ b/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab @@ -198,7 +198,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 6158244585233792465} - - component: {fileID: 6158244585233792466} + - component: {fileID: 5889849442551835445} m_Layer: 5 m_Name: Note m_TagString: Untagged @@ -229,7 +229,7 @@ RectTransform: m_AnchoredPosition: {x: 459.58514, y: -25} m_SizeDelta: {x: 879.1703, y: 30} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &6158244585233792466 +--- !u!114 &5889849442551835445 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -238,7 +238,7 @@ MonoBehaviour: m_GameObject: {fileID: 6158244585233792464} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6e9ad350a96f5644dbb1e4686a6bcaed, type: 3} + m_Script: {fileID: 11500000, guid: 3d8108e287994e145a3ca0b3d19e40c8, type: 3} m_Name: m_EditorClassIdentifier: caption: {fileID: 6158244585406534009} @@ -1022,7 +1022,7 @@ MonoBehaviour: action: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 6158244585233792466} + - m_Target: {fileID: 0} m_TargetAssemblyTypeName: HeavenStudio.Editor.NumberPropertyPrefab, Assembly-CSharp m_MethodName: ResetValue m_Mode: 1 @@ -1146,7 +1146,7 @@ MonoBehaviour: action: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 6158244585233792466} + - m_Target: {fileID: 0} m_TargetAssemblyTypeName: HeavenStudio.Editor.NumberPropertyPrefab, Assembly-CSharp m_MethodName: ResetValue m_Mode: 1 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/Scripts/Games/BuiltToScaleDS/BuiltToScaleDS.cs b/Assets/Scripts/Games/BuiltToScaleDS/BuiltToScaleDS.cs index d5e6256e5..34a0f0b5c 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.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 3, 4), "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), "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), "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), "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), "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), "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/Piano"), "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/Piano"), "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/Piano"), "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/Piano"), "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/Piano"), "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/Piano"), "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.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 3, 4), "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/Piano"), "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 5d9a7324b..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.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -5, 4, 5), "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), "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), "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.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 4, 5), "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), "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), "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.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -1, 4, 5), "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), "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), "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.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 4, 5), "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), "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), "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 59afe46ec..235cb208c 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.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 2, 0, 4), "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), "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), "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), "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.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 4, 0, 4), "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), "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), "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), "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), "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), "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.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 0, 4), "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), "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), "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), "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), "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), "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), "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), "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), "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.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 5, 0, 4), "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), "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), "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), "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), "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), "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), "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), "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), "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), "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), "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), "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), "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), "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), "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/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs new file mode 100644 index 000000000..6956d54b7 --- /dev/null +++ b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using HeavenStudio; +using HeavenStudio.Editor; +using HeavenStudio.Util; +using TMPro; +using UnityEngine; + +public class NotePropertyPrefab : NumberPropertyPrefab +{ + public TMP_Text noteLabel; + + private Sound previewAudioSource; + + public override void SetProperties(string propertyName, object type, string caption) + { + base.SetProperties(propertyName, type, caption); + + EntityTypes.Note note = (EntityTypes.Note)type; + + slider.minValue = note.min; + slider.maxValue = note.max; + _defaultValue = note.val; + + slider.wholeNumbers = true; + + int offsetFromC = 3 - note.sampleNote; + + slider.value = Convert.ToSingle(parameterManager.entity[propertyName]) - offsetFromC; + 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); + } + ); + } + + private void PlayPreview(EntityTypes.Note note, int currentSemitones) + { + if (note.sampleName.Equals("")) return; + + if(previewAudioSource) previewAudioSource.Stop(); + + 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 719f6f47e..b2a82b4f6 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NumberPropertyPrefab.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NumberPropertyPrefab.cs @@ -14,10 +14,8 @@ namespace HeavenStudio.Editor [Space(10)] public Slider slider; public TMP_InputField inputField; - - public TMP_Text noteLabel; - - private float _defaultValue; + + protected float _defaultValue; public override void SetProperties(string propertyName, object type, string caption) { @@ -73,60 +71,6 @@ namespace HeavenStudio.Editor ); break; - case EntityTypes.Note note: - slider.minValue = note.min; - slider.maxValue = note.max; - _defaultValue = note.val; - - slider.wholeNumbers = true; - - slider.value = Convert.ToSingle(parameterManager.entity[propertyName]); - inputField.text = slider.value.ToString(); - noteLabel.text = GetNoteText(note, (int) slider.value); - - slider.onValueChanged.AddListener( - _ => - { - inputField.text = slider.value.ToString(); - parameterManager.entity[propertyName] = (int) slider.value; - if (slider.value != _defaultValue) - { - this.caption.text = _captionText + "*"; - } - else - { - this.caption.text = _captionText; - } - - noteLabel.text = GetNoteText(note, (int) slider.value); - } - ); - - inputField.onSelect.AddListener( - _ => - Editor.instance.editingInputField = true - ); - - inputField.onEndEdit.AddListener( - _ => - { - slider.value = Convert.ToSingle(inputField.text); - parameterManager.entity[propertyName] = (int) slider.value; - Editor.instance.editingInputField = false; - if (slider.value != _defaultValue) - { - this.caption.text = _captionText + "*"; - } - else - { - this.caption.text = _captionText; - } - - noteLabel.text = GetNoteText(note, (int) slider.value); - } - ); - break; - case EntityTypes.Float fl: slider.minValue = fl.min; slider.maxValue = fl.max; @@ -175,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!" diff --git a/Assets/Scripts/Util/EntityTypes.cs b/Assets/Scripts/Util/EntityTypes.cs index 88342169e..b51045c36 100644 --- a/Assets/Scripts/Util/EntityTypes.cs +++ b/Assets/Scripts/Util/EntityTypes.cs @@ -32,14 +32,16 @@ namespace HeavenStudio public int sampleNote; public int sampleOctave; + public string sampleName; - public Note(int min, int max, int val = 0, int sampleNote = 0, int sampleOctave = 0) + 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; } } diff --git a/Assets/Scripts/Util/Sound.cs b/Assets/Scripts/Util/Sound.cs index 21586f46a..681c94bec 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) { @@ -246,6 +247,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;