예제 #1
0
    private void DoSummon(BattleSummonVO _vo, Action _del)
    {
        CreateMoneyTf();

        Hero hero = battle.heroMapDic [_vo.pos];

        HeroBattle heroBattle = AddHeroToMap(hero);

        heroBattle.transform.localScale = Vector3.zero;

        Action <float> toDel = delegate(float obj) {
            float scale = heroScale * obj;

            heroBattle.transform.localScale = new Vector3(scale, scale, scale);
        };

        Action endDel = delegate() {
            SuperTween.Instance.DelayCall(0.5f, _del);
        };

        SuperTween.Instance.To(10, 1, 0.5f, toDel, endDel);

        ClearCards();

        CreateCards();
    }
예제 #2
0
        public void AddToInventory(HeroBattle hero, string itemName)
        {
            if (itemName == null)
            {
                throw new CannotUseNullAsAnItemException();
            }

            var item = ItemResource.GetItemByName(itemName);

            if (item == null)
            {
                throw new CannotFindItemException(itemName);
            }

            if (!CanBeUsedBy(hero, item))
            {
                throw new ItemCannotBeUsedByThisClassException();
            }

            var inventory = hero.Inventory.ToList();

            inventory.Add(item);
            hero.Inventory = inventory.ToArray();
            Save(hero.Name, hero.Inventory);
        }
예제 #3
0
        private void Save(HeroBattle hero, string skillName, string skillKnowledge)
        {
            var sks = GetSkillsFrom(hero.Name);
            var sk  = new SkillKnowledge()
            {
                skill     = skillName,
                knowledge = skillKnowledge
            };

            var skill = sks.Find(s => s.skill.Equals(skillName));

            if (skill == null)
            {
                sks.Add(sk);
            }
            else
            {
                skill.skill     = sk.skill;
                skill.knowledge = sk.knowledge;
            }

            SkillResource.Save(hero.Name, new SkillKnowledgeContainer()
            {
                skills = sks
            });
        }
예제 #4
0
        public static void Attack(HeroBattle hero, Enemy enemy)
        {
            var item = hero.Inventory.FirstOrDefault(it => it.type.Equals(ItemType.Weapon) && it.isEquipped);

            if (item == null)
            {
                throw new CannotFindEquippedItemException();
            }

            var precision = CalculatePrecision(hero, item);
            var dodge     = CalculateDodge(enemy);

            if (precision <= dodge)
            {
                return;
            }

            int attackValue;

            if (item.effect.Contains('-'))
            {
                var effect = item.effect.Split('-');
                var min    = int.Parse(effect[0]);
                var max    = int.Parse(effect[1]);

                attackValue = new Random().Next(min, max) + hero.Level;
            }
            else
            {
                int.TryParse(item.effect, out attackValue);
            }

            enemy.currentHp -= (attackValue - enemy.armor);
        }
예제 #5
0
        private static int CalculatePrecision(HeroBattle hero, Item item)
        {
            var skillPrecision = 0;

            foreach (var skill in hero.Skills)
            {
                if (skill.effect.precision == null)
                {
                    continue;
                }

                int.TryParse(skill.effect.precision, out var aux);
                skillPrecision += aux;
            }

            int weaponPrecision;

            if (item.precision != null)
            {
                int.TryParse(item.precision, out weaponPrecision);
            }
            else
            {
                weaponPrecision = 0;
            }

            var minPrecision = hero.Level;
            var maxPrecision = hero.Level + weaponPrecision;

            return(new Random().Next(minPrecision, maxPrecision) + skillPrecision);
        }
예제 #6
0
        public async Task SetWinner(int winnerId, int battleId)
        {
            HeroBattle heroBattle = _context.HeroBattles
                                    .Where(hb => hb.Hero.Id == winnerId && hb.Battle.Id == battleId).FirstOrDefault();

            heroBattle.HasWon = true;
            await _context.SaveChangesAsync();
        }
예제 #7
0
        public void Save(HeroBattle hero)
        {
            var data = GetStatusFrom(hero.Name);

            data.currentHp = hero.CurrentHp;
            data.xp        = hero.Xp;

            StatusResource.Save(hero.Name, data);
        }
