コード例 #1
0
ファイル: Turn.cs プロジェクト: sakseichek/homm
        public Turn(ArrayList characters,
            Heroes.Core.Battle.Heros.Hero attackHero, Hashtable attackArmies,
            Heroes.Core.Battle.Heros.Hero defendHero, Heroes.Core.Battle.Quick.Monster monster, Hashtable defendArmies)
        {
            _characters = characters;
            _attackArmies = attackArmies;
            _defendArmies = defendArmies;

            if (_characters.Count > 0)
            {
                _currentCharacter = (Heroes.Core.Battle.Armies.Army)_characters[0];
                _currentCharacter._isBeginTurn = true;
            }
            else
                _currentCharacter = null;

            _attackHero = attackHero;
            _defendHero = defendHero;
            _monster = monster;

            FindHero();
        }
コード例 #2
0
ファイル: Turn.cs プロジェクト: sakseichek/homm
        public void NextTurn()
        {
            // end current character
            {
                Heroes.Core.Battle.Armies.Army army = (Heroes.Core.Battle.Armies.Army)_currentCharacter;

                if (!army._isWait)
                {
                    _currentCharacter._isBeginTurn = false;
                    _currentCharacter._isEndTurn = true;
                }
            }

            // next character
            {
                Heroes.Core.Battle.Armies.Army army = (Heroes.Core.Battle.Armies.Army)_currentCharacter;

                // get next character
                _currentCharacter = GetNextCharacter();

                // get character start from 0, because of waiting
                if (_currentCharacter == null) _currentCharacter = GetNextCharacter(0);

                // reset turn
                if (_currentCharacter == null)
                {
                    ResetTurn();
                    _currentCharacter = GetNextCharacter(0);
                }

                _currentCharacter._isBeginTurn = true;

                // reset defend
                army._isDefend = false;
            }

            FindHero();

            OnNextTurned();
        }
コード例 #3
0
ファイル: Turn.cs プロジェクト: sakseichek/homm
        private void ResetTurn()
        {
            foreach (Heroes.Core.Battle.Armies.Army character in _characters)
            {
                character._retaliateRemain = character._noOfRetaliate;  // reset noOfRetaliate

                character._isBeginTurn = false;
                character._isEndTurn = false;

                Heroes.Core.Battle.Armies.Army army = (Heroes.Core.Battle.Armies.Army)character;
                army._isWait = false;
            }

            _currentCharacter = null;

            // hero can cast spell per whole turn
            _attackHero._canCastSpell = true;
            if (_defendHero != null)
                _defendHero._canCastSpell = true;
        }
コード例 #4
0
ファイル: BattleCommander.cs プロジェクト: sakseichek/homm
        public BattleCommander(Heroes.Core.Player attackPlayer, Heroes.Core.Hero attackHero, 
            Heroes.Core.Player defendPlayer, Heroes.Core.Hero defendHero, Heroes.Core.Monster monster, bool quickCombat)
        {
            _battleTerrain = new BattleTerrain();

            _attackPlayer = attackPlayer;
            _defendPlayer = defendPlayer;

            {
                _attackHeroOriginal = attackHero;

                _attackHero = new Heroes.Core.Battle.Heros.Hero();
                _attackHero.CopyFrom(attackHero);
                _attackHero._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Attacker;
                _attackHero._spells = attackHero._spells;

                foreach (Heroes.Core.Army army in attackHero._armyKSlots.Values)
                {
                    Heroes.Core.Battle.Armies.Army army2 = new Heroes.Core.Battle.Armies.Army();
                    army2.CopyFrom(army);
                    army2._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Attacker;

                    army2._qtyLeft = army2._qty;
                    army2._healthRemain = army2._health;
                    army2._shotRemain = army2._noOfShot;
                    army2._retaliateRemain = army2._noOfRetaliate;

                    army2._cell = GetCell(army2._armySide, army2._slotNo, army2._isBig);
                    army2._cell._character = army2;

                    _attackHero._armyKSlots.Add(army2._slotNo, army2);
                }

                _attackArmies = _attackHero._armyKSlots;
            }

            _defendHeroOriginal = null;
            _defendHero = null;
            if (defendHero != null)
            {
                _defendHeroOriginal = defendHero;

                _defendHero = new Heroes.Core.Battle.Heros.Hero();
                _defendHero.CopyFrom(defendHero);
                _defendHero._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Defender;
                _defendHero._spells = attackHero._spells;

                foreach (Heroes.Core.Army army in defendHero._armyKSlots.Values)
                {
                    Heroes.Core.Battle.Armies.Army army2 = new Heroes.Core.Battle.Armies.Army();
                    army2.CopyFrom(army);
                    army2._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Defender;

                    army2._qtyLeft = army2._qty;
                    army2._healthRemain = army2._health;
                    army2._shotRemain = army2._noOfShot;
                    army2._retaliateRemain = army2._noOfRetaliate;

                    army2._cell = GetCell(army2._armySide, army2._slotNo, army2._isBig);
                    army2._cell._character = army2;

                    _defendHero._armyKSlots.Add(army2._slotNo, army2);
                }

                _defendArmies = _defendHero._armyKSlots;
            }

            _monsterOriginal = null;
            _monster = null;
            if (monster != null)
            {
                _monsterOriginal = monster;

                _monster = new Heroes.Core.Battle.Quick.Monster();
                _monster.CopyFrom(monster);
                _monster._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Defender;

                foreach (Heroes.Core.Army army in monster._armyKSlots.Values)
                {
                    Heroes.Core.Battle.Armies.Army army2 = new Heroes.Core.Battle.Armies.Army();
                    army2.CopyFrom(army);
                    army2._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Defender;

                    army2._qtyLeft = army2._qty;
                    army2._healthRemain = army2._health;
                    army2._shotRemain = army2._noOfShot;
                    army2._retaliateRemain = army2._noOfRetaliate;

                    army2._cell = GetCell(army2._armySide, army2._slotNo, army2._isBig);
                    army2._cell._character = army2;

                    _monster._armyKSlots.Add(army2._slotNo, army2);
                }

                _defendArmies = _monster._armyKSlots;
            }

            _heroes = new Hashtable();
            _heroes.Add(_attackHero._id, _attackHero);
            if (_defendHero != null) _heroes.Add(_defendHero._id, _defendHero);

            _armies = new ArrayList();
            foreach (Heroes.Core.Army army in _attackArmies.Values)
            {
                _armies.Add(army);
            }
            foreach (Heroes.Core.Army army in _defendArmies.Values)
            {
                _armies.Add(army);
            }

            BattleEngine.SortBySpeed(_armies);

            _quickCombat = quickCombat;

            _turn = new Turn(_armies, _attackHero, _attackArmies, _defendHero, _monster, _defendArmies);
        }