diff --git a/Assets/Art/Fonts/FontSprites.asset b/Assets/Art/Fonts/FontSprites.asset index e4d35af9f..5f75fd688 100644 --- a/Assets/Art/Fonts/FontSprites.asset +++ b/Assets/Art/Fonts/FontSprites.asset @@ -144,6 +144,18 @@ MonoBehaviour: m_Scale: 1.3 m_Name: harmVocals m_HashCode: 240351634 + - m_ElementType: 2 + m_Unicode: 65534 + m_GlyphIndex: 15 + m_Scale: 1.3 + m_Name: rhythm + m_HashCode: 216518066 + - m_ElementType: 2 + m_Unicode: 65534 + m_GlyphIndex: 16 + m_Scale: 1.3 + m_Name: guitar_coop + m_HashCode: -1086307536 m_SpriteGlyphTable: - m_Index: 0 m_Metrics: @@ -385,5 +397,37 @@ MonoBehaviour: m_AtlasIndex: 0 m_ClassDefinitionType: 0 sprite: {fileID: 1676829369, guid: 66fae0a679753ea4a9110a183b8d2af9, type: 3} + - m_Index: 15 + m_Metrics: + m_Width: 256 + m_Height: 256 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 198 + m_HorizontalAdvance: 256 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 256 + m_Height: 256 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + sprite: {fileID: -413506960, guid: 66fae0a679753ea4a9110a183b8d2af9, type: 3} + - m_Index: 16 + m_Metrics: + m_Width: 256 + m_Height: 256 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 198 + m_HorizontalAdvance: 256 + m_GlyphRect: + m_X: 768 + m_Y: 256 + m_Width: 256 + m_Height: 256 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + sprite: {fileID: 1095511443, guid: 66fae0a679753ea4a9110a183b8d2af9, type: 3} spriteInfoList: [] fallbackSpriteAssets: [] diff --git a/Assets/Art/Meshes/Notes_Tap.prefab b/Assets/Art/Meshes/Notes_Tap.prefab index d4062d200..3e253cce8 100644 --- a/Assets/Art/Meshes/Notes_Tap.prefab +++ b/Assets/Art/Meshes/Notes_Tap.prefab @@ -94,8 +94,8 @@ MeshRenderer: m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: ab191d4162f80b741b282594e23f14ca, type: 2} - - {fileID: 2100000, guid: 0e410b84cdc264544a6ba5b805c80fb3, type: 2} - {fileID: 2100000, guid: 8427df3402388ca4e80f4411ae8ee82e, type: 2} + - {fileID: 2100000, guid: 0e410b84cdc264544a6ba5b805c80fb3, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 diff --git a/Assets/Prefabs/DrumsNote.prefab b/Assets/Prefabs/DrumsNote.prefab index cf93c2f7d..305d9e254 100644 --- a/Assets/Prefabs/DrumsNote.prefab +++ b/Assets/Prefabs/DrumsNote.prefab @@ -31,6 +31,7 @@ Transform: m_Children: - {fileID: 3676109393068581280} - {fileID: 7677582505515718665} + - {fileID: 173717695566584398} - {fileID: 7437171449997926572} - {fileID: 3083436502393406622} m_Father: {fileID: 0} @@ -57,6 +58,7 @@ MonoBehaviour: meshRendererMiddleIndices: 020000000000000001000000 noteGroup: {fileID: 1397812567785855241} hopoGroup: {fileID: 5887489561296935717} + tapGroup: {fileID: 6027034360231535167} fullGroup: {fileID: 4634473573192609450} fretNumber: {fileID: 0} lineRenderer: {fileID: 5864461325193466425} @@ -122,7 +124,7 @@ Transform: m_Children: - {fileID: 5342919547348619199} m_Father: {fileID: 861361446070616035} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &5887489561296935717 GameObject: @@ -156,6 +158,37 @@ Transform: m_Father: {fileID: 861361446070616035} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 18.49, y: 0, z: 0} +--- !u!1 &6027034360231535167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 173717695566584398} + m_Layer: 6 + m_Name: TapGroupDummy + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &173717695566584398 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6027034360231535167} + 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: 861361446070616035} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &7189655996071686276 GameObject: m_ObjectHideFlags: 0 @@ -186,7 +219,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 861361446070616035} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!120 &5864461325193466425 LineRenderer: diff --git a/Assets/Prefabs/Note.prefab b/Assets/Prefabs/Note.prefab index 5877e36e0..42c37190c 100644 --- a/Assets/Prefabs/Note.prefab +++ b/Assets/Prefabs/Note.prefab @@ -56,7 +56,7 @@ MonoBehaviour: - {fileID: 6846950644507852135} - {fileID: 6376229487116774476} - {fileID: 7147253800328892818} - meshRendererMiddleIndices: 02000000010000000200000001000000 + meshRendererMiddleIndices: 02000000010000000100000001000000 noteGroup: {fileID: 1397812567785855241} hopoGroup: {fileID: 1294466957868725440} tapGroup: {fileID: 3624981743589644049} @@ -78,7 +78,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &2485029377005370073 Transform: m_ObjectHideFlags: 0 @@ -142,7 +142,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &2078363896503798061 Transform: m_ObjectHideFlags: 0 @@ -174,7 +174,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &7437171449997926572 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/RealGuitarNote.prefab b/Assets/Prefabs/RealGuitarNote.prefab index 373c278c9..6299a3511 100644 --- a/Assets/Prefabs/RealGuitarNote.prefab +++ b/Assets/Prefabs/RealGuitarNote.prefab @@ -31,7 +31,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 861361446070616035} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 68.559, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -203,6 +203,7 @@ Transform: m_Children: - {fileID: 3676109393068581280} - {fileID: 2485029377005370073} + - {fileID: 7774362077026621734} - {fileID: 969241233629970397} - {fileID: 3083436502393406622} - {fileID: 6247713159172371674} @@ -229,7 +230,7 @@ MonoBehaviour: meshRendererMiddleIndices: 0200000002000000 noteGroup: {fileID: 1397812567785855241} hopoGroup: {fileID: 1294466957868725440} - tapGroup: {fileID: 0} + tapGroup: {fileID: 8745650086612154010} fullGroup: {fileID: 5879953073027725293} fretNumber: {fileID: 5134052872940096443} lineRenderer: {fileID: 5864461325193466425} @@ -326,7 +327,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 861361446070616035} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &7189655996071686276 GameObject: @@ -358,7 +359,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 861361446070616035} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!120 &5864461325193466425 LineRenderer: @@ -459,6 +460,37 @@ LineRenderer: generateLightingData: 0 m_UseWorldSpace: 0 m_Loop: 0 +--- !u!1 &8745650086612154010 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7774362077026621734} + m_Layer: 6 + m_Name: TapGroupDummy + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7774362077026621734 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8745650086612154010} + 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: 861361446070616035} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &3999898006346069272 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/MenuScene.unity b/Assets/Scenes/MenuScene.unity index 4417e7e10..f42fcce0f 100644 --- a/Assets/Scenes/MenuScene.unity +++ b/Assets/Scenes/MenuScene.unity @@ -2608,7 +2608,7 @@ RectTransform: 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: -13.5000305} + m_AnchoredPosition: {x: 0, y: -13.500061} m_SizeDelta: {x: -6, y: -33} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &226426086 diff --git a/Assets/Script/Data/NoteInfo.cs b/Assets/Script/Data/NoteInfo.cs index 022af9e84..1cf7fdace 100644 --- a/Assets/Script/Data/NoteInfo.cs +++ b/Assets/Script/Data/NoteInfo.cs @@ -9,7 +9,7 @@ public class NoteInfo : AbstractInfo { /// public bool hopo; /// - /// Tap note. Only used for guitar, coop guitar, rhythm, and bass. + /// Tap note. Only used for five fret. /// public bool tap; /// diff --git a/Assets/Script/PlayMode/FiveFretTrack.cs b/Assets/Script/PlayMode/FiveFretTrack.cs index 1f0cc7aa6..c0bf96110 100644 --- a/Assets/Script/PlayMode/FiveFretTrack.cs +++ b/Assets/Script/PlayMode/FiveFretTrack.cs @@ -28,7 +28,7 @@ public class FiveFretTrack : AbstractTrack { private List heldNotes = new(); private float? latestInput = null; private bool latestInputIsStrum = false; - private bool[] extendedSustain = new bool[] {false,false,false,false,false}; + private bool[] extendedSustain = new bool[] { false, false, false, false, false }; private int notesHit = 0; // private int notesMissed = 0; @@ -343,7 +343,7 @@ private void UpdateInput() { // add it to the allowed overstrums. This is so the player // doesn't lose their combo when they strum AFTER they hit // the tap note. - if ((chord[0].hopo||chord[0].tap) && !strummedCurrentNote) { + if ((chord[0].hopo || chord[0].tap) && !strummedCurrentNote) { allowedOverstrums.Clear(); // Only allow overstrumming latest HO/PO allowedOverstrums.Add(chord); } else if (allowedOverstrums.Count > 0 && !chord[0].hopo && !chord[0].tap) { @@ -358,7 +358,6 @@ private void UpdateInput() { } } } - } } @@ -572,11 +571,10 @@ private void SpawnNote(NoteInfo noteInfo, float time) { model = NoteComponent.ModelType.FULL; } else if (noteInfo.hopo) { model = NoteComponent.ModelType.HOPO; - } else if (noteInfo.tap){ + } else if (noteInfo.tap) { model = NoteComponent.ModelType.TAP; } - // Set note info var noteComp = notePool.AddNote(noteInfo, pos); startFCDetection = true; @@ -586,7 +584,6 @@ private void SpawnNote(NoteInfo noteInfo, float time) { noteInfo.length, model ); - } private string PrintFrets() { // Debug function; remove later? diff --git a/Assets/Script/Serialization/Parser/MidiParser.FiveFret.cs b/Assets/Script/Serialization/Parser/MidiParser.FiveFret.cs index c60baab7d..855f06197 100644 --- a/Assets/Script/Serialization/Parser/MidiParser.FiveFret.cs +++ b/Assets/Script/Serialization/Parser/MidiParser.FiveFret.cs @@ -23,7 +23,9 @@ private enum ForceState { OPEN, TAP } - private bool isCurrentlyTap=false; + + private bool isCurrentlyTap = false; + private class FiveFretIR { public long startTick; // This is an array due to extended sustains @@ -32,6 +34,7 @@ private class FiveFretIR { public FretFlag fretFlag; public bool hopo; public bool tap; + // Used for difficulty downsampling public bool autoHopo; } @@ -97,15 +100,15 @@ private List FiveFretGetForceState(TrackChunk trackChunk, int diff // If it is a flag on, wait until we get the flag // off so we can get the length of the flag period. forceStateArray[i] = totalDelta; - if(forceState==ForceState.TAP){ - isCurrentlyTap=true; + if (forceState == ForceState.TAP) { + isCurrentlyTap = true; } } else { if (forceStateArray[i] == null) { continue; } - if(forceState==ForceState.TAP){ - isCurrentlyTap=false; + if (forceState == ForceState.TAP) { + isCurrentlyTap = false; } forceIR.Add(new ForceStateIR { startTick = forceStateArray[i].Value, @@ -123,22 +126,20 @@ private List FiveFretGetForceState(TrackChunk trackChunk, int diff continue; } ForceState forceState = ForceState.NONE; - if(noteEvent.GetNoteOctave() == 7 && noteEvent.GetNoteName()==NoteName.GSharp){ + if (noteEvent.GetNoteOctave() == 7 && noteEvent.GetNoteName() == NoteName.GSharp) { forceState = ForceState.TAP; - }else{ - // Convert note to force state + } else { + // Convert note to force state forceState = noteEvent.GetNoteName() switch { - // Force HOPO - NoteName.F => ForceState.HOPO, - // Force strum - NoteName.FSharp => ForceState.STRUM, - // Default - _ => ForceState.NONE - }; + // Force HOPO + NoteName.F => ForceState.HOPO, + // Force strum + NoteName.FSharp => ForceState.STRUM, + // Default + _ => ForceState.NONE + }; } - - // Skip if not an actual state if (forceState == ForceState.NONE) { continue; @@ -209,7 +210,7 @@ private List FiveFretNotePass(TrackChunk trackChunk, int difficulty) // Default _ => -1 }; - + // Skip if not an actual note if (fret == -1) { continue; @@ -300,14 +301,14 @@ private void FiveFretNoteStatePass(List noteIR, List f // Set as open if requested note.fretFlag = FretFlag.OPEN; note.hopo = false; - } else{ + } else { // Otherwise, just set as a HOPO if requested note.hopo = force == ForceState.HOPO; } if (force == ForceState.TAP) { - note.tap=true; - note.hopo=false; - note.autoHopo=false; + note.tap = true; + note.hopo = false; + note.autoHopo = false; } lastTime = note.startTick; lastFret = note.fretFlag; @@ -335,10 +336,11 @@ private List FiveFretIrToRealPass(List noteIR, TempoMap te int fret = i - 1; - if(noteInfo.tap){ - noteInfo.hopo=false; - noteInfo.autoHopo=false; + if (noteInfo.tap) { + noteInfo.hopo = false; + noteInfo.autoHopo = false; } + // Get the end tick (different for open notes) long endTick; if (fret == 5) {