예제 #8
0
    private void AddHeroToMapReal(HeroBattle _heroCard, int _pos)
    {
        MapUnit mapUnit = mapUnitDic [_pos];

        _heroCard.SetFrameVisible(false);

        _heroCard.transform.SetParent(heroContainer, false);

        _heroCard.transform.localPosition = mapUnit.transform.localPosition;

        _heroCard.transform.localScale = new Vector3(heroScale, heroScale, heroScale);
    }
예제 #9
0
    private void DoRush(BattleRushVO _vo, Action _del)
    {
        List <HeroBattle> attackers = new List <HeroBattle> ();

        HeroBattle stander = heroDic [_vo.stander];

        for (int i = 0; i < _vo.attackers.Count; i++)
        {
            attackers.Add(heroDic[_vo.attackers[i]]);
        }

        BattleControl.Instance.Rush(attackers, stander, _vo.damage, _del);
    }
예제 #10
0
    private HeroBattle AddHeroToMap(Hero _hero)
    {
        GameObject go = GameObject.Instantiate <GameObject>(Resources.Load <GameObject>("HeroBattle"));

        HeroBattle hero = go.GetComponent <HeroBattle>();

        heroDic.Add(_hero.pos, hero);

        hero.Init(_hero);

        AddHeroToMapReal(hero, _hero.pos);

        return(hero);
    }
예제 #11
0
    private void SetNowChooseHero(HeroBattle _value, bool _canAction)
    {
        if (_value == null)
        {
            heroDetail.Hide(m_nowChooseHero);
        }
        else
        {
            heroDetail.Show(_value);
        }

        m_nowChooseHero = _value;

        nowChooseHeroCanAction = _canAction;
    }
예제 #12
0
    private void DoPowerChange(BattlePowerChangeVO _vo, Action _del)
    {
        for (int i = 0; i < _vo.pos.Count; i++)
        {
            int pos = _vo.pos[i];

            int powerChange = _vo.powerChange[i];

            bool isDizz = _vo.isDizz[i];

            HeroBattle hero = heroDic[pos];

            hero.RefreshPower();

            string str;

            Color color;

            if (powerChange > 0)
            {
                str = "+" + ((int)(powerChange / 100)).ToString();

                color = Color.blue;
            }
            else
            {
                if (isDizz)
                {
                    str = ((int)(powerChange / 100)).ToString() + "  混乱";
                }
                else
                {
                    str = ((int)(powerChange / 100)).ToString();
                }

                color = Color.yellow;
            }

            if (i == 0)
            {
                hero.ShowHud(str, color, _del);
            }
            else
            {
                hero.ShowHud(str, color, null);
            }
        }
    }
예제 #13
0
    public void Rush(List <HeroBattle> _attackers, HeroBattle _stander, int _damage, Action _callBack)
    {
        bool getHit = false;

        Action <float> moveToDel = delegate(float obj) {
            float value = attackCurve.Evaluate(obj);

            for (int i = 0; i < _attackers.Count; i++)
            {
                HeroBattle attacker = _attackers[i];

                attacker.moveTrans.position = Vector3.LerpUnclamped(attacker.transform.position, _stander.transform.position, value);
            }

            if (!getHit && obj > hitPercent)
            {
                getHit = true;

                if (_damage < 0)
                {
                    List <Vector3> vList = new List <Vector3>();

                    for (int m = 0; m < _attackers.Count; m++)
                    {
                        vList.Add(_attackers[m].transform.position);
                    }

                    _stander.Shock(vList, shockCurve, shockDis, _damage);
                }
            }
        };

        SuperTween.Instance.To(0, 1, 1, moveToDel, null);

        if (_damage < 0)
        {
            SuperTween.Instance.DelayCall(2.5f, _callBack);
        }
        else
        {
            SuperTween.Instance.DelayCall(2.0f, _callBack);
        }
    }
