Beispiel #1
0
        // 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])
                {
                }
            }
        }