예제 #1
0
        // ========================================================
        // ========================================================
        // ========================================================


        void OnEnable()
        {
            currentHealth = startingHealth;

            onHealthSet.Invoke(this);

            DisableInvulnerability();
        }
예제 #2
0
    private void OnEnable()
    {
        m_CurrentHealth = startingHealth;

        OnHealthSet.Invoke(this);

        DisableInvulnerability();
    }
예제 #3
0
        void OnEnable()
        {
            PersistentDataManager.RegisterPersister(this);
            m_CurrentHealth = startingHealth;

            OnHealthSet.Invoke(this);

            DisableInvulnerability();
        }
예제 #4
0
    public void SetInitialHealth()
    {
        //  set initial health point
        m_CurrentHealth = startingHealth;

        //  call back on health set
        OnHealthSet.Invoke(this);

        //  disable invulnerability
        DisableInvulnerability();

        Debug.Log("onHealthSet");
    }
예제 #5
0
    public virtual void TakeDamage(int dmg, GameObject src = null)
    {
        if (!isInvincible && currentHP > 0)
        {
            currentHP -= dmg;
            OnHealthChanged.Invoke(currentHP);
            AudioManager.Instance.PlayClip("Player", "Damage");

            if (src)
            {
                Vector3 dif = src.transform.position - gameObject.transform.position;
                transform.position -= dif.normalized * 0.25f;
            }
        }
    }
예제 #6
0
    // Update is called once per frame
    void Update()
    {
        // We divide decreasePerMinute by 60 to turn it into deacreasePerSecond.
        // We then multiply it by Time.deltaTime, which is the time, in seconds,
        // since Update was last called.
        energy -= decreasePerMinute * Time.deltaTime / 60f;
        if (healthEvent != null)
        {
            healthEvent.Invoke(energy);
        }
        //int c = health;
        //hp_text.text = "Halo 2 " + (hp).ToString();
        if (energy <= 0)
        {
            energy = 0;
        }
        else if (energy >= 100.1f)
        {
            energy = 100.1f;
            //fullPanel.gameObject.SetActive(true);
        }
        else if (energy <= 100)
        {
            //fullPanel.gameObject.SetActive(false);
        }

        PlayerPrefs.SetFloat("energy", Energy.energy);
        PlayerPrefs.Save();
    }
예제 #7
0
    private void GiveHealth(GameObject player)
    {
        HealthScript playerHealth = player.GetComponent <HealthScript>();                        // Noah: get the players health

        if (playerHealth == null)
        {
            return;
        }

        // Noah: Add to the players health
        playerHealth._currentHealth += _gainAmount;
        if (playerHealth._currentHealth < _maxHealth)
        {
            playerHealth._currentHealth = _maxHealth;
        }

        // Noah: update the health bar
        HealthEvent?.Invoke(HealthPercentage);
        HealthBar.RuntimeSOBar.HealthBarRef.UpdateBar(playerHealth.HealthPercentage);

        // Noah: Instantiate the particles and lerp them to the enemies position
        enemyPosition    = transform.position;
        _healthParticles = Instantiate(_healthParticles, transform.position, transform.rotation);
        _healthParticles.GetComponent <ParticleLerp>().Particle      = _healthParticles;
        _healthParticles.GetComponent <ParticleLerp>().EnemyPosition = enemyPosition;
        AkSoundEngine.PostEvent(_playerGainMana, gameObject);
    }
예제 #8
0
    public void DeductHealth(float amount)
    {
        //Zeroed the damage received XD
        if (IsUndead == true)
        {
            amount = 0;
        }

        if (CheckUndeadBuffExist() == true && Health - amount <= 0)
        {
            IsUndead = true;
        }

        //Reduce damage if applicable
        amount -= (amount * Shield);
        amount  = Mathf.Clamp(amount, 0, amount);

        //RoundOff Damage
        amount = (float)Math.Round(amount, 1);

        Health -= amount;
        Health  = Mathf.Clamp(Health, 0, maxHealth);

        //Bool Variable
        if (Health <= 0 && !IsUndead)
        {
            IsAlive = false;
        }

        OnDeductHealth.Invoke(amount);
        StartCoroutine(this.GetComponent <CustomCharacterController>().TakeDamageAnimation());
    }
예제 #9
0
    public void TakeDamage(float damageTaken)
    {
        if (damageTaken > _armor)        // If damage is higher than the damage negation the entity has
        {
            if (OnTakeDamage != null)
            {
                OnTakeDamage.Invoke();
            }
            _health -= damageTaken;
        }

        if (_health <= 0)
        {
            if (OnDie != null)
            {
                OnDie.Invoke();
            }
            _isAlive = false;
        }

        if (healthBar != null)
        {
            healthBar.fillAmount = _health / _maxHealth;                        // Displays health as a bar
        }
    }
예제 #10
0
    public int Heal(int hp)
    {
        this.hp = Mathf.Clamp((this.hp + hp), 0, maxHp);
        OnChanged?.Invoke(this);
        OnHeal?.Invoke(this);

        return(this.hp);
    }