예제 #14
0
        private static int CalculateDodge(HeroBattle hero)
        {
            var dodge = 0;

            foreach (var skill in hero.Skills)
            {
                if (skill.effect.dodge == null)
                {
                    continue;
                }

                int.TryParse(skill.effect.dodge, out var aux);
                dodge += aux;
            }

            var minDodge = hero.Level;
            var maxDodge = hero.Level * 2;

            return(new Random().Next(minDodge, maxDodge) + dodge);
        }
예제 #15
0
    private HeroBattle AddCardToMap(int _cardUid, int _pos)
    {
        int cardID = (battle.clientIsMine ? battle.mHandCards : battle.oHandCards) [_cardUid];

        GameObject go = GameObject.Instantiate <GameObject>(Resources.Load <GameObject>("HeroBattle"));

        HeroBattle hero = go.GetComponent <HeroBattle>();

        summonHeroDic.Add(_pos, hero);

        HeroSDS sds = StaticData.GetData <HeroSDS> (cardID);

        hero.Init(cardID);

        hero.cardUid = _cardUid;

        AddHeroToMapReal(hero, _pos);

        return(hero);
    }
예제 #16
0
    private void DoDie(BattleDeathVO _vo, Action _del)
    {
        for (int i = 0; i < _vo.deads.Count; i++)
        {
            int pos = _vo.deads[i];

            HeroBattle hero = heroDic[pos];

            heroDic.Remove(pos);

            if (i == 0)
            {
                hero.Die(_del);
            }
            else
            {
                hero.Die(null);
            }
        }
    }
예제 #17
0
        public static void Attack(HeroBattle hero, Enemy enemy)
        {
            var precision = CalculatePrecision(enemy);
            var dodge     = CalculateDodge(hero);

            if (precision <= dodge)
            {
                return;
            }

            int attackValue;

            if (enemy.effect.Contains("-"))
            {
                var effect = enemy.effect.Split('-');
                var min    = int.Parse(effect[0]);
                var max    = int.Parse(effect[1]);

                attackValue = new Random().Next(min, max) + enemy.level;
            }
            else
            {
                int.TryParse(enemy.effect, out attackValue);
            }

            var armor = 0;

            foreach (var skill in hero.Skills)
            {
                if (skill.effect.armor == null)
                {
                    continue;
                }

                int.TryParse(skill.effect.armor, out var aux);
                armor += aux;
            }

            hero.CurrentHp -= (attackValue - armor);
        }
예제 #18
0
    private void DoHpChange(BattleHpChangeVO _vo, Action _del)
    {
        for (int i = 0; i < _vo.pos.Count; i++)
        {
            int pos = _vo.pos[i];

            int hpChange = _vo.hpChange[i];

            HeroBattle hero = heroDic[pos];

            hero.RefreshHp();

            string str;

            Color color;

            if (hpChange > 0)
            {
                str = "+" + hpChange.ToString();

                color = Color.green;
            }
            else
            {
                str = hpChange.ToString();

                color = Color.red;
            }

            if (i == 0)
            {
                hero.ShowHud(str, color, _del);
            }
            else
            {
                hero.ShowHud(str, color, null);
            }
        }
    }
