// ClawGameBinder.cs using UnityEngine; using System; using System.Collections.Generic; using TMPro; public class ClawGameBinder : MonoBehaviour { [Header("Scene References")] public ClawController claw; public PlatformSpinController platform; public RoundTimer timer; [Header("UI (optional)")] public TextMeshProUGUI eventsText; public int maxLines = 8; public bool includeTimestamps = true; // cached manager instance private ClawScoreManager sm; // rolling log private readonly Queue lines = new Queue(); void OnEnable() { TryBind(); } void OnDisable() { TryUnbind(); } private void TryBind() { sm = ClawScoreManager.Instance ?? FindObjectOfType(); if (sm == null) { Debug.LogWarning("[ClawGameBinder] ClawScoreManager not found; events won’t be wired."); return; } sm.OnClawDisabled += HandleClawDisabled; sm.OnClawJam += HandleClawJammed; sm.OnPlatformTurbo += HandleTurbo; sm.OnPlatformSlow += HandleSlow; sm.OnPlatformFreeze += HandleFreeze; sm.OnTimeAdded += HandleTimeAdded; // If you exposed this event in your ScoreManager: sm.OnComboAchieved += HandleCombo; // comment out if not present } private void TryUnbind() { if (sm == null) return; sm.OnClawDisabled -= HandleClawDisabled; sm.OnClawJam -= HandleClawJammed; sm.OnPlatformTurbo -= HandleTurbo; sm.OnPlatformSlow -= HandleSlow; sm.OnPlatformFreeze -= HandleFreeze; sm.OnTimeAdded -= HandleTimeAdded; // If you exposed this event: sm.OnComboAchieved -= HandleCombo; // comment out if not present sm = null; } // ---------- Event Handlers ---------- private void HandleClawDisabled(float seconds) { Log($"Claw Disabled {seconds:0.##}s"); if (claw) claw.ApplyDisable(seconds); } private void HandleClawJammed(float seconds) { Log($"Claw Jam {seconds:0.##}s"); if (claw) claw.ApplyJam(seconds); } private void HandleTurbo(float seconds) { Log($"Turbo +speed {seconds:0.##}s"); if (platform) platform.ApplyTurbo(seconds); } private void HandleSlow(float seconds) { Log($"Slow -speed {seconds:0.##}s"); if (platform) platform.ApplySlow(seconds); } private void HandleFreeze(float seconds) { Log($"Freeze {seconds:0.##}s"); if (platform) platform.ApplyFreeze(seconds); } private void HandleTimeAdded(float seconds) { Log($"Time added: +{seconds:0.##}s"); if (timer) timer.AddTime(seconds); } // If your ScoreManager exposes combos: private void HandleCombo(ClawBubbleType[] combo) { Log($" Combo: {string.Join(", ", combo)}"); } // ---------- UI Log ---------- private void Log(string msg) { if (!eventsText) return; string line = includeTimestamps ? $"[{Time.time:0.0}s] {msg}" : msg; //lines.Enqueue(line); //while (lines.Count > maxLines) lines.Dequeue(); eventsText.text = line; } }