public void TakeDamage(float damage, CharacterModel attackedByCharacterModel = null)
    {
        if (isDead)
        {
            return;
        }

        float oldHealth = health;

        if (_characterCombatController.isBlocking)
        {
            damage *= _characterCombatController.blockDamageReducer;
        }

        health -= damage;
        health  = Mathf.Clamp(health, 0, maxHealth);

        if (attackedByCharacterModel != null)
        {
            CharacterCombatController otherCharacterCombatController =
                attackedByCharacterModel.GetComponent <CharacterCombatController>();
            otherCharacterCombatController.AddSpirit(damage * spiritReleasePerDamage);
        }

        onHealthChanged(oldHealth, health);

        if (health <= 0)
        {
            OnPlayerDeath();
        }

        AudioManager.instance.PlayEffect(AudioManager.AudioData.GettingHit, transform, hitVolume);
        _animator.SetTrigger("Hit");
    }
Example #2
0
    IEnumerator PlaySpecialAttackSequence()
    {
        explosionParticleSystem.Play();
//        yield return new WaitForSeconds(1f);

        CharacterCombatController characterCombatController = owner.GetComponent <CharacterCombatController>();

        float duration = HelperUtilities.Remap(spiritUsed, 0, characterCombatController.maxSpirit,
                                               0, explosionDuration);

        float force = HelperUtilities.Remap(spiritUsed, 0, characterCombatController.maxSpirit,
                                            0, explosionForce);

        float radius = HelperUtilities.Remap(spiritUsed, 0, characterCombatController.maxSpirit, 0, explosionRadius);


        ParticleSystem.MainModule psMain = BurningGroundParticleSystem.main;
        psMain.duration          = duration;
        growBurningGround        = true;
        burningGroundTargetScale = Vector3.one * radius;
        BurningGroundParticleSystem.gameObject.SetActive(true);

        for (int i = 0; i < projectileSpawnPoints.Length; i++)
        {
            ThrowExplosionProjectile(projectileSpawnPoints[i], force, radius);
            yield return(new WaitForSeconds(0.1f));
        }

        while (BurningGroundParticleSystem && BurningGroundParticleSystem.isPlaying)
        {
            yield return(new WaitForSeconds(duration));
        }

        Destroy(gameObject);
    }
    void InitIfNeeded()
    {
        if (!_characterInputController)
        {
            _characterInputController = GetComponentInChildren<CharacterInputController>();
        }

        if (!_characterCombatController)
        {
            _characterCombatController = GetComponent<CharacterCombatController>();
        }
    }
Example #4
0
    public void Explode(CharacterModel owner, float spiritUsed)
    {
        this.owner      = owner;
        this.spiritUsed = spiritUsed;

        CharacterCombatController characterCombatController = owner.GetComponent <CharacterCombatController>();

        damage = HelperUtilities.Remap(this.spiritUsed, 0, characterCombatController.maxSpirit, 0, damage);

        AudioManager.instance.PlayEffect(AudioManager.AudioData.Explosion, transform, volume);
        StartCoroutine(PlaySpecialAttackSequence());
    }
    public void AttachCharacter(CharacterModel incomingCharacterModel)
    {
        characterModel = incomingCharacterModel;
        image.sprite   = characterModel.CharacterInfo.image;

        CharacterHealthController characterHealthController = characterModel.GetComponent <CharacterHealthController>();

        characterHealthController.onHealthChanged += (oldHealth, health) =>
        {
            healthSlider.value = HelperUtilities.Remap(health, 0, characterHealthController.maxHealth,
                                                       healthSlider.minValue, healthSlider.maxValue);
        };

        characterCombatController = characterModel.GetComponent <CharacterCombatController>();
    }
Example #6
0
    void MakeAnOffensiveMove()
    {
        CharacterCombatController characterCombatController = _characterModel.GetComponent <CharacterCombatController>();

        if (characterCombatController.spirit >= characterCombatController.minSpiritConsumption)
        {
            float rnd = Random.value;
            if (rnd < lightVsSpecialAttackRatio)
            {
                characterInput.lightAttack = true;
            }
            else
            {
                characterInput.specialAttackCharge = true;
                specialChargeTill = Time.time + specialChargeDuration +
                                    Random.Range(-specialChargeDurationThreshold, specialChargeDurationThreshold);
            }
        }
        else
        {
            characterInput.lightAttack = true;
        }
    }
 void Awake()
 {
     _animator = GetComponentInChildren <Animator>();
     _characterCombatController = GetComponent <CharacterCombatController>();
     ResetController();
 }
 public void ChangeCharacter(PlayerMovement cha)
 {
     character = cha;
     agent     = cha.GetComponent <NavMeshAgent>();
     characterCombatController = cha.GetComponent <CharacterCombatController>();
 }