/// <summary> /// このウインドウを表示する /// </summary> /// <param name="model"></param> /// <param name="doer"></param> /// <param name="finished"></param> /// <param name="index">魔法の属性を示すインデックス値</param> public void Show(WarPresentationModel model, WarUnit doer, Action finished, int index) { Debug.Assert(0 <= index && index <= 5, "予期せぬindex値を受け取りました: " + index); _model = model; var situation = model.Situation; // ボタンの全消去 flowButtonPanel.Controls.Clear(); // ボタンの追加 var magicDatasList = _magicCommands[index, doer.MagicLevels[magicAttributes[index]]]; for (int j = 0; j < magicDatasList.Count; j++) { var magicDatas = magicDatasList[j]; for (int i = 0; i < magicDatas.Count; i++) { var magicData = magicDatas[i]; var arc = new ActionArguments(situation, model); var button = new Button { Enabled = magicData.Action.CanBoot(arc, doer), Text = magicData.Name + (i + 1), }; button.Click += (sender_, e_) => { Visible = false; model.CancelCommandStack.Push(delegate { Visible = true; return true; // キャンセル処理の完了 }); magicData.Action.Boot(arc, doer, finished); }; button.MouseEnter += delegate { PointingMagic = magicData; }; button.MouseLeave += delegate { PointingMagic = null; }; flowButtonPanel.Controls.Add(button); } } SetDetail(null); Text = doer.Name; Visible = true; }
private void SetDetail(WarMagicData command) { if (command != null) { labelLine1.Text = String.Format("{0} 消費MP:{1}", command.Name, command.ExpandMP); labelLine2.Text = command.Description; labelLine3.Text = String.Format("射程:{0} / 範囲:{1}", command.Range, command.Area); } else { labelLine1.Text = ""; labelLine2.Text = ""; labelLine3.Text = ""; } }
private static IList<WarMagicData> CreateSummonMagic(MagicData magic, IList<UnitData> unitDatas, string id) { var name = magic.Name; var description = magic.Description; var cores = magic.Cores; var magicDatas = new List<WarMagicData>(cores.Length); cores.ForEach((core, i) => { // 行為の範囲や対象を設定する var scope = new DefaultScope(core.Range, core.Area, TargetType.NONE); // 消費MPの設定 var consumption = new MPCost(core.MPCost); // 画面効果を設定する var screenEffect = CreateScreenEffect(magic, true); // 行為を設定する var unitData = unitDatas.FirstOrDefault(unit_ => unit_.ID == id + (i + 1)); var action = new SummonAction(scope, consumption, unitData, screenEffect); // 魔法データを作成する var magicData = new WarMagicData(name, description, action, core.MPCost, core.Area, core.Range); magicDatas.Add(magicData); }); return magicDatas; }
private static IList<WarMagicData> CreateAbnormalConditionMagic(MagicData magic, bool isChipEffect, IAbnormalCondition cond, TargetType targetType) { var name = magic.Name; var description = magic.Description; var cores = magic.Cores; var magicDatas = new List<WarMagicData>(cores.Length); foreach (var core in cores) { // 行為の範囲や対象を設定する IScope scope; if (core.Area != 0) scope = new DefaultScope(core.Range, core.Area, targetType); else scope = new WholeScope(targetType); // 画面効果を設定する var screenEffect = CreateScreenEffect(magic, isChipEffect); // 消費MPの設定 var consumption = new MPCost(core.MPCost); // 行為の設定 var action = new GiveAbnormalConditionAction(scope, consumption, screenEffect, cond); // 魔法データを作成する var magicData = new WarMagicData(name, description, action, core.MPCost, core.Area, core.Range); magicDatas.Add(magicData); } return magicDatas; }
private static IList<WarMagicData> CreateMagic(MagicData magic, AttackType type, bool isChipEffect, Func<IScope, MagicCore, AttackType, IScreenEffect, IBattleAction> creator, TargetType targetType) { var name = magic.Name; var description = magic.Description; var cores = magic.Cores; var magicDatas = new List<WarMagicData>(cores.Length); foreach (var core in cores) { // 行為の範囲や対象を設定する IScope scope; if (core.Area != 0) scope = new DefaultScope(core.Range, core.Area, targetType); else scope = new WholeScope(targetType); // 画面効果を設定する var screenEffect = CreateScreenEffect(magic, isChipEffect); // 行為を設定する var action = creator(scope, core, type, screenEffect); // 魔法データを作成する var magicData = new WarMagicData(name, description, action, core.MPCost, core.Area, core.Range); magicDatas.Add(magicData); } return magicDatas; }