// idle object that rarely gets dirty
using UnityEngine;

namespace Mirror.Examples.BenchmarkIdle
{
    public class Npc : NetworkBehaviour
    {
        // component to assign in inspector
        public Renderer rend;

        // the value to set dirty
        [SyncVar] ulong value;

        [Tooltip("Probability that this object just sleeps the whole time without ever getting dirty. (Npcs, Item drops, etc.)")]
        [Range(0, 1)] public float sleepingProbability = 0.80f; // 80% of the objects are sleeping
        bool sleeping;

        [Header("Colors")]
        public Color activeColor = Color.white;
        public Color sleepingColor = Color.red;

        public override void OnStartServer()
        {
            sleeping = Random.value < sleepingProbability;

            // color coding
            // can't do this in update, it's too expensive
            rend.material.color = sleeping ? sleepingColor : activeColor;
        }

        [ServerCallback]
        void Update()
        {
            // set dirty if not sleeping.
            // only counts as dirty every 'syncInterval'.
            if (!sleeping) ++value;
        }
    }
}