예제 #19
0
        public void AddSkill(HeroBattle hero, string skillName, string knowledgeLevel)
        {
            // Verifica se herói tem experiência disponível para adquirir a skill.
            KnowledgeLevel level = null;

            if (knowledgeLevel == null)
            {
                throw new CannotUseNullAsKnowledge();
            }

            if (skillName == null)
            {
                throw new CannotUseNullAsSkillException();
            }

            if (KnowledgeLevel.Assimilate.Name.Equals(knowledgeLevel.ToLower()))
            {
                level = KnowledgeLevel.Assimilate;
            }
            else if (KnowledgeLevel.Learn.Name.Equals(knowledgeLevel.ToLower()))
            {
                level = KnowledgeLevel.Learn;
            }
            else
            {
                throw new CannotFindKnowledgeException();
            }

            if (StatusService.GetPoints(hero.Name) < level.NecessaryPoints)
            {
                throw new NecessaryPointsIsNotEnoughException();
            }

            // Verifica se a skill existe e pode ser usada pela classe do herói.
            var skill = GetSkillByName(skillName);

            if (skill == null)
            {
                throw new CannotFindSkillException(skillName);
            }

            if (!CanBeUsedBy(hero, skill))
            {
                throw new ItemCannotBeUsedByThisClassException();
            }

            // Verifica se o herói já possui a skill
            var skillKnowledge = GetSkillsFrom(hero.Name).FirstOrDefault(sk => sk.skill.Equals(skillName));

            if (skillKnowledge != null)
            {
                if (knowledgeLevel.Equals(skillKnowledge.knowledge))
                {
                    throw new SkillAlreadyLearnedException();
                }

                // não permite assimilar uma skill já aprendida.
                var alreadyLearnedTheSkill = skillKnowledge.knowledge.Equals(KnowledgeLevel.Learn.Name);
                if (alreadyLearnedTheSkill)
                {
                    throw new CannotAddSkillWithLessKnowledgeLevelException();
                }
            }

            // Não permite adicionar a nova skill se não cumprir os requisitos.
            if (skill.requirements != null &&
                hero.Skills.All(s => s.name?.ToLower().Equals(skill.requirements[0]?.ToLower()) == null))
            {
                throw new CannotFindRequiredSkillToAdd(skillName, skill.requirements[0]);
            }

            // Adiciona a skill ao herói.
            var skills = hero.Skills.ToList();

            skills.Add(skill);
            hero.Skills = skills.ToArray();

            StatusService.ConsumeTheNecessaryPoints(hero.Name, level);
            Save(hero, skillName, knowledgeLevel);
        }
예제 #20
0
 private static bool CanBeUsedBy(HeroBattle hero, Skill skill)
 {
     return(skill.usedBy.Any(usedBy => usedBy.Equals(hero.Class.name)));
 }
예제 #21
0
    public void Attack(List <HeroBattle> _attackers, Vector3 _targetPos, HeroBattle _defender, List <HeroBattle> _supporters, int _defenderDamage, List <int> _supportersDamage, List <int> _attackersDamage, Action _callBack)
    {
        Action resetDel;

        if (_supporters.Count > 0)
        {
            Vector3[] supportPos = new Vector3[_supporters.Count];

            for (int i = 0; i < _supporters.Count; i++)
            {
                supportPos[i] = _supporters[i].transform.position;
            }

            Action <float> supportToDel = delegate(float obj) {
                for (int i = 0; i < _supporters.Count; i++)
                {
                    _supporters[i].transform.position = Vector3.Lerp(supportPos[i], _targetPos, obj);
                }
            };

            SuperTween.Instance.To(0, 0.5f, 0.5f, supportToDel, null);

            Action <float> resetToDel = delegate(float obj) {
                for (int i = 0; i < _supporters.Count; i++)
                {
                    _supporters[i].transform.position = Vector3.Lerp(_targetPos, supportPos[i], obj);
                }
            };

            resetDel = delegate() {
                SuperTween.Instance.To(0.5f, 1, 0.5f, resetToDel, null);

                SuperTween.Instance.DelayCall(2, _callBack);
            };
        }
        else
        {
            resetDel = delegate() {
                SuperTween.Instance.DelayCall(1.5f, _callBack);
            };
        }

        List <Vector3> vList = new List <Vector3>();

        for (int m = 0; m < _attackers.Count; m++)
        {
            vList.Add(_attackers[m].transform.position);
        }

        bool getHit = false;

        Action <float> moveToDel = delegate(float obj) {
            float value = attackCurve.Evaluate(obj);

            for (int i = 0; i < _attackers.Count; i++)
            {
                HeroBattle attacker = _attackers[i];

                attacker.moveTrans.position = Vector3.LerpUnclamped(attacker.transform.position, _targetPos, value);
            }

            if (!getHit && obj > hitPercent)
            {
                getHit = true;

                if (_defender != null && _defenderDamage < 0)
                {
                    _defender.Shock(vList, shockCurve, shockDis, _defenderDamage);
                }

                for (int i = 0; i < _attackers.Count; i++)
                {
                    if (_attackersDamage[i] < 0)
                    {
                        _attackers[i].Shock(new List <Vector3>()
                        {
                            _targetPos
                        }, shockCurve, shockDis, _attackersDamage[i]);
                    }
                }

                for (int i = 0; i < _supporters.Count; i++)
                {
                    if (_supportersDamage[i] < 0)
                    {
                        _supporters[i].Shock(vList, shockCurve, shockDis, _supportersDamage[i]);
                    }
                }
            }
        };

        SuperTween.Instance.To(0, 1, 1, moveToDel, resetDel);
    }
