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); }
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); }
// ----- ----- ----- メソッド ----- ----- ----- public WarUnit GetPrototype(WarSide side) { return new WarUnit(_unit, side, _initCommandState, _area); }
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; }
/// <summary> /// 指定した勢力がこの勢力の敵対関係にあるかどうか判定する。 /// </summary> /// <param name="target">判定したい勢力</param> /// <returns>敵対関係にあればtrue、そうでなければfalse</returns> public bool IsOpponent(WarSide target) { return target != this && (Friends == null || !Friends.Contains(target)); }
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; }
/// <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); }