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); }