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