private void Start()
        {
            if (m_photonView == null)
            {
                m_photonView = GetComponent <PhotonView>();
            }

            if (m_photonView.Owner.IsKing())
            {
                MaxHealth = PhotonNetwork.CurrentRoom.GetKingHealth();
            }

            m_shield = GetComponent <Shield>();

            //Init, local on every Client
            m_currentHealth = MaxHealth;
            if (m_photonView.IsMine)
            {
                m_photonView.Owner.SetAlive(true);
            }

            OnChangeHealthEvent?.Invoke(m_currentHealth, MaxHealth);

            Camera = Camera.main;
        }
        private void ReceiveDamage(float value, PhotonMessageInfo info)
        {
            //bound to min - max
            m_currentHealth = Mathf.Clamp(m_currentHealth -= value, 0, MaxHealth);

            //Time till regeneration starts
            m_regStartTime = Time.time + TimeTillRegenerate;


            if (value > 0)
            {
                OnReceivedDamage?.Invoke(value);
            }

            if (m_photonView.IsMine)
            {
                if (m_currentHealth <= 0)
                {
                    m_lastHit = info.Sender;
                    m_photonView.Owner.SetAlive(false);
                    OnDeath();
                }
            }

            AddHits(value, info.Sender);

            OnChangeHealthEvent?.Invoke(m_currentHealth, MaxHealth);
        }
        /// <summary> Regenerate Health after certain Time.</summary>
        private void Regenerate()
        {
            if (Time.time >= m_regStartTime && m_currentHealth < MaxHealth)
            {
                m_currentHealth = Mathf.Clamp(m_currentHealth += HealthPerSeconds * Time.deltaTime, 0, MaxHealth);
                OnChangeHealthEvent?.Invoke(m_currentHealth, MaxHealth);
                m_isRegenerating = true;
                DeleteHits();
                return;
            }

            m_isRegenerating = false;
        }
 /// <summary> Synchronize Health for all Clients </summary>
 public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
 {
     if (stream.IsWriting)
     {
         stream.SendNext(m_currentHealth);
         stream.SendNext(m_isRegenerating);
     }
     else
     {
         m_currentHealth = (float)stream.ReceiveNext();
         OnChangeHealthEvent?.Invoke(m_currentHealth, MaxHealth);
         m_isRegenerating = (bool)stream.ReceiveNext();
     }
 }
 public void ApplyHealth(float amount)
 {
     m_currentHealth = Mathf.Clamp(m_currentHealth += amount, 0, MaxHealth);
     OnChangeHealthEvent?.Invoke(m_currentHealth, MaxHealth);
 }