예제 #22
0
 private static bool CanBeUsedBy(HeroBattle hero, Item item)
 {
     return(item.usedBy.Any(usedBy => usedBy.Equals(hero.Class.name)));
 }
예제 #23
0
    public void AddPlayer(UInt64 sGUID, int temp, BattleDataType type, int index = 0, int goodsID = 0)
    {
        HeroBattleInfo HeroBattle = null;
        Dictionary <UInt64, HeroBattleInfo> heroBattleDic = GetCamp(sGUID);

        if (heroBattleDic == null)
        {
            return;
        }
        if (!heroBattleDic.TryGetValue(sGUID, out HeroBattle))
        {
            HeroBattle = new HeroBattleInfo();
            SetDic(sGUID, HeroBattle);
        }
        if (!EntityManager.AllEntitys.ContainsKey(sGUID))
        {
            return;
        }
        IEntity sEntity = EntityManager.AllEntitys[sGUID];

        switch (type)
        {
        case BattleDataType.Cp:
            HeroBattle.Cp = temp;
            break;

        case BattleDataType.LastHit:
            HeroBattle.LastHit = temp;
            break;

        case BattleDataType.HeadIcon:
            int id = (int)sEntity.ObjTypeID;
            HeroSelectConfigInfo info = ConfigReader.GetHeroSelectInfo(id);
            HeroBattle.HeadIcon = info.HeroSelectHead;
            break;

        case BattleDataType.NickName:
            HeroBattle.HeroName = temp.ToString();
            break;

        case BattleDataType.Level:
            HeroBattle.Level = temp;
            break;

        case BattleDataType.Kills:
            HeroBattle.Kills = temp;
            break;

        case BattleDataType.Deaths:
            HeroBattle.Deaths = temp;
            break;

        case BattleDataType.Assist:
            HeroBattle.Assist = temp;
            break;

        case BattleDataType.Goods:
            //if (goodsID != 0)
            HeroBattle.AddGoodItem(index, goodsID);
            //else
            //    HeroBattle.DelGoodsItem(index);
            break;
        }
        heroBattleDic[sGUID] = HeroBattle;
    }
예제 #24
0
    public void Shoot(List <HeroBattle> _shooters, HeroBattle _stander, int _damage, Action _callBack)
    {
        GameObject[] arrows = new GameObject[_shooters.Count];

        float[] angles = new float[_shooters.Count];

        for (int i = 0; i < _shooters.Count; i++)
        {
            HeroBattle shooter = _shooters [i];

            float angle = Mathf.Atan2(_stander.transform.position.y - shooter.transform.position.y, _stander.transform.position.x - shooter.transform.position.x);

            angle += Mathf.PI * 0.5f;

            GameObject arrow = GameObject.Instantiate <GameObject> (arrowResources);

            arrow.transform.SetParent(shooter.transform.parent, false);

            arrow.transform.position = shooter.transform.position;

            arrow.SetActive(false);

            arrows[i] = arrow;

            angles[i] = angle;
        }

        Action <float> shootToDel = delegate(float obj) {
            float v = shootCurve.Evaluate(obj);

            for (int i = 0; i < arrows.Length; i++)
            {
                GameObject arrow = arrows[i];

                float angle = angles[i];

                if (!arrow.activeSelf)
                {
                    arrow.SetActive(true);
                }

                Vector3 targetPos = Vector3.Lerp(_shooters[i].transform.position, _stander.transform.position, obj);

                targetPos += new Vector3(Mathf.Cos(angle) * v * shootFix, Mathf.Sin(angle) * v * shootFix, 0);

                (arrow.transform as RectTransform).localEulerAngles = new Vector3(0, 0, Mathf.Atan2(targetPos.y - arrow.transform.position.y, targetPos.x - arrow.transform.position.x) * 180 / Mathf.PI);

                arrow.transform.position = targetPos;
            }
        };

        Action shootOverDel = delegate() {
            for (int i = 0; i < arrows.Length; i++)
            {
                GameObject.Destroy(arrows[i]);
            }

            if (_damage < 0)
            {
                List <Vector3> vList = new List <Vector3>();

                for (int m = 0; m < _shooters.Count; m++)
                {
                    vList.Add(_shooters[m].transform.position);
                }

                _stander.Shock(vList, shockCurve, shockDis, _damage);
            }
        };

        SuperTween.Instance.To(0, 1, 1, shootToDel, shootOverDel);

        if (_damage < 0)
        {
            SuperTween.Instance.DelayCall(3f, _callBack);
        }
        else
        {
            SuperTween.Instance.DelayCall(2f, _callBack);
        }
    }
