using UnityEngine; using Fusion; using System; using Hallucinate.Network; namespace OnlyScove.Scripts { public class PlayerStats : NetworkBehaviour { [Header("Player Stats")] [Networked, OnChangedRender(nameof(OnHealthChangedRender))] public float Health { get; set; } = 100f; [Networked, OnChangedRender(nameof(OnStaminaChangedRender))] public float Stamina { get; set; } = 100f; [Networked, OnChangedRender(nameof(OnNoiseLevelChangedRender))] public float NoiseLevel { get; set; } = 0f; public event Action OnHealthChanged; public event Action OnStaminaChanged; public event Action OnNoiseLevelChanged; public override void Spawned() { // Initial UI sync placeholder UpdateUI(); } void OnHealthChangedRender() { OnHealthChanged?.Invoke(Health); if (Health <= 0 && Object.HasStateAuthority) { // Find the other player as winner foreach (var player in Runner.ActivePlayers) { if (player != Object.InputAuthority) { MatchResultManager.Instance?.ProcessMatchEnd(player); break; } } } if (Object.HasInputAuthority) { // UI Placeholder: Trigger Health UI Change } } void OnStaminaChangedRender() { OnStaminaChanged?.Invoke(Stamina); if (Object.HasInputAuthority) { // UI Placeholder: Trigger Stamina UI Change } } void OnNoiseLevelChangedRender() { OnNoiseLevelChanged?.Invoke(NoiseLevel); } private void UpdateUI() { if (Object.HasInputAuthority) { OnHealthChangedRender(); OnStaminaChangedRender(); } } } }