Esempio n. 1
0
        public bool goodSpellUsing(Spell s, bool enemy, Cell c)
        {
            if (s.getSpellType() == Spell.SpellType.PASSIVE)
            {
            }
            else
            {
                Battle.BattleState bs      = getBS();
                Spell.Target       t       = s.getSpellTarget();
                CellContent        content = c.getContent();
                if (t == Spell.Target.CELL && content != CellContent.STONE || t == Spell.Target.ALL_ENEMY_UNITS ||
                    t == Spell.Target.SELF)
                {
                    return(true);
                }
                return((!enemy || t != Spell.Target.ALLY_UNIT) && (enemy || t != Spell.Target.ENEMY_UNIT));
            }

            return(false);
        }
Esempio n. 2
0
        public void OnCellClick(Position p)
        {
            if (battle.getBattleState() != Battle.BattleState.FIRST_PLAYER_MOVE &&
                battle.getBattleState() != Battle.BattleState.SECOND_PLAYER_MOVE)
            {
                return;
            }

            bool madeMove = false;

            if (activeSpell == -1)
            {
                switch (battle.getMap().getMapCell(p.getX, p.getY).getContent())
                {
                case CellContent.UNIT1:
                    if (battle.getBattleState() == Battle.BattleState.SECOND_PLAYER_MOVE)
                    {
                        BattleUnitsStack b1 = battle.order2.getFirst();
                        BattleUnitsStack b2 = battle.getBUSwithPos(1, p);

                        if (b2 == null)
                        {
                            return;
                        }
                        madeMove = Attack(b1, b2);
                    }
                    else
                    {
                        return;
                    }

                    break;

                case CellContent.UNIT2:
                    if (battle.getBattleState() == Battle.BattleState.FIRST_PLAYER_MOVE)
                    {
                        BattleUnitsStack b1 = battle.order1.getFirst();
                        BattleUnitsStack b2 = battle.getBUSwithPos(2, p);
                        if (b2 == null)
                        {
                            return;
                        }
                        madeMove = Attack(b1, b2);
                    }
                    else
                    {
                        return;
                    }

                    break;

                case CellContent.FREE:
                    BattleUnitsStack b = battle.getBattleState() == Battle.BattleState.FIRST_PLAYER_MOVE
                            ? battle.order1.getFirst()
                            : battle.order2.getFirst();
                    if (battle.getBattleState() == Battle.BattleState.FIRST_PLAYER_MOVE)
                    {
                        var bb = army1.GetComponent <uBattleArmy>().getUBUS(b.getcPos());
                        madeMove = bb.GetComponent <uBattleUnitsStack>().Move(p);
                    }
                    else
                    {
                        var bb = army2.GetComponent <uBattleArmy>().getUBUS(b.getcPos());
                        madeMove = bb.GetComponent <uBattleUnitsStack>().Move(p);
                    }

                    break;

                case CellContent.STONE:
                    return;
                }
            }
            else
            {
                Spell        s = activeBUS.getSpell(activeSpell);
                Spell.Target t = activeBUS.getType().getSpell(activeSpell).getSpellTarget();
                if (s.isSummonBear())
                {
                    madeMove = s.Use(map.GetComponent <uMap>().getCell(p).getPos(), p, gameObject, activeBUS.Count,
                                     getBS() == Battle.BattleState.FIRST_PLAYER_MOVE ? 1 : 2);
                }
                else if (t == Spell.Target.CELL &&
                         !battle.getMap().getMapCell(p.getX, p.getY).gotSpell())
                {
                    madeMove = s.Use(activeBUS.getcPos(), map.GetComponent <uMap>().getCell(p));
                }
                else
                {
                    switch (battle.getMap().getMapCell(p.getX, p.getY).getContent())
                    {
                    case CellContent.FREE:
                        break;

                    case CellContent.UNIT1:
                        uBattleUnitsStack busAtP1 = army1.GetComponent <uBattleArmy>().getUBUS(p)
                                                    .GetComponent <uBattleUnitsStack>();
                        if (getBS() == Battle.BattleState.FIRST_PLAYER_MOVE && t == Spell.Target.ALLY_UNIT)
                        {
                            madeMove = s.Use(activeBUS.getcPos(), busAtP1);
                        }

                        if (getBS() == Battle.BattleState.SECOND_PLAYER_MOVE && t == Spell.Target.ENEMY_UNIT)
                        {
                            madeMove = s.Use(activeBUS.getcPos(), busAtP1);
                        }

                        break;

                    case CellContent.UNIT2:
                        uBattleUnitsStack busAtP2 = army2.GetComponent <uBattleArmy>().getUBUS(p)
                                                    .GetComponent <uBattleUnitsStack>();
                        if (getBS() == Battle.BattleState.SECOND_PLAYER_MOVE && t == Spell.Target.ALLY_UNIT)
                        {
                            madeMove = s.Use(activeBUS.getcPos(), busAtP2);
                        }

                        if (getBS() == Battle.BattleState.FIRST_PLAYER_MOVE && t == Spell.Target.ENEMY_UNIT)
                        {
                            madeMove = s.Use(activeBUS.getcPos(), busAtP2);
                        }

                        break;

                    case CellContent.STONE:
                        break;

                    default:
                        if (t == Spell.Target.ALL_ENEMY_UNITS)
                        {
                            if (getBS() == Battle.BattleState.FIRST_PLAYER_MOVE)
                            {
                                madeMove = s.Use(activeBUS.getcPos(), army1.GetComponent <uBattleArmy>());
                            }
                            else
                            {
                                madeMove = s.Use(activeBUS.getcPos(), army2.GetComponent <uBattleArmy>());
                            }
                        }

                        break;
                    }
                }
            }


            if (madeMove)
            {
                DoDamageFromCells();
                if (getBS() == Battle.BattleState.FIRST_PLAYER_MOVE)
                {
                    battle.order1.NormalMove();
                }
                else
                {
                    battle.order2.NormalMove();
                }

                battle.Refresh();
                CheckForEnd();


                if (getBS() != Battle.BattleState.END)
                {
                    activeSpell = -1;
                    activeBUS   = battle.nextTern();
                    map.GetComponent <uMap>().Recolor();
                    SpellsMenu.GetComponent <BattleMenu>().RefreshSpells(activeBUS);
                }
            }
        }