예제 #11
0
    public void AddHealth(float amount)
    {
        Health += amount;

        Health = Mathf.Clamp(Health, 0, maxHealth);

        OnAddHealth.Invoke(amount);
    }
예제 #12
0
 public void ApplyDamage(float damage)
 {
     health -= damage;
     onTakeDamage.Invoke(health);
     if (health <= 0)
     {
         Die();
     }
 }
예제 #13
0
        public void TakeDamage(Damager p_damager, bool p_ignoreInvulnerability = false)
        {
            if (m_invulnerable && !p_ignoreInvulnerability || m_currentHealth <= 0)
            {
                return;
            }

            if (!m_invulnerable)
            {
                m_currentHealth -= p_damager.DamageValue;
                OnHealthSet?.Invoke(this);
            }

            m_damageDirection = transform.position + (Vector3)CenterOffset - p_damager.transform.position;

            OnTakeDamage?.Invoke(p_damager, this);

            CheckDeath(p_damager);
        }
예제 #14
0
    public void GainHealth(float healthGained)
    {
        if (_health > 0)
        {
            if (healthGained + _health > _maxHealth)
            {
                _health = _maxHealth;
                if (OnRestore != null)
                {
                    OnRestore.Invoke();
                }
            }

            else if (_health + healthGained <= +_maxHealth)
            {
                _health += healthGained;
                if (OnRestore != null)
                {
                    OnRestore.Invoke();
                }
            }
        }

        else if (_health <= 0)
        {
            if (OnRevive != null)
            {
                OnRevive.Invoke();
            }
            _health += healthGained;
            _isAlive = true;
        }

        else
        {
            return;
        }

        if (healthBar != null)
        {
            healthBar.fillAmount = _health / _maxHealth;
        }
    }
예제 #15
0
        /// <summary>
        /// Takes the given amount of damage from the specified source.
        /// </summary>
        /// <param name="damage">The amount of damage to take.</param>
        /// <param name="source">The source that caused the damage.</param>
        public virtual void TakeDamage(float damage, Transform source)
        {
            if (Invincible || IsDead)
            {
                return;
            }

            Health -= damage;
            OnHurt.Invoke(new HealthEventArgs {
                Damage = damage, Source = source
            });

            if (Animator != null)
            {
                if (HurtDamageFloatHash != 0)
                {
                    Animator.SetFloat(HurtDamageFloatHash, damage);
                }
                if (HurtTriggerHash != 0)
                {
                    Animator.SetTrigger(HurtTriggerHash);
                }
            }

            if (Health > 0f)
            {
                return;
            }

            Health = 0f;
            OnDeath.Invoke(new HealthEventArgs {
                Damage = damage, Source = source
            });

            if (Animator != null && DeathTriggerHash != 0)
            {
                Animator.SetTrigger(DeathTrigger);
            }
        }
예제 #16
0
    public virtual void DeductHp(float amt)
    {
        if (isInvulnerable)
        {
            return;
        }

        if (amt <= 0)
        {
            amt = 0;
        }
        //if(!isServer) return;
        health -= amt;
        if (health <= 0)
        {
            health = 0;
            EventOnHealthDepleted.Invoke();
            if (destroyOnHealthDepleted)
            {
                OnHealthDepeleted();
            }
            Debug.Log("Depleted");
        }
        Debug.Log("Hit");
        EventOnHealthChange.Invoke();
        EventReceivedDamage.Invoke(amt);
        if (!isInvulnerable && amt > 0)
        {
            if (!isInvulnerabilityTimerStarted)
            {
                isInvulnerable = true;
                invulTimer     = InvulnerabilityTimer();
                StartCoroutine(invulTimer);
            }
        }
    }
예제 #17
0
 private void HealthChanged(float prevHitPoints, float nextHitPoints)
 {
     if (Mathf.Approximately(nextHitPoints, 0f))
     {
         OnHealthZero.Invoke(prevHitPoints, 0f);
     }
     else if (Mathf.Approximately(nextHitPoints, hitPoints))
     {
         OnHealthFull.Invoke(prevHitPoints, hitPoints);
     }
     else
     {
         OnHealthChanged.Invoke(prevHitPoints, nextHitPoints);
     }
 }
예제 #18
0
    public void Damage(float amount)
    {
        _currentHealth = Mathf.Max(0, _currentHealth - amount);
        _onDamageEvent.Invoke(amount);

        if (_currentHealth <= 0)
        {
            _onDeathEvent.Invoke();

            DoDeathActions();

            if (_destroyOnDeath)
            {
                Destroy(gameObject);
            }
        }
    }
