Пример #1
0
 public override bool TakeDamage(float damage, DamageType typing, Node source)
 {
     if (IsDead())
     {
         return(false);
     }
     if (source != null)
     {
         if (source is EnemyProjectiles projectiles)
         {
             playerTookDamage?.Invoke(damage, typing, projectiles);
             projectiles.Remove();
         }
     }
     Damaged(damage);
     if (IsDead())
     {
         death?.Invoke();
         playerTrappedInRoom = false;
     }
     else
     {
         EmitSignal(nameof(UpdateHealth), true, GetHealth());
     }
     return(true);
 }
Пример #2
0
    public void Respawn()
    {
        AudioManager.PlaySound(AudioManager.Sound.Confirm);
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible   = false;
        PlayerRespawned?.Invoke();
        impact        = Vector3.zero;
        isDead        = false;
        canMove       = true;
        canRun        = true;
        currentHealth = maxHealth;
        PlayerDamaged?.Invoke(currentHealth, maxHealth);
        stamina = maxStamina;
        StaminaChanged?.Invoke(stamina, maxStamina);
        var respawnPosition = new Vector3(152.2615f, 1, 142.5762f);

        // turn off characterController so that it does not override transform.position
        characterController.enabled   = false;
        gameObject.transform.position = respawnPosition;
        characterController.enabled   = true;

        onFireTimer    = 5;
        bleedingTimer  = 10;
        exhaustedTimer = 5;

        animator.SetBool("isDying", false);
        animator.SetBool("isRunning", false);
        animator.SetBool("isAttacking", false);
        animator.SetBool("isIdle", true);
    }
    /// <summary>
    /// Damage the Player, if not invunverable
    /// </summary>
    /// <param name="damage">Health to remove from the player</param>
    public void DamagePlayer(float damage)
    {
        if (!isInvunerable)
        {
            //Reduce Score when damaged
            ScoreKeeper.CurrentScore -= damageScoreReduction;

            //Calculate the resultant health and make sure that it doesn't
            //go below zero
            float resultantHealth = playerHealth - damage;

            if (resultantHealth > 0)
            {
                //Call damage events and functionality
                playerHealth = resultantHealth;
                PlayerDamaged?.Invoke(playerHealth);

                //Set player to be invunerable for an amount of time
                //so they don't take damage 100 times while clipping through a wall
                StartCoroutine(DoInvunerableSequence(playerInvunerableTime));
            }
            else
            {
                //Call game over/death events
                playerHealth = 0;
                PlayerKilled?.Invoke();
            }
        }
    }
Пример #4
0
    void OnTriggerEnter(Collider other)
    {
        InteractionPrompt.Invoke(this.Interactables.Count > 0);

        switch (other.tag)
        {
        case "Enemy Weapon":
            if (isVulnerable)
            {
                this.SetState(new TakeDamageState(this));
                PlayerDamaged.Invoke();
            }
            break;

        case "Health":
            if (health < maxHealth)
            {
                health += 2;

                if (health > 10)
                {
                    health = 10;
                }

                HealthPickup.Invoke();
                Audio.PlayOneShot(healthPick);

                other.gameObject.SetActive(false);
            }
            break;
        }
    }
Пример #5
0
    public void Damage(DamageInfo damage)
    {
        if (damage.Value < 0)
        {
            Debug.LogWarning("Damange less than 0.");
            return;
        }
        var value = ApplyArmourRating(damage.Value, damage.DamageType);

        // Debug.Log(damage.Value + ", " + value);

        CurrentHealth -= value;

        if (CurrentHealth < 0)
        {
            CurrentHealth = 0;
        }

        PlayerDamaged?.Invoke(CurrentHealth);

        if (CurrentHealth == 0)
        {
            OnDeath();
        }
    }
Пример #6
0
 public static void OnDamagePlayer(float amount)
 {
     if (PlayerDamaged != null)
     {
         PlayerDamaged.Invoke(amount);
     }
 }
Пример #7
0
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.collider.tag == "Holywall")
        {
            _playerLifesCount--;

            if (_playerLifesCount == 0)
            {
                _Died = true;
                animator.SetTrigger("PlayerDamaged");
                PlayerDie();
            }
            else
            {
                audioSource.PlayOneShot(holyWall);
                PlayerDamaged?.Invoke(_playerLifesCount);
                _isShoked = true;
                animator.SetTrigger("PlayerDamaged");

                Vector3 playerPushDirection = playerCenter.position - collision.contacts[0].point;
                playerPushDirection.y = 0f;

                rigidbody.AddForce((playerPushDirection).normalized * playerPushFromHolyWallForce, ForceMode.Impulse);

                float returnToNormal = 0f;
                DOTween.To(() => returnToNormal, x => returnToNormal = x, 1, 1f).OnComplete(() => { _isShoked = false; });
            }
        }
    }
    private void OnCollisionEnter2D(Collision2D collision)
    {
        //Check if we have collided with a bullet
        Bullet hitBullet;

        if (collision.gameObject.TryGetComponent <Bullet>(out hitBullet))
        {
            //Don't do damange if we didn't create this
            if (hitBullet.creatorTag != this.gameObject.tag)
            {
                Health -= hitBullet.BulletDamage;
                PlayerDamaged?.Invoke();
                Debug.Log(health);
            }
        }
    }
Пример #9
0
    public void TakeDamage(int amount)
    {
        currentHealth -= amount;
        AudioSource.PlayClipAtPoint(damagedClip, transform.position);
        PlayerDamaged?.Invoke();

        if (currentHealth <= 0)
        {
            DisablePlayer();
        }

        healthBar.value = currentHealth;

        StartCoroutine(FlashPlayerRed());

        playerController.RumbleController();
    }
 protected override void CheckTypeAndValues(DamagebleParam.ParamType type, float value, float maxValue)
 {
     switch (type)
     {
     case DamagebleParam.ParamType.Health:
         if (isFirstCheck)
         {
             playerUI.InitializePlayerView(maxValue);
             isFirstCheck = false;
         }
         else
         {
             PlayerDamaged?.Invoke();
         }
         playerUI.ViewHealth(value);
         break;
     }
 }
Пример #11
0
    public void ReceiveDamage(float Damage)
    {
        Damage *= damageModifier;

        if (Damage > 0 && !isDead)
        {
            AudioManager.PlaySound(AudioManager.Sound.PlayerDamaged);
        }

        currentHealth -= Damage;
        if (currentHealth < 0)
        {
            currentHealth = 0;
        }
        else if (currentHealth > maxHealth)
        {
            currentHealth = maxHealth;
        }
        PlayerDamaged?.Invoke(currentHealth, maxHealth);
    }
Пример #12
0
 private void OnPlayerDamaged(int oldHealth, int newHealth)
 {
     PlayerDamaged?.Invoke();
 }
Пример #13
0
 public void OnPlayerDamaged(PlayerDamagedEventArgs args)
 {
     PlayerDamaged?.Invoke(this, args);
 }
Пример #14
0
 public void SetHealth(int hp)
 {
     CurrentHealth = Mathf.Clamp(hp, 0, MaxHealth);
     PlayerDamaged?.Invoke(CurrentHealth);
 }
Пример #15
0
 public static void CallPlayerDamaged(float damage)
 {
     PlayerDamaged?.Invoke(damage);
 }