diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 000000000..d70cd98b7 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/Scenes/MenuScene.unity b/Assets/Scenes/MenuScene.unity index 1f343cb0c..0bda22876 100644 --- a/Assets/Scenes/MenuScene.unity +++ b/Assets/Scenes/MenuScene.unity @@ -1870,6 +1870,140 @@ Transform: m_Father: {fileID: 989983894} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &140756530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 140756531} + - component: {fileID: 140756534} + - component: {fileID: 140756533} + - component: {fileID: 140756532} + m_Layer: 5 + m_Name: Clear Setlist Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &140756531 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140756530} + 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: 2097247117} + m_Father: {fileID: 1458336823} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -88.3, y: -185.99} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &140756532 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140756530} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 0 + m_TargetGraphic: {fileID: 140756533} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1458336824} + m_TargetAssemblyTypeName: YARG.UI.SongSelect, Assembly-CSharp + m_MethodName: ClearSetlist + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &140756533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140756530} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &140756534 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140756530} + m_CullTransparentMesh: 1 --- !u!1 &141231087 GameObject: m_ObjectHideFlags: 0 @@ -5622,6 +5756,86 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528723087} m_CullTransparentMesh: 1 +--- !u!1 &547548388 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 547548389} + - component: {fileID: 547548391} + - component: {fileID: 547548390} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &547548389 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 547548388} + 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: 663979377} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 6, y: 0.0000047683716} + m_SizeDelta: {x: -28, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &547548390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 547548388} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Setlist +--- !u!222 &547548391 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 547548388} + m_CullTransparentMesh: 1 --- !u!1001 &554838494 PrefabInstance: m_ObjectHideFlags: 0 @@ -6145,6 +6359,141 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 580206577} m_CullTransparentMesh: 1 +--- !u!1 &588690936 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 588690937} + - component: {fileID: 588690939} + - component: {fileID: 588690938} + m_Layer: 5 + m_Name: NextSongInSetlistHint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &588690937 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 588690936} + 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: 1149865194} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.00048828, y: -169} + m_SizeDelta: {x: 800, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &588690938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 588690936} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Next: Song - Artist (5/6)' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 34 + m_fontSizeBase: 34 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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!222 &588690939 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 588690936} + m_CullTransparentMesh: 1 --- !u!1 &593585161 GameObject: m_ObjectHideFlags: 0 @@ -6493,6 +6842,117 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 639483433} m_CullTransparentMesh: 1 +--- !u!1 &663979376 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 663979377} + - component: {fileID: 663979378} + m_Layer: 5 + m_Name: Setlist Enabled Checkbox + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &663979377 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 663979376} + 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: 981657211} + - {fileID: 547548389} + m_Father: {fileID: 1458336823} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -320, y: -190.99} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &663979378 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 663979376} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 981657212} + toggleTransition: 1 + graphic: {fileID: 912718998} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1458336824} + m_TargetAssemblyTypeName: YARG.UI.SongSelect, Assembly-CSharp + m_MethodName: UpdateSetlistButtonVisibility + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1170408637} + m_TargetAssemblyTypeName: YARG.UI.DifficultySelect, Assembly-CSharp + m_MethodName: UpdateSetlistMode + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_IsOn: 0 --- !u!1 &669983444 GameObject: m_ObjectHideFlags: 0 @@ -9260,6 +9720,82 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 902272524} m_CullTransparentMesh: 1 +--- !u!1 &912718996 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 912718997} + - component: {fileID: 912718999} + - component: {fileID: 912718998} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &912718997 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 912718996} + 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: 981657211} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &912718998 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 912718996} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &912718999 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 912718996} + m_CullTransparentMesh: 1 --- !u!1 &924116459 GameObject: m_ObjectHideFlags: 0 @@ -9872,6 +10408,83 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 976689290} m_CullTransparentMesh: 1 +--- !u!1 &981657210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 981657211} + - component: {fileID: 981657213} + - component: {fileID: 981657212} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &981657211 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 981657210} + 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: 912718997} + m_Father: {fileID: 663979377} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &981657212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 981657210} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &981657213 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 981657210} + m_CullTransparentMesh: 1 --- !u!1 &989983893 GameObject: m_ObjectHideFlags: 0 @@ -11294,6 +11907,7 @@ RectTransform: - {fileID: 2026357492} - {fileID: 276903677} - {fileID: 1015145811} + - {fileID: 588690937} m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -11317,6 +11931,7 @@ MonoBehaviour: scoreSection: {fileID: 835764517238708903, guid: a44758e52d42cb649b71664c3b516e09, type: 3} header: {fileID: 2026357490} + nextUp: {fileID: 588690938} scoreContainer: {fileID: 1816306048} --- !u!1001 &1151438760 PrefabInstance: @@ -13877,7 +14492,141 @@ CanvasRenderer: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1439811479} + m_GameObject: {fileID: 1439811479} + m_CullTransparentMesh: 1 +--- !u!1 &1447655602 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1447655603} + - component: {fileID: 1447655606} + - component: {fileID: 1447655605} + - component: {fileID: 1447655604} + m_Layer: 5 + m_Name: Play Setlist Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1447655603 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1447655602} + 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: 2127447255} + m_Father: {fileID: 1458336823} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -255.4, y: -185.99} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1447655604 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1447655602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 0 + m_TargetGraphic: {fileID: 1447655605} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1170408637} + m_TargetAssemblyTypeName: YARG.UI.DifficultySelect, Assembly-CSharp + m_MethodName: StartSetlist + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1447655605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1447655602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1447655606 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1447655602} m_CullTransparentMesh: 1 --- !u!1 &1458216463 GameObject: @@ -14033,6 +14782,9 @@ RectTransform: - {fileID: 63677085} - {fileID: 882788347} - {fileID: 751688120} + - {fileID: 663979377} + - {fileID: 1447655603} + - {fileID: 140756531} m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -20068,6 +20820,141 @@ MonoBehaviour: m_OnValueChanged: m_PersistentCalls: m_Calls: [] +--- !u!1 &2097247116 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2097247117} + - component: {fileID: 2097247119} + - component: {fileID: 2097247118} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2097247117 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2097247116} + 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: 140756531} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2097247118 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2097247116} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Clear Setlist + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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!222 &2097247119 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2097247116} + m_CullTransparentMesh: 1 --- !u!1 &2115213575 GameObject: m_ObjectHideFlags: 0 @@ -20144,6 +21031,141 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2115213575} m_CullTransparentMesh: 1 +--- !u!1 &2127447254 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2127447255} + - component: {fileID: 2127447257} + - component: {fileID: 2127447256} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2127447255 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2127447254} + 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: 1447655603} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2127447256 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2127447254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Play Setlist + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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!222 &2127447257 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2127447254} + m_CullTransparentMesh: 1 --- !u!1001 &8708184731602617178 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Script/Data/NoteInfo.cs b/Assets/Script/Data/NoteInfo.cs index 1cf7fdace..e4a4b3b7e 100644 --- a/Assets/Script/Data/NoteInfo.cs +++ b/Assets/Script/Data/NoteInfo.cs @@ -12,6 +12,11 @@ public class NoteInfo : AbstractInfo { /// Tap note. Only used for five fret. /// public bool tap; + /// + /// Overdrive activator note on drums. + /// + public bool isActivator; + /// /// Whether or not this HOPO is automatic.
/// Used for difficulty downsampling. diff --git a/Assets/Script/Input/DrumsInputStrategy.cs b/Assets/Script/Input/DrumsInputStrategy.cs index 97733a87e..da2fda570 100644 --- a/Assets/Script/Input/DrumsInputStrategy.cs +++ b/Assets/Script/Input/DrumsInputStrategy.cs @@ -73,7 +73,7 @@ public override void UpdatePlayerMode() { } // Constantly activate starpower - CallStarpowerEvent(); + //CallStarpowerEvent(); } public override void UpdateBotMode(object rawChart, float songTime) { @@ -93,6 +93,10 @@ public override void UpdateBotMode(object rawChart, float songTime) { } // Constantly activate starpower + //CallStarpowerEvent(); + } + + public void ActivateStarpower() { CallStarpowerEvent(); } diff --git a/Assets/Script/Input/GHDrumsInputStrategy.cs b/Assets/Script/Input/GHDrumsInputStrategy.cs index 1275fe38b..3ff7777ba 100644 --- a/Assets/Script/Input/GHDrumsInputStrategy.cs +++ b/Assets/Script/Input/GHDrumsInputStrategy.cs @@ -61,7 +61,7 @@ public override void UpdatePlayerMode() { } // Constantly activate starpower - CallStarpowerEvent(); + //CallStarpowerEvent(); } public override void UpdateBotMode(object rawChart, float songTime) { @@ -80,7 +80,7 @@ public override void UpdateBotMode(object rawChart, float songTime) { } // Constantly activate starpower - CallStarpowerEvent(); + //CallStarpowerEvent(); } public override void UpdateNavigationMode() { diff --git a/Assets/Script/PlayMode/AbstractTrack.cs b/Assets/Script/PlayMode/AbstractTrack.cs index cebdb2ff4..1f41e6a27 100644 --- a/Assets/Script/PlayMode/AbstractTrack.cs +++ b/Assets/Script/PlayMode/AbstractTrack.cs @@ -38,6 +38,11 @@ public EventInfo SoloSection { protected set; } = null; + public EventInfo FillSection { + get; + protected set; + } = null; + protected float starpowerCharge; protected bool starpowerActive; //protected bool starpowerHit = false; diff --git a/Assets/Script/PlayMode/DrumsTrack.cs b/Assets/Script/PlayMode/DrumsTrack.cs index 0761d6907..459acc47a 100644 --- a/Assets/Script/PlayMode/DrumsTrack.cs +++ b/Assets/Script/PlayMode/DrumsTrack.cs @@ -120,11 +120,12 @@ protected override void UpdateTrack() { genericPool.Add("beatLine_major", new(0f, 0.01f, compensation)); } else if (eventInfo.name == $"starpower_{player.chosenInstrument}") { StarpowerSection = eventInfo; + } else if (eventInfo.name == $"fill_{player.chosenInstrument}") { + FillSection = eventInfo; } else if (eventInfo.name == $"solo_{player.chosenInstrument}") { SoloSection = eventInfo; } - - eventChartIndex++; + eventChartIndex++; } // Since chart is sorted, this is guaranteed to work @@ -137,6 +138,14 @@ protected override void UpdateTrack() { continue; } + // TODO: Only one note should be an activator at any given timestamp + if (player.track.FillSection?.EndTime == noteInfo.time + && starpowerCharge >= 0.5f + && !starpowerActive + ) { + noteInfo.isActivator = true; + } + SpawnNote(noteInfo, RelativeTime); visualChartIndex++; } @@ -181,9 +190,15 @@ private void UpdateInput() { var missedChord = expectedHits.Dequeue(); // Call miss for each component - Combo = 0; foreach (var hit in missedChord) { hitChartIndex++; + + // The player should not be penalized for missing activator notes + if (hit.isActivator) { + continue; + } + + Combo = 0; missedAnyNote = true; notePool.MissNote(hit); StopAudio = true; @@ -243,10 +258,12 @@ private void DrumHitAction(int drum, bool cymbal) { if (player.chosenInstrument == "drums") { cymbalHit = true; } - // Check if correct drum was hit if (note.fret == drum && cymbalHit) { hit = note; + if (note.isActivator) { + (input as DrumsInputStrategy).ActivateStarpower(); + } break; } } @@ -266,7 +283,8 @@ private void DrumHitAction(int drum, bool cymbal) { expectedHits.Dequeue(); } - if (lastNote) { + // Activators should not affect combo + if (lastNote && !hit.isActivator) { Combo++; } @@ -318,7 +336,8 @@ private void SpawnNote(NoteInfo noteInfo, float time) { commonTrack.NoteColor(noteInfo.fret), commonTrack.SustainColor(noteInfo.fret), noteInfo.length, - model + model, + noteInfo.isActivator ); } } diff --git a/Assets/Script/PlayMode/Play.cs b/Assets/Script/PlayMode/Play.cs index 14cd69757..ccc0b034c 100644 --- a/Assets/Script/PlayMode/Play.cs +++ b/Assets/Script/PlayMode/Play.cs @@ -23,6 +23,12 @@ public static Play Instance { public static SongInfo song = null; + // TODO: Store song speeds in setlist + public static List setlist = new(); + public static List setlistSongSpeeds = new(); + public static int setlistCurrentSongIndex = 0; + public static int setlistSize = 0; + public delegate void BeatAction(); public static event BeatAction BeatEvent; @@ -111,6 +117,9 @@ private IEnumerator StartSong() { // Spawn tracks int i = 0; foreach (var player in PlayerManager.players) { + player.chosenDifficulty = player.setlistDifficulties[setlistCurrentSongIndex]; + player.chosenInstrument = player.setlistInstruments[setlistCurrentSongIndex]; + if (player.chosenInstrument == null) { // Skip players that are sitting out continue; @@ -339,6 +348,42 @@ private void UpdateAudio(string[] trackNames, string[] stemNames) { } } + public static void AddSongToSetlist(SongInfo song, float speed) + { + setlist.Add(song); + setlistSongSpeeds.Add(speed); + } + + public static void StartSetlist() + { + // Song index gets incremented to 0 by ContinueSetlist(). + setlistCurrentSongIndex = -1; + + setlistSize = setlist.Count; + ContinueSetlist(); + } + + public static void ContinueSetlist() + { + setlistCurrentSongIndex++; + song = setlist[setlistCurrentSongIndex]; + speed = setlistSongSpeeds[setlistCurrentSongIndex]; + GameManager.Instance.LoadScene(SceneIndex.PLAY); + } + + public static void EndSetlist() + { + foreach (PlayerManager.Player player in PlayerManager.players) { + player.setlistInstruments.Clear(); + player.setlistDifficulties.Clear(); + } + + setlistSize = 0; + setlistCurrentSongIndex = 0; + setlist.Clear(); + setlistSongSpeeds.Clear(); + } + public void Exit() { // Dispose of all audio GameManager.AudioManager.UnloadSong(); diff --git a/Assets/Script/PlayerManager.cs b/Assets/Script/PlayerManager.cs index 39e054008..00f304a57 100644 --- a/Assets/Script/PlayerManager.cs +++ b/Assets/Script/PlayerManager.cs @@ -29,6 +29,9 @@ public class Player { public string chosenInstrument = "guitar"; public Difficulty chosenDifficulty = Difficulty.EXPERT; + public List setlistInstruments = new(); + public List setlistDifficulties = new(); + public LastScore? lastScore = null; public AbstractTrack track = null; diff --git a/Assets/Script/Pools/NoteComponent.cs b/Assets/Script/Pools/NoteComponent.cs index ab80a67a5..c1c77990c 100644 --- a/Assets/Script/Pools/NoteComponent.cs +++ b/Assets/Script/Pools/NoteComponent.cs @@ -92,6 +92,10 @@ private float PercentDistanceFromStrikeline { private Color _colorCacheNotes = Color.white; private Color ColorCacheNotes { get { + if (isActivatorNote) { + return Color.magenta; + } + // If within starpower section if (pool.player.track.StarpowerSection?.EndTime > pool.player.track.RelativeTime) { return Color.white; @@ -106,6 +110,8 @@ private Color ColorCacheNotes { private State state = State.WAITING; + private bool isActivatorNote; + private void OnEnable() { if (pool != null) { pool.player.track.StarpowerMissEvent += UpdateColor; @@ -122,7 +128,7 @@ private void OnDisable() { } } - public void SetInfo(Color notes, Color sustains, float length, ModelType hopo) { + public void SetInfo(Color notes, Color sustains, float length, ModelType hopo, bool isDrumActivator) { noteGroup.SetActive(hopo == ModelType.NOTE); hopoGroup.SetActive(hopo == ModelType.HOPO); tapGroup.SetActive( hopo == ModelType.TAP); @@ -133,11 +139,16 @@ public void SetInfo(Color notes, Color sustains, float length, ModelType hopo) { ColorCacheNotes = notes; ColorCacheSustains = sustains; + isActivatorNote = isDrumActivator; UpdateColor(); UpdateRandomness(); } + public void SetInfo(Color notes, Color sustains, float length, ModelType hopo) { + SetInfo(notes, sustains, length, hopo, false); + } + public void SetFretNumber(string str) { fretNumber.gameObject.SetActive(true); fretNumber.text = str; diff --git a/Assets/Script/Serialization/Parser/MidiParser.cs b/Assets/Script/Serialization/Parser/MidiParser.cs index f5c4209fa..d3e6c45dc 100644 --- a/Assets/Script/Serialization/Parser/MidiParser.cs +++ b/Assets/Script/Serialization/Parser/MidiParser.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using JetBrains.Annotations; using Melanchall.DryWetMidi.Core; using Melanchall.DryWetMidi.Interaction; using Melanchall.DryWetMidi.MusicTheory; @@ -155,6 +156,10 @@ public override void Parse(Chart chart) { chart.realDrums[i] = ParseDrums(trackChunk, true, i, drumType, null); chart.ghDrums[i] = ParseGHDrums(trackChunk, i, drumType, chart.realDrums[i]); + ParseStarpower(eventIR, trackChunk, "drums"); + ParseStarpower(eventIR, trackChunk, "realDrums"); + ParseDrumFills(eventIR, trackChunk, "drums"); + ParseDrumFills(eventIR, trackChunk, "realDrums"); } } else { for (int i = 0; i < 5; i++) { @@ -162,9 +167,12 @@ public override void Parse(Chart chart) { chart.drums[i] = ParseDrums(trackChunk, false, i, drumType, chart.ghDrums[i]); chart.realDrums[i] = ParseDrums(trackChunk, true, i, drumType, chart.ghDrums[i]); + + // TODO: SP is still a bit broken on 5-lane and is therefore disabled for now + //ParseStarpower(eventIR, trackChunk, "ghDrums"); + //ParseDrumFills(eventIR, trackChunk, "ghDrums"); } } - break; case "BEAT": ParseBeats(eventIR, trackChunk); @@ -369,6 +377,53 @@ private void ParseSolo(List eventIR, TrackChunk trackChunk, string inst } } } + + private void ParseDrumFills(List eventIR, TrackChunk trackChunk, string instrument) { + long totalDelta = 0; + + long? fillStart = null; + + // Convert track events into intermediate representation + foreach (var trackEvent in trackChunk.Events) { + totalDelta += trackEvent.DeltaTime; + + if (trackEvent is not NoteEvent noteEvent) { + continue; + } + + // Look for correct octave + if (noteEvent.GetNoteOctave() != 9) { + continue; + } + + // Skip if not a star power event + if (noteEvent.GetNoteName() != NoteName.B + && noteEvent.GetNoteName() != NoteName.C + && noteEvent.GetNoteName() != NoteName.D + && noteEvent.GetNoteName() != NoteName.E + ) { + continue; + } + + if (trackEvent is NoteOnEvent) { + // We need to know when it ends before adding it + fillStart = totalDelta; + } else if (trackEvent is NoteOffEvent) { + if (fillStart == null) { + continue; + } + + // Now that we know the start and end, add it to the list of events. + eventIR.Add(new EventIR { + startTick = fillStart.Value, + endTick = totalDelta, + name = $"fill_{instrument}" + }); + fillStart = null; + } + } + } + private SongInfo.DrumType GetDrumType(TrackChunk trackChunk) { if (songInfo.drumType != SongInfo.DrumType.UNKNOWN) { return songInfo.drumType; diff --git a/Assets/Script/UI/DifficultySelect.cs b/Assets/Script/UI/DifficultySelect.cs index e64d65ec3..628233a63 100644 --- a/Assets/Script/UI/DifficultySelect.cs +++ b/Assets/Script/UI/DifficultySelect.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Globalization; using System.IO; using TMPro; @@ -20,6 +21,9 @@ private enum State { VOCALS_DIFFICULTY } + Dictionary tempInstruments = new(); + Dictionary tempDifficulties = new(); + [SerializeField] private GenericOption[] options; [SerializeField] @@ -36,6 +40,8 @@ private enum State { private int optionCount; private int selected; + private bool isSetlistMode = false; + public delegate void InstrumentSelectionAction(PlayerManager.Player playerInfo); public static event InstrumentSelectionAction OnInstrumentSelection; @@ -72,6 +78,8 @@ private void OnDisable() { foreach (var player in PlayerManager.players) { player.inputStrategy.GenericNavigationEvent -= OnGenericNavigation; } + tempDifficulties.Clear(); + tempInstruments.Clear(); } private void OnDestroy() { @@ -142,21 +150,22 @@ private void ClickOption(GenericOption option) { public void Next() { var player = PlayerManager.players[playerIndex]; + + string instrument = ""; if (state == State.INSTRUMENT) { if (selected >= instruments.Length) { - player.chosenInstrument = null; IncreasePlayerIndex(); } else { - player.chosenInstrument = instruments[selected]; - bool showExpertPlus = player.chosenInstrument == "drums" - || player.chosenInstrument == "realDrums" - || player.chosenInstrument == "ghDrums"; + instrument = instruments[selected]; + bool showExpertPlus = instrument == "drums" + || instrument == "realDrums" + || instrument == "ghDrums"; UpdateDifficulty(showExpertPlus); } + tempInstruments.Add(player, instrument); } else if (state == State.DIFFICULTY) { - player.chosenDifficulty = (Difficulty) selected; + tempDifficulties.Add(player, (Difficulty) selected); OnInstrumentSelection?.Invoke(player); - IncreasePlayerIndex(); } else if (state == State.VOCALS) { if (selected == 2) { @@ -183,6 +192,22 @@ public void Next() { } } + private void WriteTempDiffAndInstrumentToPlayers() { + foreach (KeyValuePair pair in tempInstruments) { + var player = pair.Key; + var instrument = pair.Value; + + player.setlistInstruments.Add(instrument); + } + + foreach (KeyValuePair pair in tempDifficulties) { + var player = pair.Key; + var difficulty = pair.Value; + + player.setlistDifficulties.Add(difficulty); + } + } + private void IncreasePlayerIndex() { if (brutalModeCheckbox.isOn) { PlayerManager.players[playerIndex].brutalMode = true; @@ -201,19 +226,44 @@ private void IncreasePlayerIndex() { if (playerIndex >= PlayerManager.players.Count) { // Set speed - Play.speed = float.Parse(speedInput.text, CultureInfo.InvariantCulture); - if (Play.speed <= 0f) { - Play.speed = 1f; + var speed = float.Parse(speedInput.text, CultureInfo.InvariantCulture); + if (speed <= 0f) { + speed = 1f; } + WriteTempDiffAndInstrumentToPlayers(); + // Play song (or download then play) - Play.song = MainMenu.Instance.chosenSong; - GameManager.Instance.LoadScene(SceneIndex.PLAY); + + if (!isSetlistMode) { + Play.speed = speed; + StartSong(); + } else + { + Play.AddSongToSetlist(MainMenu.Instance.chosenSong, speed); + MainMenu.Instance.ShowSongSelect(); + } + } else { UpdateInstrument(); } } + private void StartSong() + { + Play.song = MainMenu.Instance.chosenSong; + GameManager.Instance.LoadScene(SceneIndex.PLAY); + } + + public static void StartSetlist() + { + Play.StartSetlist(); + } + + public void UpdateSetlistMode() { + isSetlistMode = GameObject.Find("Setlist Enabled Checkbox").GetComponent().isOn; + } + private void UpdateInstrument() { // Header var player = PlayerManager.players[playerIndex]; diff --git a/Assets/Script/UI/PostSong.cs b/Assets/Script/UI/PostSong.cs index 0c4cfbceb..2d1d9c2ef 100644 --- a/Assets/Script/UI/PostSong.cs +++ b/Assets/Script/UI/PostSong.cs @@ -14,6 +14,10 @@ public class PostSong : MonoBehaviour { [SerializeField] private TextMeshProUGUI header; + + [SerializeField] + private TextMeshProUGUI nextUp; + [SerializeField] private Transform scoreContainer; @@ -22,7 +26,14 @@ private void OnEnable() { header.text = $"{Play.song.SongName} - {Play.song.artistName}"; } else { header.text = $"{Play.song.SongName} ({Play.speed * 100}% speed) - {Play.song.artistName}"; - } + } + + if (Play.setlistCurrentSongIndex < Play.setlistSize - 1) { + var nextSong = Play.setlist[Play.setlistCurrentSongIndex + 1]; + nextUp.text = $"Next up: {nextSong.SongName} - {nextSong.artistName}"; + } else { + nextUp.text = ""; + } // Create a score to push @@ -104,6 +115,14 @@ private void OnDisable() { foreach (var player in PlayerManager.players) { player.inputStrategy.GenericNavigationEvent -= OnGenericNavigation; } + + if (Play.setlistCurrentSongIndex < Play.setlistSize - 1) + { + Play.ContinueSetlist(); + } else + { + Play.EndSetlist(); + } } private void Update() { diff --git a/Assets/Script/UI/SongSelect.cs b/Assets/Script/UI/SongSelect.cs index e23480338..135e2c414 100644 --- a/Assets/Script/UI/SongSelect.cs +++ b/Assets/Script/UI/SongSelect.cs @@ -4,8 +4,10 @@ using TMPro; using UnityEngine; using UnityEngine.InputSystem; +using UnityEngine.UI; using YARG.Data; using YARG.Input; +using YARG.PlayMode; namespace YARG.UI { public class SongSelect : MonoBehaviour { @@ -85,6 +87,7 @@ private void OnEnable() { UpdateSearch(); refreshFlag = false; } + UpdateSetlistButtonVisibility(); } private void OnDisable() { @@ -264,6 +267,23 @@ private int FuzzySearch(string text, SongInfo song) { } } + public void UpdateSetlistButtonVisibility() { + var isSetlistMode = GameObject.Find("Setlist Enabled Checkbox").GetComponent().isOn; + if (isSetlistMode && Play.setlist.Count > 0) + { + GameObject.Find("Play Setlist Button").GetComponent