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