Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified Assets/.DS_Store
Binary file not shown.
7 changes: 7 additions & 0 deletions Assets/Integration/TreeRhythmController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,13 @@ private static int CountLessThan(TreeNode<int> node, int target)
* below all visible nodes.
* </summary>
*/
/** <summary>
* The actual rendered color of the active carrier node, or Color.clear when no carrier exists.
* Updated each time the carrier's visual state changes.
* </summary>
*/
public Color CarrierNodeColor => _carrierView != null ? _carrierView.RenderedColor : Color.clear;

public float LowestNodeWorldY
{
get
Expand Down
24 changes: 24 additions & 0 deletions Assets/Integration/TwoPlayerGameCoordinator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ public class TwoPlayerGameCoordinator : MonoBehaviour
[Tooltip("P1 synthwave background controller (auto-found if left null).")]
[SerializeField] private SynthwaveBackgroundController _p1Background;

[Tooltip("FFT analyzer on the game AudioSource — shared for both P1 and P2 audio reactivity.")]
[SerializeField] private AudioFFTAnalyzer _audioAnalyzer;

#endregion

#region Private State
Expand Down Expand Up @@ -362,13 +365,34 @@ private void SetupP2Background()
_p2BackgroundCtrl.SetRefs(p2Floor, p2Sky, p2Mountains);
_p2BackgroundCtrl.CopyVisualSettingsFrom(_p1Background);

// Mirror audio reactivity: same song plays for both, so share the analyzer.
if (_audioAnalyzer != null)
{
var p2Reactive = ctrlGo.AddComponent<SynthwaveAudioReactive>();
// Copy inspector values from P1's reactive component so feel matches.
var p1Reactive = _p1Background.GetComponent<SynthwaveAudioReactive>();
if (p1Reactive != null)
CopyAudioReactiveSettings(p1Reactive, p2Reactive);
p2Reactive.SetAnalyzer(_audioAnalyzer);
}

// Wire P2's carrier color sync to P2's rhythm controller so each side tracks its own carrier.
if (_p2Controller != null)
{
var p2ColorSync = ctrlGo.AddComponent<SynthwaveCarrierColorSync>();
p2ColorSync.SetRhythmController(_p2Controller);
}

if (_p2Controller != null)
{
_p2BeatHandler = _ => _p2BackgroundCtrl.Pulse();
_p2Controller.OnBeat += _p2BeatHandler;
}
}

private static void CopyAudioReactiveSettings(SynthwaveAudioReactive src, SynthwaveAudioReactive dst)
=> dst.CopySettingsFrom(src);

private static void SetLayerRecursive(GameObject go, int layer)
{
go.layer = layer;
Expand Down
3 changes: 3 additions & 0 deletions Assets/Menu/SongSelect/SongSelectController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ public class SongSelectController : MonoBehaviour, IUIGalleryPreview

[Header("Scene")]
[SerializeField] private bool _restrictNavigationToP1 = false;
[Tooltip("Pulsed on each carousel scroll and difficulty confirm to give nav beat feedback.")]
[SerializeField] private SynthwaveBackgroundController _background;

#endregion

Expand Down Expand Up @@ -261,6 +263,7 @@ internal async UniTask ScrollCarousel(int direction)
_previewCts?.Dispose();
_previewCts = null;
_previewPlayer?.StopImmediate();
_background?.Pulse();

SongCardView outgoing = _cards[_centreCardIndex];
SongCardView incoming = _cards[incomingIndex];
Expand Down
4 changes: 4 additions & 0 deletions Assets/Menu/TitleScreen/MenuTreeController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ public class MenuTreeController : MonoBehaviour
*/
public event Action<TreeNode<MenuNodeData>> OnLevelPopped;

/** <summary>Fired whenever the cursor moves to a different node (left/right nav or sub-tree push).</summary> */
public event Action OnNavigate;

#endregion

#region Private State
Expand Down Expand Up @@ -190,6 +193,7 @@ public void SetCursor(TreeNode<MenuNodeData> node)
node.View.SetState(NodeVisualState.ComparisonFocus);
node.View.PulseAsync(1.08f, 0.15f, Ease.OutQuad).Forget();
}
OnNavigate?.Invoke();
}

