Exemplo n.º 1
0
        public void Initialize()
        {
            // 戦争用データのロード
            var areaFileName = string.Format("BMap_NO{0}", _area.No);
            // TODO: 地形の読み込みは一回だけで良い
            var landformLoader = new LandformLoader(_gamePath);
            landformLoader.Load();
            var warMapLoader = new WarMapLoader(_gamePath);
            var warMap = warMapLoader.Load(areaFileName, 100, 200, 300,
                _conquerInfo.SelectToList(conquer => conquer.Item1));

            // キャラクタのロード
            var friends = new WarSide(true);
            var enemies = new WarSide(false);
            var units = new WarUnitCollection();

            //初期配置の時に必要になるので用意
            var friendUnits = new List<List<WarUnit>>();
            var enemyUnits = new List<WarUnit>();

            WarGlobal.UnitBuilder = new WarUnitBuilder(_gamePath, _units);

            // 味方軍
            foreach (var conquer in _conquerInfo)
            {
                friendUnits.Add(new List<WarUnit>());
                foreach (var unit in conquer.Item2)
                {
                    var warUnit = WarGlobal.UnitBuilder.Create(unit, friends, conquer.Item3);
                    units.AddUnit(warUnit);
                    friendUnits.Last().Add(warUnit);
                }
            }

            //敵軍
            foreach (var unit in _area.Units)
            {
                var warUnit = WarGlobal.UnitBuilder.Create(unit, enemies, _area);
                units.AddUnit(warUnit);
                enemyUnits.Add(warUnit);
            }

            // クラスの初期化
            var situation = new Situation(warMap, new[] { friends, enemies }, units);
            var model = new WarPresentationModel(situation);

            // ウィンドウの表示
            var mainWindow = new MainWindow();
            mainWindow.ShowMapWindow(situation, model);
            mainWindow.Show();

            //PhaseManager関連
            _phaseCreator.CreatePhase(model, friendUnits, enemyUnits, mainWindow);

            // 配置フェーズの開始
            situation.PhaseManager.StartPhase(situation, Phases.DeployUnitPhase);
        }
Exemplo n.º 2
0
 public WarUnit Create(Unit unit, WarSide side, Area area)
 {
     _commands[3] = _skillCommands[unit.SkillIndex];
     var states = GetCommandStateList(_commands);
     return new WarUnit(unit, side, states[0], area);
 }
Exemplo n.º 3
0
 // ----- ----- ----- メソッド ----- ----- -----
 public WarUnit GetPrototype(WarSide side)
 {
     return new WarUnit(_unit, side, _initCommandState, _area);
 }
Exemplo n.º 4
0
 public WarUnit(Unit unit, WarSide warSide, CommandState initState, Area area)
 {
     _unit = unit;
     // ステータスの生成
     CreateStatus();
     // コマンド状態の初期化
     _initCommandState = _commandState = initState;
     _visible = true;
     _unit = unit;
     unit.Acted = true;
     _magicLevels = new ListIndexer<AttackType, byte>(unit.MagicLevel, i => (int)i - (int)AttackType.火);
     _side = warSide;
     _conditions = new ConditionSet(this);
     _area = area;
 }
Exemplo n.º 5
0
 /// <summary>
 /// 指定した勢力がこの勢力の敵対関係にあるかどうか判定する。
 /// </summary>
 /// <param name="target">判定したい勢力</param>
 /// <returns>敵対関係にあればtrue、そうでなければfalse</returns>
 public bool IsOpponent(WarSide target)
 {
     return target != this && (Friends == null || !Friends.Contains(target));
 }
Exemplo n.º 6
0
        private BattleResult checkBattleEnd(Situation situation_, WarSide friends, WarSide enemy)
        {
            var friendMaster = situation_.Units.WarUnits.SingleOrDefault((unit) => { return unit.IsMaster && unit.Side.IsPlayer; });
            if (friendMaster != null && !friendMaster.Alive)
            {
                MessageBox.Show("マスターが死亡しました。あなたの負けです。");
                return BattleResult.Lose;
            }

            var enemyMaster = situation_.Units.WarUnits.SingleOrDefault((unit) => { return unit.IsMaster && !unit.Side.IsPlayer; });
            if (enemyMaster != null && !enemyMaster.Alive)
            {
                MessageBox.Show("相手のマスターを倒しました。あなたの勝ちです。");
                return BattleResult.Win;
            }

            if (checkAnnihilation(situation_, enemy))
            {
                MessageBox.Show("相手を全滅させました。あなたの勝ちです。");
                return BattleResult.Win;
            }

            if (checkAnnihilation(situation_, friends))
            {
                MessageBox.Show("全滅しました。あなたの負けです。");
                return BattleResult.Lose;
            }

            return BattleResult.None;
        }
Exemplo n.º 7
0
 /// <summary>
 /// 指定してWarSideのユニットが全員死亡しているか、退却していればtrue
 /// </summary>
 /// <param name="situation_"></param>
 /// <param name="side"></param>
 /// <returns></returns>
 private bool checkAnnihilation(Situation situation_, WarSide side)
 {
     return situation_.Units.WarUnits.Where(unit => unit.Side == side)
         .All(unit => unit.IsEscaped || !unit.Alive);
 }