예제 #19
0
 public int Hurt(int hp)
 {
     if (!IsInvincible)
     {
         if (InvincibleTimer < 0)
         {
             this.hp = Mathf.Clamp((this.hp - hp), 0, maxHp);
             OnHit?.Invoke(this);
             OnChanged?.Invoke(this);
             InvincibleTimer = InvincibleTime;
             if (this.hp <= 0)
             {
                 OnDeath?.Invoke(this);
             }
         }
     }
     return(this.hp);
 }
예제 #20
0
        public int ReceiveHeal(int amount)
        {
            int pointsBefore = points;

            if (amount > 0 && CanReceiveHeal)
            {
                bool wasAlive = IsAlive;
                points = Mathf.Clamp(points + amount, 0, maxPoints);
                healedEvent.Invoke(gameObject);

                if (IsAlive && !wasAlive)
                {
                    reviveEvent.Invoke(gameObject);
                }
            }

            return(pointsBefore - points);
        }
예제 #21
0
    // Update is called once per frame
    void Update()
    {
        if (gameObject.tag == "Player" && IsAlive == true)
        {
            MaxHealth -= ConstantDamage * Time.deltaTime;
        }


        if (MaxHealth == 0)
        {
            IsAlive = false;
            Destroy(gameObject);
        }


        if (healthEvent != null)
        {
            healthEvent.Invoke(MaxHealth);
        }
    }
예제 #22
0
    //Kate: player damage and enemy damage when a resurrected enemy hits a normal enemy
    public void Damage(float amount)
    {
        //Kate:deal damage
        _currentHealth -= amount;


        //Kate:instantiate particles
        if (_hitParticles != null)
        {
            hitParticlesClone = Instantiate(_hitParticles, transform.position, transform.rotation);
        }

        //Kate:check if still alive
        if (_currentHealth <= 0)
        {
            // Debug.Log($"health: {_currentHealth}");
            Death();
        }
        HealthEvent?.Invoke(HealthPercentage);                                      //Noah: when the player damage, updates UI

        if (gameObject.GetComponent <PlayerController>())
        {
            if (SceneManager.GetActiveScene().buildIndex == 2)
            {
                GameMaster.instance._hurtshake2.GenerateImpulse();

                // Noah: play the damaged sound
                AkSoundEngine.PostEvent(_playerDamageSound, this.gameObject);
            }
            else
            {
                GameMaster.instance._hurtshake.GenerateImpulse();
            }
            GetComponent <PlayerController>()._Anim.Play("Hurt");                    //Kate:Play hurt animation for player
        }


        Destroy(hitParticlesClone, _partilceLifetime);                              //destroy particles
    }
예제 #23
0
        public int ReceiveDamage(int amount, IDamager damager)
        {
            var match = FindObjectOfType <MatchMode>();

            Assert.IsNotNull(match);

            int  pointsBefore = points;
            bool rulesAllow   = match.CanDamage(damager, gameObject);

            if (amount > 0 && rulesAllow && CanReceiveDamage)
            {
                bool wasAlive = IsAlive;
                points = Mathf.Clamp(points - amount, 0, maxPoints);
                damagedEvent.Invoke(gameObject);

                if (!IsAlive && wasAlive)
                {
                    deathEvent.Invoke(gameObject);
                }
            }

            return(pointsBefore - points);
        }
예제 #24
0
    //  更新生命值
    public void SetHealth(int healthPoint)
    {
        //  若大于最大值则返回
        if (healthPoint > m_MaxHealthAmount)
        {
            return;
        }

        //  更新当前生命值
        this.m_CurHealthAmount = healthPoint;

        //  调用事件
        OnHealthSet.Invoke(this.m_CurHealthAmount);

        if (m_CurHealthAmount <= 0)
        {
            PlayerDie();
        }
        else
        {
            OnDamaged.Invoke();
        }
    }
예제 #25
0
    // Gets called by the "source" of the damage
    public void DealDamage(float amt, GameObject source)
    {
        CurrHealth -= Mathf.RoundToInt(amt * IncomingDamageMultiplier);
        bool isDead = false;

        if (CurrHealth < 0.0f)
        {
            CurrHealth = 0.0f;
            isDead     = true;
        }

        Vector3 scale = HealthBarBackground.transform.GetChild(0).localScale;

        scale.x = CurrHealth / MaxHealth;

        HealthBarBackground.transform.GetChild(0).localScale = scale;

        onTakeDamage.Invoke(source);

        if (isDead)
        {
            onDeath.Invoke(source);
        }
    }
예제 #26
0
 void OnEnable()
 {
     resetHealth();
     onHealthSet.Invoke(this);
     DisableInvulnerability();
 }
예제 #27
0
 public int SetHealth(int hp)
 {
     this.hp = hp;
     OnChanged?.Invoke(this);
     return(this.hp);
 }
예제 #28
0
 private void Damaged(object sender, HealthEventArgs e)
 {
     onDamaged.Invoke(e);
 }
예제 #29
0
 private void Healed(object sender, HealthEventArgs e)
 {
     onHealed.Invoke(e);
 }
예제 #30
0
 protected override void Init()
 {
     OnHealthSet.Invoke(this);
 }