예제 #25
0
    private void DoMove(BattleMoveVO _vo, Action _del)
    {
        if (_vo.moves.Count > 0)
        {
            List <KeyValuePair <int, int> > tmpList = new List <KeyValuePair <int, int> >();

            List <KeyValuePair <int, int> > tmpList2 = new List <KeyValuePair <int, int> >();

            Dictionary <int, int> .Enumerator enumerator = _vo.moves.GetEnumerator();

            enumerator.MoveNext();

            tmpList.Add(enumerator.Current);

            while (tmpList.Count > 0)
            {
                KeyValuePair <int, int> pair = tmpList[0];

                _vo.moves.Remove(pair.Key);

                tmpList.RemoveAt(0);

                tmpList2.Add(pair);

                if (_vo.moves.ContainsKey(pair.Value))
                {
                    tmpList.Add(new KeyValuePair <int, int>(pair.Value, _vo.moves[pair.Value]));
                }

                if (_vo.moves.ContainsValue(pair.Key))
                {
                    enumerator = _vo.moves.GetEnumerator();

                    while (enumerator.MoveNext())
                    {
                        if (enumerator.Current.Value == pair.Key)
                        {
                            tmpList.Add(enumerator.Current);

                            break;
                        }
                    }
                }
            }

            Dictionary <int, HeroBattle> tmpDic = new Dictionary <int, HeroBattle>();

            for (int i = 0; i < tmpList2.Count; i++)
            {
                KeyValuePair <int, int> pair = tmpList2[i];

                HeroBattle hero = heroDic[pair.Key];

                tmpDic.Add(pair.Key, hero);

                heroDic.Remove(pair.Key);

                Vector3 startPos = mapUnitDic[pair.Key].transform.position;

                Vector3 endPos = mapUnitDic[pair.Value].transform.position;

                Action <float> toDel = delegate(float obj) {
                    hero.transform.position = Vector3.Lerp(startPos, endPos, obj);
                };

                if (i == 0)
                {
                    Action del = delegate() {
                        for (int l = 0; l < tmpList2.Count; l++)
                        {
                            pair = tmpList2[l];

                            heroDic.Add(pair.Value, tmpDic[pair.Key]);

                            int index = pair.Value;

                            MapUnit unit = mapUnitDic[index];

                            SetMapUnitColor(unit);
                        }

                        DoMove(_vo, _del);
                    };

                    SuperTween.Instance.To(0, 1, 1, toDel, del);
                }
                else
                {
                    SuperTween.Instance.To(0, 1, 1, toDel, null);
                }
            }
        }
        else
        {
            _del();
        }
    }
