// TODO: Refractor Traveller / Serpent private void ProcessDeath() { _isDead = true; if (_isRoot) { GetComponentInParent <Tangler>().DestroyRoot(); } if (_isPhoenix && !_isCerberus) { PlayerController.Instance.Mana.MaxValue += 20; ActionBarUIController.Instance.HideFireboltFlash(); ActionBarUIController.Instance.HideHealFlash(); GetComponent <ItemDropper>().DropCursedItem(); _oneHealthComController.ComEventTrigger(2, true); } if (_isCerberus && !_isPhoenix) { PlayerController.Instance.Mana.MaxValue += 1; GetComponent <Collider2D>().enabled = false; PlayerController.Instance.RemoveTarget(); gameObject.layer = 1; } if (_isTraveller) { PlayerController.Instance.Mana.MaxValue += 20; if (_deathComController != null) { _deathComController.Instance.TriggerCommunicationEvents(); } //ActionBarUIController.Instance.HideFireboltFlash(); GetComponent <Collider2D>().enabled = false; gameObject.layer = 1; PlayerController.Instance.RemoveTarget(); ActionBarUIController.Instance.HideFireboltFlash(); GetComponent <ItemDropper>().DropCursedItem(); PlayerInformationController.Instance.ReplaceChoice(ChoicesMadeType.Bad); } if (_isPhoenix && _isCerberus) { PlayerController.Instance.Mana.MaxValue += 5; FireboltController[] firebolts = FindObjectsOfType <FireboltController>(); EnemyFireboltController[] enemyFirebolts = FindObjectsOfType <EnemyFireboltController>(); foreach (FireboltController cont in firebolts) { Destroy(cont.gameObject); } foreach (EnemyFireboltController econt in enemyFirebolts) { Destroy(econt.gameObject); } WizardFightController.Instance.RemoveEnemies(); GetComponent <Collider2D>().enabled = false; PlayerController.Instance.RemoveTarget(); gameObject.layer = 1; if (_movePosition != null) { transform.position = _movePosition.position; } if (_deathComController != null) { _deathComController.Instance.TriggerCommunicationEvents(); } } if (_isSerpent) { PlayerController.Instance.Mana.MaxValue += 20; GoodItem item = FindObjectOfType <GoodItem>(); if (item != null) { item.MoveSheepBad(); } else if (_deathComController != null) { _deathComController.Instance.TriggerCommunicationEvents(); PlayerInformationController.Instance.ReplaceChoice(ChoicesMadeType.Bad); } //ActionBarUIController.Instance.HideFireboltFlash(); GetComponent <Collider2D>().enabled = false; gameObject.layer = 1; PlayerController.Instance.RemoveTarget(); ActionBarUIController.Instance.HideFireboltFlash(); ActionBarUIController.Instance.HideCharmFlash(); GetComponent <ItemDropper>().DropCursedItem(); } if (_isPlayer && WizardFightController.Instance == null) { StartCoroutine(RespawnRoutine()); } else if (_isPlayer && WizardFightController.Instance != null) { PlayerController.Instance.RemoveTarget(); PlayerController.Instance.FreezePlayer(); _currentValue = 0; PlayerController.Instance.Mana.CurrentValue = 0; UpdateUI(); PlayerController.Instance.Mana.UpdateUI(); WizardFightController.Instance.ProcessGirlDeath(); } }
// TODO : Add checks for reload // function casting a spell public void CastSpell(string spellName) { if (_activeCheckDatabase[spellName] && _mana.CurrentValue >= _abilitiesDatabase[spellName]._cost && !_reloadingCheckDatabase[spellName]) { GameObject ability = null; switch (spellName) { case "Firebolt": float dist = Vector3.Distance(_currentTarget.position, transform.position); if (dist < _attackDistance) { // TODO: Implement root check if (_isRooted && _currentTarget.GetComponentInParent <Tangler>() == null) // dont fire scenario { } else if ((_isRooted && _currentTarget.GetComponentInParent <Tangler>() && !_currentTarget.GetComponentInParent <Tangler>().IsBunny) || !_isRooted) // fire scenario { ability = (GameObject)Instantiate(_abilitiesDatabase[spellName]._prefab, transform.position, Quaternion.identity); if (ability != null) { UseMana(_abilitiesDatabase[spellName]._cost); FireboltController fireboltController = ability.GetComponent <FireboltController>(); fireboltController._target = _currentTarget; fireboltController.Damage = _abilitiesDatabase[spellName]._damage; ActionBarUIController.Instance.ReloadAbility(0, _abilitiesDatabase[spellName]._reloadTime); StartCoroutine(SpellWaitCoroutine(_abilitiesDatabase[spellName]._reloadTime, spellName)); _fireboltSFX.PlaySfx(); } } } break; case "Invisibility": GameObject[] targetField = GameObject.FindGameObjectsWithTag("EnemyTargetField"); List <EnemyController> targetControllersList = new List <EnemyController>(); if (targetField.Length != 0) { foreach (GameObject target in targetField) { targetControllersList.Add(target.GetComponent <EnemyController>()); } if (targetControllersList.Count != 0) { GetComponent <SpriteRenderer>().color = Color.blue; foreach (EnemyController controller in targetControllersList) { controller.TogglePlayerInvisibility(); } UseMana(_abilitiesDatabase[spellName]._cost); ActionBarUIController.Instance.ReloadAbility(2, _abilitiesDatabase[spellName]._reloadTime); StartCoroutine(InvisibleCoroutine(_abilitiesDatabase[spellName]._damage, _abilitiesDatabase[spellName]._reloadTime, spellName, targetControllersList)); _invisibilitySFX.PlaySfx(); } } else { GetComponent <SpriteRenderer>().color = Color.blue; UseMana(_abilitiesDatabase[spellName]._cost); ActionBarUIController.Instance.ReloadAbility(2, _abilitiesDatabase[spellName]._reloadTime); StartCoroutine(InvisibleCoroutine(_abilitiesDatabase[spellName]._damage, _abilitiesDatabase[spellName]._reloadTime, spellName, null)); _invisibilitySFX.PlaySfx(); } break; case "Haste": UseMana(_abilitiesDatabase[spellName]._cost); _speed *= 2; ActionBarUIController.Instance.ReloadAbility(1, _abilitiesDatabase[spellName]._reloadTime); StartCoroutine(HasteCoroutine(_abilitiesDatabase[spellName]._damage, _abilitiesDatabase[spellName]._reloadTime, spellName)); _hasteSFX.PlaySfx(); break; case "ProtectiveBubble": UseMana(_abilitiesDatabase[spellName]._cost); GetComponent <SpriteRenderer>().color = Color.yellow; _health.ActivateShield(); ActionBarUIController.Instance.ReloadAbility(3, _abilitiesDatabase[spellName]._reloadTime); StartCoroutine(ShieldRoutine(_abilitiesDatabase[spellName]._damage, _abilitiesDatabase[spellName]._reloadTime, spellName)); _bubbleSFX.PlaySfx(); break; case "RemoveRoots": if (_currentTarget != null && _currentTarget.tag == "Roots") { float distance = Vector3.Distance(_currentTarget.position, transform.position); if (distance <= _attackDistance) { Tangler targetTangler = _currentTarget.gameObject.GetComponentInParent <Tangler>(); if (targetTangler.IsBunny && _isRooted) { } else { UseMana(_abilitiesDatabase[spellName]._cost); targetTangler.DestroyRoot(); RemoveTarget(); ActionBarUIController.Instance.ReloadAbility(4, _abilitiesDatabase[spellName]._reloadTime); StartCoroutine(SpellWaitCoroutine(_abilitiesDatabase[spellName]._reloadTime, spellName)); _rootsSFX.PlaySfx(); } } } break; case "WaterFreeze": UseMana(_abilitiesDatabase[spellName]._cost); TransformReference reference = _currentTarget.GetComponentInChildren <TransformReference>(); reference.TransformedObject.SetActive(true); _currentTarget.gameObject.SetActive(false); ActionBarUIController.Instance.ReloadAbility(5, _abilitiesDatabase[spellName]._reloadTime); StartCoroutine(SpellWaitCoroutine(_abilitiesDatabase[spellName]._reloadTime, spellName)); _freezeSFX.PlaySfx(); ActionBarUIController.Instance.HideFreezeFlash(); GoodItem tempItem = FindObjectOfType <GoodItem>(); if (tempItem != null) { ActionBarUIController.Instance.ActivateFireboltFlash(); ActionBarUIController.Instance.ActivateCharmFlash(); } break; case "Charm": if (_currentTarget != null && _currentTarget.tag == "CharmableEnemy" && _currentTarget.GetComponent <Stats>().CurrentValue > 0) { float distance = Vector3.Distance(_currentTarget.position, transform.position); if (distance < _attackDistance) { UseMana(_abilitiesDatabase[spellName]._cost); _currentTarget.gameObject.GetComponent <SpriteRenderer>().color = Color.red; //_currentTarget.tag = "Untagged"; _currentTarget.gameObject.layer = 1; ActionBarUIController.Instance.ReloadAbility(6, _abilitiesDatabase[spellName]._reloadTime); StartCoroutine(CharmRoutine(_abilitiesDatabase[spellName]._damage, _abilitiesDatabase[spellName]._reloadTime, spellName, _currentTarget.gameObject)); _charmSFX.PlaySfx(); RemoveTarget(); // perform logic for charm scene GoodItem item = FindObjectOfType <GoodItem>(); Debug.Log(item); if (item != null) { item.ActivateObject(); ActionBarUIController.Instance.HideCharmFlash(); ActionBarUIController.Instance.HideFireboltFlash(); } } } break; case "Heal": if (_currentTarget != null && _currentTarget.tag == "HealableEnemy" && (_currentTarget.gameObject.GetComponent <Stats>().CurrentValue != _currentTarget.gameObject.GetComponent <Stats>().MaxValue) && (_currentTarget.gameObject.GetComponent <Stats>().CurrentValue != 0) && (!_currentTarget.gameObject.GetComponent <Stats>().OneHealthTrigger)) { float distanceHeal = Vector3.Distance(_currentTarget.position, transform.position); if (distanceHeal <= _attackDistance) { UseMana(_abilitiesDatabase[spellName]._cost); _currentTarget.gameObject.GetComponent <Stats>().AddValue(_abilitiesDatabase[spellName]._damage); ActionBarUIController.Instance.ReloadAbility(7, _abilitiesDatabase[spellName]._reloadTime); StartCoroutine(SpellWaitCoroutine(_abilitiesDatabase[spellName]._reloadTime, spellName)); _healSFX.PlaySfx(); } } else if (_currentTarget == null && (_health.CurrentValue != _health.MaxValue) && _health.CurrentValue != 0) { UseMana(_abilitiesDatabase[spellName]._cost); _health.AddValue(_abilitiesDatabase[spellName]._damage); ActionBarUIController.Instance.ReloadAbility(7, _abilitiesDatabase[spellName]._reloadTime); StartCoroutine(SpellWaitCoroutine(_abilitiesDatabase[spellName]._reloadTime, spellName)); _healSFX.PlaySfx(); } break; default: break; } } else { if (!_activeCheckDatabase[spellName]) { } } }