#endregion
Expand Down
1 change: 1 addition & 0 deletions Assets/Resources/PerformanceTestRunInfo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"TestSuite":"","Date":0,"Player":{"Development":false,"ScreenWidth":0,"ScreenHeight":0,"ScreenRefreshRate":0,"Fullscreen":false,"Vsync":0,"AntiAliasing":0,"Batchmode":false,"RenderThreadingMode":"MultiThreaded","MtRendering":false,"GraphicsJobs":false,"GpuSkinning":true,"Platform":"","ColorSpace":"","AnisotropicFiltering":"","BlendWeights":"","GraphicsApi":"","ScriptingBackend":"Mono2x","AndroidTargetSdkVersion":"AndroidApiLevelAuto","AndroidBuildSystem":"Gradle","BuildTarget":"StandaloneOSX","StereoRenderingPath":"MultiPass"},"Hardware":{"OperatingSystem":"","DeviceModel":"","DeviceName":"","ProcessorType":"","ProcessorCount":0,"GraphicsDeviceName":"","SystemMemorySizeMB":0},"Editor":{"Version":"6000.0.68f1","Branch":"6000.0/staging","Changeset":"e1e9baaf294b","Date":1770819226},"Dependencies":["com.coplaydev.unity-mcp@9.7.3","com.cysharp.unitask@2.5.11","com.kyrylokuzyk.primetween@1.4.0","com.unity.ai.navigation@2.0.10","com.unity.collab-proxy@2.11.3","com.unity.ide.rider@3.0.39","com.unity.ide.visualstudio@2.0.27","com.unity.inputsystem@1.18.0","com.unity.multiplayer.center@1.0.0","com.unity.render-pipelines.universal@17.0.4","com.unity.test-framework@1.6.0","com.unity.timeline@1.8.10","com.unity.ugui@2.0.0","com.unity.visualscripting@1.9.7","com.unity.modules.accessibility@1.0.0","com.unity.modules.ai@1.0.0","com.unity.modules.androidjni@1.0.0","com.unity.modules.animation@1.0.0","com.unity.modules.assetbundle@1.0.0","com.unity.modules.audio@1.0.0","com.unity.modules.cloth@1.0.0","com.unity.modules.director@1.0.0","com.unity.modules.imageconversion@1.0.0","com.unity.modules.imgui@1.0.0","com.unity.modules.jsonserialize@1.0.0","com.unity.modules.particlesystem@1.0.0","com.unity.modules.physics@1.0.0","com.unity.modules.physics2d@1.0.0","com.unity.modules.screencapture@1.0.0","com.unity.modules.terrain@1.0.0","com.unity.modules.terrainphysics@1.0.0","com.unity.modules.tilemap@1.0.0","com.unity.modules.ui@1.0.0","com.unity.modules.uielements@1.0.0","com.unity.modules.umbra@1.0.0","com.unity.modules.unityanalytics@1.0.0","com.unity.modules.unitywebrequest@1.0.0","com.unity.modules.unitywebrequestassetbundle@1.0.0","com.unity.modules.unitywebrequestaudio@1.0.0","com.unity.modules.unitywebrequesttexture@1.0.0","com.unity.modules.unitywebrequestwww@1.0.0","com.unity.modules.vehicles@1.0.0","com.unity.modules.video@1.0.0","com.unity.modules.vr@1.0.0","com.unity.modules.wind@1.0.0","com.unity.modules.xr@1.0.0","com.unity.modules.subsystems@1.0.0","com.unity.modules.hierarchycore@1.0.0","com.unity.ext.nunit@2.0.5","com.unity.render-pipelines.core@17.0.4","com.unity.shadergraph@17.0.4","com.unity.render-pipelines.universal-config@17.0.3","com.unity.nuget.newtonsoft-json@3.2.1","com.unity.searcher@4.9.3","com.unity.burst@1.8.28","com.unity.mathematics@1.3.2","com.unity.collections@2.6.2","com.unity.rendering.light-transport@1.0.1","com.unity.nuget.mono-cecil@1.11.5","com.unity.test-framework.performance@3.2.0"],"Results":[]}
1 change: 1 addition & 0 deletions Assets/Resources/PerformanceTestRunSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"MeasurementCount":-1}
Loading