From 203f7f4c029ffffd95a8ee2af9fcce172b6c1db6 Mon Sep 17 00:00:00 2001 From: minenice55 Date: Sun, 7 Apr 2024 22:02:55 -0400 Subject: [PATCH 1/7] offset fix (#836) --- Assets/Scripts/Conductor.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Assets/Scripts/Conductor.cs b/Assets/Scripts/Conductor.cs index e61e60dfe..f2c6445dc 100644 --- a/Assets/Scripts/Conductor.cs +++ b/Assets/Scripts/Conductor.cs @@ -96,7 +96,7 @@ namespace HeavenStudio private float timelineVolume = 1f; private float minigameVolume = 1f; - const bool doPitchResync = true; + const bool doPitchResync = false; public void SetTimelinePitch(float pitch, bool resync = false) { @@ -234,7 +234,6 @@ namespace HeavenStudio _metronomeTally = 0; startTime = DateTime.Now; - absTime = 0; absTimeAdjust = 0; deferTimeKeeping = musicSource.clip != null; @@ -253,7 +252,6 @@ namespace HeavenStudio deferTimeKeeping = false; // Debug.Log($"dsptime: {dsp}, deferred timekeeping for {DateTime.Now - startTime} seconds (delta dsp {dsp - dspStart})"); startTime = DateTime.Now; - absTime = 0; absTimeAdjust = 0; dspStart = dsp; } From af217a23e9adbee874fb434d9fa96dd58e6ef3e3 Mon Sep 17 00:00:00 2001 From: EpicGamer2469 <62869918+Epicgamer2469@users.noreply.github.com> Date: Sun, 7 Apr 2024 21:18:51 -0500 Subject: [PATCH 2/7] Updates to note paramaters + some additional sound fixes (for r2) (#834) * Note param stuff + some other fixes * Stuff just for r2 --- .../BuiltToScaleDS/Sounds/PianoPreview.ogg | Bin 10108 -> 0 bytes .../Sounds/PianoPreview.ogg.meta | 22 -- .../Games/GleeClub/Sounds/WailPreview.wav | Bin 40946 -> 0 bytes .../GleeClub/Sounds/WailPreview.wav.meta | 22 -- .../Editor/EventProperties/Note.prefab | 277 +++++++++++++++++- .../Scripts/Games/BoardMeeting/BMExecutive.cs | 2 +- Assets/Scripts/Games/BonOdori/BonOdori.cs | 39 ++- .../Games/BuiltToScaleDS/BuiltToScaleDS.cs | 14 +- .../Games/ChargingChicken/ChargingChicken.cs | 2 +- Assets/Scripts/Games/GleeClub/ChorusKid.cs | 7 +- Assets/Scripts/Games/GleeClub/GleeClub.cs | 24 +- .../Scripts/Games/LaunchParty/LaunchParty.cs | 68 ++--- Assets/Scripts/Games/Manzai/Manzai.cs | 8 +- .../Scripts/Games/RhythmTweezers/LongHair.cs | 4 +- Assets/Scripts/Games/Rockers/Rockers.cs | 246 ++++++++++------ Assets/Scripts/Games/Rockers/RockersInput.cs | 4 +- Assets/Scripts/Games/Rockers/RockersRocker.cs | 59 +--- Assets/Scripts/Games/SeeSaw/SeeSaw.cs | 2 +- .../Scripts/Games/SlotMonster/SlotMonster.cs | 6 +- Assets/Scripts/Games/Tunnel/Tunnel.cs | 12 +- .../EventSelector/EventParameterManager.cs | 24 +- .../EventSelector/EventPropertyPrefab.cs | 1 + .../PropertyPrefabs/DropdownPropertyPrefab.cs | 91 +++++- .../PropertyPrefabs/NotePropertyPrefab.cs | 76 +++-- .../PropertyPrefabs/NumberPropertyPrefab.cs | 22 -- .../Scripts/LevelEditor/Timeline/Timeline.cs | 1 + Assets/Scripts/Minigames.cs | 4 + Assets/Scripts/NoteSample.cs | 13 + Assets/Scripts/NoteSample.cs.meta | 3 + Assets/Scripts/Util/EntityTypes.cs | 32 +- Assets/Scripts/Util/MultiSound.cs | 2 +- Assets/Scripts/Util/Sound.cs | 38 ++- 32 files changed, 765 insertions(+), 360 deletions(-) delete mode 100644 Assets/Bundled/Games/BuiltToScaleDS/Sounds/PianoPreview.ogg delete mode 100644 Assets/Bundled/Games/BuiltToScaleDS/Sounds/PianoPreview.ogg.meta delete mode 100644 Assets/Bundled/Games/GleeClub/Sounds/WailPreview.wav delete mode 100644 Assets/Bundled/Games/GleeClub/Sounds/WailPreview.wav.meta create mode 100644 Assets/Scripts/NoteSample.cs create mode 100644 Assets/Scripts/NoteSample.cs.meta diff --git a/Assets/Bundled/Games/BuiltToScaleDS/Sounds/PianoPreview.ogg b/Assets/Bundled/Games/BuiltToScaleDS/Sounds/PianoPreview.ogg deleted file mode 100644 index 6448d4d5ad14420e6d90b4e6afcebbcdaeef0656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10108 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 diff --git a/Assets/Bundled/Games/BuiltToScaleDS/Sounds/PianoPreview.ogg.meta b/Assets/Bundled/Games/BuiltToScaleDS/Sounds/PianoPreview.ogg.meta deleted file mode 100644 index 07c1871ee..000000000 --- a/Assets/Bundled/Games/BuiltToScaleDS/Sounds/PianoPreview.ogg.meta +++ /dev/null @@ -1,22 +0,0 @@ -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/Bundled/Games/GleeClub/Sounds/WailPreview.wav b/Assets/Bundled/Games/GleeClub/Sounds/WailPreview.wav deleted file mode 100644 index 04b80f00d1bd32a57368432198c0714d72eee3a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40946 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 diff --git a/Assets/Bundled/Games/GleeClub/Sounds/WailPreview.wav.meta b/Assets/Bundled/Games/GleeClub/Sounds/WailPreview.wav.meta deleted file mode 100644 index e5056549b..000000000 --- a/Assets/Bundled/Games/GleeClub/Sounds/WailPreview.wav.meta +++ /dev/null @@ -1,22 +0,0 @@ -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/Resources/Prefabs/Editor/EventProperties/Note.prefab b/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab index f7bbb2a5e..4bc37a4f0 100644 --- a/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab +++ b/Assets/Resources/Prefabs/Editor/EventProperties/Note.prefab @@ -30,13 +30,13 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 6158244586633658522} - m_RootOrder: 3 + m_Father: {fileID: 8117968045240430172} + m_RootOrder: 0 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_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 47, y: 23.44} m_Pivot: {x: 0, y: 0.5} --- !u!222 &6991969534857496180 CanvasRenderer: @@ -100,7 +100,7 @@ MonoBehaviour: m_fontSizeMin: 3 m_fontSizeMax: 20 m_fontStyle: 0 - m_HorizontalAlignment: 1 + m_HorizontalAlignment: 2 m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 @@ -137,6 +137,208 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &4464354052749239616 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3080040525156679747} + - component: {fileID: 7690655211411837336} + - component: {fileID: 2364948491564333022} + m_Layer: 5 + m_Name: Flat Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3080040525156679747 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4464354052749239616} + 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: 8117968045240430172} + m_RootOrder: 1 + 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: 47, y: 16.41} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &7690655211411837336 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4464354052749239616} + m_CullTransparentMesh: 1 +--- !u!114 &2364948491564333022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4464354052749239616} + 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: (Db4) + 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: 4292730333 + m_fontColor: {r: 0.8679245, g: 0.8679245, b: 0.8679245, 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: 20 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 3 + m_fontSizeMax: 14 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + 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 &5263626353470047177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8117968045240430172} + - component: {fileID: 7498406572278276061} + m_Layer: 5 + m_Name: Note Label Container + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8117968045240430172 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5263626353470047177} + 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: 985107624212317837} + - {fileID: 3080040525156679747} + m_Father: {fileID: 6158244586633658522} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 47, y: 40} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &7498406572278276061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5263626353470047177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 3 + m_Spacing: -3 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &6158244585101124322 GameObject: m_ObjectHideFlags: 0 @@ -247,6 +449,7 @@ MonoBehaviour: slider: {fileID: 6158244586633658523} inputField: {fileID: 6158244586579295859} noteLabel: {fileID: 7386330486652876290} + flatLabel: {fileID: 2364948491564333022} --- !u!1 &6158244585406534007 GameObject: m_ObjectHideFlags: 0 @@ -623,6 +826,35 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e365c37b20b7e15458fab7eef4b17449, 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: 6158244586092265564} OnLeftClick: m_PersistentCalls: m_Calls: @@ -1098,7 +1330,7 @@ RectTransform: - {fileID: 6158244585994109202} - {fileID: 6158244585657951267} - {fileID: 6158244585562834553} - - {fileID: 985107624212317837} + - {fileID: 8117968045240430172} m_Father: {fileID: 6158244585233792465} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1201,6 +1433,35 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e365c37b20b7e15458fab7eef4b17449, 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: 0} OnLeftClick: m_PersistentCalls: m_Calls: [] diff --git a/Assets/Scripts/Games/BoardMeeting/BMExecutive.cs b/Assets/Scripts/Games/BoardMeeting/BMExecutive.cs index 6e4577760..1fad560cf 100644 --- a/Assets/Scripts/Games/BoardMeeting/BMExecutive.cs +++ b/Assets/Scripts/Games/BoardMeeting/BMExecutive.cs @@ -26,7 +26,7 @@ namespace HeavenStudio.Games.Scripts_BoardMeeting { if (rollLoop != null) { - rollLoop.Stop(); + rollLoop.KillLoop(); } } diff --git a/Assets/Scripts/Games/BonOdori/BonOdori.cs b/Assets/Scripts/Games/BonOdori/BonOdori.cs index 38de92bc8..1b53f3e96 100644 --- a/Assets/Scripts/Games/BonOdori/BonOdori.cs +++ b/Assets/Scripts/Games/BonOdori/BonOdori.cs @@ -48,11 +48,11 @@ namespace HeavenStudio.Games.Loaders new((x, _) => (int)x == 1, new string[] { "variationPa"}), new((x, _) => (int)x == 2, new string[] { "variationPa_n"}), }), - new Param("variationPan", BonOdori.variationPan.PanC, "Pan Type", "Set the variation of the voice line."), - 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("variationPan", new EntityTypes.NoteSampleDropdown(BonOdori.variationPan.PanC, BonOdori.GetSample, "semitone"), "Pan Type", "Set the variation of the voice line."), + new Param("variationPa", new EntityTypes.NoteSampleDropdown(BonOdori.variationPa.PaG, BonOdori.GetSample, "semitone"), "Pa Type", "Set the variation of the voice line."), + new Param("variationPa_n", new EntityTypes.NoteSampleDropdown(BonOdori.variationPa_n.Pa_nA, BonOdori.GetSample, "semitone") , "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(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Semitone", "Set the number of semitones up or down this note should be pitched."), + new Param("semitone", new EntityTypes.Note(offsetToC: false), "Semitone", "Set the number of semitones up or down this note should be pitched."), }, }, @@ -71,10 +71,10 @@ namespace HeavenStudio.Games.Loaders new((x, _) => (int)x == 1, new string[] { "variationDo"}), new((x, _) => (int)x == 2, new string[] { "variationDo_n"}), }), - 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(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Semitone", "Set the number of semitones up or down this note should be pitched."), + new Param("variationDon", new EntityTypes.NoteSampleDropdown(BonOdori.variationDon.DonA, BonOdori.GetSample, "semitone"), "Don Type", "Set the variation of the voice line."), + new Param("variationDo", new EntityTypes.NoteSampleDropdown(BonOdori.variationDo.DoC, BonOdori.GetSample, "semitone"), "Do Type", "Set the variation of the voice line."), + new Param("variationDo_n", new EntityTypes.NoteSampleDropdown(BonOdori.variationDo_n.Do_nA, BonOdori.GetSample, "semitone"), "Do-n Type", "Set the variation of the voice line."), + new Param("semitone", new EntityTypes.Note(offsetToC: false), "Semitone", "Set the number of semitones up or down this note should be pitched."), }, }, @@ -251,6 +251,29 @@ namespace HeavenStudio.Games DoG = 1 } + public static readonly Dictionary NoteSamples = new() + { + { variationPan.PanC, new("bonOdori/pan1", 3, 4) }, + { variationPan.PanE, new("bonOdori/pan2", 7, 4) }, + { variationPan.PanA, new("bonOdori/pan3", 0, 4) }, + { variationPa_n.Pa_nA, new("bonOdori/pa_n1", 0, 4) }, + { variationPa_n.Pa_nC, new("bonOdori/pa_n2", 3, 4) }, + { variationPa.PaG, new("bonOdori/pa1", 7, 4) }, + { variationDon.DonA, new("bonOdori/don1", 0, 4) }, + { variationDon.DonD, new("bonOdori/don2", 5, 4) }, + { variationDon.DonC, new("bonOdori/don3", 3, 4) }, + { variationDon.DonG, new("bonOdori/don4", 10, 4) }, + { variationDo_n.Do_nA, new("bonOdori/do_n1", 0, 4) }, + { variationDo_n.Do_nG, new("bonOdori/do_n2", 7, 4) }, + { variationDo.DoC, new("bonOdori/do1", 3, 4) }, + { variationDo.DoG, new("bonOdori/do2", 7, 4) } + }; + + public static NoteSample GetSample(object sampleEnum) + { + return NoteSamples[sampleEnum]; + } + public static BonOdori instance { get; set; } public void Awake() diff --git a/Assets/Scripts/Games/BuiltToScaleDS/BuiltToScaleDS.cs b/Assets/Scripts/Games/BuiltToScaleDS/BuiltToScaleDS.cs index 4ce680f64..fc48e2228 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, "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 Param("note1", new EntityTypes.Note(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(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(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(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(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(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, "builtToScaleDS/PianoPreview"), "Semitones", "Set the number of semitones up or down this note should be pitched.") + new Param("type", new EntityTypes.Note(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/ChargingChicken/ChargingChicken.cs b/Assets/Scripts/Games/ChargingChicken/ChargingChicken.cs index dc94f0013..8439ee350 100644 --- a/Assets/Scripts/Games/ChargingChicken/ChargingChicken.cs +++ b/Assets/Scripts/Games/ChargingChicken/ChargingChicken.cs @@ -848,7 +848,7 @@ namespace HeavenStudio.Games Conductor.instance.FadeMinigameVolume(0, 0, 1); drumTempVolume = 1; - if (isWhirringPlaying) { whirring.Stop(); isWhirringPlaying = false; } + if (isWhirringPlaying) { whirring.KillLoop(); isWhirringPlaying = false; } } //make sure music volume resetting can be remembered between blastoffs diff --git a/Assets/Scripts/Games/GleeClub/ChorusKid.cs b/Assets/Scripts/Games/GleeClub/ChorusKid.cs index 3b8e374e0..f79c0c74b 100644 --- a/Assets/Scripts/Games/GleeClub/ChorusKid.cs +++ b/Assets/Scripts/Games/GleeClub/ChorusKid.cs @@ -74,7 +74,7 @@ namespace HeavenStudio.Games.Scripts_GleeClub anim.SetBool("Mega", true); anim.Play("OpenMouth", 0, 0); shouldMegaClose = true; - if (currentSound != null) currentSound.Stop(); + if (currentSound != null) currentSound.KillLoop(); SoundByte.PlayOneShotGame("gleeClub/LoudWailStart"); currentSound = SoundByte.PlayOneShotGame("gleeClub/LoudWailLoop", -1, currentPitch, 1f, true); BeatAction.New(game, new List() @@ -95,7 +95,7 @@ namespace HeavenStudio.Games.Scripts_GleeClub anim.SetBool("Mega", false); shouldMegaClose = false; anim.Play("OpenMouth", 0, 0); - if (currentSound != null) currentSound.Stop(); + if (currentSound != null) currentSound.KillLoop(); currentSound = SoundByte.PlayOneShotGame("gleeClub/WailLoop", -1, currentPitch, 1f, true); } @@ -104,7 +104,8 @@ namespace HeavenStudio.Games.Scripts_GleeClub if (!singing || disappeared) return; singing = false; anim.Play(mega ? "MegaCloseMouth" : "CloseMouth", 0, 0); - if (currentSound != null) currentSound.Stop(); + if (currentSound != null) currentSound.KillLoop(); + currentSound = null; if (playSound) SoundByte.PlayOneShotGame("gleeClub/StopWail"); } } diff --git a/Assets/Scripts/Games/GleeClub/GleeClub.cs b/Assets/Scripts/Games/GleeClub/GleeClub.cs index 7b2e213aa..567e4acd8 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, "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("semiTones", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -5, 4, 5, "gleeClub/WailLoop"), "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/WailLoop"), "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/WailLoop"), "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, "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 Param("semiTonesLeft2", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 4, 5, "gleeClub/WailLoop"), "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/WailLoop"), "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/WailLoop"), "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, "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("semiTones", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, -1, 4, 5, "gleeClub/WailLoop"), "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/WailLoop"), "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/WailLoop"), "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, "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 Param("semiTones", new EntityTypes.Note(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0, 4, 5, "gleeClub/WailLoop"), "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/WailLoop"), "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/WailLoop"), "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 59c8e88ce..5c5829496 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, "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 Param("note1", new EntityTypes.Note(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(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(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(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, "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 Param("note1", new EntityTypes.Note(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(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(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(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(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(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, "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 Param("note1", new EntityTypes.Note(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(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(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(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(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(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(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(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(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, "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 Param("note1", new EntityTypes.Note(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(-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(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(-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(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(-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(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(-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(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(-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(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(-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(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(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(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/Manzai/Manzai.cs b/Assets/Scripts/Games/Manzai/Manzai.cs index 708eb6571..3974d3c6a 100644 --- a/Assets/Scripts/Games/Manzai/Manzai.cs +++ b/Assets/Scripts/Games/Manzai/Manzai.cs @@ -572,7 +572,7 @@ namespace HeavenStudio.Games if (crowdSound != null) { - crowdSound.Stop(); + crowdSound.KillLoop(); } } @@ -588,7 +588,7 @@ namespace HeavenStudio.Games { if (crowdSound != null) { - crowdSound.Stop(); + crowdSound.KillLoop(); } crowdSound = SoundByte.PlayOneShotGame("manzai/disappointed"); @@ -774,7 +774,7 @@ namespace HeavenStudio.Games if (crowdSound != null) { - crowdSound.Stop(); + crowdSound.KillLoop(); } } @@ -782,7 +782,7 @@ namespace HeavenStudio.Games { if (crowdSound != null) { - crowdSound.Stop(); + crowdSound.KillLoop(); } if (!missedWithWrongButton) diff --git a/Assets/Scripts/Games/RhythmTweezers/LongHair.cs b/Assets/Scripts/Games/RhythmTweezers/LongHair.cs index e6b627f7d..40b5875f5 100644 --- a/Assets/Scripts/Games/RhythmTweezers/LongHair.cs +++ b/Assets/Scripts/Games/RhythmTweezers/LongHair.cs @@ -66,7 +66,7 @@ namespace HeavenStudio.Games.Scripts_RhythmTweezers tweezers.hitOnFrame++; if (pullSound != null) - pullSound.Stop(); + pullSound.KillLoop(); pluckState = -1; } @@ -78,7 +78,7 @@ namespace HeavenStudio.Games.Scripts_RhythmTweezers tweezers.anim.Play("Tweezers_Idle", 0, 0); if (pullSound != null) - pullSound.Stop(); + pullSound.KillLoop(); pluckState = -1; game.ScoreMiss(); diff --git a/Assets/Scripts/Games/Rockers/Rockers.cs b/Assets/Scripts/Games/Rockers/Rockers.cs index 67a954e28..96b2265e2 100644 --- a/Assets/Scripts/Games/Rockers/Rockers.cs +++ b/Assets/Scripts/Games/Rockers/Rockers.cs @@ -35,25 +35,25 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("respond", true, "Respond", "Toggle if this guitar riff will have to be responded to by Soshi (the player)."), - new Param("1JJ", new EntityTypes.Integer(-1, 24, 0), "E2 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("2JJ", new EntityTypes.Integer(-1, 24, 0), "A2 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("3JJ", new EntityTypes.Integer(-1, 24, 0), "D3 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("4JJ", new EntityTypes.Integer(-1, 24, 0), "G3 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("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(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("1JJ", new EntityTypes.Note(-1, 24, 0, 7, 2, offsetToC: false), "E2 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("2JJ", new EntityTypes.Note(-1, 24, 0, 0, 2, offsetToC: false), "A2 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("3JJ", new EntityTypes.Note(-1, 24, 0, 5, 3, offsetToC: false), "D3 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("4JJ", new EntityTypes.Note(-1, 24, 0, 10, 3, offsetToC: false), "G3 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("5JJ", new EntityTypes.Note(-1, 24, 0, 2, 3, offsetToC: false), "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.Note(-1, 24, 0, 7, 4, offsetToC: false), "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", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.None, Rockers.GetSample, "pitchSampleJJ"), "Premade Sample (JJ)", "Set if this riff should use a premade sample."), + new Param("pitchSampleJJ", new EntityTypes.Note(offsetToC: false), "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."), - new Param("3S", new EntityTypes.Integer(-1, 24, 0), "D3 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("4S", new EntityTypes.Integer(-1, 24, 0), "G3 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("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(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("1S", new EntityTypes.Note(-1, 24, 0, 7, 2, offsetToC: false), "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.Note(-1, 24, 0, 0, 2, offsetToC: false), "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."), + new Param("3S", new EntityTypes.Note(-1, 24, 0, 5, 3, offsetToC: false), "D3 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("4S", new EntityTypes.Note(-1, 24, 0, 10, 3, offsetToC: false), "G3 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("5S", new EntityTypes.Note(-1, 24, 0, 2, 3, offsetToC: false), "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.Note(-1, 24, 0, 7, 4, offsetToC: false), "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", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.None, Rockers.GetSample, "pitchSampleS"), "Premade Sample (Soshi)", "Set if this riff should use a premade sample."), + new Param("pitchSampleS", new EntityTypes.Note(offsetToC: false), "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.") - }, + } }, new GameAction("bend", "Bend") { @@ -125,22 +125,22 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { 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(-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(-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(-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(-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(-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(-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(-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(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 4 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("JJ1", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordG5, Rockers.GetSample, "pJJ1"), "Premade Sample 1 (JJ)", "Set the sample to use for the 1st riff."), + new Param("pJJ1", new EntityTypes.Note(offsetToC: false), "Sample Semitones 1 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("JJ2", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordG5, Rockers.GetSample, "pJJ2"), "Premade Sample 2 (JJ)", "Set the sample to use for the 2nd riff."), + new Param("pJJ2", new EntityTypes.Note(offsetToC: false), "Sample Semitones 2 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("JJ3", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordG5, Rockers.GetSample, "pJJ3"), "Premade Sample 3 (JJ)", "Set the sample to use for the 3rd riff."), + new Param("pJJ3", new EntityTypes.Note(offsetToC: false), "Sample Semitones 3 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("JJ4", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordA, Rockers.GetSample, "pJJ4"), "Premade Sample 4 (JJ)", "Set the sample to use for the final riff."), + new Param("pJJ4", new EntityTypes.Note(offsetToC: false), "Sample Semitones 4 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("S1", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordG, Rockers.GetSample, "pS1"), "Premade Sample 1 (Soshi)", "Set the sample to use for the 1st riff."), + new Param("pS1", new EntityTypes.Note(offsetToC: false), "Sample Semitones 1 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("S2", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordG, Rockers.GetSample, "pS2"), "Premade Sample 2 (Soshi)", "Set the sample to use for the 2nd riff."), + new Param("pS2", new EntityTypes.Note(offsetToC: false), "Sample Semitones 2 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("S3", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordG, Rockers.GetSample, "pS3"), "Premade Sample 3 (Soshi)", "Set the sample to use for the 3rd riff."), + new Param("pS3", new EntityTypes.Note(offsetToC: false), "Sample Semitones 3 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("S4", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordA, Rockers.GetSample, "pS4"), "Premade Sample 4 (Soshi)", "Set the sample to use for the final riff."), + new Param("pS4", new EntityTypes.Note(offsetToC: false), "Sample Semitones 4 (Soshi)", "Set how many semitones the premade sample should be pitched up."), } }, new GameAction("lastOne", "Last One!") @@ -171,18 +171,18 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { 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(-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(-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(-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(-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(-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(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones 3 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("JJ1", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordAsus4, Rockers.GetSample, "pJJ1"), "Premade Sample 1 (JJ)", "Set the sample to use for the 1st riff."), + new Param("pJJ1", new EntityTypes.Note(offsetToC: false), "Sample Semitones 1 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("JJ2", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordAsus4, Rockers.GetSample, "pJJ2"), "Premade Sample 2 (JJ)", "Set the sample to use for the 2nd riff."), + new Param("pJJ2", new EntityTypes.Note(offsetToC: false), "Sample Semitones 2 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("JJ3", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordAsus4, Rockers.GetSample, "pJJ3"), "Premade Sample 3 (JJ)", "Set the sample to use for the final riff."), + new Param("pJJ3", new EntityTypes.Note(offsetToC: false), "Sample Semitones 3 (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("S1", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordDmaj9, Rockers.GetSample, "pS1"), "Premade Sample 1 (Soshi)", "Set the sample to use for the 1st riff."), + new Param("pS1", new EntityTypes.Note(offsetToC: false), "Sample Semitones 1 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("S2", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordDmaj9, Rockers.GetSample, "pS2"), "Premade Sample 2 (Soshi)", "Set the sample to use for the 2nd riff."), + new Param("pS2", new EntityTypes.Note(offsetToC: false), "Sample Semitones 2 (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("S3", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.ChordDmaj9, Rockers.GetSample, "pS3"), "Premade Sample 3 (Soshi)", "Set the sample to use for the final riff."), + new Param("pS3", new EntityTypes.Note(offsetToC: false), "Sample Semitones 3 (Soshi)", "Set how many semitones the premade sample should be pitched up."), } }, new GameAction("count", "Count") @@ -240,23 +240,23 @@ namespace HeavenStudio.Games.Loaders resizable = true, parameters = new List() { - new Param("1JJ", new EntityTypes.Integer(-1, 24, 0), "E2 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("2JJ", new EntityTypes.Integer(-1, 24, 0), "A2 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("3JJ", new EntityTypes.Integer(-1, 24, 0), "D3 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("4JJ", new EntityTypes.Integer(-1, 24, 0), "G3 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("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(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("1JJ", new EntityTypes.Note(-1, 24, 0, 7, 2, offsetToC: false), "E2 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("2JJ", new EntityTypes.Note(-1, 24, 0, 0, 2, offsetToC: false), "A2 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("3JJ", new EntityTypes.Note(-1, 24, 0, 5, 3, offsetToC: false), "D3 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("4JJ", new EntityTypes.Note(-1, 24, 0, 10, 3, offsetToC: false), "G3 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("5JJ", new EntityTypes.Note(-1, 24, 0, 2, 3, offsetToC: false), "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.Note(-1, 24, 0, 7, 4, offsetToC: false), "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", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.None, Rockers.GetSample, "pitchSampleJJ"), "Premade Sample (JJ)", "Set if this riff should use a premade sample."), + new Param("pitchSampleJJ", new EntityTypes.Note(offsetToC: false), "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."), - new Param("3S", new EntityTypes.Integer(-1, 24, 0), "D3 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("4S", new EntityTypes.Integer(-1, 24, 0), "G3 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("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(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("1S", new EntityTypes.Note(-1, 24, 0, 7, 2, offsetToC: false), "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.Note(-1, 24, 0, 0, 2, offsetToC: false), "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."), + new Param("3S", new EntityTypes.Note(-1, 24, 0, 5, 3, offsetToC: false), "D3 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("4S", new EntityTypes.Note(-1, 24, 0, 10, 3, offsetToC: false), "G3 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("5S", new EntityTypes.Note(-1, 24, 0, 2, 3, offsetToC: false), "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.Note(-1, 24, 0, 7, 4, offsetToC: false), "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", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.None, Rockers.GetSample, "pitchSampleS"), "Premade Sample (Soshi)", "Set if this riff should use a premade sample."), + new Param("pitchSampleS", new EntityTypes.Note(offsetToC: false), "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.") } }, @@ -265,23 +265,23 @@ namespace HeavenStudio.Games.Loaders resizable = true, parameters = new List() { - new Param("1JJ", new EntityTypes.Integer(-1, 24, 0), "E2 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("2JJ", new EntityTypes.Integer(-1, 24, 0), "A2 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("3JJ", new EntityTypes.Integer(-1, 24, 0), "D3 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("4JJ", new EntityTypes.Integer(-1, 24, 0), "G3 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("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(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (JJ)", "Set how many semitones the premade sample should be pitched up."), + new Param("1JJ", new EntityTypes.Note(-1, 24, 0, 7, 2, offsetToC: false), "E2 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("2JJ", new EntityTypes.Note(-1, 24, 0, 0, 2, offsetToC: false), "A2 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("3JJ", new EntityTypes.Note(-1, 24, 0, 5, 3, offsetToC: false), "D3 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("4JJ", new EntityTypes.Note(-1, 24, 0, 10, 3, offsetToC: false), "G3 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("5JJ", new EntityTypes.Note(-1, 24, 0, 2, 3, offsetToC: false), "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.Note(-1, 24, 0, 7, 4, offsetToC: false), "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", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.None, Rockers.GetSample, "pitchSampleJJ"), "Premade Sample (JJ)", "Set if this riff should use a premade sample."), + new Param("pitchSampleJJ", new EntityTypes.Note(offsetToC: false), "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."), - new Param("3S", new EntityTypes.Integer(-1, 24, 0), "D3 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("4S", new EntityTypes.Integer(-1, 24, 0), "G3 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("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(-EntityTypes.Note.maxSemitones, EntityTypes.Note.maxSemitones, 0), "Sample Semitones (Soshi)", "Set how many semitones the premade sample should be pitched up."), + new Param("1S", new EntityTypes.Note(-1, 24, 0, 7, 2, offsetToC: false), "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.Note(-1, 24, 0, 0, 2, offsetToC: false), "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."), + new Param("3S", new EntityTypes.Note(-1, 24, 0, 5, 3, offsetToC: false), "D3 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("4S", new EntityTypes.Note(-1, 24, 0, 10, 3, offsetToC: false), "G3 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("5S", new EntityTypes.Note(-1, 24, 0, 2, 3, offsetToC: false), "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.Note(-1, 24, 0, 7, 4, offsetToC: false), "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", new EntityTypes.NoteSampleDropdown(Rockers.PremadeSamples.None, Rockers.GetSample, "pitchSampleS"), "Premade Sample (Soshi)", "Set if this riff should use a premade sample."), + new Param("pitchSampleS", new EntityTypes.Note(offsetToC: false), "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.") } }, @@ -341,6 +341,58 @@ namespace HeavenStudio.Games DoremiNoteA2, DoremiNoteE2 } + + public static readonly Dictionary NoteSamples = new() + { + { PremadeSamples.None, new NoteSample() }, + { PremadeSamples.BendG5, new("rockers/BendG5", 10, 5) }, + { PremadeSamples.BendC6, new("rockers/BendC6", 3, 6) }, + { PremadeSamples.ChordA, new("rockers/rocker/rockerChordA", 0, 4) }, + { PremadeSamples.ChordAsus4, new("rockers/rocker/rockerChordAsus4", 0, 4) }, + { PremadeSamples.ChordBm, new("rockers/rocker/rockerChordBm", 2, 4) }, + { PremadeSamples.ChordCSharpm7, new("rockers/rocker/rockerChordC#m7", 4, 4) }, + { PremadeSamples.ChordDmaj7, new("rockers/rocker/rockerChordDmaj7", 5, 4) }, + { PremadeSamples.ChordDmaj9, new("rockers/rocker/rockerChordDmaj9", 5, 4) }, + { PremadeSamples.ChordFSharp5, new("rockers/rocker/rockerChordF#5", 9, 4) }, + { PremadeSamples.ChordG, new("rockers/rocker/rockerChordG", 10, 4) }, + { PremadeSamples.ChordG5, new("rockers/rocker/rockerChordG5", 10, 4) }, + { PremadeSamples.ChordGdim7, new("rockers/rocker/rockerChordGdim7", 10, 4) }, + { PremadeSamples.ChordGm, new("rockers/rocker/rockerChordGm", 10, 4) }, + { PremadeSamples.NoteASharp4, new("rockers/rocker/rockerNoteA#4", 1, 4) }, + { PremadeSamples.NoteA5, new("rockers/rocker/rockerNoteA5", 0, 5) }, + { PremadeSamples.PracticeChordD, new("rockers/rocker/rockerPracticeChordD", 5, 4) }, + { PremadeSamples.Remix6ChordA, new("rockers/rocker/rockerRemix6ChordA", 0, 4) }, + { PremadeSamples.Remix10ChordD, new("rockers/rocker/rockerRemix10ChordD", 5, 4) }, + { PremadeSamples.Remix10ChordFSharpm, new("rockers/rocker/rockerRemix10ChordF#m", 9, 4) }, + { PremadeSamples.DoremiChordA7, new("rockers/doremi/doremiChordA7", 0, 4) }, + { PremadeSamples.DoremiChordAm7, new("rockers/doremi/doremiChordAm7", 0, 4) }, + { PremadeSamples.DoremiChordC, new("rockers/doremi/doremiChordC", 3, 4) }, + { PremadeSamples.DoremiChordC7, new("rockers/doremi/doremiChordC7", 3, 4) }, + { PremadeSamples.DoremiChordCadd9, new("rockers/doremi/doremiChordCadd9", 3, 4) }, + { PremadeSamples.DoremiChordDm, new("rockers/doremi/doremiChordDm", 5, 4) }, + { PremadeSamples.DoremiChordDm7, new("rockers/doremi/doremiChordDm7", 5, 4) }, + { PremadeSamples.DoremiChordEm, new("rockers/doremi/doremiChordEm", 7, 4) }, + { PremadeSamples.DoremiChordF, new("rockers/doremi/doremiChordF", 8, 4) }, + { PremadeSamples.DoremiChordFadd9, new("rockers/doremi/doremiChordFadd9", 8, 4) }, + { PremadeSamples.DoremiChordFm, new("rockers/doremi/doremiChordFm", 8, 4) }, + { PremadeSamples.DoremiChordG, new("rockers/doremi/doremiChordG", 10, 4) }, + { PremadeSamples.DoremiChordG7, new("rockers/doremi/doremiChordG7", 10, 4) }, + { PremadeSamples.DoremiChordGm, new("rockers/doremi/doremiChordGm", 10, 4) }, + { PremadeSamples.DoremiChordGsus4, new("rockers/doremi/doremiChordGsus4", 10, 4) }, + { PremadeSamples.DoremiNoteA2, new("rockers/doremi/doremiNoteA2", 0, 2) }, + { PremadeSamples.DoremiNoteE2, new("rockers/doremi/doremiNoteE2", 7, 2) }, + }; + + public static NoteSample GetSample(object sampleEnum) + { + return NoteSamples[sampleEnum]; + } + + public static NoteSample GetSample(int sampleIndex) + { + return NoteSamples[(PremadeSamples)sampleIndex]; + } + public enum WhoMutes { JJ, @@ -700,7 +752,7 @@ namespace HeavenStudio.Games }), new BeatAction.Action(beat + 3, delegate { - JJ.StrumStrings(false, new int[6], (PremadeSamples)JJSamples[0], JJPitches[0]); + JJ.StrumStrings(false, new int[6], GetSample(JJSamples[0]), JJPitches[0]); }), new BeatAction.Action(beat + 3.5f, delegate { @@ -708,7 +760,7 @@ namespace HeavenStudio.Games }), new BeatAction.Action(beat + 4.5f, delegate { - JJ.StrumStrings(false, new int[6], (PremadeSamples)JJSamples[1], JJPitches[1]); + JJ.StrumStrings(false, new int[6], GetSample(JJSamples[1]), JJPitches[1]); }), new BeatAction.Action(beat + 5f, delegate { @@ -716,7 +768,7 @@ namespace HeavenStudio.Games }), new BeatAction.Action(beat + 6, delegate { - JJ.StrumStrings(false, new int[6], (PremadeSamples)JJSamples[2], JJPitches[2]); + JJ.StrumStrings(false, new int[6], GetSample(JJSamples[2]), JJPitches[2]); }), new BeatAction.Action(beat + 6.5f, delegate { @@ -724,15 +776,15 @@ namespace HeavenStudio.Games }), }); RockersInput riffComp = Instantiate(rockerInputRef, transform); - riffComp.Init(false, new int[6], beat, 3, (PremadeSamples)SoshiSamples[0], SoshiPitches[0]); + riffComp.Init(false, new int[6], beat, 3, GetSample(SoshiSamples[0]), SoshiPitches[0]); ScheduleInput(beat, 3.5f, InputAction_TriggerDown, JustMute, MuteMiss, Empty); RockersInput riffComp2 = Instantiate(rockerInputRef, transform); - riffComp2.Init(false, new int[6], beat, 4.5f, (PremadeSamples)SoshiSamples[1], SoshiPitches[1]); + riffComp2.Init(false, new int[6], beat, 4.5f, GetSample(SoshiSamples[1]), SoshiPitches[1]); ScheduleInput(beat, 5f, InputAction_TriggerDown, JustMute, MuteMiss, Empty); RockersInput riffComp3 = Instantiate(rockerInputRef, transform); - riffComp3.Init(false, new int[6], beat, 6, (PremadeSamples)SoshiSamples[2], SoshiPitches[2]); + riffComp3.Init(false, new int[6], beat, 6, GetSample(SoshiSamples[2]), SoshiPitches[2]); ScheduleInput(beat, 6.5f, InputAction_TriggerDown, JustMute, MuteMiss, Empty); } @@ -755,7 +807,7 @@ namespace HeavenStudio.Games }), new BeatAction.Action(beat + 3, delegate { - JJ.StrumStrings(false, new int[6], (PremadeSamples)JJSamples[0], JJPitches[0]); + JJ.StrumStrings(false, new int[6], GetSample(JJSamples[0]), JJPitches[0]); }), new BeatAction.Action(beat + 4, delegate { @@ -763,7 +815,7 @@ namespace HeavenStudio.Games }), new BeatAction.Action(beat + 4.5f, delegate { - JJ.StrumStrings(false, new int[6], (PremadeSamples)JJSamples[1], JJPitches[1]); + JJ.StrumStrings(false, new int[6], GetSample(JJSamples[1]), JJPitches[1]); }), new BeatAction.Action(beat + 5.5f, delegate { @@ -771,7 +823,7 @@ namespace HeavenStudio.Games }), new BeatAction.Action(beat + 6, delegate { - JJ.StrumStrings(false, new int[6], (PremadeSamples)JJSamples[2], JJPitches[2]); + JJ.StrumStrings(false, new int[6], GetSample(JJSamples[2]), JJPitches[2]); }), new BeatAction.Action(beat + 6.5, delegate { @@ -779,7 +831,7 @@ namespace HeavenStudio.Games }), new BeatAction.Action(beat + 7, delegate { - JJ.StrumStrings(false, new int[6], (PremadeSamples)JJSamples[3], JJPitches[3], false, true); + JJ.StrumStrings(false, new int[6], GetSample(JJSamples[3]), JJPitches[3], false, true); }), new BeatAction.Action(beat + 10, delegate { @@ -787,19 +839,19 @@ namespace HeavenStudio.Games }), }); RockersInput riffComp = Instantiate(rockerInputRef, transform); - riffComp.Init(false, new int[6], beat, 3, (PremadeSamples)SoshiSamples[0], SoshiPitches[0]); + riffComp.Init(false, new int[6], beat, 3, GetSample(SoshiSamples[0]), SoshiPitches[0]); ScheduleAutoplayInput(beat, 4, InputAction_BasicPress, JustMute, MuteMiss, Empty); RockersInput riffComp2 = Instantiate(rockerInputRef, transform); - riffComp2.Init(false, new int[6], beat, 4.5f, (PremadeSamples)SoshiSamples[1], SoshiPitches[1]); + riffComp2.Init(false, new int[6], beat, 4.5f, GetSample(SoshiSamples[1]), SoshiPitches[1]); ScheduleAutoplayInput(beat, 5.5f, InputAction_BasicPress, JustMute, MuteMiss, Empty); RockersInput riffComp3 = Instantiate(rockerInputRef, transform); - riffComp3.Init(false, new int[6], beat, 6, (PremadeSamples)SoshiSamples[2], SoshiPitches[2]); + riffComp3.Init(false, new int[6], beat, 6, GetSample(SoshiSamples[2]), SoshiPitches[2]); ScheduleInput(beat, 6.5f, InputAction_BasicPress, JustMute, MuteMiss, Empty); RockersInput riffComp4 = Instantiate(rockerInputRef, transform); - riffComp4.Init(false, new int[6], beat, 7, (PremadeSamples)SoshiSamples[3], SoshiPitches[3], true); + riffComp4.Init(false, new int[6], beat, 7, GetSample(SoshiSamples[3]), SoshiPitches[3], true); ScheduleAutoplayInput(beat, 10, InputAction_BasicPress, JustMute, MuteMiss, Empty); } @@ -845,12 +897,12 @@ namespace HeavenStudio.Games e["4JJ"], e["5JJ"], e["6JJ"], - }, (PremadeSamples)e["sampleJJ"], e["pitchSampleJJ"]); + }, GetSample(e["sampleJJ"]), e["pitchSampleJJ"]); })); actions.Add(new BeatAction.Action(e.beat + e.length, delegate { JJ.Mute(); })); RockersInput riffComp = Instantiate(rockerInputRef, transform); riffComp.Init(e["gcS"], new int[6] { e["1S"], e["2S"], e["3S"], e["4S"], e["5S"], e["6S"] }, beat, e.beat - beat, - (PremadeSamples)e["sampleS"], e["pitchSampleS"]); + GetSample(e["sampleS"]), e["pitchSampleS"]); if (e.length <= 0.5f) ScheduleInput(beat, e.beat - beat + e.length, InputAction_BasicPress, JustMute, MuteMiss, Empty); else ScheduleAutoplayInput(beat, e.beat - beat + e.length, InputAction_BasicPress, JustMute, MuteMiss, Empty); } @@ -866,12 +918,12 @@ namespace HeavenStudio.Games e["4JJ"], e["5JJ"], e["6JJ"], - }, (PremadeSamples)e["sampleJJ"], e["pitchSampleJJ"], false, true); + }, GetSample(e["sampleJJ"]), e["pitchSampleJJ"], false, true); })); actions.Add(new BeatAction.Action(e.beat + e.length, delegate { JJ.Mute(); })); RockersInput riffComp = Instantiate(rockerInputRef, transform); riffComp.Init(e["gcS"], new int[6] { e["1S"], e["2S"], e["3S"], e["4S"], e["5S"], e["6S"] }, beat, e.beat - beat, - (PremadeSamples)e["sampleS"], e["pitchSampleS"], true); + GetSample(e["sampleS"]), e["pitchSampleS"], true); if (e.length <= 0.5f) ScheduleInput(beat, e.beat - beat + e.length, InputAction_BasicPress, JustMute, MuteMiss, Empty); else ScheduleAutoplayInput(beat, e.beat - beat + e.length, InputAction_BasicPress, JustMute, MuteMiss, Empty); break; @@ -976,7 +1028,7 @@ namespace HeavenStudio.Games public void Riff(double beat, float length, int[] pitches, bool gleeClubJJ, int sampleJJ, int sampleTonesJJ, bool noRespond) { - JJ.StrumStrings(gleeClubJJ, pitches, (PremadeSamples)sampleJJ, sampleTonesJJ, noRespond); + JJ.StrumStrings(gleeClubJJ, pitches, GetSample(sampleJJ), sampleTonesJJ, noRespond); BeatAction.New(instance, new List() { new BeatAction.Action(beat + length, delegate { JJ.Mute(); }) @@ -1086,7 +1138,7 @@ namespace HeavenStudio.Games RockersInput riffComp = Instantiate(rockerInputRef, transform); riffComp.Init(crEvent["gcS"], new int[6] { crEvent["1S"], crEvent["2S"], crEvent["3S"], crEvent["4S"], crEvent["5S"], crEvent["6S"] }, beat, relativeBeat, - (PremadeSamples)crEvent["sampleS"], crEvent["pitchSampleS"]); + GetSample(crEvent["sampleS"]), crEvent["pitchSampleS"]); if (crEvent.length > 0.5f) ScheduleAutoplayInput(beat, relativeBeat + crEvent.length, InputAction_BasicPress, JustMute, MuteMiss, Empty); else ScheduleInput(beat, relativeBeat + crEvent.length, InputAction_BasicPress, JustMute, MuteMiss, Empty); } diff --git a/Assets/Scripts/Games/Rockers/RockersInput.cs b/Assets/Scripts/Games/Rockers/RockersInput.cs index 4ee865687..42548aaf3 100644 --- a/Assets/Scripts/Games/Rockers/RockersInput.cs +++ b/Assets/Scripts/Games/Rockers/RockersInput.cs @@ -11,14 +11,14 @@ namespace HeavenStudio.Games.Scripts_Rockers private bool gleeClub; - private Rockers.PremadeSamples sample; + private NoteSample sample; private int sampleTones; private bool jump; private Rockers game; - public void Init(bool gleeClub, int[] pitches, double beat, double length, Rockers.PremadeSamples sample, int sampleTones, bool jump = false) + public void Init(bool gleeClub, int[] pitches, double beat, double length, NoteSample sample, int sampleTones, bool jump = false) { game = Rockers.instance; this.gleeClub = gleeClub; diff --git a/Assets/Scripts/Games/Rockers/RockersRocker.cs b/Assets/Scripts/Games/Rockers/RockersRocker.cs index c8eabf693..e9a6f14f3 100644 --- a/Assets/Scripts/Games/Rockers/RockersRocker.cs +++ b/Assets/Scripts/Games/Rockers/RockersRocker.cs @@ -46,13 +46,17 @@ namespace HeavenStudio.Games.Scripts_Rockers { if (sound != null) { - sound.KillLoop(0); + sound.KillLoop(); } } + if (chordSound != null) { - chordSound.KillLoop(0); + chordSound.KillLoop(); + chordSound = null; } + + stringSounds = new Sound[6]; } public void PrepareTogether(bool forceMute = false) @@ -100,7 +104,7 @@ namespace HeavenStudio.Games.Scripts_Rockers } private bool lastGleeClub = false; - private Rockers.PremadeSamples lastSample; + private NoteSample lastSample; private int lastSampleTones; public void StrumStringsLast(bool disableStrumEffect = false, bool jump = false, bool barely = false) @@ -108,7 +112,7 @@ namespace HeavenStudio.Games.Scripts_Rockers StrumStrings(lastGleeClub, lastPitches, lastSample, lastSampleTones, disableStrumEffect, jump, barely); } - public void StrumStrings(bool gleeClub, int[] pitches, Rockers.PremadeSamples sample, int sampleTones, bool disableStrumEffect = false, bool jump = false, bool barely = false) + public void StrumStrings(bool gleeClub, int[] pitches, NoteSample sample, int sampleTones, bool disableStrumEffect = false, bool jump = false, bool barely = false) { if (strumming) return; lastGleeClub = gleeClub; @@ -117,7 +121,7 @@ namespace HeavenStudio.Games.Scripts_Rockers muted = false; strumming = true; StopSounds(); - if (sample == Rockers.PremadeSamples.None) + if (sample.sample == null) { lastPitches = pitches; for (int i = 0; i < pitches.Length; i++) @@ -133,48 +137,7 @@ namespace HeavenStudio.Games.Scripts_Rockers else { float pitch = SoundByte.GetPitchFromSemiTones(sampleTones, true); - string soundName = sample switch - { - Rockers.PremadeSamples.None => "", - Rockers.PremadeSamples.BendG5 => "rockers/BendG5", - Rockers.PremadeSamples.BendC6 => "rockers/BendC6", - Rockers.PremadeSamples.ChordA => "rockers/rocker/rockerChordA", - Rockers.PremadeSamples.ChordAsus4 => "rockers/rocker/rockerChordAsus4", - Rockers.PremadeSamples.ChordBm => "rockers/rocker/rockerChordBm", - Rockers.PremadeSamples.ChordCSharpm7 => "rockers/rocker/rockerChordC#m7", - Rockers.PremadeSamples.ChordDmaj7 => "rockers/rocker/rockerChordDmaj7", - Rockers.PremadeSamples.ChordDmaj9 => "rockers/rocker/rockerChordDmaj9", - Rockers.PremadeSamples.ChordFSharp5 => "rockers/rocker/rockerChordF#5", - Rockers.PremadeSamples.ChordG => "rockers/rocker/rockerChordG", - Rockers.PremadeSamples.ChordG5 => "rockers/rocker/rockerChordG5", - Rockers.PremadeSamples.ChordGdim7 => "rockers/rocker/rockerChordGdim7", - Rockers.PremadeSamples.ChordGm => "rockers/rocker/rockerChordGm", - Rockers.PremadeSamples.NoteASharp4 => "rockers/rocker/rockerNoteA#4", - Rockers.PremadeSamples.NoteA5 => "rockers/rocker/rockerNoteA5", - Rockers.PremadeSamples.PracticeChordD => "rockers/rocker/rockerPracticeChordD", - Rockers.PremadeSamples.Remix6ChordA => "rockers/rocker/rockerRemix6ChordA", - Rockers.PremadeSamples.Remix10ChordD => "rockers/rocker/rockerRemix10ChordD", - Rockers.PremadeSamples.Remix10ChordFSharpm => "rockers/rocker/rockerRemix10ChordF#m", - Rockers.PremadeSamples.DoremiChordA7 => "rockers/doremi/doremiChordA7", - Rockers.PremadeSamples.DoremiChordAm7 => "rockers/doremi/doremiChordAm7", - Rockers.PremadeSamples.DoremiChordC => "rockers/doremi/doremiChordC", - Rockers.PremadeSamples.DoremiChordC7 => "rockers/doremi/doremiChordC7", - Rockers.PremadeSamples.DoremiChordCadd9 => "rockers/doremi/doremiChordCadd9", - Rockers.PremadeSamples.DoremiChordDm => "rockers/doremi/doremiChordDm", - Rockers.PremadeSamples.DoremiChordDm7 => "rockers/doremi/doremiChordDm7", - Rockers.PremadeSamples.DoremiChordEm => "rockers/doremi/doremiChordEm", - Rockers.PremadeSamples.DoremiChordF => "rockers/doremi/doremiChordF", - Rockers.PremadeSamples.DoremiChordFadd9 => "rockers/doremi/doremiChordFadd9", - Rockers.PremadeSamples.DoremiChordFm => "rockers/doremi/doremiChordFm", - Rockers.PremadeSamples.DoremiChordG => "rockers/doremi/doremiChordG", - Rockers.PremadeSamples.DoremiChordG7 => "rockers/doremi/doremiChordG7", - Rockers.PremadeSamples.DoremiChordGm => "rockers/doremi/doremiChordGm", - Rockers.PremadeSamples.DoremiChordGsus4 => "rockers/doremi/doremiChordGsus4", - Rockers.PremadeSamples.DoremiNoteA2 => "rockers/doremi/doremiNoteA2", - Rockers.PremadeSamples.DoremiNoteE2 => "rockers/doremi/doremiNoteE2", - _ => throw new System.NotImplementedException(), - }; - chordSound = SoundByte.PlayOneShotGame(soundName, -1, pitch, 1, true); + chordSound = SoundByte.PlayOneShotGame(sample.sample, -1, pitch, 1, true); } if (together) @@ -301,7 +264,7 @@ namespace HeavenStudio.Games.Scripts_Rockers private float GetBentPitch(float pitch, int bend) { - float unscaledPitch = chordSound.pitch / Conductor.instance.musicSource.pitch; + float unscaledPitch = pitch / Conductor.instance.musicSource.pitch; float bendPitch = SoundByte.GetPitchFromSemiTones(bend, false); return (unscaledPitch * bendPitch) * Conductor.instance.musicSource.pitch; diff --git a/Assets/Scripts/Games/SeeSaw/SeeSaw.cs b/Assets/Scripts/Games/SeeSaw/SeeSaw.cs index 4a95dfc73..b745ebc97 100644 --- a/Assets/Scripts/Games/SeeSaw/SeeSaw.cs +++ b/Assets/Scripts/Games/SeeSaw/SeeSaw.cs @@ -239,7 +239,7 @@ namespace HeavenStudio.Games { evt.Disable(); } - if (_landSoundEnd != null) _landSoundEnd.Stop(); + if (_landSoundEnd != null) _landSoundEnd.KillLoop(); } private void PersistColors(double beat) diff --git a/Assets/Scripts/Games/SlotMonster/SlotMonster.cs b/Assets/Scripts/Games/SlotMonster/SlotMonster.cs index 313bbb98f..d5909ead5 100644 --- a/Assets/Scripts/Games/SlotMonster/SlotMonster.cs +++ b/Assets/Scripts/Games/SlotMonster/SlotMonster.cs @@ -219,7 +219,7 @@ namespace HeavenStudio.Games string hitSfx = "slotMonster/stop_" + (isLast && isHit && !isMiss ? "hit" : (currentButton + 1)); SoundByte.PlayOneShotGame(hitSfx, forcePlay: true); if (isLast) { - if (rollingSound != null) rollingSound.Stop(); + if (rollingSound != null) rollingSound.KillLoop(); inputsActive = false; if (isHit && !isMiss) { smAnim.DoScaledAnimationAsync("Win", 0.5f); @@ -235,7 +235,7 @@ namespace HeavenStudio.Games public void StartInterval(RiqEntity si, bool autoPass, int eyeSprite, double gameSwitchBeat) { - if (rollingSound != null) rollingSound.Stop(); + if (rollingSound != null) rollingSound.KillLoop(); List slotActions = gameEntities.FindAll(e => e.datamodel == "slotMonster/slot" && e.beat >= si.beat && e.beat < si.beat + si.length); if (slotActions.Count <= 0) return; @@ -322,7 +322,7 @@ namespace HeavenStudio.Games private void ButtonEndMiss(PlayerActionEvent caller) { Debug.Log("miss i guess"); - if (rollingSound != null) rollingSound.Stop(); + if (rollingSound != null) rollingSound.KillLoop(); inputsActive = false; smAnim.DoScaledAnimationAsync("Lose", 0.5f); foreach (var anim in eyeAnims) { diff --git a/Assets/Scripts/Games/Tunnel/Tunnel.cs b/Assets/Scripts/Games/Tunnel/Tunnel.cs index da652457b..5090f7423 100644 --- a/Assets/Scripts/Games/Tunnel/Tunnel.cs +++ b/Assets/Scripts/Games/Tunnel/Tunnel.cs @@ -139,9 +139,9 @@ namespace HeavenStudio.Games tunnelLightMaterial.SetColor("_Color", Color.white); tunnelLightMaterial.SetColor("_AddColor", Color.black); - tunnelSoundRight?.Stop(); - tunnelSoundMiddle?.Stop(); - tunnelSoundLeft?.Stop(); + tunnelSoundRight?.KillLoop(); + tunnelSoundMiddle?.KillLoop(); + tunnelSoundLeft?.KillLoop(); } } @@ -291,9 +291,9 @@ namespace HeavenStudio.Games this.fadeDuration = fadeDuration; conductor.FadeMinigameVolume(beat, fadeDuration, volume); - tunnelSoundRight?.Stop(); - tunnelSoundMiddle?.Stop(); - tunnelSoundLeft?.Stop(); + tunnelSoundRight?.KillLoop(); + tunnelSoundMiddle?.KillLoop(); + tunnelSoundLeft?.KillLoop(); tunnelSoundRight = SoundByte.PlayOneShotGame("tunnel/tunnelRight", beat, looping: true); tunnelSoundMiddle = SoundByte.PlayOneShotGame("tunnel/tunnelMiddle", beat + (6 / 48f), looping: true); diff --git a/Assets/Scripts/LevelEditor/EventSelector/EventParameterManager.cs b/Assets/Scripts/LevelEditor/EventSelector/EventParameterManager.cs index 3058a2da1..b9bb0b960 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/EventParameterManager.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/EventParameterManager.cs @@ -32,6 +32,8 @@ namespace HeavenStudio.Editor public bool active; private int childCountAtStart; + + public Dictionary currentProperties = new(); public bool canDisable = true; @@ -47,6 +49,7 @@ namespace HeavenStudio.Editor { typeof(Float), FloatP }, { typeof(Note), NoteP }, { typeof(Dropdown), DropdownP }, + { typeof(NoteSampleDropdown), DropdownP }, { typeof(Button), ButtonP }, { typeof(Color), ColorP }, { typeof(bool), BooleanP }, @@ -111,25 +114,30 @@ namespace HeavenStudio.Editor DestroyParams(); - Dictionary ePrefabs = new(); - for (int i = 0; i < action.parameters.Count; i++) { var p = action.parameters[i]; - ePrefabs.Add(p.propertyName, AddParam(p.propertyName, p.parameter, p.caption, p.tooltip)); + currentProperties.Add(p.propertyName, AddParam(p.propertyName, p.parameter, p.caption, p.tooltip)); } foreach (var p in action.parameters) { if (p.collapseParams == null || p.collapseParams.Count == 0) continue; - EventPropertyPrefab input = ePrefabs[p.propertyName].GetComponent(); + EventPropertyPrefab input = currentProperties[p.propertyName]; foreach (var c in p.collapseParams) { - List collapseables = c.collapseables.Select(x => ePrefabs[x]).ToList(); + List collapseables = c.collapseables.Select(x => currentProperties[x].gameObject).ToList(); input.propertyCollapses.Add(new EventPropertyPrefab.PropertyCollapse(collapseables, c.CollapseOn, entity)); } input.SetCollapses(p.parameter); } + + foreach (var p in action.parameters) + { + EventPropertyPrefab prop = currentProperties[p.propertyName]; + + prop.PostLoadProperties(p.parameter); + } active = true; } @@ -139,7 +147,7 @@ namespace HeavenStudio.Editor } } - private GameObject AddParam(string propertyName, object type, string caption, string tooltip = "") + private EventPropertyPrefab AddParam(string propertyName, object type, string caption, string tooltip = "") { Type typeType = type.GetType(); GameObject propertyPrefab = DropdownP; // enum check is hardcoded because enums are awesome (lying) @@ -163,7 +171,7 @@ namespace HeavenStudio.Editor EventPropertyPrefab property = input.GetComponent(); property.SetProperties(propertyName, type, caption); - return input; + return property; } private void DestroyParams() @@ -174,6 +182,8 @@ namespace HeavenStudio.Editor { Destroy(transform.GetChild(i).gameObject); } + + currentProperties.Clear(); } } } \ No newline at end of file diff --git a/Assets/Scripts/LevelEditor/EventSelector/EventPropertyPrefab.cs b/Assets/Scripts/LevelEditor/EventSelector/EventPropertyPrefab.cs index e4e8292a0..f8407f45c 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/EventPropertyPrefab.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/EventPropertyPrefab.cs @@ -28,6 +28,7 @@ namespace HeavenStudio.Editor this.caption.text = _captionText = caption; } public virtual void SetCollapses(object type) { } + public virtual void PostLoadProperties(object type) { } public void UpdateCollapse(object type) { diff --git a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/DropdownPropertyPrefab.cs b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/DropdownPropertyPrefab.cs index ae5b68f5c..d9bdd954b 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/DropdownPropertyPrefab.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/DropdownPropertyPrefab.cs @@ -20,13 +20,19 @@ namespace HeavenStudio.Editor public Scrollbar scrollbar; public int[] values; - private int _defaultValue; - + private int defaultValue; + private int lastValue = -1; + private Array enumValues; + private object type; + private bool openedDropdown = false; - + private bool setup = false; + public override void SetProperties(string propertyName, object type, string caption) { base.SetProperties(propertyName, type, caption); + + this.type = type; int selected = 0; @@ -34,13 +40,14 @@ namespace HeavenStudio.Editor { case EntityTypes.Dropdown dropdownEntity: // entity[propertyName].ChangeValues(dropdownEntity.Values); - _defaultValue = dropdownEntity.defaultValue; + defaultValue = dropdownEntity.defaultValue; EntityTypes.DropdownObj dropdownObj = entity[propertyName]; int size = dropdownObj.Values.Count; values = new int[size]; - for (int i = 0; i < size; i++) { + for (int i = 0; i < size; i++) + { values[i] = i; } @@ -53,32 +60,51 @@ namespace HeavenStudio.Editor dropdown.ClearOptions(); dropdown.AddOptions(newValues); dropdown.enabled = newValues.Count > 0; - dropdownObj.value = _defaultValue; + dropdownObj.value = defaultValue; }); break; case Enum enumEntity: Type enumType = enumEntity.GetType(); - _defaultValue = (int)type; - values = Enum.GetValues(enumType).Cast().ToArray(); + defaultValue = (int)type; + enumValues = Enum.GetValues(enumType); + values = enumValues.Cast().ToArray(); selected = Array.FindIndex(values, val => val == (int)entity[propertyName]); dropdown.AddOptions(Enum.GetNames(enumType).ToList()); dropdown.onValueChanged.AddListener(val => entity[propertyName] = values[val]); break; - default: - break; + case EntityTypes.NoteSampleDropdown noteDropdown: + Type noteEnumType = noteDropdown.defaultValue.GetType(); + enumValues = Enum.GetValues(noteEnumType); + values = enumValues.Cast().ToArray(); + selected = Array.FindIndex(values, val => val == (int)entity[propertyName]); + defaultValue = selected; + lastValue = selected; + + dropdown.AddOptions(Enum.GetNames(noteEnumType).ToList()); + dropdown.onValueChanged.AddListener(val => + { + entity[propertyName] = values[val]; + UpdateNoteProperty(noteDropdown, enumValues.GetValue(values[val])); + + lastValue = values[val]; + }); + break; + default: break; } + dropdown.value = selected; dropdown.enabled = dropdown.options.Count > 0; - dropdown.onValueChanged.AddListener(newValue => { - this.caption.text = (newValue != _defaultValue) ? (_captionText + "*") : _captionText; + dropdown.onValueChanged.AddListener(newValue => + { + this.caption.text = (newValue != defaultValue) ? (_captionText + "*") : _captionText; }); } public void ResetValue() { - dropdown.value = _defaultValue; + dropdown.value = defaultValue; } public override void SetCollapses(object type) @@ -105,5 +131,44 @@ namespace HeavenStudio.Editor openedDropdown = false; } } + + #region Note Sample Dropdown + private void OnEnable() { // Used for when the dropdown is uncollapsed + if (setup && type is EntityTypes.NoteSampleDropdown sampleDropdown) + { + UpdateNoteProperty(sampleDropdown, enumValues.GetValue(values[entity[propertyName]]), true); + } + } + + public override void PostLoadProperties(object type) + { + base.PostLoadProperties(type); + + setup = true; + + if (type is EntityTypes.NoteSampleDropdown sampleDropdown && gameObject.activeSelf) + { + UpdateNoteProperty(sampleDropdown, enumValues.GetValue(values[entity[propertyName]])); + } + } + + private void UpdateNoteProperty(EntityTypes.NoteSampleDropdown noteDropdown, object newSampleEnum, bool forceSwitchCheck = false) + { + EventParameterManager.instance.currentProperties.TryGetValue(noteDropdown.semisProp, out var property); + + if (!property) return; + + NotePropertyPrefab noteProperty = (NotePropertyPrefab)property; + NoteSample sample = noteDropdown.getNoteSample(newSampleEnum); + + bool switched = false; + if ((int)newSampleEnum != lastValue || forceSwitchCheck) { + // Keep the semitones value if the note is the same, otherwise reset it + if(sample.note != noteProperty.note.sampleNote) parameterManager.entity[noteDropdown.semisProp] = 0; + switched = true; + } + noteProperty.SetNote(new EntityTypes.Note(0, sample.note, sample.octave, sample.sample, offsetToC: false), switched); + } + #endregion } } \ No newline at end of file diff --git a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs index 1fe9c63e4..cc49aabd5 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NotePropertyPrefab.cs @@ -10,30 +10,17 @@ using UnityEngine; public class NotePropertyPrefab : NumberPropertyPrefab { - public TMP_Text noteLabel; - + public TMP_Text noteLabel, flatLabel; + private Sound previewAudioSource; - private EntityTypes.Note note; private int offsetFromC; + public EntityTypes.Note note; 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); + SetNote((EntityTypes.Note)type); slider.onValueChanged.AddListener( _ => @@ -50,7 +37,7 @@ public class NotePropertyPrefab : NumberPropertyPrefab this.caption.text = _captionText; } - noteLabel.text = GetNoteText(note, trueSemitones); + UpdateNoteText(trueSemitones); PlayPreview(note, trueSemitones); } @@ -64,9 +51,10 @@ public class NotePropertyPrefab : NumberPropertyPrefab inputField.onEndEdit.AddListener( _ => { - int trueSemitones = (int)slider.value + offsetFromC; - slider.value = Convert.ToSingle(inputField.text); + + int trueSemitones = (int)slider.value + offsetFromC; + parameterManager.entity[propertyName] = trueSemitones; Editor.instance.editingInputField = false; if (slider.value != _defaultValue) @@ -78,12 +66,43 @@ public class NotePropertyPrefab : NumberPropertyPrefab this.caption.text = _captionText; } - noteLabel.text = GetNoteText(note, trueSemitones); + UpdateNoteText(trueSemitones); PlayPreview(note, trueSemitones); } ); } + + public void SetNote(EntityTypes.Note note, bool playPreview = false) + { + this.note = note; + + slider.minValue = note.min; + slider.maxValue = note.max; + + slider.wholeNumbers = true; + + offsetFromC = 0; + if(note.offsetToC) + offsetFromC = 3 - note.sampleNote; + + int lastValue = (int)slider.value; + slider.value = Convert.ToSingle(parameterManager.entity[propertyName]) - offsetFromC; + _defaultValue = slider.value; + + inputField.text = slider.value.ToString(); + UpdateNoteText((int)slider.value + offsetFromC); + + if((int)slider.value == lastValue && playPreview) + PlayPreview(note, (int)slider.value + offsetFromC); + } + + private void UpdateNoteText(int semiTones) + { + GetNoteText(note, semiTones, out var sharp, out var flat); + noteLabel.text = sharp; + flatLabel.text = flat; + } public void OnSelectSliderHandle() { @@ -92,21 +111,24 @@ public class NotePropertyPrefab : NumberPropertyPrefab private void PlayPreview(EntityTypes.Note note, int currentSemitones) { - if (note.sampleName.Equals("") || !PersistentDataManager.gameSettings.previewNoteSounds) return; + if (note.sampleName == null || !PersistentDataManager.gameSettings.previewNoteSounds) return; if (previewAudioSource != null) { - previewAudioSource.Stop(true); + previewAudioSource.KillLoop(); previewAudioSource = null; } float pitch = SoundByte.GetPitchFromSemiTones(currentSemitones, true); + if(pitch == 1f) pitch = 1.0001f; // man writes worst workaround ever, banned from Heaven Studio source code previewAudioSource = SoundByte.PlayOneShotGame(note.sampleName, pitch: pitch, volume: 0.75f, forcePlay: true, ignoreConductorPause: true); + previewAudioSource.KillLoop(.5f); } private static readonly string[] notes = { "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#" }; + private static readonly string[] notesFlat = { "A", "Bb", "B", "C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab" }; - private static string GetNoteText(EntityTypes.Note note, int currentSemitones) + private static string GetNoteText(EntityTypes.Note note, int currentSemitones, out string sharp, out string flat) { int noteIndex = (note.sampleNote + currentSemitones) % 12; if (noteIndex < 0) @@ -121,7 +143,9 @@ public class NotePropertyPrefab : NumberPropertyPrefab { octave--; } - - return notes[noteIndex] + octave; + + sharp = notes[noteIndex] + octave; + flat = notesFlat[noteIndex] + octave; + return sharp; } } diff --git a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NumberPropertyPrefab.cs b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NumberPropertyPrefab.cs index b2a82b4f6..a80476bfc 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NumberPropertyPrefab.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/PropertyPrefabs/NumberPropertyPrefab.cs @@ -158,28 +158,6 @@ namespace HeavenStudio.Editor ); } } - - 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 16ba4d081..2b4039ceb 100644 --- a/Assets/Scripts/LevelEditor/Timeline/Timeline.cs +++ b/Assets/Scripts/LevelEditor/Timeline/Timeline.cs @@ -893,6 +893,7 @@ namespace HeavenStudio.Editor.Track EntityTypes.Float floatVal => floatVal.val, EntityTypes.Button buttonVal => buttonVal.defaultLabel, EntityTypes.Dropdown ddVal => new EntityTypes.DropdownObj(ddVal), + EntityTypes.NoteSampleDropdown noteDDVal => (int)noteDDVal.defaultValue, _ => ep[i].parameter, }; diff --git a/Assets/Scripts/Minigames.cs b/Assets/Scripts/Minigames.cs index d355037f1..309887947 100644 --- a/Assets/Scripts/Minigames.cs +++ b/Assets/Scripts/Minigames.cs @@ -278,6 +278,10 @@ namespace HeavenStudio JArray values = e[param.propertyName]["Values"]; e.dynamicData[param.propertyName] = new EntityTypes.DropdownObj((int)value, values.Select(x => (string)x).ToList()); } + else if (type == typeof(EntityTypes.NoteSampleDropdown)) + { + e.dynamicData[param.propertyName] = (int)e[param.propertyName]; + } else if (type == typeof(EntityTypes.Resource)) e.dynamicData[param.propertyName] = (EntityTypes.Resource)e[param.propertyName]; else if (type.IsEnum) diff --git a/Assets/Scripts/NoteSample.cs b/Assets/Scripts/NoteSample.cs new file mode 100644 index 000000000..a30bd55a0 --- /dev/null +++ b/Assets/Scripts/NoteSample.cs @@ -0,0 +1,13 @@ +public struct NoteSample +{ + public int note; + public int octave; + public string sample; + + public NoteSample(string sample, int note, int octave) + { + this.note = note; + this.octave = octave; + this.sample = sample; + } +} diff --git a/Assets/Scripts/NoteSample.cs.meta b/Assets/Scripts/NoteSample.cs.meta new file mode 100644 index 000000000..506c25bc0 --- /dev/null +++ b/Assets/Scripts/NoteSample.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f1a532c54bb4407bbc90c5d8f5f83eff +timeCreated: 1712160367 \ No newline at end of file diff --git a/Assets/Scripts/Util/EntityTypes.cs b/Assets/Scripts/Util/EntityTypes.cs index b51045c36..b5fd9ae98 100644 --- a/Assets/Scripts/Util/EntityTypes.cs +++ b/Assets/Scripts/Util/EntityTypes.cs @@ -33,8 +33,21 @@ namespace HeavenStudio public int sampleNote; public int sampleOctave; public string sampleName; + public bool offsetToC; + + public Note(int val = 0, int sampleNote = 0, int sampleOctave = 4, string sampleName = null, bool offsetToC = true) + { + min = -maxSemitones; + max = maxSemitones; + + this.val = val; + this.sampleNote = sampleNote; + this.sampleOctave = sampleOctave; + this.sampleName = sampleName; + this.offsetToC = offsetToC; + } - public Note(int min, int max, int val = 0, int sampleNote = 0, int sampleOctave = 0, string sampleName = "") + public Note(int min, int max, int val = 0, int sampleNote = 0, int sampleOctave = 4, string sampleName = null, bool offsetToC = true) { this.min = min; this.val = val; @@ -42,6 +55,7 @@ namespace HeavenStudio this.sampleNote = sampleNote; this.sampleOctave = sampleOctave; this.sampleName = sampleName; + this.offsetToC = offsetToC; } } @@ -107,7 +121,21 @@ namespace HeavenStudio this.values = values.ToList(); } } - + + public struct NoteSampleDropdown + { + public object defaultValue; + public Func getNoteSample; + public string semisProp; + + public NoteSampleDropdown(object defaultValue, Func getNoteSample, string semisProp) + { + this.defaultValue = defaultValue; + this.getNoteSample = getNoteSample; + this.semisProp = semisProp; + } + } + public class DropdownObj { public void SetValues(List values) diff --git a/Assets/Scripts/Util/MultiSound.cs b/Assets/Scripts/Util/MultiSound.cs index d79143dbf..2a3bc430f 100644 --- a/Assets/Scripts/Util/MultiSound.cs +++ b/Assets/Scripts/Util/MultiSound.cs @@ -111,7 +111,7 @@ namespace HeavenStudio.Util { foreach (Util.Sound sound in playingSounds) { - sound.Stop(); + sound.KillLoop(); } if (destroy) { diff --git a/Assets/Scripts/Util/Sound.cs b/Assets/Scripts/Util/Sound.cs index 791732999..46b0a191e 100644 --- a/Assets/Scripts/Util/Sound.cs +++ b/Assets/Scripts/Util/Sound.cs @@ -40,6 +40,8 @@ namespace HeavenStudio.Util const double PREBAKE_TIME = 0.25; + private Coroutine fadeRoutine; + private void Start() { } @@ -68,6 +70,8 @@ namespace HeavenStudio.Util GameManager.instance.SoundObjects.Release(this); return; } + + CancelFadeRoutine(); audioSource = GetComponent(); cond = Conductor.instance; @@ -234,12 +238,15 @@ namespace HeavenStudio.Util audioSource.UnPause(); } - public void Stop(bool releaseToPool = false) + /// + /// Used internally to stop and reset the sound once it has been released back into the pool. + /// + /// + /// WARNING! You should use KillLoop() to stop sounds early, not this! + /// + public void Stop() { - if(releaseToPool && audioSource.isPlaying) - { - GameManager.instance.SoundObjects.Release(this); - } + CancelFadeRoutine(); available = true; played = false; @@ -318,21 +325,30 @@ namespace HeavenStudio.Util #endregion - public void KillLoop(double fadeTime) + /// + /// Fades the sound out over fadeTime, then releases it back into the pool which stops it. + /// Leave fadeTime at 0 to stop the sound instantly. + /// You should use this for stopping sounds early, not . + /// + public void KillLoop(double fadeTime = 0) { if (!gameObject.activeSelf) return; + + CancelFadeRoutine(); + if (fadeTime == 0) { GameManager.instance.SoundObjects.Release(this); return; } - StartCoroutine(FadeLoop(fadeTime)); + + fadeRoutine = StartCoroutine(FadeLoop(fadeTime)); } - double loopFadeTimer = 0f; IEnumerator FadeLoop(double fadeTime) { float startingVol = audioSource.volume; + float loopFadeTimer = 0f; while (loopFadeTimer < fadeTime) { @@ -341,7 +357,13 @@ namespace HeavenStudio.Util yield return null; } yield return null; + GameManager.instance.SoundObjects.Release(this); } + + private void CancelFadeRoutine() + { + if(fadeRoutine != null) StopCoroutine(fadeRoutine); + } } } From 5f13626e7227491b6e7597ec54484124764a79ce Mon Sep 17 00:00:00 2001 From: Kevin Kuhn <55213985+kkuhn317@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:44:05 -0400 Subject: [PATCH 3/7] fix spelling and grammar errors in release 1 games (#838) --- Assets/Scripts/Games/AirRally/AirRally.cs | 2 +- Assets/Scripts/Games/BlueBear/BlueBear.cs | 2 +- Assets/Scripts/Games/CropStomp/CropStomp.cs | 8 ++++---- Assets/Scripts/Games/DoubleDate/DoubleDate.cs | 2 +- Assets/Scripts/Games/FanClub/FanClub.cs | 2 +- Assets/Scripts/Games/Fireworks/Fireworks.cs | 2 +- Assets/Scripts/Games/FirstContact/FirstContact.cs | 2 +- .../Scripts/Games/MarchingOrders/MarchingOrders.cs | 2 +- Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs | 8 ++++---- Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs | 2 +- .../Scripts/Games/OctopusMachine/OctopusMachine.cs | 14 +++++++------- .../Games/SamuraiSliceNtr/SamuraiSliceNtr.cs | 8 ++++---- Assets/Scripts/Games/SeeSaw/SeeSaw.cs | 2 +- Assets/Scripts/Games/SpaceSoccer/SpaceSoccer.cs | 2 +- Assets/Scripts/Games/TapTroupe/TapTroupe.cs | 2 +- Assets/Scripts/Minigames.cs | 12 ++++++------ 16 files changed, 36 insertions(+), 36 deletions(-) diff --git a/Assets/Scripts/Games/AirRally/AirRally.cs b/Assets/Scripts/Games/AirRally/AirRally.cs index 8c4aa6091..275fe4ed0 100644 --- a/Assets/Scripts/Games/AirRally/AirRally.cs +++ b/Assets/Scripts/Games/AirRally/AirRally.cs @@ -173,7 +173,7 @@ namespace HeavenStudio.Games.Loaders resizable = true, parameters = new List() { - new Param("cps", new EntityTypes.Integer(0, 200, 0), "Snowflakes Amount", "Set how many snowflakes should be spawned per second."), + new Param("cps", new EntityTypes.Integer(0, 200, 0), "Snowflakes Count", "Set how many snowflakes should be spawned per second."), new Param("speed", new EntityTypes.Float(-10, 10, 1), "Start Speed", "Change fow fast the snowflakes are moving at the start of the event."), new Param("endSpeed", new EntityTypes.Float(-10, 10, 1), "End Speed", "Change how fast the snowflakes are moving at the end of the event."), new Param("ease", EasingFunction.Ease.Linear, "Ease", "Set the easing of the action.") diff --git a/Assets/Scripts/Games/BlueBear/BlueBear.cs b/Assets/Scripts/Games/BlueBear/BlueBear.cs index 7a544072a..290cc05a8 100644 --- a/Assets/Scripts/Games/BlueBear/BlueBear.cs +++ b/Assets/Scripts/Games/BlueBear/BlueBear.cs @@ -84,7 +84,7 @@ namespace HeavenStudio.Games.Loaders { new Param("right", new EntityTypes.Integer(0, 500, 15), "Right Crumb", "Set how many treats Beary needs to eat for the right crumb to appear."), new Param("left", new EntityTypes.Integer(0, 500, 30), "Left Crumb", "Set how many treats Beary needs to eat for the left crumb to appear."), - new Param("reset", false, "Reset Treats Eaten", "Toggle if the current amount of treats eaten (and crumbs) should be reset.") + new Param("reset", false, "Reset Treats Eaten", "Toggle if the current number of treats eaten (and crumbs) should be reset.") } } }, diff --git a/Assets/Scripts/Games/CropStomp/CropStomp.cs b/Assets/Scripts/Games/CropStomp/CropStomp.cs index 08bc77baa..7a982fbce 100644 --- a/Assets/Scripts/Games/CropStomp/CropStomp.cs +++ b/Assets/Scripts/Games/CropStomp/CropStomp.cs @@ -43,7 +43,7 @@ namespace HeavenStudio.Games.Loaders { parameters = new List() { - new Param("mute", true, "Toggle if Stomp Farmer should stopp humming.") + new Param("mute", true, "Toggle if Stomp Farmer should stop humming.") } }, new GameAction("plantCollect", "Set Veggie Collection Thresholds") @@ -55,12 +55,12 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("threshold", new EntityTypes.Integer(1, 80, 8), "Threshold", "Set how many veggies it takes for a new plant to appear in the collection bag."), - new Param("limit", new EntityTypes.Integer(1, 1000, 80), "Limit", "Set the limit for the amount of plants to be collected and count towards the threshold."), - new Param("force", false, "Set Amount Of Collected Plants", "Toggle if this event should automatically set the collected plants to a certain number.", new List() + new Param("limit", new EntityTypes.Integer(1, 1000, 80), "Limit", "Set the limit for the number of plants to be collected and count towards the threshold."), + new Param("force", false, "Set Number Of Collected Plants", "Toggle if this event should automatically set the collected plants to a certain number.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "forceAmount" }) }), - new Param("forceAmount", new EntityTypes.Integer(0, 1000, 0), "Set Amount", "Set the amount of plants to be collected automatically.") + new Param("forceAmount", new EntityTypes.Integer(0, 1000, 0), "Set Number", "Set the number of plants to be collected automatically.") } } }, diff --git a/Assets/Scripts/Games/DoubleDate/DoubleDate.cs b/Assets/Scripts/Games/DoubleDate/DoubleDate.cs index 7ea8d4257..9778a1bd0 100644 --- a/Assets/Scripts/Games/DoubleDate/DoubleDate.cs +++ b/Assets/Scripts/Games/DoubleDate/DoubleDate.cs @@ -31,7 +31,7 @@ namespace HeavenStudio.Games.Loaders new("b", false, "Weasels Jump", "Toggle if the weasels should jump upon successfully hitting the cue.") } }, - new GameAction("basket", "Basket Ball") + new GameAction("basket", "Basketball") { preFunction = delegate { var e = eventCaller.currentEntity; DoubleDate.QueueBasketBall(e.beat, e["b"]); }, preFunctionLength = 1f, diff --git a/Assets/Scripts/Games/FanClub/FanClub.cs b/Assets/Scripts/Games/FanClub/FanClub.cs index 8ea1eb00f..71f57d597 100644 --- a/Assets/Scripts/Games/FanClub/FanClub.cs +++ b/Assets/Scripts/Games/FanClub/FanClub.cs @@ -61,7 +61,7 @@ namespace HeavenStudio.Games.Loaders inactiveFunction = delegate { var e = eventCaller.currentEntity; FanClub.WarnBigReady(e.beat, e["toggle"]); }, preFunction = delegate { var e = eventCaller.currentEntity; FanClub.BigReadySound(e.beat, e["toggle"]); } }, - new GameAction("play idol animation", "Idol Coreography") + new GameAction("play idol animation", "Idol Choreography") { function = delegate { var e = eventCaller.currentEntity; FanClub.instance.PlayAnim(e.beat, e.length, e["type"], e["who"]); }, resizable = true, diff --git a/Assets/Scripts/Games/Fireworks/Fireworks.cs b/Assets/Scripts/Games/Fireworks/Fireworks.cs index 862149bd0..7b70bdca2 100644 --- a/Assets/Scripts/Games/Fireworks/Fireworks.cs +++ b/Assets/Scripts/Games/Fireworks/Fireworks.cs @@ -32,7 +32,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 2f, parameters = new List() { - new Param("whereToSpawn", Fireworks.WhereToSpawn.Middle, "Side", "Choose the side this firework should spawn on."), + new Param("whereToSpawn", Fireworks.WhereToSpawn.Middle, "Side", "Choose the side this sparkler should spawn on."), new Param("explosionType", Fireworks.ExplosionType.MixedCircular, "Pattern", "Choose the pattern that this sparkler should explode into."), new Param("applause", false, "Applause", "Toggle if applause should play if you successfully hit this cue."), new Param("offSet", new EntityTypes.Float(0, 4, 0), "Vertical Offset", "Choose the vertical offset for this sparkler."), diff --git a/Assets/Scripts/Games/FirstContact/FirstContact.cs b/Assets/Scripts/Games/FirstContact/FirstContact.cs index 48251ed39..a2d1898cd 100644 --- a/Assets/Scripts/Games/FirstContact/FirstContact.cs +++ b/Assets/Scripts/Games/FirstContact/FirstContact.cs @@ -35,7 +35,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 0.5f, parameters = new List() { - new Param("spaceNum", new EntityTypes.Integer(0, 12, 0), "Amount Of Spaces", "Choose the amount of spaces to add before the icon."), + new Param("spaceNum", new EntityTypes.Integer(0, 12, 0), "Number Of Spaces", "Choose the number of spaces to add before the icon."), new Param("dotdotdot", false, "Ellipses", "Toggle if the symbol should have \"...\" before it."), new Param("newline", false, "New line", "Toggle if this text starts a new line."), new Param("dialogue", "", "Translation", "Set the text that this syllable will translate to. Spaces will not be automatically added.") diff --git a/Assets/Scripts/Games/MarchingOrders/MarchingOrders.cs b/Assets/Scripts/Games/MarchingOrders/MarchingOrders.cs index e3fed6f29..9f1a56aeb 100644 --- a/Assets/Scripts/Games/MarchingOrders/MarchingOrders.cs +++ b/Assets/Scripts/Games/MarchingOrders/MarchingOrders.cs @@ -146,7 +146,7 @@ namespace HeavenStudio.Games.Loaders new Param("colorPipes1", new Color(0.41f, 0.54f, 0.34f), "Pipe Outline Color", "Set the color of the pipes' outline."), new Param("colorPipes2", new Color(0.43f, 0.8f, 0.45f), "Pipe Shading Color", "Set the color of the pipes' shading."), new Param("colorPipes3", new Color(0.48f, 0.89f, 0.54f), "Pipe Fill Color", "Set the color of the pipes."), - new Param("colorConveyor1", new Color(0.157f, 0.25f, 0.3f), "Conveyor Fill Color", "Set the color of the conveyer belt."), + new Param("colorConveyor1", new Color(0.157f, 0.25f, 0.3f), "Conveyor Fill Color", "Set the color of the conveyor belt."), new Param("colorConveyor2", new Color(0.55f, 0.57f, 0.04f), "Conveyor Trim Color", "Set the conveyor's trim color."), } }, diff --git a/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs b/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs index 7cb7e9c32..d7dde564c 100644 --- a/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs +++ b/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs @@ -13,14 +13,14 @@ namespace HeavenStudio.Games.Loaders public static Minigame AddGame(EventCaller eventCaller) { List reactionParams = new() { - new Param("tackReaction", MeatGrinder.TackExpressions.None, "Tack Reaction", "If this is hit, what expression should tack do?", new List() { + new Param("tackReaction", MeatGrinder.TackExpressions.None, "Tack Reaction", "If this is hit, what expression should Tack do?", new List() { new((x, y) => (int)x != (int)MeatGrinder.TackExpressions.None, new string[] { "tackReactionBeats" }), }), - new Param("tackReactionBeats", new EntityTypes.Float(0.5f, 10, 1), "Tack React After", "The amount of beats to wait until tack reacts"), - new Param("bossReaction", MeatGrinder.BossExpressions.None, "Boss Reaction", "If this is hit, what expression should boss do?", new List() { + new Param("tackReactionBeats", new EntityTypes.Float(0.5f, 10, 1), "Tack React After", "The number of beats to wait until Tack reacts"), + new Param("bossReaction", MeatGrinder.BossExpressions.None, "Boss Reaction", "If this is hit, what expression should Boss do?", new List() { new((x, y) => (int)x != (int)MeatGrinder.BossExpressions.None, new string[] { "bossReactionBeats" }), }), - new Param("bossReactionBeats", new EntityTypes.Float(0, 10, 0), "Boss React After", "The amount of beats to wait until boss reacts"), + new Param("bossReactionBeats", new EntityTypes.Float(0, 10, 0), "Boss React After", "The number of beats to wait until Boss reacts"), }; return new Minigame("meatGrinder", "Meat Grinder", "501d18", false, false, new List() diff --git a/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs b/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs index f2ed813a8..0e1c6f5de 100644 --- a/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs +++ b/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs @@ -96,7 +96,7 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("letter", "", "Letter To Appear", "Set the letter to appear on the blip."), - new Param("shouldGrow", true, "Grow Antenna", "Toggle if Mr. Upbeat's antennashould grow on every blip"), + new Param("shouldGrow", true, "Grow Antenna", "Toggle if Mr. Upbeat's antenna should grow on every blip"), new Param("resetBlip", false, "Reset Antenna", "Toggle if Mr. Upbeat's antenna should reset"), new Param("shouldBlip", true, "Should Blip", "Toggle if Mr. Upbeat's antenna should blip every offbeat."), new Param("blipLength", new EntityTypes.Integer(0, 4, 4), "Text Blip Requirement", "Set how many blips it will take for the text to appear on Mr. Upbeat’s antenna."), diff --git a/Assets/Scripts/Games/OctopusMachine/OctopusMachine.cs b/Assets/Scripts/Games/OctopusMachine/OctopusMachine.cs index 74832afcc..c1a6a68f4 100644 --- a/Assets/Scripts/Games/OctopusMachine/OctopusMachine.cs +++ b/Assets/Scripts/Games/OctopusMachine/OctopusMachine.cs @@ -20,8 +20,8 @@ namespace HeavenStudio.Games.Loaders OctopusMachine.instance.Bop(e.length, e["whichBop"], e["singleBop"], e["keepBop"]); }, parameters = new List() { - new Param("singleBop", true, "Bop", "Toggle if the octopodes should bop for the duration of this event. Since this event is not stretchable, they will only bop once."), - new Param("keepBop", false, "Bop (Auto)", "Toggle if the octopodes should automatically bop until another Bop event is reached."), + new Param("singleBop", true, "Bop", "Toggle if the Octo-Pops should bop for the duration of this event. Since this event is not stretchable, they will only bop once."), + new Param("keepBop", false, "Bop (Auto)", "Toggle if the Octo-Pops should automatically bop until another Bop event is reached."), new Param("whichBop", OctopusMachine.Bops.Bop, "Which Bop", "Set the type of bop."), }, }, @@ -42,11 +42,11 @@ namespace HeavenStudio.Games.Loaders }, resizable = true, parameters = new List() { - new Param("shouldPrep", true, "Prepare", "Toggle if the octopodes should automatically prepare for this cue.", new List() + new Param("shouldPrep", true, "Prepare", "Toggle if the Octo-Pops should automatically prepare for this cue.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "prepBeats" }) }), - new Param("prepBeats", new EntityTypes.Float(0, 4, 1), "Prepare Beats", "Set how many beats before the cue the octopodes should prepare."), + new Param("prepBeats", new EntityTypes.Float(0, 4, 1), "Prepare Beats", "Set how many beats before the cue the Octo-Pops should prepare."), }, preFunctionLength = 4f, preFunction = delegate { @@ -81,7 +81,7 @@ namespace HeavenStudio.Games.Loaders }, parameters = new List() { new Param("forceBop", true, "Force Bop", "Toggle if a bop should be forced to play, even if an animation is already playing."), - new Param("autoBop", true, "Hit/Miss Bop", "Toggle if the octopodes should bop depending on if you hit or missed the cues."), + new Param("autoBop", true, "Hit/Miss Bop", "Toggle if the Octo-Pops should bop depending on if you hit or missed the cues."), new Param("autoText", true, "Display Text", "Toggle if text should display depending on if you hit or missed the cues.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "hitText", "missText" }) @@ -135,8 +135,8 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("color1", new Color(1f, 0.87f, 0.24f), "Start BG Color", "Set the color at the start of the event."), new Param("color2", new Color(1f, 0.87f, 0.24f), "End BG Color", "Set the color at the end of the event."), - new Param("octoColor", new Color(0.97f, 0.235f, 0.54f), "Octopodes' Color", "Set the octopodes' colors."), - new Param("squeezedColor", new Color(1f, 0f, 0f), "Squeezed Color", "Set the octopodes' colors when they're squeezed."), + new Param("octoColor", new Color(0.97f, 0.235f, 0.54f), "Octo-Pops' Color", "Set the Octo-Pops' colors."), + new Param("squeezedColor", new Color(1f, 0f, 0f), "Squeezed Color", "Set the Octo-Pops' colors when they're squeezed."), new Param("ease", Util.EasingFunction.Ease.Linear, "Ease", "Set the easing of the action."), }, resizable = true, diff --git a/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs b/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs index d26123db7..ade33be6f 100644 --- a/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs +++ b/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs @@ -37,7 +37,7 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("2b2t", false, "Voxel Melon", "Toggle if the melon should be reskinned as a melon from a certain game."), - new Param("valA", new EntityTypes.Integer(0, 30, 1), "Money", "Set the amount of coins the melon spills out when sliced."), + new Param("valA", new EntityTypes.Integer(0, 30, 1), "Money", "Set the number of coins the melon spills out when sliced."), } }, new GameAction("fish", "Fish") @@ -49,7 +49,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 7, parameters = new List() { - new Param("valA", new EntityTypes.Integer(0, 30, 1), "Money", "Set the amount of coins the fish spills out when sliced."), + new Param("valA", new EntityTypes.Integer(0, 30, 1), "Money", "Set the number of coins the fish spills out when sliced."), } }, new GameAction("demon", "Demon") @@ -61,7 +61,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 7, parameters = new List() { - new Param("valA", new EntityTypes.Integer(0, 30, 1), "Money", "Set the amount of coins the demon spills out when sliced."), + new Param("valA", new EntityTypes.Integer(0, 30, 1), "Money", "Set the number of coins the demon spills out when sliced."), } }, new GameAction("particle effects", "Particle Effects") @@ -90,7 +90,7 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("type", SamuraiSliceNtr.ObjectType.Melon, "Object", "The object to spawn"), - new Param("valA", new EntityTypes.Integer(0, 30, 1), "Money", "The amount of coins the melon spills out when sliced"), + new Param("valA", new EntityTypes.Integer(0, 30, 1), "Money", "The number of coins the melon spills out when sliced"), }, hidden = true }, diff --git a/Assets/Scripts/Games/SeeSaw/SeeSaw.cs b/Assets/Scripts/Games/SeeSaw/SeeSaw.cs index b745ebc97..62e2a7892 100644 --- a/Assets/Scripts/Games/SeeSaw/SeeSaw.cs +++ b/Assets/Scripts/Games/SeeSaw/SeeSaw.cs @@ -109,7 +109,7 @@ namespace HeavenStudio.Games.Loaders new Param("ease", Util.EasingFunction.Ease.Linear, "Ease", "Set the easing of the action.") } }, - new GameAction("recolor", "Color Pallete") + new GameAction("recolor", "Color Palette") { function = delegate { var e = eventCaller.currentEntity; SeeSaw.ChangeMappingColor(e["fill"], e["outline"]); }, defaultLength = 0.5f, diff --git a/Assets/Scripts/Games/SpaceSoccer/SpaceSoccer.cs b/Assets/Scripts/Games/SpaceSoccer/SpaceSoccer.cs index d4f965b4e..4340ba9e0 100644 --- a/Assets/Scripts/Games/SpaceSoccer/SpaceSoccer.cs +++ b/Assets/Scripts/Games/SpaceSoccer/SpaceSoccer.cs @@ -46,7 +46,7 @@ namespace HeavenStudio.Games.Loaders }), - new Param("amount", new EntityTypes.Integer(2, 30, 5), "Amount", "Set the amount of space kickers."), + new Param("amount", new EntityTypes.Integer(2, 30, 5), "Number", "Set the number of space kickers."), new Param("x", new EntityTypes.Float(-30, 30, 2f), "X Distance", "Set how much distance there should be between the space kickers on the x axis."), new Param("y", new EntityTypes.Float(-30, 30, -0.5f), "Y Distance", "Set how much distance there should be between the space kickers on the x axis."), new Param("z", new EntityTypes.Float(-30, 30, 1.25f), "Z Distance", "Set how much distance there should be between the space kickers on the x axis."), diff --git a/Assets/Scripts/Games/TapTroupe/TapTroupe.cs b/Assets/Scripts/Games/TapTroupe/TapTroupe.cs index 07b9e54f2..ce218e4ac 100644 --- a/Assets/Scripts/Games/TapTroupe/TapTroupe.cs +++ b/Assets/Scripts/Games/TapTroupe/TapTroupe.cs @@ -64,7 +64,7 @@ namespace HeavenStudio.Games.Loaders new Param("toggle", true, "Darkness", "Toggle if the scene should be dark and the spotlights should appear."), new Param("leftMost", false, "Leftmost Spotlight", "Toggle if the leftmost spotlight should be turned on or off."), new Param("middleLeft", false, "Middle-Left Spotlight", "Toggle if the middle-left spotlight should be turned on or off."), - new Param("middleRight", false, "Middle-Light Spotlight", "Toggle if the middle-right spotlight should be turned on or off."), + new Param("middleRight", false, "Middle-Right Spotlight", "Toggle if the middle-right spotlight should be turned on or off."), new Param("player", true, "Player Spotlight", "Toggle if the player's spotlight should be turned on or off."), } }, diff --git a/Assets/Scripts/Minigames.cs b/Assets/Scripts/Minigames.cs index 309887947..a6d803cbe 100644 --- a/Assets/Scripts/Minigames.cs +++ b/Assets/Scripts/Minigames.cs @@ -752,7 +752,7 @@ namespace HeavenStudio function: delegate { var e = eventCaller.currentEntity; GameManager.instance.SwitchGame(eventCaller.currentSwitchGame, eventCaller.currentEntity.beat, e["toggle"]); }, parameters: new List() { - new Param("toggle", true, "Black Flash", "Toggle if there should be a blck flash before the game is switched. You should only disable this if you know what you're doing.") + new Param("toggle", true, "Black Flash", "Toggle if there should be a black flash before the game is switched. You should only disable this if you know what you're doing.") }, inactiveFunction: delegate { var e = eventCaller.currentEntity; GameManager.instance.SwitchGame(eventCaller.currentSwitchGame, eventCaller.currentEntity.beat, e["toggle"]); } ), @@ -1042,7 +1042,7 @@ namespace HeavenStudio }), } }, - new GameAction("cabb", "Chromatic Abberation") + new GameAction("cabb", "Chromatic Aberration") { resizable = true, parameters = new() @@ -1275,10 +1275,10 @@ namespace HeavenStudio resizable = true, parameters = new() { - new("xStart", new EntityTypes.Float(1, 100, 1), "Start Horizontal Tiles", "Set the amount of horizontal tiles at the start of the event."), - new("xEnd", new EntityTypes.Float(1, 100, 1), "End Horizontal Tiles", "Set the amount of horizontal tiles at the end of the event."), - new("yStart", new EntityTypes.Float(1, 100, 1), "Start Vertical Tiles", "Set the amount of vertical tiles at the start of the event."), - new("yEnd", new EntityTypes.Float(1, 100, 1), "End Vertical Tiles", "Set the amount of vertical tiles at the end of the event."), + new("xStart", new EntityTypes.Float(1, 100, 1), "Start Horizontal Tiles", "Set the number of horizontal tiles at the start of the event."), + new("xEnd", new EntityTypes.Float(1, 100, 1), "End Horizontal Tiles", "Set the number of horizontal tiles at the end of the event."), + new("yStart", new EntityTypes.Float(1, 100, 1), "Start Vertical Tiles", "Set the number of vertical tiles at the start of the event."), + new("yEnd", new EntityTypes.Float(1, 100, 1), "End Vertical Tiles", "Set the number of vertical tiles at the end of the event."), new("axis", StaticCamera.ViewAxis.All, "Axis", "Set if only a specific axis should be modified."), new("ease", Util.EasingFunction.Ease.Linear, "Ease", "Set the easing of the action.", new() { From aec00710b18dcc3d7df7e6a65c8348342b5ab52b Mon Sep 17 00:00:00 2001 From: Kevin Kuhn <55213985+kkuhn317@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:44:27 -0400 Subject: [PATCH 4/7] Correct the spelling and grammar of nightly games (#839) * fix spelling and grammar errors in release 1 games * fix nightly game text --- Assets/Scripts/Games/BonOdori/BonOdori.cs | 2 +- .../Games/BuiltToScaleRvl/BuiltToScaleRvl.cs | 6 +++--- Assets/Scripts/Games/Cannery/Cannery.cs | 2 +- .../Games/CatchOfTheDay/CatchOfTheDay.cs | 20 +++++++++---------- Assets/Scripts/Games/Fillbots/Fillbots.cs | 4 ++-- .../Scripts/Games/FreezeFrame/FreezeFrame.cs | 10 +++++----- .../MannequinFactory/MannequinFactory.cs | 4 ++-- Assets/Scripts/Games/Manzai/Manzai.cs | 14 ++++++------- .../Scripts/Games/MonkeyWatch/MonkeyWatch.cs | 6 +++--- .../PowerCalligraphy/PowerCalligraphy.cs | 6 +++--- 10 files changed, 37 insertions(+), 37 deletions(-) diff --git a/Assets/Scripts/Games/BonOdori/BonOdori.cs b/Assets/Scripts/Games/BonOdori/BonOdori.cs index 1b53f3e96..2053aa810 100644 --- a/Assets/Scripts/Games/BonOdori/BonOdori.cs +++ b/Assets/Scripts/Games/BonOdori/BonOdori.cs @@ -151,7 +151,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 1f, parameters = new List() { - new Param("toggle", true, "Darken Background", "Darkens the background"), + new Param("toggle", true, "Darken Background", "Darkens the background."), } }, }, diff --git a/Assets/Scripts/Games/BuiltToScaleRvl/BuiltToScaleRvl.cs b/Assets/Scripts/Games/BuiltToScaleRvl/BuiltToScaleRvl.cs index 91c786c8d..4f1ca8e17 100644 --- a/Assets/Scripts/Games/BuiltToScaleRvl/BuiltToScaleRvl.cs +++ b/Assets/Scripts/Games/BuiltToScaleRvl/BuiltToScaleRvl.cs @@ -43,7 +43,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 1f, parameters = new List() { - new Param("id", new EntityTypes.Integer(1, 4, 1), "Rod ID", "Set the ID of the rod to out."), + new Param("id", new EntityTypes.Integer(1, 4, 1), "Rod ID", "Set the ID of the rod to bounce out the side."), }, }, new GameAction("custom spawn", "Custom Spawn Rod") @@ -53,7 +53,7 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("direction", BuiltToScaleRvl.Direction.Left, "Direction", "Set the direction in which the rod will come out."), - new Param("target", BuiltToScaleRvl.TargetBlock.First, "Target", "Set the target in which the rod will bounce."), + new Param("target", BuiltToScaleRvl.TargetBlock.First, "Target", "Set the target where the rod will bounce first."), new Param("id", new EntityTypes.Integer(1, 4, 1), "Rod ID", "Set the ID of the rod to spawn. Rods with the same ID cannot spawn at the same time."), }, }, @@ -62,7 +62,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 1f, parameters = new List() { - new Param("target", BuiltToScaleRvl.Target.First, "Target", "Set the target in which the rod will bounce."), + new Param("target", BuiltToScaleRvl.Target.First, "Target", "Set the target that the rod will bounce to."), new Param("id", new EntityTypes.Integer(1, 4, 1), "Rod ID", "Set the ID of the rod to bounce."), }, }, diff --git a/Assets/Scripts/Games/Cannery/Cannery.cs b/Assets/Scripts/Games/Cannery/Cannery.cs index 35b210753..0953df7c7 100644 --- a/Assets/Scripts/Games/Cannery/Cannery.cs +++ b/Assets/Scripts/Games/Cannery/Cannery.cs @@ -25,7 +25,7 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("toggle", true, "Bop", "Toggle if the alarm should bop for the duration of this event."), - new Param("auto", false, "Bop (Auto)", "Toggle if Dog Ninja should automatically bop until another Bop event is reached."), + new Param("auto", false, "Bop (Auto)", "Toggle if the alarm should automatically bop until another Bop event is reached."), } }, new GameAction("can", "Can") diff --git a/Assets/Scripts/Games/CatchOfTheDay/CatchOfTheDay.cs b/Assets/Scripts/Games/CatchOfTheDay/CatchOfTheDay.cs index e46aca7a6..c325147bf 100644 --- a/Assets/Scripts/Games/CatchOfTheDay/CatchOfTheDay.cs +++ b/Assets/Scripts/Games/CatchOfTheDay/CatchOfTheDay.cs @@ -33,10 +33,10 @@ namespace HeavenStudio.Games.Loaders }), new Param("colorTop", new Color(0.7098039f, 0.8705882f, 0.8705882f), "Top Color", "The color for the top part of the background."), new Param("colorBottom", new Color(0.4666667f, 0.7372549f, 0.8196079f), "Bottom Color", "The color for the bottom part of the background."), - new Param("sceneDelay", new EntityTypes.Float(0f, 32f, 2f), "Scene Change Delay", "Amount of beats to wait before changing to the next scene."), + new Param("sceneDelay", new EntityTypes.Float(0f, 32f, 2f), "Scene Change Delay", "The number of beats to wait before changing to the next scene."), new Param("fgManta", false, "Foreground Stingray", "Spawn a stingray in the foreground of the scene."), new Param("bgManta", false, "Background Stingray", "Spawn a stingray in the background of the scene."), - new Param("schoolFish", false, "School of Fish", "Spawn a school of fish to as a distraction.", new List() + new Param("schoolFish", false, "School of Fish", "Spawn a school of fish as a distraction.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "fishDensity" }) }), @@ -58,10 +58,10 @@ namespace HeavenStudio.Games.Loaders }), new Param("colorTop", new Color(0.7098039f, 0.8705882f, 0.8705882f), "Top Color", "The color for the top part of the background."), new Param("colorBottom", new Color(0.4666667f, 0.7372549f, 0.8196079f), "Bottom Color", "The color for the bottom part of the background."), - new Param("sceneDelay", new EntityTypes.Float(0f, 32f, 2f), "Scene Change Delay", "Amount of beats to wait before changing to the next scene."), + new Param("sceneDelay", new EntityTypes.Float(0f, 32f, 2f), "Scene Change Delay", "Number of beats to wait before changing to the next scene."), new Param("fgManta", false, "Foreground Stingray", "Spawn a stingray in the foreground of the scene."), new Param("bgManta", false, "Background Stingray", "Spawn a stingray in the background of the scene."), - new Param("schoolFish", false, "School of Fish", "Spawn a school of fish to as a distraction.", new List() + new Param("schoolFish", false, "School of Fish", "Spawn a school of fish as a distraction.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "fishDensity" }) }), @@ -84,10 +84,10 @@ namespace HeavenStudio.Games.Loaders }), new Param("colorTop", new Color(0.7098039f, 0.8705882f, 0.8705882f), "Top Color", "The color for the top part of the background."), new Param("colorBottom", new Color(0.4666667f, 0.7372549f, 0.8196079f), "Bottom Color", "The color for the bottom part of the background."), - new Param("sceneDelay", new EntityTypes.Float(0f, 32f, 2f), "Scene Change Delay", "Amount of beats to wait before changing to the next scene."), + new Param("sceneDelay", new EntityTypes.Float(0f, 32f, 2f), "Scene Change Delay", "Number of beats to wait before changing to the next scene."), new Param("fgManta", false, "Foreground Stingray", "Spawn a stingray in the foreground of the scene."), new Param("bgManta", false, "Background Stingray", "Spawn a stingray in the background of the scene."), - new Param("schoolFish", false, "School of Fish", "Spawn a school of fish to as a distraction.", new List() + new Param("schoolFish", false, "School of Fish", "Spawn a school of fish as a distraction.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "fishDensity" }) }), @@ -109,16 +109,16 @@ namespace HeavenStudio.Games.Loaders }), new Param("startMoveX", new EntityTypes.Float(-20f, 20f, 0f), "Start X", "Set the X position from which to move."), new Param("startMoveY", new EntityTypes.Float(-20f, 20f, 0f), "Start Y", "Set the Y position from which to move."), - new Param("endMoveX", new EntityTypes.Float(-20f, 20f, 0f), "End X", "Set the X position to which to move."), - new Param("endMoveY", new EntityTypes.Float(-20f, 20f, 0f), "End Y", "Set the Y position to which to move."), + new Param("endMoveX", new EntityTypes.Float(-20f, 20f, 0f), "End X", "Set the X position to move to."), + new Param("endMoveY", new EntityTypes.Float(-20f, 20f, 0f), "End Y", "Set the Y position to move to."), new Param("doRotate", false, "Rotate", "Select this option if you want to rotate Ann.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "endRotDegrees" } ), new Param.CollapseParam((x, e) => (bool)x && (Util.EasingFunction.Ease)e["ease"] != Util.EasingFunction.Ease.Instant, new string[] { "startRotDegrees" }), new Param.CollapseParam((_, e) => (bool)e["doMove"] || (bool)e["doRotate"] || (bool)e["doScale"], new string[] { "ease" }) }), - new Param("startRotDegrees", new EntityTypes.Float(-360f, 360f, 0f), "Start Rotation", "Set the amount of degrees at which to begin rotating."), - new Param("endRotDegrees", new EntityTypes.Float(-360f, 360f, 0f), "End Rotation", "Set the amount of degrees at which to finish rotating."), + new Param("startRotDegrees", new EntityTypes.Float(-360f, 360f, 0f), "Start Rotation", "Set the number of degrees at which to begin rotating."), + new Param("endRotDegrees", new EntityTypes.Float(-360f, 360f, 0f), "End Rotation", "Set the number of degrees at which to finish rotating."), new Param("doScale", false, "Scale", "Select this option if you want to change Ann's scale.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "endScaleX", "endScaleY" } ), diff --git a/Assets/Scripts/Games/Fillbots/Fillbots.cs b/Assets/Scripts/Games/Fillbots/Fillbots.cs index b84575fa6..70ee5fe14 100644 --- a/Assets/Scripts/Games/Fillbots/Fillbots.cs +++ b/Assets/Scripts/Games/Fillbots/Fillbots.cs @@ -16,7 +16,7 @@ namespace HeavenStudio.Games.Loaders new Param("practice", false, "Count-In"), new Param("alt", false, "Alternate OK"), new Param("type", Scripts_Fillbots.EndAnim.Both, "Success Reaction", "Set the reaction of the Robot."), - new Param("stop", false, "Stop Conveyer", "Toggle if the conveyer should be stopped when finished."), + new Param("stop", false, "Stop Conveyor", "Toggle if the conveyor should be stopped when finished."), new Param("color", false, "Custom Color", "Toggle if the robot color should be changed.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "colorFuel", "colorLampOff", "colorLampOn" }), @@ -145,7 +145,7 @@ namespace HeavenStudio.Games.Loaders new Param("colorLampOn", new Color(1f, 1f, 0.42f), "On Lamp Color", "Set the color of the on lamp."), new Param("colorImpact", new Color(1f, 0.59f, 0.01f), "Impact Color", "Set the color of the impact."), new Param("colorFiller", Color.white, "Filler Color", "Set the color of the filler."), - new Param("colorConveyer", Color.white, "Conveyer Color", "Set the color of the conveyer."), + new Param("colorConveyer", Color.white, "Conveyor Color", "Set the color of the conveyor."), } }, }, diff --git a/Assets/Scripts/Games/FreezeFrame/FreezeFrame.cs b/Assets/Scripts/Games/FreezeFrame/FreezeFrame.cs index 489947a46..22a126a85 100644 --- a/Assets/Scripts/Games/FreezeFrame/FreezeFrame.cs +++ b/Assets/Scripts/Games/FreezeFrame/FreezeFrame.cs @@ -134,7 +134,7 @@ namespace HeavenStudio.Games.Loaders resizable = true, parameters = new List() { - new Param("enter", true, "Enter", "Choose the sign should enter or exit."), + new Param("enter", true, "Enter", "Choose whether the sign should enter or exit."), new Param("ease", Util.EasingFunction.Ease.Linear, "Ease", "Set the easing of the action."), } }, @@ -176,16 +176,16 @@ namespace HeavenStudio.Games.Loaders }), new Param("startMoveX", new EntityTypes.Float(-20f, 20f, 0f), "Start X", "Set the X position from which to move."), new Param("startMoveY", new EntityTypes.Float(-20f, 20f, 0f), "Start Y", "Set the Y position from which to move."), - new Param("endMoveX", new EntityTypes.Float(-20f, 20f, 0f), "End X", "Set the X position to which to move."), - new Param("endMoveY", new EntityTypes.Float(-20f, 20f, 0f), "End Y", "Set the Y position to which to move."), + new Param("endMoveX", new EntityTypes.Float(-20f, 20f, 0f), "End X", "Set the X position to move to."), + new Param("endMoveY", new EntityTypes.Float(-20f, 20f, 0f), "End Y", "Set the Y position to move to."), new Param("doRotate", false, "Rotate", "Select this option if you want to rotate T.J.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "endRotDegrees" } ), new Param.CollapseParam((x, e) => (bool)x && (Util.EasingFunction.Ease)e["ease"] != Util.EasingFunction.Ease.Instant, new string[] { "startRotDegrees" }), new Param.CollapseParam((_, e) => (bool)e["doMove"] || (bool)e["doRotate"] || (bool)e["doScale"], new string[] { "ease" }) }), - new Param("startRotDegrees", new EntityTypes.Float(-360f, 360f, 0f), "Start Rotation", "Set the amount of degrees at which to begin rotating."), - new Param("endRotDegrees", new EntityTypes.Float(-360f, 360f, 0f), "End Rotation", "Set the amount of degrees at which to finish rotating."), + new Param("startRotDegrees", new EntityTypes.Float(-360f, 360f, 0f), "Start Rotation", "Set the number of degrees at which to begin rotating."), + new Param("endRotDegrees", new EntityTypes.Float(-360f, 360f, 0f), "End Rotation", "Set the number of degrees at which to finish rotating."), new Param("doScale", false, "Scale", "Select this option if you want to change T.J.'s scale.", new List() { new Param.CollapseParam((x, _) => (bool)x, new string[] { "endScaleX", "endScaleY" } ), diff --git a/Assets/Scripts/Games/MannequinFactory/MannequinFactory.cs b/Assets/Scripts/Games/MannequinFactory/MannequinFactory.cs index 9b9c85557..70d9f8585 100644 --- a/Assets/Scripts/Games/MannequinFactory/MannequinFactory.cs +++ b/Assets/Scripts/Games/MannequinFactory/MannequinFactory.cs @@ -64,7 +64,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 0.5f, parameters = new List() { - new Param("text", "Mannequin Factory", "Text", "The text to be displayed on the sign"), + new Param("text", "Mannequin Factory", "Text", "The text to be displayed on the sign."), } }, new GameAction("bgColor", "Change Background Color") @@ -79,7 +79,7 @@ namespace HeavenStudio.Games.Loaders { new Param("colorStart", new Color(0.97f, 0.94f, 0.51f, 1f), "Start Color", "The color to start fading from."), new Param("colorEnd", new Color(0.97f, 0.94f, 0.51f, 1f), "End Color", "The color to end the fade."), - new Param("ease", Util.EasingFunction.Ease.Linear, "Ease", "The ease to use for color fade", new() { + new Param("ease", Util.EasingFunction.Ease.Linear, "Ease", "The ease to use for color fade.", new() { new Param.CollapseParam((x, _) => (int)x != (int)Util.EasingFunction.Ease.Instant, new[] { "colorStart" }), }), }, diff --git a/Assets/Scripts/Games/Manzai/Manzai.cs b/Assets/Scripts/Games/Manzai/Manzai.cs index 3974d3c6a..ec04fe346 100644 --- a/Assets/Scripts/Games/Manzai/Manzai.cs +++ b/Assets/Scripts/Games/Manzai/Manzai.cs @@ -36,9 +36,9 @@ namespace HeavenStudio.Games.Loaders resizable = true, parameters = new List() { - new Param("who", Manzai.WhoBops.Both, "Who Bops?", "Which bird bops"), - new Param("bop", true, "Enable Bopping", "Whether to bop to the beat or not"), - new Param("auto", false, "Automatic?", "Whether to bop to the beat or not automatically"), + new Param("who", Manzai.WhoBops.Both, "Who Bops?", "Which bird bops."), + new Param("bop", true, "Enable Bopping", "Whether to bop to the beat or not."), + new Param("auto", false, "Automatic?", "Whether to bop to the beat or not automatically."), } }, new GameAction("pun", "Pun") @@ -106,9 +106,9 @@ namespace HeavenStudio.Games.Loaders resizable = true, parameters = new List() { - new Param("goToSide", Manzai.WhichSide.Outside, "Go to Which Side?", "Which side of the stage the birds will move to?"), + new Param("goToSide", Manzai.WhichSide.Outside, "Go to Which Side?", "Which side of the stage will the birds will move to?"), new Param("ease", EasingFunction.Ease.EaseOutQuad, "Ease", "Which ease should the movement have?"), - new Param("animation", true, "Play Animation?", "Whether the birds will use the slide animation"), + new Param("animation", true, "Play Animation?", "Whether the birds will use the slide animation."), }, }, new GameAction("lights", "Toggle Lights") @@ -120,7 +120,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 0.5f, parameters = new List() { - new Param("lightsEnabled", false, "Spotlights", "Whether the spotlights will be turned on"), + new Param("lightsEnabled", false, "Spotlights", "Whether the spotlights will be turned on."), }, }, new GameAction("crowd", "Crowd Animations") @@ -134,7 +134,7 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("animation", Manzai.CrowdAnimationList.Bop, "Animation", "What animation the crowd will play."), - new Param("loop", new EntityTypes.Integer(1, 16, 4), "Loop Interval (x4)", "How many quarter-beats the animation will wait before looping"), + new Param("loop", new EntityTypes.Integer(1, 16, 4), "Loop Interval (x4)", "How many quarter-beats the animation will wait before looping."), }, }}, new List() { "rvl", "normal" }, diff --git a/Assets/Scripts/Games/MonkeyWatch/MonkeyWatch.cs b/Assets/Scripts/Games/MonkeyWatch/MonkeyWatch.cs index 5c3151fc9..b5a7b70cc 100644 --- a/Assets/Scripts/Games/MonkeyWatch/MonkeyWatch.cs +++ b/Assets/Scripts/Games/MonkeyWatch/MonkeyWatch.cs @@ -37,7 +37,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 2f, parameters = new List() { - new Param("min", new EntityTypes.Integer(0, 59, 0), "Set Starting Second", "A second is equivalent to one monkey.") + new Param("min", new EntityTypes.Integer(0, 59, 0), "Starting Second", "A second is equivalent to one monkey.") } }, new GameAction("off", "Pink Monkeys") @@ -99,7 +99,7 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("instant", false, "Instant"), - new Param("timeMode", MonkeyWatch.TimeMode.RealTime, "Time Mode", "Set the clock to system time or a certain time"), + new Param("timeMode", MonkeyWatch.TimeMode.RealTime, "Time Mode", "Set the clock to system time or a specific time."), new Param("hour", new EntityTypes.Integer(0, 12, 3), "Hour"), new Param("minute", new EntityTypes.Integer(0, 59, 0), "Minute") } @@ -115,7 +115,7 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("instant", false, "Instant"), - new Param("timeMode", MonkeyWatch.TimeMode.RealTime, "Time Mode", "Set the clock to system time or a certain time"), + new Param("timeMode", MonkeyWatch.TimeMode.RealTime, "Time Mode", "Set the clock to system time or a specific time."), new Param("hour", new EntityTypes.Integer(0, 12, 3), "Hour"), new Param("minute", new EntityTypes.Integer(0, 59, 0), "Minute") } diff --git a/Assets/Scripts/Games/PowerCalligraphy/PowerCalligraphy.cs b/Assets/Scripts/Games/PowerCalligraphy/PowerCalligraphy.cs index c4763d2b4..fece6aab6 100644 --- a/Assets/Scripts/Games/PowerCalligraphy/PowerCalligraphy.cs +++ b/Assets/Scripts/Games/PowerCalligraphy/PowerCalligraphy.cs @@ -24,8 +24,8 @@ namespace HeavenStudio.Games.Loaders resizable = true, parameters = new List() { - new Param("bop", true, "Bop", "Toggle if the paddlers should bop for the duration of this event."), - new Param("bopAuto", false, "Bop (Auto)", "Toggle if the paddlers should automatically bop until another Bop event is reached.") + new Param("bop", true, "Bop", "Toggle if the hand should bop for the duration of this event."), + new Param("bopAuto", false, "Bop (Auto)", "Toggle if the hand should automatically bop until another Bop event is reached.") } }, new GameAction("re", "Re (レ)") @@ -64,7 +64,7 @@ namespace HeavenStudio.Games.Loaders e["korean"] ? (int)PowerCalligraphy.CharacterType.face_kr : (int)PowerCalligraphy.CharacterType.face); }, parameters = new List() { - new Param("korean", false, "Korean Version", "Change the character to Korean version. (つ3ニハ○○ムし)"), + new Param("korean", false, "Korean Version", "Change the character to the Korean version. (つ3ニハ○○ムし)"), }, defaultLength = 12f, }, From 10e9a5e35d1028f7ba5b932c8234024f09bd2d16 Mon Sep 17 00:00:00 2001 From: ThePurpleAnon <100617766+ThePurpleAnon@users.noreply.github.com> Date: Mon, 8 Apr 2024 13:49:01 -0500 Subject: [PATCH 5/7] Timing display fixes (#840) * the fix :tm: * the glow :tm: --- .../Common/Overlays/TimingAccuracy.prefab | 62 ++++----- .../StarAndAccuracy/AceColorCycle.shader | 99 ++++++++++++++ .../StarAndAccuracy/AceColorCycle.shader.meta | 10 ++ .../StarAndAccuracy/AceStarParticle.mat | 120 +++++++++++++++++ .../StarAndAccuracy/AceStarParticle.mat.meta | 8 ++ .../StarAndAccuracy/StarParticle.mat | 10 +- .../StarAndAccuracy/acecolors.png | Bin 0 -> 148 bytes .../StarAndAccuracy/acecolors.png.meta | 123 ++++++++++++++++++ .../UI/Overlays/TimingAccuracyDisplay.cs | 7 + 9 files changed, 406 insertions(+), 33 deletions(-) create mode 100644 Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceColorCycle.shader create mode 100644 Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceColorCycle.shader.meta create mode 100644 Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceStarParticle.mat create mode 100644 Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceStarParticle.mat.meta create mode 100644 Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/acecolors.png create mode 100644 Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/acecolors.png.meta diff --git a/Assets/Resources/Prefabs/Common/Overlays/TimingAccuracy.prefab b/Assets/Resources/Prefabs/Common/Overlays/TimingAccuracy.prefab index a94a2703c..0f5b63ef8 100644 --- a/Assets/Resources/Prefabs/Common/Overlays/TimingAccuracy.prefab +++ b/Assets/Resources/Prefabs/Common/Overlays/TimingAccuracy.prefab @@ -5459,21 +5459,21 @@ ParticleSystem: serializedVersion: 2 minMaxState: 4 minColor: {r: 1, g: 0, b: 1, a: 1} - maxColor: {r: 0, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} maxGradient: serializedVersion: 2 - key0: {r: 0.13950695, g: 0.8962264, b: 0.8962264, a: 1} - key1: {r: 1, g: 0.60455173, b: 0.2028302, a: 1} + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} key2: {r: 0.8773585, g: 0.15312389, b: 0.8176278, a: 0} - key3: {r: 1, g: 1, b: 0.1273585, a: 0} + key3: {r: 0.14117648, g: 0.8980393, b: 0.8980393, a: 0} key4: {r: 0.5445165, g: 1, b: 0.514151, a: 0} key5: {r: 0.5793154, g: 0.9622642, b: 0.32226774, a: 0} key6: {r: 0.5793154, g: 0.9622642, b: 0.32226774, a: 0} key7: {r: 0, g: 0, b: 0, a: 0} - ctime0: 14173 - ctime1: 21975 - ctime2: 39529 - ctime3: 55653 + ctime0: 0 + ctime1: 65535 + ctime2: 65535 + ctime3: 65535 ctime4: 62414 ctime5: 65535 ctime6: 65535 @@ -5486,8 +5486,8 @@ ParticleSystem: atime5: 0 atime6: 0 atime7: 0 - m_Mode: 1 - m_NumColorKeys: 5 + m_Mode: 0 + m_NumColorKeys: 2 m_NumAlphaKeys: 2 minGradient: serializedVersion: 2 @@ -6603,22 +6603,22 @@ ParticleSystem: enabled: 1 gradient: serializedVersion: 2 - minMaxState: 3 + minMaxState: 1 minColor: {r: 1, g: 1, b: 1, a: 1} maxColor: {r: 1, g: 1, b: 1, a: 1} maxGradient: serializedVersion: 2 key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 0, a: 1} - key2: {r: 0.8235295, g: 0.0627451, b: 0.7607844, a: 0} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 1, g: 1, b: 1, a: 0} key3: {r: 1, g: 1, b: 0, a: 0} key4: {r: 0, g: 0, b: 0, a: 0} key5: {r: 0, g: 0, b: 0, a: 0} key6: {r: 0, g: 0, b: 0, a: 0} key7: {r: 0, g: 0, b: 0, a: 0} ctime0: 0 - ctime1: 51492 - ctime2: 59294 + ctime1: 65535 + ctime2: 65535 ctime3: 55003 ctime4: 0 ctime5: 0 @@ -6637,8 +6637,8 @@ ParticleSystem: m_NumAlphaKeys: 3 minGradient: serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 0, g: 1, b: 1, a: 1} + key0: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} key2: {r: 0.8235295, g: 0.0627451, b: 0.7607844, a: 0} key3: {r: 0.5803922, g: 0.9607844, b: 0.32156864, a: 0} key4: {r: 0, g: 0, b: 0, a: 0} @@ -9488,27 +9488,27 @@ ParticleSystem: m_NumAlphaKeys: 2 CustomDataModule: enabled: 0 - mode0: 0 + mode0: 2 vectorComponentCount0: 4 color0: serializedVersion: 2 - minMaxState: 0 + minMaxState: 1 minColor: {r: 1, g: 1, b: 1, a: 1} - maxColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 0, b: 0, a: 1} maxGradient: serializedVersion: 2 - key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 1, g: 1, b: 1, a: 1} - key2: {r: 0, g: 0, b: 0, a: 0} - key3: {r: 0, g: 0, b: 0, a: 0} + key0: {r: 1, g: 0.99215686, b: 0, a: 1} + key1: {r: 1, g: 0, b: 0, a: 1} + key2: {r: 1, g: 0, b: 0, a: 0} + key3: {r: 1, g: 0.43137255, b: 0.0627451, a: 0} key4: {r: 0, g: 0, b: 0, a: 0} key5: {r: 0, g: 0, b: 0, a: 0} key6: {r: 0, g: 0, b: 0, a: 0} key7: {r: 0, g: 0, b: 0, a: 0} ctime0: 0 - ctime1: 65535 - ctime2: 0 - ctime3: 0 + ctime1: 16384 + ctime2: 32768 + ctime3: 49151 ctime4: 0 ctime5: 0 ctime6: 0 @@ -9522,7 +9522,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 - m_NumColorKeys: 2 + m_NumColorKeys: 4 m_NumAlphaKeys: 2 minGradient: serializedVersion: 2 @@ -9770,7 +9770,7 @@ ParticleSystem: m_PostInfinity: 2 m_RotationOrder: 4 vectorLabel0_3: W - mode1: 0 + mode1: 1 vectorComponentCount1: 4 color1: serializedVersion: 2 @@ -10073,7 +10073,7 @@ ParticleSystemRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 935bc5878e4377e4d92e11173bb5102f, type: 2} + - {fileID: 2100000, guid: 5558d895164867f439186d62dec658fa, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -19916,7 +19916,7 @@ ParticleSystemRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 935bc5878e4377e4d92e11173bb5102f, type: 2} + - {fileID: 2100000, guid: 5558d895164867f439186d62dec658fa, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 diff --git a/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceColorCycle.shader b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceColorCycle.shader new file mode 100644 index 000000000..72fd6e666 --- /dev/null +++ b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceColorCycle.shader @@ -0,0 +1,99 @@ +Shader "Sprites/AceStarCycle" +{ + Properties + { + [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} + _GradientMap ("Color Map", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + _Speed ("Color Rotate Speed", Float) = 1 + [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + "PreviewType"="Plane" + "CanUseSpriteAtlas"="True" + } + + Cull Off + Lighting Off + ZWrite Off + Blend One OneMinusSrcAlpha + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile _ PIXELSNAP_ON + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + fixed4 _Color; + + v2f vert(appdata_t IN) + { + v2f OUT; + OUT.vertex = UnityObjectToClipPos(IN.vertex); + OUT.texcoord = IN.texcoord; + OUT.color = IN.color * _Color; + #ifdef PIXELSNAP_ON + OUT.vertex = UnityPixelSnap (OUT.vertex); + #endif + + return OUT; + } + + sampler2D _MainTex; + sampler2D _AlphaTex; + sampler2D _GradientMap; + float _Speed; + float _AlphaSplitEnabled; + + fixed4 SampleSpriteTexture (float2 uv) + { + fixed4 color = tex2D (_MainTex, uv); + + #if UNITY_TEXTURE_ALPHASPLIT_ALLOWED + if (_AlphaSplitEnabled) + color.a = tex2D (_AlphaTex, uv).r; + #endif //UNITY_TEXTURE_ALPHASPLIT_ALLOWED + + return color; + } + + fixed4 frag(v2f IN) : SV_Target + { + fixed4 c = SampleSpriteTexture (IN.texcoord); + + float grayscale = (IN.color.r + IN.color.g + IN.color.b) / 3; + float grayscaleScrolled = (grayscale + ((_Speed / 4) * _Time.y)) % 1; + fixed4 g = tex2D (_GradientMap, grayscaleScrolled); + + c = fixed4(g.r, g.g, g.b, c.a); + c.rgb *= c.a * IN.color.a; + c.a *= IN.color.a; + return c; + } + ENDCG + } + } +} diff --git a/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceColorCycle.shader.meta b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceColorCycle.shader.meta new file mode 100644 index 000000000..92ad5bcda --- /dev/null +++ b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceColorCycle.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 49c9ed0b23138ae43854107346543307 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceStarParticle.mat b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceStarParticle.mat new file mode 100644 index 000000000..9157ec8eb --- /dev/null +++ b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceStarParticle.mat @@ -0,0 +1,120 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: AceStarParticle + m_Shader: {fileID: 4800000, guid: 49c9ed0b23138ae43854107346543307, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BackTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DownTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FrontTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _GradientMap: + m_Texture: {fileID: 2800000, guid: 4aa512ca12c0f0645830e3a8aa1745fc, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LeftTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _RightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UpTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _Speed: 10 + - _Speed1: 0 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _UseUIAlphaClip: 0 + - _ZWrite: 1 + m_Colors: + - _AddColor: {r: 0.5188679, g: 0.5188679, b: 0.5188679, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 0} + m_BuildTextureStacks: [] diff --git a/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceStarParticle.mat.meta b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceStarParticle.mat.meta new file mode 100644 index 000000000..41d88078a --- /dev/null +++ b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/AceStarParticle.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5558d895164867f439186d62dec658fa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/StarParticle.mat b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/StarParticle.mat index 059aebbca..6fdd0cc28 100644 --- a/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/StarParticle.mat +++ b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/StarParticle.mat @@ -2,14 +2,15 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: StarParticle m_Shader: {fileID: 4800000, guid: af9746bafb4f8e942b6957f0b2a2ac59, type: 3} - m_ShaderKeywords: + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -39,6 +40,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _GradientMap: + m_Texture: {fileID: 2800000, guid: b31d4f673c4dc0b498c0325fbece6d29, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -55,6 +60,7 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + m_Ints: [] m_Floats: - PixelSnap: 0 - _BumpScale: 1 diff --git a/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/acecolors.png b/Assets/Resources/Sprites/UI/Common/GameOverlays/StarAndAccuracy/acecolors.png new file mode 100644 index 0000000000000000000000000000000000000000..20c84233681953cfb4adb3ef1f56ee2d49315354 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQqi6+jv*W~WltFLH5o8495Cin zQ(|1G@V|cUji|sWJ0yH0@^;QGja~Sm@KexfDbH+?J0().Play(); } From c9f6b3edaf9b8e427bbe58491e5caa1d602bcca4 Mon Sep 17 00:00:00 2001 From: minenice55 Date: Mon, 8 Apr 2024 22:01:18 -0400 Subject: [PATCH 6/7] Asset Loading Fix (#843) * (hopefullyt) fix asset loading issue * let mis-packed games load from res timing display tweak * fix initial pre-load not actually preloading needed games fix mr upbeat metronome * let's try this resyncing again --- Assets/Scripts/Conductor.cs | 16 ++-- Assets/Scripts/EventCaller.cs | 22 +++-- Assets/Scripts/GameManager.cs | 53 +++++++---- Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs | 87 +++++++++++-------- .../Games/SneakySpirits/SneakySpirits.cs | 2 +- Assets/Scripts/Minigames.cs | 8 +- .../UI/Overlays/TimingAccuracyDisplay.cs | 9 +- 7 files changed, 112 insertions(+), 85 deletions(-) diff --git a/Assets/Scripts/Conductor.cs b/Assets/Scripts/Conductor.cs index f2c6445dc..1ab571ab8 100644 --- a/Assets/Scripts/Conductor.cs +++ b/Assets/Scripts/Conductor.cs @@ -96,9 +96,7 @@ namespace HeavenStudio private float timelineVolume = 1f; private float minigameVolume = 1f; - const bool doPitchResync = false; - - public void SetTimelinePitch(float pitch, bool resync = false) + public void SetTimelinePitch(float pitch) { if (isPaused || deferTimeKeeping) return; if (pitch != 0 && pitch != timelinePitch) @@ -111,17 +109,17 @@ namespace HeavenStudio if (musicSource != null && musicSource.clip != null) { musicSource.pitch = SongPitch; - if (doPitchResync && isPlaying && resync && !deferTimeKeeping) + if (isPlaying && !(isPaused || deferTimeKeeping)) { time = MapTimeToPitchChanges(absTime + absTimeAdjust); songPos = startPos + time; songPosBeat = GetBeatFromSongPos(songPos); - SeekMusicToTime(songPos, firstBeatOffset); + songPositionInBeatsAsDouble = GetSwungBeat(songPosBeat); } } } - public void SetMinigamePitch(float pitch, bool resync = false) + public void SetMinigamePitch(float pitch) { if (isPaused || deferTimeKeeping || !isPlaying) return; if (pitch != 0 && pitch != minigamePitch) @@ -134,12 +132,12 @@ namespace HeavenStudio if (musicSource != null && musicSource.clip != null) { musicSource.pitch = SongPitch; - if (doPitchResync && isPlaying && resync && !deferTimeKeeping) + if (isPlaying && !(isPaused || deferTimeKeeping)) { time = MapTimeToPitchChanges(absTime + absTimeAdjust); songPos = startPos + time; songPosBeat = GetBeatFromSongPos(songPos); - SeekMusicToTime(songPos, firstBeatOffset); + songPositionInBeatsAsDouble = GetSwungBeat(songPosBeat); } } } @@ -171,7 +169,7 @@ namespace HeavenStudio songPosBeat = GetBeatFromSongPos(time); - gameManager.SetCurrentEventToClosest(beat); + gameManager.SetCurrentEventToClosest(beat, true); } public void PlaySetup(double beat) diff --git a/Assets/Scripts/EventCaller.cs b/Assets/Scripts/EventCaller.cs index 29e67d5b4..42cecc80e 100644 --- a/Assets/Scripts/EventCaller.cs +++ b/Assets/Scripts/EventCaller.cs @@ -118,24 +118,22 @@ namespace HeavenStudio public static List GetAllInGameManagerList(string gameName, string[] include) { - List temp1 = instance.gameManager.Beatmap.Entities.FindAll(c => c.datamodel.Split('/')[0] == gameName); - List temp2 = new List(); - foreach (string s in include) + Predicate match = c => { - temp2.AddRange(temp1.FindAll(c => c.datamodel.Split('/')[1].Equals(s))); - } - return temp2; + string[] details = c.datamodel.Split('/'); + return details[0] == gameName && include.Contains(details[1]); + }; + return instance.gameManager.Beatmap.Entities.FindAll(match); } public static List GetAllInGameManagerListExclude(string gameName, string[] exclude) { - List temp1 = instance.gameManager.Beatmap.Entities.FindAll(c => c.datamodel.Split('/')[0] == gameName); - List temp2 = new List(); - foreach (string s in exclude) + Predicate match = c => { - temp2.AddRange(temp1.FindAll(c => !c.datamodel.Split('/')[1].Equals(s))); - } - return temp2; + string[] details = c.datamodel.Split('/'); + return details[0] == gameName && !exclude.Contains(details[1]); + }; + return instance.gameManager.Beatmap.Entities.FindAll(match); } public static List FXOnlyGames() diff --git a/Assets/Scripts/GameManager.cs b/Assets/Scripts/GameManager.cs index a5a7b8bf3..e630566e3 100644 --- a/Assets/Scripts/GameManager.cs +++ b/Assets/Scripts/GameManager.cs @@ -22,7 +22,6 @@ namespace HeavenStudio [Header("Lists")] [NonSerialized] public RiqBeatmap Beatmap = new(); - private Dictionary cachedGamePrefabs = new(); [NonSerialized] public ObjectPool SoundObjects; [Header("Components")] @@ -372,7 +371,7 @@ namespace HeavenStudio List entitiesAtSameBeat = ListPool.Get(); Minigames.Minigame inf; - //seek ahead to preload games that have assetbundles + // seek ahead to preload games that have assetbundles if (currentPreSwitch < allGameSwitches.Count && currentPreSwitch >= 0) { if (start + seekTime >= allGameSwitches[currentPreSwitch].beat) @@ -723,7 +722,7 @@ namespace HeavenStudio conductor.SetVolume(Beatmap.VolumeChanges[0]["volume"]); conductor.firstBeatOffset = Beatmap.data.offset; conductor.PlaySetup(beat); - SetCurrentEventToClosest(beat); + SetCurrentEventToClosest(beat, true); Debug.Log("Playing at " + beat); KillAllSounds(); @@ -845,7 +844,7 @@ namespace HeavenStudio WaitUntil yieldBeatmap = new WaitUntil(() => Beatmap != null && BeatmapEntities() > 0); WaitUntil yieldAudio = new WaitUntil(() => AudioLoadDone || (ChartLoadError && !GlobalGameManager.IsShowingDialog)); WaitUntil yieldGame = null; - List gamesToPreload = SeekAheadAndPreload(beat, 4f); + List gamesToPreload = SetCurrentEventToClosest(beat, true); Debug.Log($"Preloading {gamesToPreload.Count} games"); if (gamesToPreload.Count > 0) { @@ -974,9 +973,10 @@ namespace HeavenStudio return 0; } - public void SetCurrentEventToClosest(double beat, bool canPreload = false) + public List SetCurrentEventToClosest(double beat, bool canPreload = false) { SortEventsList(); + List preload = new(); onBeatChanged?.Invoke(beat); if (Beatmap.Entities.Count > 0) { @@ -984,15 +984,13 @@ namespace HeavenStudio currentPreEvent = GetIndexAfter(eventBeats, beat); currentPreSequence = GetIndexAfter(eventBeats, beat); - var gameSwitchs = Beatmap.Entities.FindAll(c => c.datamodel.Split("/")[1] == "switchGame"); - string newGame = Beatmap.Entities[Math.Min(currentEvent, eventBeats.Count - 1)].datamodel.Split(0); - if (gameSwitchs.Count > 0) + if (allGameSwitches.Count > 0) { - int index = GetIndexBefore(gameSwitchs.Select(c => c.beat).ToList(), beat); + int index = GetIndexBefore(allGameSwitches.Select(c => c.beat).ToList(), beat); currentPreSwitch = index; - var closestGameSwitch = gameSwitchs[index]; + var closestGameSwitch = allGameSwitches[index]; if (closestGameSwitch.beat <= beat) { newGame = closestGameSwitch.datamodel.Split(2); @@ -1007,7 +1005,7 @@ namespace HeavenStudio { if (index - 1 >= 0) { - newGame = gameSwitchs[index - 1].datamodel.Split(2); + newGame = allGameSwitches[index - 1].datamodel.Split(2); } else { @@ -1015,13 +1013,17 @@ namespace HeavenStudio } } } - // newGame = gameSwitchs[gameSwitchs.IndexOf(gameSwitchs.Find(c => c.beat == MathUtils.GetClosestInList(gameSwitchs.Select(c => c.beat).ToList(), beat)))].datamodel.Split(2); } if (!GetGameInfo(newGame).fxOnly) { if (canPreload) { + Minigames.Minigame inf = GetGameInfo(newGame); + if (inf != null) + { + preload.Add(inf); + } StartCoroutine(WaitAndSetGame(newGame)); } else @@ -1091,7 +1093,8 @@ namespace HeavenStudio } onSectionChange?.Invoke(currentSection, lastSection); - SeekAheadAndPreload(beat); + preload.AddRange(SeekAheadAndPreload(beat)); + return preload; } #endregion @@ -1124,7 +1127,7 @@ namespace HeavenStudio } } - while (beat + 0.25 > Math.Max(conductor.songPositionInBeatsAsDouble, 0)) + while (conductor.GetUnSwungBeat(beat + 0.25) > Math.Max(conductor.unswungSongPositionInBeatsAsDouble, 0)) { if (!conductor.isPlaying) { @@ -1165,13 +1168,18 @@ namespace HeavenStudio public void DestroyGame() { - cachedGamePrefabs.Clear(); SoundByte.UnloadAudioClips(); SetGame("noGame"); } + string currentGameRequest = null; private IEnumerator WaitAndSetGame(string game, bool useMinigameColor = true) { + if (game == currentGameRequest) + { + yield break; + } + currentGameRequest = game; var inf = GetGameInfo(game); if (inf != null && inf.usesAssetBundle) { @@ -1179,13 +1187,15 @@ namespace HeavenStudio { // Debug.Log($"ASYNC loading assetbundles for game {game}"); inf.LoadAssetsAsync().Forget(); + yield return new WaitUntil(() => inf.AssetsLoaded); } - yield return new WaitUntil(() => inf.AssetsLoaded); SetGame(game, useMinigameColor); + currentGameRequest = null; } else { SetGame(game, useMinigameColor); + currentGameRequest = null; } } @@ -1200,10 +1210,14 @@ namespace HeavenStudio public GameObject GetGame(string name) { - var gameInfo = GetGameInfo(name); + if (name is null or "" or "noGame") + { + return Resources.Load($"Games/noGame"); + } + + Minigames.Minigame gameInfo = GetGameInfo(name); if (gameInfo != null) { - GameObject prefab; if (gameInfo.inferred) { return Resources.Load($"Games/noGame"); @@ -1226,6 +1240,8 @@ namespace HeavenStudio return Resources.Load($"Games/noGame"); } } + + GameObject prefab; if (gameInfo.usesAssetBundle) { //game is packed in an assetbundle, load from that instead @@ -1251,6 +1267,7 @@ namespace HeavenStudio } } } + // games with no assetbundle (usually indev games) prefab = Resources.Load($"Games/{name}"); if (prefab != null) { diff --git a/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs b/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs index 0e1c6f5de..2053c659a 100644 --- a/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs +++ b/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs @@ -10,7 +10,8 @@ namespace HeavenStudio.Games.Loaders using static Minigames; public static class AgbUpbeatLoader { - public static Minigame AddGame(EventCaller eventCaller) { + public static Minigame AddGame(EventCaller eventCaller) + { RiqEntity BackgroundUpdater(string datamodel, RiqEntity e) { if (datamodel == "mrUpbeat/changeBG" && e.dynamicData.ContainsKey("toggle") && !e.dynamicData.ContainsKey("ease")) @@ -133,9 +134,9 @@ namespace HeavenStudio.Games.Loaders resizable = true, }, }, - new List() {"agb", "keep"}, + new List() { "agb", "keep" }, "agboffbeat", "en", - new List() {}, + new List() { }, chronologicalSortKey: 101 ); } @@ -197,7 +198,8 @@ namespace HeavenStudio.Games { List prevEntities = GameManager.instance.Beatmap.Entities.FindAll(c => c.beat <= beat && c.datamodel.Split(0) == "mrUpbeat"); - if (beat >= startBlippingBeat) { + if (beat >= startBlippingBeat) + { double tempBeat = ((beat % 1 == 0.5) ? Mathf.Floor((float)beat) : Mathf.Round((float)beat)) + (startBlippingBeat % 1); BeatAction.New(instance, new List() { new BeatAction.Action(tempBeat, delegate { man.RecursiveBlipping(tempBeat); }) @@ -209,17 +211,22 @@ namespace HeavenStudio.Games var bgColorEntity = prevEntities.FindLast(x => x.datamodel.Split(1) == "changeBG" && x.beat <= beat); var upbeatColorEntity = prevEntities.FindLast(x => x.datamodel.Split(1) == "upbeatColors" && x.beat <= beat); - if (bgColorEntity != null) { + if (bgColorEntity != null) + { bg.color = bgColorEntity["end"]; } - - if (upbeatColorEntity != null) { + + if (upbeatColorEntity != null) + { blipMaterial.SetColor("_ColorBravo", upbeatColorEntity["blipColor"]); Color shadowColor = upbeatColorEntity["shadowColor"]; - if (upbeatColorEntity["setShadow"]) foreach (var shadow in shadowSr) { - shadow.color = new Color(shadowColor.r, shadowColor.g, shadowColor.b, 1); - } - } else { + if (upbeatColorEntity["setShadow"]) foreach (var shadow in shadowSr) + { + shadow.color = new Color(shadowColor.r, shadowColor.g, shadowColor.b, 1); + } + } + else + { blipMaterial.SetColor("_ColorBravo", new Color(0, 1f, 0)); } } @@ -227,31 +234,33 @@ namespace HeavenStudio.Games public void Update() { bg.color = bgColorEase.GetColor(); - if (conductor.isPlaying && !conductor.isPaused) { - var songPos = conductor.songPositionInBeatsAsDouble; + if (conductor.isPlaying && !conductor.isPaused) + { + double songPos = conductor.songPositionInBeatsAsDouble; - if (songPos >= startSteppingBeat - 2) { + if (songPos >= startSteppingBeat - 2) + { man.canStep = true; } - if (songPos >= startSteppingBeat) { + if (songPos >= startSteppingBeat) + { RecursiveStepping(startSteppingBeat); startSteppingBeat = double.MaxValue; } - if (songPos >= startBlippingBeat) { + if (songPos >= startBlippingBeat) + { man.RecursiveBlipping(startBlippingBeat); startBlippingBeat = double.MaxValue; } - if (songPos > metronomeBeat + 1) + if (metronomeBeat != double.MaxValue) { - metronomeAnim.Play("MetronomeGo" + currentMetronomeDir, -1, 1); - metronomeAnim.speed = 0; - } - else if (songPos >= metronomeBeat) - { - metronomeAnim.DoScaledAnimation("MetronomeGo" + currentMetronomeDir, metronomeBeat, 1, ignoreSwing: false); + currentMetronomeDir = songPos >= metronomeBeat && songPos <= metronomeBeat + 1 + ? (stepIterate % 2 == 0) ? "Right" : "Left" + : (stepIterate % 2 == 1) ? "Right" : "Left"; + metronomeAnim.DoScaledAnimation("MetronomeGo" + currentMetronomeDir, metronomeBeat, 1, clamp: true, ignoreSwing: false); } } } @@ -282,7 +291,8 @@ namespace HeavenStudio.Games public static void PrePrepare(double beat, float length, bool mrDownbeat) { bool isGame = GameManager.instance.currentGame == "mrUpbeat"; - if (!mrDownbeat) { + if (!mrDownbeat) + { beat = Mathf.Floor((float)beat) + 0.5; length = Mathf.Round(length); } @@ -299,12 +309,12 @@ namespace HeavenStudio.Games private void RecursiveStepping(double beat) { - if (stopStepping) { + if (stopStepping) + { stopStepping = false; return; } - currentMetronomeDir = (stepIterate % 2 == 1) ? "Right" : "Left"; - SoundByte.PlayOneShotGame($"mrUpbeat/metronome{currentMetronomeDir}"); + SoundByte.PlayOneShotGame($"mrUpbeat/metronome{((stepIterate % 2 == 1) ? "Right" : "Left")}"); metronomeBeat = beat; ScheduleStep(beat); BeatAction.New(this, new List() { @@ -319,9 +329,9 @@ namespace HeavenStudio.Games for (int i = 0; i < length; i++) { ScheduleStep(beat + i); - actions.Add(new BeatAction.Action(beat + i, delegate { - currentMetronomeDir = (stepIterate % 2 == 1) ? "Right" : "Left"; - SoundByte.PlayOneShotGame($"mrUpbeat/metronome{currentMetronomeDir}"); + actions.Add(new BeatAction.Action(beat + i, delegate + { + SoundByte.PlayOneShotGame($"mrUpbeat/metronome{((stepIterate % 2 == 1) ? "Right" : "Left")}"); metronomeBeat = beat + i; stepIterate++; })); @@ -335,7 +345,8 @@ namespace HeavenStudio.Games if (gameSwitch.beat <= beat || gameSwitch.beat >= beat + length + 1) return; List inactiveBlips = new(); - for (int i = 0; i < gameSwitch.beat - beat; i++) { + for (int i = 0; i < gameSwitch.beat - beat; i++) + { inactiveBlips.Add(new MultiSound.Sound("mrUpbeat/blip", beat + i)); } @@ -362,9 +373,10 @@ namespace HeavenStudio.Games { blipMaterial.SetColor("_ColorBravo", blipColor); - if (setShadow) foreach (var shadow in shadowSr) { - shadow.color = new Color(shadowColor.r, shadowColor.g, shadowColor.b, 1); - } + if (setShadow) foreach (var shadow in shadowSr) + { + shadow.color = new Color(shadowColor.r, shadowColor.g, shadowColor.b, 1); + } } public void BlipEvents(string inputLetter, bool shouldGrow, bool resetBlip, bool shouldBlip, int blipLength) @@ -384,11 +396,12 @@ namespace HeavenStudio.Games public static void CountIn(double beat, float length, bool a) { var sound = new List(); - if (a) sound.Add(new MultiSound.Sound("mrUpbeat/a", beat - (0.5f * (length/4)))); - for (int i = 0; i < 4; i++) { + if (a) sound.Add(new MultiSound.Sound("mrUpbeat/a", beat - (0.5f * (length / 4)))); + for (int i = 0; i < 4; i++) + { sound.Add(new MultiSound.Sound("mrUpbeat/" + (i + 1), beat + (i * (length / 4)), offset: (i == 3) ? 0.05 : 0)); } - + MultiSound.Play(sound.ToArray(), forcePlay: true); } diff --git a/Assets/Scripts/Games/SneakySpirits/SneakySpirits.cs b/Assets/Scripts/Games/SneakySpirits/SneakySpirits.cs index c2154d84e..dd1338710 100644 --- a/Assets/Scripts/Games/SneakySpirits/SneakySpirits.cs +++ b/Assets/Scripts/Games/SneakySpirits/SneakySpirits.cs @@ -102,7 +102,7 @@ namespace HeavenStudio.Games } if (Conductor.instance.isPlaying) { - Conductor.instance.SetMinigamePitch(1f, true); + Conductor.instance.SetMinigamePitch(1f); } } diff --git a/Assets/Scripts/Minigames.cs b/Assets/Scripts/Minigames.cs index a6d803cbe..55c359190 100644 --- a/Assets/Scripts/Minigames.cs +++ b/Assets/Scripts/Minigames.cs @@ -395,8 +395,10 @@ namespace HeavenStudio public bool usesAssetBundle => wantAssetBundle is not null or ""; public bool hasLocales => supportedLocales.Count > 0; - public bool AssetsLoaded => ((hasLocales && localeLoaded && currentLoadedLocale == defaultLocale) || (!hasLocales)) && commonLoaded && loadComplete; + public bool AssetsLoaded => ((hasLocales && localeLoaded && currentLoadedLocale == defaultLocale) || (!hasLocales)) && commonLoaded && (!loadingPrefab) && loadComplete; public bool AlreadyLoading => alreadyLoading; + public bool LoadingPrefab => loadingPrefab; + public bool SequencesPreloaded => soundSequences != null; public string LoadableName => inferred ? "noGame" : name; public GameObject LoadedPrefab => loadedPrefab; @@ -410,6 +412,7 @@ namespace HeavenStudio private bool localePreloaded = false; private GameObject loadedPrefab = null; + bool loadingPrefab = false; bool loadComplete = false; private SoundSequence.SequenceKeyValue[] soundSequences = null; @@ -510,6 +513,7 @@ namespace HeavenStudio if (alreadyLoading || AssetsLoaded || !usesAssetBundle) return; loadComplete = false; alreadyLoading = true; + loadingPrefab = true; await UniTask.WhenAll(LoadCommonAssetBundleAsync(), LoadLocalizedAssetBundleAsync()); await UniTask.WhenAll(LoadGamePrefabAsync(), LoadCommonAudioClips(), LoadLocalizedAudioClips()); SoundByte.PreloadGameAudioClips(this); @@ -585,6 +589,7 @@ namespace HeavenStudio soundSequences = minigame.SoundSequences; } loadedPrefab = prefab; + loadingPrefab = false; } public GameObject LoadGamePrefab() @@ -636,6 +641,7 @@ namespace HeavenStudio } SoundByte.UnloadAudioClips(name); loadComplete = false; + loadingPrefab = false; } } diff --git a/Assets/Scripts/UI/Overlays/TimingAccuracyDisplay.cs b/Assets/Scripts/UI/Overlays/TimingAccuracyDisplay.cs index 0487d077c..473415231 100644 --- a/Assets/Scripts/UI/Overlays/TimingAccuracyDisplay.cs +++ b/Assets/Scripts/UI/Overlays/TimingAccuracyDisplay.cs @@ -155,6 +155,8 @@ namespace HeavenStudio.Common { case Rating.OK: it = OK; + // makes the explosion smaller with less accurate inputs + it.transform.localScale = Vector3.one * (1f - (frac / 2f)); break; case Rating.Just: it = Just; @@ -165,13 +167,6 @@ namespace HeavenStudio.Common } } - // makes the explosion smaller with less accurate inputs - if (it == OK) - { - float okScalar = 1 - (frac / 2); - it.transform.localScale = new Vector3(okScalar, okScalar, it.transform.localScale.z); - } - it.transform.position = barTransform.position + new Vector3(0, barTransform.localScale.y * y, 0); it.GetComponent().Play(); } From be289eb48c079f8b114e1fc0d157cc715d8f207b Mon Sep 17 00:00:00 2001 From: minenice55 Date: Mon, 8 Apr 2024 22:54:25 -0400 Subject: [PATCH 7/7] Update MrUpbeat.cs (#846) --- Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs b/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs index 2053c659a..1f14665fb 100644 --- a/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs +++ b/Assets/Scripts/Games/MrUpbeat/MrUpbeat.cs @@ -254,14 +254,18 @@ namespace HeavenStudio.Games man.RecursiveBlipping(startBlippingBeat); startBlippingBeat = double.MaxValue; } + } + } - if (metronomeBeat != double.MaxValue) - { - currentMetronomeDir = songPos >= metronomeBeat && songPos <= metronomeBeat + 1 - ? (stepIterate % 2 == 0) ? "Right" : "Left" - : (stepIterate % 2 == 1) ? "Right" : "Left"; - metronomeAnim.DoScaledAnimation("MetronomeGo" + currentMetronomeDir, metronomeBeat, 1, clamp: true, ignoreSwing: false); - } + void LateUpdate() + { + if (conductor.isPlaying && !conductor.isPaused && metronomeBeat != double.MaxValue) + { + double songPos = conductor.songPositionInBeatsAsDouble; + currentMetronomeDir = songPos >= metronomeBeat && songPos <= metronomeBeat + 1 + ? (stepIterate % 2 == 0) ? "Right" : "Left" + : (stepIterate % 2 == 1) ? "Right" : "Left"; + metronomeAnim.DoScaledAnimation("MetronomeGo" + currentMetronomeDir, metronomeBeat, 1, clamp: true, ignoreSwing: false); } }