Ejemplo n.º 1
0
        /// <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;
        }
Ejemplo n.º 2
0
 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 = "";
     }
 }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
        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;
        }