예제 #26
0
    private IEnumerator HeroAttack()
    {
        // definir inimigo
        var index = SelectedEnemyIndex;
        var enemy = _enemies[index];

        // executar regra pré ataque
        ExecuteRule(RuleType.BeforeHeroAttack);

        // definir quem ataca
        var heroes = _heroes.FindAll(h => h.IsPresent);
        var hero   = heroes[_currentHeroIndex];

        // atacar
        var previousHp = enemy.currentHp;

        BattleService.Attack(hero, enemy);

        var currentHp = enemy.currentHp;

        // verificar se causou dano
        var enemyDisplay = EnemyDisplay.Get(_enemies.Count - 1);
        var tagName      = enemyDisplay.ContainerNames[index] + "_" + _enemies.Count;

        var attackValue = previousHp - currentHp;

        if (_strongestAttack < attackValue)
        {
            _strongestAttack = attackValue;
            HeroWhoGaveTheStrongestAttack = hero;
        }

        if (previousHp != currentHp)
        {
            for (var i = 0; i < 5; i++)
            {
                yield return(new WaitForSeconds(0.1f));

                SetColorToGameObject(Color.red, tagName);

                yield return(new WaitForSeconds(0.1f));

                SetColorToGameObject(Color.white, tagName);
            }
        }

        // alterar status da vida
        if (currentHp <= 0)
        {
            enemy.isPresent = false;

            SetColorToGameObject(Color.black, tagName);
        }

        // verificar se existem inimigos vivos
        var thereAreEnemiesAlive = _enemies.Any(e => e.isPresent);

        if (!thereAreEnemiesAlive)
        {
            //TODO: Verificar se toda a equipe ganha xp, mesmo se tiver morrido.
            HeroBattleCalculator.CalculateTheExperienceGained(heroes, _enemies);


            SkillsViewerService.GetInstance().Heroes = _heroes.ConvertAll(h => h.Name).ToArray();
            SceneManager.LoadScene(_currentBattle.whereToGoWhenTheBattleIsOver);
        }

        // executar regra pos ataque
        ExecuteRule(RuleType.AfterHeroAttack);

        var count = heroes.FindAll(h => h.IsPresent).Count;

        // se Existir aliados continuar ataque
        if (_currentHeroIndex + 1 < count)
        {
            _currentHeroIndex++;
            DrawAttackMenu();
            yield break;
        }

        // ir para a próxima fase da batalha
        _currentHeroIndex = 0;
        DrawDefenseMenu();
    }
예제 #27
0
//	public void MapUnitUp(MapUnit _mapUnit){
//
//		if (movingHeroPos != -1) {
//
//			movingHeroPos = -1;
//		}
//	}

    public void MapUnitUpAsButton(MapUnit _mapUnit)
    {
        if (mouseHasExited)
        {
            return;
        }

        if (battle.summon.ContainsValue(_mapUnit.index))
        {
            HeroBattle summonHero = summonHeroDic [_mapUnit.index];

            if (GetNowChooseHero() == null)
            {
                SetNowChooseHero(summonHero, false);

                GetNowChooseHero().SetFrameVisible(true);
            }
            else
            {
                if (GetNowChooseHero() == summonHero)
                {
                    ClearNowChooseHero();

                    UnsummonHero(summonHero.cardUid);
                }
                else
                {
                    ClearNowChooseHero();

                    SetNowChooseHero(summonHero, false);

                    GetNowChooseHero().SetFrameVisible(true);
                }
            }
        }
        else if (battle.heroMapDic.ContainsKey(_mapUnit.index))
        {
            HeroBattle nowHero = heroDic [_mapUnit.index];

            if (GetNowChooseHero() == null)
            {
                SetNowChooseHero(nowHero, nowHero.isMine == battle.clientIsMine);

                GetNowChooseHero().SetFrameVisible(true);
            }
            else
            {
                if (GetNowChooseHero() != nowHero)
                {
                    ClearNowChooseHero();

                    SetNowChooseHero(nowHero, nowHero.isMine == battle.clientIsMine);

                    GetNowChooseHero().SetFrameVisible(true);
                }
            }
        }
        else if (GetNowChooseCard() != null)
        {
            if (battle.GetPosIsMine(_mapUnit.index) == battle.clientIsMine && GetNowChooseCard().sds.cost <= GetMoney())
            {
                SummonHero(GetNowChooseCard().cardUid, _mapUnit.index);
            }
        }
        else
        {
            ClearNowChooseHero();
        }

        ClearNowChooseCard();
    }
예제 #28
0
 public void Attack(HeroBattle hero, Enemy enemy)
 {
     HeroBattleCalculator.Attack(hero, enemy);
 }