Пример #1
0
        // ユニットのオーラ力レベル
        public double AuraLevel(bool no_limit = false)
        {
            double AuraLevelRet = default;

            switch (CountPilot())
            {
            case 0:
            {
                return(AuraLevelRet);
            }

            case 1:
            {
                AuraLevelRet = MainPilot().SkillLevel("オーラ", ref_mode: "");
                break;
            }

            default:
            {
                // パイロットが2名以上の場合は2人目のオーラ力を加算
                AuraLevelRet = MainPilot().SkillLevel("オーラ", ref_mode: "") + Pilots[1].SkillLevel("オーラ", ref_mode: "") / 2d;
                break;
            }
            }

            // サポートのオーラ力を加算
            if (IsFeatureAvailable("追加サポート"))
            {
                AuraLevelRet = AuraLevelRet + AdditionalSupport().SkillLevel("オーラ", ref_mode: "") / 2d;
            }
            else if (CountSupport() > 0)
            {
                AuraLevelRet = AuraLevelRet + Supports.First().SkillLevel("オーラ", ref_mode: "") / 2d;
            }

            // オーラ変換器レベルによる制限
            if (IsFeatureAvailable("オーラ変換器") && !no_limit)
            {
                if (IsFeatureLevelSpecified("オーラ変換器"))
                {
                    AuraLevelRet = GeneralLib.MinDbl(AuraLevelRet, FeatureLevel("オーラ変換器"));
                }
            }

            return(AuraLevelRet);
        }
Пример #2
0
        // ユニットの同調率
        public double SyncLevel(bool no_limit = false)
        {
            double SyncLevelRet = default;

            if (CountPilot() == 0)
            {
                return(SyncLevelRet);
            }

            SyncLevelRet = MainPilot().SynchroRate();

            // シンクロドライブレベルによる制限
            if (IsFeatureAvailable("シンクロドライブ") && !no_limit)
            {
                if (IsFeatureLevelSpecified("シンクロドライブ"))
                {
                    SyncLevelRet = GeneralLib.MinDbl(SyncLevelRet, FeatureLevel("シンクロドライブ"));
                }
            }

            return(SyncLevelRet);
        }
Пример #3
0
        protected override int ExecInternal()
        {
            if (ArgNum < 2)
            {
                throw new EventErrorException(this, "ColorFilterコマンドの引数の数が違います");
            }
            var late_refresh = false;

            Map.MapDrawIsMapOnly = false;
            var trans_par = 0.5d;

            for (var i = 3; i <= ArgNum; i++)
            {
                var buf = GetArgAsString(i);
                switch (buf ?? "")
                {
                case "非同期":
                {
                    late_refresh = true;
                    break;
                }

                case "マップ限定":
                {
                    Map.MapDrawIsMapOnly = true;
                    break;
                }

                default:
                {
                    if (Strings.Right(buf, 1) == "%" &&
                        Information.IsNumeric(Strings.Left(buf, Strings.Len(buf) - 1)))
                    {
                        trans_par = GeneralLib.MaxDbl(
                            0d,
                            GeneralLib.MinDbl(1d, Conversions.ToDouble(Strings.Left(buf, Strings.Len(buf) - 1)) / 100d));
                    }
                    else
                    {
                        throw new EventErrorException(this, "ColorFilterコマンドに不正なオプション「" + buf + "」が使われています");
                    }

                    break;
                }
                }
            }
            Color filter_color;

            {
                var buf = GetArgAsString(2);

                if (!ColorExtension.TryFromHexString(buf, out filter_color))
                {
                    throw new EventErrorException(this, "ColorFilterコマンドのカラー指定が不正です");
                }
            }

            // マウスカーソルを砂時計に
            GUI.ChangeStatus(GuiStatus.WaitCursor);
            GUI.SetupBackground("フィルタ", "非同期", filter_color, trans_par);
            GUI.RedrawScreen(late_refresh);

            // マウスカーソルを元に戻す
            GUI.ChangeStatus(GuiStatus.Default);

            return(EventData.NextID);
        }