Exemple #1
0
 /// <summary>
 ///     支配プロヴィンスのチェック
 /// </summary>
 /// <param name="provinces">プロヴィンスリスト</param>
 private static void CheckControlledProvinces(IEnumerable <Province> provinces)
 {
     foreach (Province province in provinces)
     {
         int id = province.Id;
         ProvinceSettings      ps        = Scenarios.GetProvinceSettings(id);
         IEnumerable <Country> countries = Scenarios.Data.Countries
                                           .Where(settings => settings.OwnedProvinces.Contains(id))
                                           .Select(settings => settings.Country).ToList();
         if (!countries.Any())
         {
             string name = Scenarios.GetProvinceName(province, ps);
             WriteLine("{0}: {1} [{2}]", Resources.CheckResultNoProvinceController, id, name);
             Log.Error("[Scenario] no province controller: {0} [{1}]", id, name);
         }
         else if (countries.Count() > 1)
         {
             string name    = Scenarios.GetProvinceName(province, ps);
             string tagList = Countries.GetTagList(countries);
             WriteLine("{0}: {1} [{2}] - {3}", Resources.CheckResultDuplicatedProvinceController, id, name,
                       tagList);
             Log.Error("[Scenario] duplicated province controller: {0} [{1}] - {2}", id, name, tagList);
         }
     }
 }
Exemple #2
0
    private static void initProvince(ProvinceSettings provSettings)
    {
        map.ToggleProvinceSurface(map.GetProvinceIndex("Spain", provSettings.province), true, new Color(provSettings.initcolor.r / 255f, provSettings.initcolor.g / 255f, provSettings.initcolor.b / 255f), null, true);
        Vector2    barLocation  = map.GetCity(provSettings.city, "Spain").unity2DLocation;
        GameObject provinceBars = (GameObject)Instantiate(Resources.Load("Bar3DSimple"));

        map.AddMarker3DObject(provinceBars, barLocation, 0.5f);
        provinceBars.transform.eulerAngles = new Vector3(0, 0, 0);
        provinceBars.transform.localScale  = new Vector3(0.0005f, 0.0005f, 0.001f);
        provinceBars.transform.position    = new Vector3(provinceBars.transform.position.x, provinceBars.transform.position.y - 0.1f, -3);
    }
        /// <summary>
        ///     テキストボックスのフォーカス移動後の処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnProvinceIntItemTextBoxValidated(object sender, EventArgs e)
        {
            // 選択項目がなければ何もしない
            Province province = GetSelectedProvince();
            if (province == null)
            {
                return;
            }

            TextBox control = sender as TextBox;
            if (control == null)
            {
                return;
            }
            ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag;

            ProvinceSettings settings = Scenarios.GetProvinceSettings(province.Id);

            // 文字列を数値に変換できなければ値を戻す
            int val;
            if (!IntHelper.TryParse(control.Text, out val))
            {
                _controller.UpdateItemValue(control, settings);
                return;
            }

            // 初期値から変更されていなければ何もしない
            if ((settings == null) && (val == 0))
            {
                return;
            }

            // 値に変化がなければ何もしない
            object prev = _controller.GetItemValue(itemId, settings);
            if ((prev != null) && (val == (int) prev))
            {
                return;
            }

            if (settings == null)
            {
                settings = new ProvinceSettings { Id = province.Id };
                Scenarios.AddProvinceSettings(settings);
            }

            _controller.OutputItemValueChangedLog(itemId, val, settings);

            // 値を更新する
            _controller.SetItemValue(itemId, val, settings);

            // 編集済みフラグを設定する
            _controller.SetItemDirty(itemId, settings);

            // 文字色を変更する
            control.ForeColor = Color.Red;

            // 項目値変更後の処理
            _controller.PostItemChanged(itemId, val, settings);
        }
        /// <summary>
        ///     プロヴィンス情報の編集項目を更新する
        /// </summary>
        /// <param name="province">プロヴィンス</param>
        /// <param name="settings">プロヴィンス設定</param>
        private void UpdateProvinceInfoItems(Province province, ProvinceSettings settings)
        {
            _controller.UpdateItemValue(provinceIdTextBox, province);
            _controller.UpdateItemValue(provinceNameKeyTextBox, province, settings);
            _controller.UpdateItemValue(provinceNameStringTextBox, province, settings);
            _controller.UpdateItemValue(vpTextBox, settings);
            _controller.UpdateItemValue(revoltRiskTextBox, settings);

            _controller.UpdateItemColor(provinceNameKeyTextBox, settings);
            _controller.UpdateItemColor(provinceNameStringTextBox, settings);
            _controller.UpdateItemColor(vpTextBox, settings);
            _controller.UpdateItemColor(revoltRiskTextBox, settings);
        }
Exemple #5
0
        /// <summary>
        ///     プロヴィンス設定を構文解析する
        /// </summary>
        /// <param name="lexer">字句解析器</param>
        /// <returns>プロヴィンス設定</returns>
        private static ProvinceSettings ParseProvince(TextLexer lexer)
        {
            // =
            Token token = lexer.GetToken();
            if (token.Type != TokenType.Equal)
            {
                Log.InvalidToken(LogCategory, token, lexer);
                return null;
            }

            // {
            token = lexer.GetToken();
            if (token.Type != TokenType.OpenBrace)
            {
                Log.InvalidToken(LogCategory, token, lexer);
                return null;
            }

            ProvinceSettings province = new ProvinceSettings();
            while (true)
            {
                token = lexer.GetToken();

                // ファイルの終端
                if (token == null)
                {
                    Log.MissingCloseBrace(LogCategory, "province", lexer);
                    break;
                }

                // } (セクション終端)
                if (token.Type == TokenType.CloseBrace)
                {
                    break;
                }

                // 無効なトークン
                if (token.Type != TokenType.Identifier)
                {
                    Log.InvalidToken(LogCategory, token, lexer);
                    lexer.SkipLine();
                    continue;
                }

                string keyword = token.Value as string;
                if (string.IsNullOrEmpty(keyword))
                {
                    continue;
                }
                keyword = keyword.ToLower();

                // id
                if (keyword.Equals("id"))
                {
                    int? n = ParseInt(lexer);
                    if (!n.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "id", lexer);
                        continue;
                    }

                    // プロヴィンスID
                    province.Id = (int) n;
                    continue;
                }

                // ic
                if (keyword.Equals("ic"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "ic", lexer);
                        continue;
                    }

                    // IC
                    province.Ic = size;
                    continue;
                }

                // infra
                if (keyword.Equals("infra"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "infra", lexer);
                        continue;
                    }

                    // インフラ
                    province.Infrastructure = size;
                    continue;
                }

                // landfort
                if (keyword.Equals("landfort"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "landfort", lexer);
                        continue;
                    }

                    // 陸上要塞
                    province.LandFort = size;
                    continue;
                }

                // coastalfort
                if (keyword.Equals("coastalfort"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "coastalfort", lexer);
                        continue;
                    }

                    // 沿岸要塞
                    province.CoastalFort = size;
                    continue;
                }

                // anti_air
                if (keyword.Equals("anti_air"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "anti_air", lexer);
                        continue;
                    }

                    // 対空砲
                    province.AntiAir = size;
                    continue;
                }

                // air_base
                if (keyword.Equals("air_base"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "air_base", lexer);
                        continue;
                    }

                    // 空軍基地
                    province.AirBase = size;
                    continue;
                }

                // naval_base
                if (keyword.Equals("naval_base"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "naval_base", lexer);
                        continue;
                    }

                    // 海軍基地
                    province.NavalBase = size;
                    continue;
                }

                // radar_station
                if (keyword.Equals("radar_station"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "radar_station", lexer);
                        continue;
                    }

                    // レーダー基地
                    province.RadarStation = size;
                    continue;
                }

                // nuclear_reactor
                if (keyword.Equals("nuclear_reactor"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "nuclear_reactor", lexer);
                        continue;
                    }

                    // 原子炉
                    province.NuclearReactor = size;
                    continue;
                }

                // rocket_test
                if (keyword.Equals("rocket_test"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "rocket_test", lexer);
                        continue;
                    }

                    // ロケット試験場
                    province.RocketTest = size;
                    continue;
                }

                // synthetic_oil
                if (keyword.Equals("synthetic_oil"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "synthetic_oil", lexer);
                        continue;
                    }

                    // 合成石油工場
                    province.SyntheticOil = size;
                    continue;
                }

                // synthetic_rares
                if (keyword.Equals("synthetic_rares"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "synthetic_rares", lexer);
                        continue;
                    }

                    // 合成素材工場
                    province.SyntheticRares = size;
                    continue;
                }

                // nuclear_power
                if (keyword.Equals("nuclear_power"))
                {
                    BuildingSize size = ParseSize(lexer);
                    if (size == null)
                    {
                        Log.InvalidSection(LogCategory, "nuclear_power", lexer);
                        continue;
                    }

                    // 原子力発電所
                    province.NuclearPower = size;
                    continue;
                }

                // supplypool
                if (keyword.Equals("supplypool"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "supplypool", lexer);
                        continue;
                    }

                    // 物資の備蓄量
                    province.SupplyPool = (double) d;
                    continue;
                }

                // oilpool
                if (keyword.Equals("oilpool"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "oilpool", lexer);
                        continue;
                    }

                    // 石油の備蓄量
                    province.OilPool = (double) d;
                    continue;
                }

                // energypool
                if (keyword.Equals("energypool"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "energypool", lexer);
                        continue;
                    }

                    // エネルギーの備蓄量
                    province.EnergyPool = (double) d;
                    continue;
                }

                // metalpool
                if (keyword.Equals("metalpool"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "metalpool", lexer);
                        continue;
                    }

                    // 金属の備蓄量
                    province.MetalPool = (double) d;
                    continue;
                }

                // rarematerialspool
                if (keyword.Equals("rarematerialspool"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "rarematerialspool", lexer);
                        continue;
                    }

                    // 希少資源の備蓄量
                    province.RareMaterialsPool = (double) d;
                    continue;
                }

                // energy
                if (keyword.Equals("energy"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "energy", lexer);
                        continue;
                    }

                    // エネルギー産出量
                    province.Energy = (double) d;
                    continue;
                }

                // max_energy
                if (keyword.Equals("max_energy"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "max_energy", lexer);
                        continue;
                    }

                    // 最大エネルギー産出量
                    province.MaxEnergy = (double) d;
                    continue;
                }

                // metal
                if (keyword.Equals("metal"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "metal", lexer);
                        continue;
                    }

                    // 金属産出量
                    province.Metal = (double) d;
                    continue;
                }

                // max_metal
                if (keyword.Equals("max_metal"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "max_metal", lexer);
                        continue;
                    }

                    // 最大金属産出量
                    province.MaxMetal = (double) d;
                    continue;
                }

                // rare_materials
                if (keyword.Equals("rare_materials"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "rare_materials", lexer);
                        continue;
                    }

                    // 希少資源産出量
                    province.RareMaterials = (double) d;
                    continue;
                }

                // max_rare_materials
                if (keyword.Equals("max_rare_materials"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "max_rare_materials", lexer);
                        continue;
                    }

                    // 最大希少資源産出量
                    province.MaxRareMaterials = (double) d;
                    continue;
                }

                // oil
                if (keyword.Equals("oil"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "oil", lexer);
                        continue;
                    }

                    // 石油産出量
                    province.Oil = (double) d;
                    continue;
                }

                // max_oil
                if (keyword.Equals("max_oil"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "max_oil", lexer);
                        continue;
                    }

                    // 最大石油産出量
                    province.MaxOil = (double) d;
                    continue;
                }

                // manpower
                if (keyword.Equals("manpower"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "manpower", lexer);
                        continue;
                    }

                    // 人的資源
                    province.Manpower = (double) d;
                    continue;
                }

                // max_manpower
                if (keyword.Equals("max_manpower"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "max_manpower", lexer);
                        continue;
                    }

                    // 最大人的資源
                    province.MaxManpower = (double) d;
                    continue;
                }

                // points
                if (keyword.Equals("points"))
                {
                    int? n = ParseInt(lexer);
                    if (!n.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "points", lexer);
                        continue;
                    }

                    // 勝利ポイント
                    province.Vp = (int) n;
                    continue;
                }

                // province_revoltrisk
                if (keyword.Equals("province_revoltrisk"))
                {
                    double? d = ParseDouble(lexer);
                    if (!d.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "province_revoltrisk", lexer);
                        continue;
                    }

                    // 反乱率
                    province.RevoltRisk = (double) d;
                    continue;
                }

                // weather
                if (keyword.Equals("weather"))
                {
                    string s = ParseIdentifier(lexer);
                    if (string.IsNullOrEmpty(s))
                    {
                        continue;
                    }
                    s = s.ToLower();

                    if (!Scenarios.WeatherStrings.Contains(s))
                    {
                        Log.InvalidToken(LogCategory, token, lexer);
                        continue;
                    }

                    // 天候
                    province.Weather = (WeatherType) Array.IndexOf(Scenarios.WeatherStrings, s);
                    continue;
                }

                if (Game.Type == GameType.DarkestHour)
                {
                    // name
                    if (keyword.Equals("name"))
                    {
                        string s = ParseStringOrIdentifier(lexer);
                        if (string.IsNullOrEmpty(s))
                        {
                            Log.InvalidClause(LogCategory, "name", lexer);
                            continue;
                        }

                        // プロヴィンス名
                        province.Name = s;
                        continue;
                    }
                }

                // 無効なトークン
                Log.InvalidToken(LogCategory, token, lexer);
                lexer.SkipLine();
            }

            return province;
        }
        /// <summary>
        ///     項目値変更後の処理 - 建物相対値
        /// </summary>
        /// <param name="control1">現在値のコントロール1</param>
        /// <param name="control2">最大値のコントロール2</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="settings">プロヴィンス設定</param>
        private void PostItemChangedBuildingRelative(Control control1, Control control2, object val,
            ProvinceSettings settings)
        {
            // 現在値が0でなければクリアする
            ScenarioEditorItemId itemId1 = (ScenarioEditorItemId) control1.Tag;
            double current = (double) GetItemValue(itemId1, settings);
            if (!DoubleHelper.IsZero(current))
            {
                OutputItemValueChangedLog(itemId1, val, settings);

                // 現在値を0に設定する
                SetItemValue(itemId1, (double) 0, settings);

                // 編集済みフラグを設定する
                SetItemDirty(itemId1, settings);

                // 編集項目の値をクリアする
                control1.Text = "";
            }

            // 最大値が0でなければクリアする
            ScenarioEditorItemId itemId2 = (ScenarioEditorItemId) control2.Tag;
            double max = (double) GetItemValue(itemId2, settings);
            if (!DoubleHelper.IsZero(max))
            {
                OutputItemValueChangedLog(itemId2, val, settings);

                // 最大値を0に設定する
                SetItemValue(itemId2, (double) 0, settings);

                // 編集済みフラグを設定する
                SetItemDirty(itemId2, settings);

                // 編集項目の値をクリアする
                control2.Text = "";
            }
        }
 /// <summary>
 ///     編集項目の値を更新する
 /// </summary>
 /// <param name="control">コントロール</param>
 /// <param name="province">プロヴィンス</param>
 /// <param name="settings">プロヴィンス設定</param>
 public void UpdateItemValue(TextBox control, Province province, ProvinceSettings settings)
 {
     ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag;
     control.Text = ObjectHelper.ToString(GetItemValue(itemId, province, settings));
     switch (itemId)
     {
         case ScenarioEditorItemId.ProvinceNameString:
             // プロヴィンス設定のプロヴィンス名定義がなければ編集不可
             control.ReadOnly = string.IsNullOrEmpty(settings?.Name);
             break;
     }
 }
 /// <summary>
 ///     編集項目の色を更新する
 /// </summary>
 /// <param name="control">コントロール</param>
 /// <param name="settings">プロヴィンス設定</param>
 public void UpdateItemColor(Control control, ProvinceSettings settings)
 {
     ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag;
     control.ForeColor = IsItemDirty(itemId, settings) ? Color.Red : SystemColors.WindowText;
 }
        /// <summary>
        ///     編集項目の編集済みフラグを設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="settings">プロヴィンス設定</param>
        public void SetItemDirty(ScenarioEditorItemId itemId, ProvinceSettings settings)
        {
            settings.SetDirty((ProvinceSettings.ItemId) ItemDirtyFlags[(int) itemId]);
            switch (itemId)
            {
                case ScenarioEditorItemId.ProvinceNameKey:
                case ScenarioEditorItemId.ProvinceManpowerCurrent:
                case ScenarioEditorItemId.ProvinceManpowerMax:
                case ScenarioEditorItemId.ProvinceEnergyCurrent:
                case ScenarioEditorItemId.ProvinceEnergyMax:
                case ScenarioEditorItemId.ProvinceMetalCurrent:
                case ScenarioEditorItemId.ProvinceMetalMax:
                case ScenarioEditorItemId.ProvinceRareMaterialsCurrent:
                case ScenarioEditorItemId.ProvinceRareMaterialsMax:
                case ScenarioEditorItemId.ProvinceOilCurrent:
                case ScenarioEditorItemId.ProvinceOilMax:
                    if (Scenarios.Data.IsBaseProvinceSettings || Scenarios.Data.IsCountryProvinceSettings)
                    {
                        Scenarios.Data.SetDirtyProvinces();
                    }
                    else
                    {
                        Scenarios.Data.SetDirty();
                    }
                    Scenarios.SetDirty();
                    break;

                case ScenarioEditorItemId.ProvinceEnergyPool:
                case ScenarioEditorItemId.ProvinceMetalPool:
                case ScenarioEditorItemId.ProvinceRareMaterialsPool:
                case ScenarioEditorItemId.ProvinceOilPool:
                case ScenarioEditorItemId.ProvinceSupplyPool:
                    if (Scenarios.Data.IsDepotsProvinceSettings || Scenarios.Data.IsBaseProvinceSettings ||
                        Scenarios.Data.IsCountryProvinceSettings)
                    {
                        Scenarios.Data.SetDirtyProvinces();
                    }
                    else
                    {
                        Scenarios.Data.SetDirty();
                    }
                    Scenarios.SetDirty();
                    break;

                case ScenarioEditorItemId.ProvinceIcCurrent:
                case ScenarioEditorItemId.ProvinceIcMax:
                case ScenarioEditorItemId.ProvinceIcRelative:
                case ScenarioEditorItemId.ProvinceInfrastructureCurrent:
                case ScenarioEditorItemId.ProvinceInfrastructureMax:
                case ScenarioEditorItemId.ProvinceInfrastructureRelative:
                case ScenarioEditorItemId.ProvinceLandFortCurrent:
                case ScenarioEditorItemId.ProvinceLandFortMax:
                case ScenarioEditorItemId.ProvinceLandFortRelative:
                case ScenarioEditorItemId.ProvinceCoastalFortCurrent:
                case ScenarioEditorItemId.ProvinceCoastalFortMax:
                case ScenarioEditorItemId.ProvinceCoastalFortRelative:
                case ScenarioEditorItemId.ProvinceAntiAirCurrent:
                case ScenarioEditorItemId.ProvinceAntiAirMax:
                case ScenarioEditorItemId.ProvinceAntiAirRelative:
                case ScenarioEditorItemId.ProvinceAirBaseCurrent:
                case ScenarioEditorItemId.ProvinceAirBaseMax:
                case ScenarioEditorItemId.ProvinceAirBaseRelative:
                case ScenarioEditorItemId.ProvinceNavalBaseCurrent:
                case ScenarioEditorItemId.ProvinceNavalBaseMax:
                case ScenarioEditorItemId.ProvinceNavalBaseRelative:
                case ScenarioEditorItemId.ProvinceRadarStationCurrent:
                case ScenarioEditorItemId.ProvinceRadarStationMax:
                case ScenarioEditorItemId.ProvinceRadarStationRelative:
                case ScenarioEditorItemId.ProvinceNuclearReactorCurrent:
                case ScenarioEditorItemId.ProvinceNuclearReactorMax:
                case ScenarioEditorItemId.ProvinceNuclearReactorRelative:
                case ScenarioEditorItemId.ProvinceRocketTestCurrent:
                case ScenarioEditorItemId.ProvinceRocketTestMax:
                case ScenarioEditorItemId.ProvinceRocketTestRelative:
                case ScenarioEditorItemId.ProvinceSyntheticOilCurrent:
                case ScenarioEditorItemId.ProvinceSyntheticOilMax:
                case ScenarioEditorItemId.ProvinceSyntheticOilRelative:
                case ScenarioEditorItemId.ProvinceSyntheticRaresCurrent:
                case ScenarioEditorItemId.ProvinceSyntheticRaresMax:
                case ScenarioEditorItemId.ProvinceSyntheticRaresRelative:
                case ScenarioEditorItemId.ProvinceNuclearPowerCurrent:
                case ScenarioEditorItemId.ProvinceNuclearPowerMax:
                case ScenarioEditorItemId.ProvinceNuclearPowerRelative:
                case ScenarioEditorItemId.ProvinceRevoltRisk:
                    if (Scenarios.Data.IsBaseDodProvinceSettings || Scenarios.Data.IsBaseProvinceSettings ||
                        Scenarios.Data.IsCountryProvinceSettings)
                    {
                        Scenarios.Data.SetDirtyProvinces();
                    }
                    else
                    {
                        Scenarios.Data.SetDirty();
                    }
                    Scenarios.SetDirty();
                    break;

                case ScenarioEditorItemId.ProvinceVp:
                    if (Scenarios.Data.IsVpProvinceSettings)
                    {
                        Scenarios.Data.SetDirtyVpInc();
                    }
                    else
                    {
                        Scenarios.Data.SetDirty();
                    }
                    Scenarios.SetDirty();
                    break;
            }
        }
Exemple #10
0
        /// <summary>
        ///     depots.incに保存するプロヴィンスデータが存在するかどうかを返す
        /// </summary>
        /// <param name="settings">プロヴィンス設定</param>
        /// <returns>depots.incに保存するデータが存在すればtrueを返す</returns>
        private static bool ExistsDepotsIncData(ProvinceSettings settings)
        {
            if (settings.EnergyPool > 0 ||
                settings.MetalPool > 0 ||
                settings.RareMaterialsPool > 0 ||
                settings.OilPool > 0 ||
                settings.SupplyPool > 0)
            {
                return true;
            }

            return false;
        }
Exemple #11
0
        /// <summary>
        ///     国別.incに保存するプロヴィンスデータが存在するかどうかを返す
        /// </summary>
        /// <param name="settings">プロヴィンス設定</param>
        /// <param name="scenario">シナリオデータ</param>
        /// <returns>bases.incに保存するデータが存在すればtrueを返す</returns>
        private static bool ExistsCountryIncData(ProvinceSettings settings, Scenario scenario)
        {
            if (Game.IsDhFull() && scenario.IsBaseProvinceSettings)
            {
                return false;
            }

            if (!scenario.IsBaseDodProvinceSettings)
            {
                if (settings.Ic != null || settings.Infrastructure != null)
                {
                    return true;
                }
            }

            if (settings.LandFort != null ||
                settings.CoastalFort != null ||
                settings.AntiAir != null ||
                settings.AirBase != null ||
                settings.NavalBase != null ||
                settings.RadarStation != null ||
                settings.NuclearReactor != null ||
                settings.RocketTest != null ||
                settings.SyntheticOil != null ||
                settings.SyntheticRares != null ||
                settings.NuclearPower != null)
            {
                return true;
            }

            if (!scenario.IsDepotsProvinceSettings)
            {
                if (settings.SupplyPool > 0 ||
                    settings.OilPool > 0 ||
                    settings.EnergyPool > 0 ||
                    settings.MetalPool > 0 ||
                    settings.RareMaterialsPool > 0)
                {
                    return true;
                }
            }

            if (settings.RevoltRisk > 0 ||
                settings.Manpower > 0 ||
                settings.MaxManpower > 0 ||
                settings.Energy > 0 ||
                settings.MaxEnergy > 0 ||
                settings.Metal > 0 ||
                settings.MaxMetal > 0 ||
                settings.RareMaterials > 0 ||
                settings.MaxRareMaterials > 0 ||
                settings.Oil > 0 ||
                settings.MaxOil > 0)
            {
                return true;
            }

            if (!string.IsNullOrEmpty(settings.Name))
            {
                return true;
            }

            if (settings.Weather != WeatherType.None)
            {
                return true;
            }

            return false;
        }
Exemple #12
0
 /// <summary>
 ///     bases_DOD.incに保存するプロヴィンスデータが存在するかどうかを返す
 /// </summary>
 /// <param name="settings">プロヴィンス設定</param>
 /// <returns>bases_DOD.incに保存するデータが存在すればtrueを返す</returns>
 private static bool ExistsBasesDodIncData(ProvinceSettings settings)
 {
     return (settings.Ic != null) || (settings.Infrastructure != null);
 }
Exemple #13
0
 /// <summary>
 ///     単一行のプロヴィンス設定を国別incに書き込む
 /// </summary>
 /// <param name="settings">プロヴィンス設定</param>
 /// <param name="scenario">シナリオデータ</param>
 /// <param name="writer">ファイル書き込み用</param>
 private static void WriteCountryProvinceSingleLine(ProvinceSettings settings, Scenario scenario,
     TextWriter writer)
 {
     Province province = Provinces.Items[settings.Id];
     writer.Write("province = {{ id = {0}", settings.Id);
     if (settings.Ic != null)
     {
         writer.Write(" ic = ");
         WriteBuilding(settings.Ic, writer);
     }
     if (settings.Infrastructure != null)
     {
         writer.Write(" infra = ");
         WriteBuilding(settings.Infrastructure, writer);
     }
     if (settings.LandFort != null)
     {
         writer.Write(" landfort = ");
         WriteBuilding(settings.LandFort, writer);
     }
     if (settings.CoastalFort != null)
     {
         writer.Write(" coastalfort = ");
         WriteBuilding(settings.CoastalFort, writer);
     }
     if (settings.AntiAir != null)
     {
         writer.Write(" anti_air = ");
         WriteBuilding(settings.AntiAir, writer);
     }
     if (!scenario.IsBaseProvinceSettings)
     {
         if (settings.AirBase != null)
         {
             writer.Write(" air_base = ");
             WriteBuilding(settings.AirBase, writer);
         }
         if (settings.NavalBase != null)
         {
             writer.Write(" naval_base = ");
             WriteBuilding(settings.NavalBase, writer);
         }
     }
     if (settings.RadarStation != null)
     {
         writer.Write(" radar_station = ");
         WriteBuilding(settings.RadarStation, writer);
     }
     if (settings.NuclearReactor != null)
     {
         writer.Write(" nuclear_reactor = ");
         WriteBuilding(settings.NuclearReactor, writer);
     }
     if (settings.RocketTest != null)
     {
         writer.Write(" rocket_test = ");
         WriteBuilding(settings.RocketTest, writer);
     }
     if (Game.Type == GameType.ArsenalOfDemocracy)
     {
         if (settings.SyntheticOil != null)
         {
             writer.Write(" synthetic_oil = ");
             WriteBuilding(settings.SyntheticOil, writer);
         }
         if (settings.SyntheticRares != null)
         {
             writer.Write(" synthetic_rares = ");
             WriteBuilding(settings.SyntheticRares, writer);
         }
         if (settings.NuclearPower != null)
         {
             writer.Write(" nuclear_power = ");
             WriteBuilding(settings.NuclearPower, writer);
         }
     }
     if (settings.SupplyPool > 0)
     {
         writer.Write(" supplypool = {0}", ObjectHelper.ToString(settings.SupplyPool));
     }
     if (settings.OilPool > 0)
     {
         writer.Write(" oilpool = {0}", ObjectHelper.ToString(settings.OilPool));
     }
     writer.WriteLine(" }} # {0}", Scenarios.GetProvinceName(province, settings));
 }
Exemple #14
0
 /// <summary>
 ///     複数行のプロヴィンス設定を国別incに書き込む
 /// </summary>
 /// <param name="settings">プロヴィンス設定</param>
 /// <param name="scenario">シナリオデータ</param>
 /// <param name="writer">ファイル書き込み用</param>
 private static void WriteCountryProvinceMultiLine(ProvinceSettings settings, Scenario scenario,
     TextWriter writer)
 {
     Province province = Provinces.Items[settings.Id];
     writer.WriteLine("province = {");
     writer.WriteLine("  id = {0} # {1}", settings.Id, Scenarios.GetProvinceName(province, settings));
     if (settings.Ic != null)
     {
         writer.Write("  ic = ");
         WriteBuilding(settings.Ic, writer);
         writer.WriteLine();
     }
     if (settings.Infrastructure != null)
     {
         writer.Write("  infra = ");
         WriteBuilding(settings.Infrastructure, writer);
         writer.WriteLine();
     }
     if (settings.LandFort != null)
     {
         writer.Write("  landfort = ");
         WriteBuilding(settings.LandFort, writer);
         writer.WriteLine();
     }
     if (settings.CoastalFort != null)
     {
         writer.Write("  coastalfort = ");
         WriteBuilding(settings.CoastalFort, writer);
         writer.WriteLine();
     }
     if (settings.AntiAir != null)
     {
         writer.Write("  anti_air = ");
         WriteBuilding(settings.AntiAir, writer);
         writer.WriteLine();
     }
     if (!scenario.IsBaseProvinceSettings)
     {
         if (settings.AirBase != null)
         {
             writer.Write("  air_base = ");
             WriteBuilding(settings.AirBase, writer);
             writer.WriteLine();
         }
         if (settings.NavalBase != null)
         {
             writer.Write("  naval_base = ");
             WriteBuilding(settings.NavalBase, writer);
             writer.WriteLine();
         }
     }
     if (settings.RadarStation != null)
     {
         writer.Write("  radar_station = ");
         WriteBuilding(settings.RadarStation, writer);
         writer.WriteLine();
     }
     if (settings.NuclearReactor != null)
     {
         writer.Write("  nuclear_reactor = ");
         WriteBuilding(settings.NuclearReactor, writer);
         writer.WriteLine();
     }
     if (settings.RocketTest != null)
     {
         writer.Write("  rocket_test = ");
         WriteBuilding(settings.RocketTest, writer);
         writer.WriteLine();
     }
     if (Game.Type == GameType.ArsenalOfDemocracy)
     {
         if (settings.SyntheticOil != null)
         {
             writer.Write("  synthetic_oil = ");
             WriteBuilding(settings.SyntheticOil, writer);
             writer.WriteLine();
         }
         if (settings.SyntheticRares != null)
         {
             writer.Write("  synthetic_rares = ");
             WriteBuilding(settings.SyntheticRares, writer);
             writer.WriteLine();
         }
         if (settings.NuclearPower != null)
         {
             writer.Write("  nuclear_power = ");
             WriteBuilding(settings.NuclearPower, writer);
             writer.WriteLine();
         }
     }
     if (settings.SupplyPool > 0)
     {
         writer.WriteLine("  supplypool = {0}", ObjectHelper.ToString(settings.SupplyPool));
     }
     if (settings.OilPool > 0)
     {
         writer.WriteLine("  oilpool = {0}", ObjectHelper.ToString(settings.OilPool));
     }
     if (settings.EnergyPool > 0)
     {
         writer.WriteLine("  energypool = {0}", ObjectHelper.ToString(settings.EnergyPool));
     }
     if (settings.MetalPool > 0)
     {
         writer.WriteLine("  metalpool = {0}", ObjectHelper.ToString(settings.MetalPool));
     }
     if (settings.RareMaterialsPool > 0)
     {
         writer.WriteLine("  rarematerialspool = {0}", ObjectHelper.ToString(settings.RareMaterialsPool));
     }
     if (settings.Energy > 0)
     {
         writer.WriteLine("  energy = {0}", ObjectHelper.ToString(settings.Energy));
     }
     if (settings.MaxEnergy > 0)
     {
         writer.WriteLine("  max_energy = {0}", ObjectHelper.ToString(settings.MaxEnergy));
     }
     if (settings.Metal > 0)
     {
         writer.WriteLine("  metal = {0}", ObjectHelper.ToString(settings.Metal));
     }
     if (settings.MaxMetal > 0)
     {
         writer.WriteLine("  max_metal = {0}", ObjectHelper.ToString(settings.MaxMetal));
     }
     if (settings.RareMaterials > 0)
     {
         writer.WriteLine("  rare_materials = {0}", ObjectHelper.ToString(settings.RareMaterials));
     }
     if (settings.MaxRareMaterials > 0)
     {
         writer.WriteLine("  max_rare_materials = {0}", ObjectHelper.ToString(settings.MaxRareMaterials));
     }
     if (settings.Oil > 0)
     {
         writer.WriteLine("  oil = {0}", ObjectHelper.ToString(settings.Oil));
     }
     if (settings.MaxOil > 0)
     {
         writer.WriteLine("  max_oil = {0}", ObjectHelper.ToString(settings.MaxOil));
     }
     if (settings.Manpower > 0)
     {
         writer.WriteLine("  manpower = {0}", ObjectHelper.ToString(settings.Manpower));
     }
     if (settings.MaxManpower > 0)
     {
         writer.WriteLine("  max_manpower = {0}", ObjectHelper.ToString(settings.MaxManpower));
     }
     if (settings.RevoltRisk > 0)
     {
         writer.WriteLine("  province_revoltrisk = {0}", ObjectHelper.ToString(settings.RevoltRisk));
     }
     if (!string.IsNullOrEmpty(settings.Name))
     {
         writer.WriteLine("  name = {0} ", settings.Name);
     }
     if (settings.Weather != WeatherType.None)
     {
         writer.WriteLine("  weather = {0}", Scenarios.WeatherStrings[(int) settings.Weather]);
     }
     writer.WriteLine("}");
 }
Exemple #15
0
 /// <summary>
 ///     プロヴィンス設定を国別incに書き込む
 /// </summary>
 /// <param name="settings">プロヴィンス設定</param>
 /// <param name="scenario">シナリオデータ</param>
 /// <param name="writer">ファイル書き込み用</param>
 private static void WriteCountryProvince(ProvinceSettings settings, Scenario scenario, TextWriter writer)
 {
     if (IsProvinceSingleLine(settings))
     {
         WriteCountryProvinceSingleLine(settings, scenario, writer);
     }
     else
     {
         WriteCountryProvinceMultiLine(settings, scenario, writer);
     }
 }
Exemple #16
0
 /// <summary>
 ///     プロヴィンス名を取得する
 /// </summary>
 /// <param name="province">プロヴィンス</param>
 /// <param name="settings">プロヴィンス設定</param>
 /// <returns>プロヴィンス名</returns>
 public static string GetProvinceName(Province province, ProvinceSettings settings)
 {
     if (!string.IsNullOrEmpty(settings?.Name))
     {
         return Config.ExistsKey(settings.Name) ? Config.GetText(settings.Name) : "";
     }
     return province.GetName();
 }
        /// <summary>
        ///     項目変更前の処理
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="settings">プロヴィンス設定</param>
        public void PreItemChanged(ScenarioEditorItemId itemId, ProvinceSettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.ProvinceIcCurrent:
                case ScenarioEditorItemId.ProvinceIcMax:
                case ScenarioEditorItemId.ProvinceIcRelative:
                    if (settings.Ic == null)
                    {
                        settings.Ic = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureCurrent:
                case ScenarioEditorItemId.ProvinceInfrastructureMax:
                case ScenarioEditorItemId.ProvinceInfrastructureRelative:
                    if (settings.Infrastructure == null)
                    {
                        settings.Infrastructure = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceLandFortCurrent:
                case ScenarioEditorItemId.ProvinceLandFortMax:
                case ScenarioEditorItemId.ProvinceLandFortRelative:
                    if (settings.LandFort == null)
                    {
                        settings.LandFort = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortCurrent:
                case ScenarioEditorItemId.ProvinceCoastalFortMax:
                case ScenarioEditorItemId.ProvinceCoastalFortRelative:
                    if (settings.CoastalFort == null)
                    {
                        settings.CoastalFort = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirCurrent:
                case ScenarioEditorItemId.ProvinceAntiAirMax:
                case ScenarioEditorItemId.ProvinceAntiAirRelative:
                    if (settings.AntiAir == null)
                    {
                        settings.AntiAir = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseCurrent:
                case ScenarioEditorItemId.ProvinceAirBaseMax:
                case ScenarioEditorItemId.ProvinceAirBaseRelative:
                    if (settings.AirBase == null)
                    {
                        settings.AirBase = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseCurrent:
                case ScenarioEditorItemId.ProvinceNavalBaseMax:
                case ScenarioEditorItemId.ProvinceNavalBaseRelative:
                    if (settings.NavalBase == null)
                    {
                        settings.NavalBase = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationCurrent:
                case ScenarioEditorItemId.ProvinceRadarStationMax:
                case ScenarioEditorItemId.ProvinceRadarStationRelative:
                    if (settings.RadarStation == null)
                    {
                        settings.RadarStation = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorCurrent:
                case ScenarioEditorItemId.ProvinceNuclearReactorMax:
                case ScenarioEditorItemId.ProvinceNuclearReactorRelative:
                    if (settings.NuclearReactor == null)
                    {
                        settings.NuclearReactor = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestCurrent:
                case ScenarioEditorItemId.ProvinceRocketTestMax:
                case ScenarioEditorItemId.ProvinceRocketTestRelative:
                    if (settings.RocketTest == null)
                    {
                        settings.RocketTest = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilCurrent:
                case ScenarioEditorItemId.ProvinceSyntheticOilMax:
                case ScenarioEditorItemId.ProvinceSyntheticOilRelative:
                    if (settings.SyntheticOil == null)
                    {
                        settings.SyntheticOil = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresCurrent:
                case ScenarioEditorItemId.ProvinceSyntheticRaresMax:
                case ScenarioEditorItemId.ProvinceSyntheticRaresRelative:
                    if (settings.SyntheticRares == null)
                    {
                        settings.SyntheticRares = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerCurrent:
                case ScenarioEditorItemId.ProvinceNuclearPowerMax:
                case ScenarioEditorItemId.ProvinceNuclearPowerRelative:
                    if (settings.NuclearPower == null)
                    {
                        settings.NuclearPower = new BuildingSize();
                    }
                    break;
            }
        }
Exemple #18
0
        /// <summary>
        ///     プロヴィンス設定が単一行で記載できるかどうかを返す
        /// </summary>
        /// <param name="settings">プロヴィンス設定</param>
        /// <returns>単一行で記載できればtrueを返す</returns>
        private static bool IsProvinceSingleLine(ProvinceSettings settings)
        {
            if ((settings.Ic != null && settings.Ic.MaxSize > 0) ||
                (settings.Infrastructure != null && settings.Infrastructure.MaxSize > 0) ||
                (settings.LandFort != null && settings.LandFort.MaxSize > 0) ||
                (settings.CoastalFort != null && settings.CoastalFort.MaxSize > 0) ||
                (settings.AntiAir != null && settings.AntiAir.MaxSize > 0) ||
                (settings.AirBase != null && settings.AirBase.MaxSize > 0) ||
                (settings.NavalBase != null && settings.NavalBase.MaxSize > 0) ||
                (settings.RadarStation != null && settings.RadarStation.MaxSize > 0) ||
                (settings.NuclearReactor != null && settings.NuclearReactor.MaxSize > 0) ||
                (settings.RocketTest != null && settings.RocketTest.MaxSize > 0) ||
                (settings.SyntheticOil != null && settings.SyntheticOil.MaxSize > 0) ||
                (settings.SyntheticRares != null && settings.SyntheticRares.MaxSize > 0) ||
                (settings.NuclearPower != null && settings.NuclearPower.MaxSize > 0))
            {
                return false;
            }

            if (settings.EnergyPool > 0 ||
                settings.MetalPool > 0 ||
                settings.RareMaterialsPool > 0 ||
                settings.Energy > 0 ||
                settings.MaxEnergy > 0 ||
                settings.Metal > 0 ||
                settings.MaxMetal > 0 ||
                settings.RareMaterials > 0 ||
                settings.MaxRareMaterials > 0 ||
                settings.Oil > 0 ||
                settings.MaxOil > 0 ||
                settings.Manpower > 0 ||
                settings.MaxManpower > 0 ||
                settings.RevoltRisk > 0)
            {
                return false;
            }

            if (!string.IsNullOrEmpty(settings.Name))
            {
                return false;
            }

            if (settings.Weather != WeatherType.None)
            {
                return false;
            }

            return true;
        }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="settings">プロヴィンス設定</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, ProvinceSettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.ProvinceNameKey:
                    settings.Name = (string) val;
                    break;

                case ScenarioEditorItemId.ProvinceNameString:
                    Config.SetText(settings.Name, (string) val, Game.ProvinceTextFileName);
                    break;

                case ScenarioEditorItemId.ProvinceVp:
                    settings.Vp = (int) val;
                    break;

                case ScenarioEditorItemId.ProvinceRevoltRisk:
                    settings.RevoltRisk = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceManpowerCurrent:
                    settings.Manpower = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceManpowerMax:
                    settings.MaxManpower = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceEnergyPool:
                    settings.EnergyPool = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceEnergyCurrent:
                    settings.Energy = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceEnergyMax:
                    settings.MaxEnergy = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceMetalPool:
                    settings.MetalPool = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceMetalCurrent:
                    settings.Metal = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceMetalMax:
                    settings.MaxMetal = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRareMaterialsPool:
                    settings.RareMaterialsPool = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRareMaterialsCurrent:
                    settings.RareMaterials = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRareMaterialsMax:
                    settings.MaxRareMaterials = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceOilPool:
                    settings.OilPool = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceOilCurrent:
                    settings.Oil = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceOilMax:
                    settings.MaxOil = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSupplyPool:
                    settings.SupplyPool = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceIcCurrent:
                    settings.Ic.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceIcMax:
                    settings.Ic.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceIcRelative:
                    settings.Ic.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureCurrent:
                    settings.Infrastructure.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureMax:
                    settings.Infrastructure.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureRelative:
                    settings.Infrastructure.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceLandFortCurrent:
                    settings.LandFort.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceLandFortMax:
                    settings.LandFort.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceLandFortRelative:
                    settings.LandFort.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortCurrent:
                    settings.CoastalFort.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortMax:
                    settings.CoastalFort.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortRelative:
                    settings.CoastalFort.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirCurrent:
                    settings.AntiAir.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirMax:
                    settings.AntiAir.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirRelative:
                    settings.AntiAir.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseCurrent:
                    settings.AirBase.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseMax:
                    settings.AirBase.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseRelative:
                    settings.AirBase.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseCurrent:
                    settings.NavalBase.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseMax:
                    settings.NavalBase.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseRelative:
                    settings.NavalBase.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationCurrent:
                    settings.RadarStation.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationMax:
                    settings.RadarStation.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationRelative:
                    settings.RadarStation.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorCurrent:
                    settings.NuclearReactor.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorMax:
                    settings.NuclearReactor.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorRelative:
                    settings.NuclearReactor.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestCurrent:
                    settings.RocketTest.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestMax:
                    settings.RocketTest.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestRelative:
                    settings.RocketTest.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilCurrent:
                    settings.SyntheticOil.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilMax:
                    settings.SyntheticOil.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilRelative:
                    settings.SyntheticOil.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresCurrent:
                    settings.SyntheticRares.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresMax:
                    settings.SyntheticRares.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresRelative:
                    settings.SyntheticRares.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerCurrent:
                    settings.NuclearPower.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerMax:
                    settings.NuclearPower.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerRelative:
                    settings.NuclearPower.Size = (double) val;
                    break;
            }
        }
        /// <summary>
        ///     編集項目の値を取得する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="settings">プロヴィンス設定</param>
        /// <returns>編集項目の値</returns>
        public object GetItemValue(ScenarioEditorItemId itemId, ProvinceSettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.ProvinceVp:
                    return settings?.Vp ?? 0;

                case ScenarioEditorItemId.ProvinceRevoltRisk:
                    return settings?.RevoltRisk ?? 0;

                case ScenarioEditorItemId.ProvinceManpowerCurrent:
                    return settings?.Manpower ?? 0;

                case ScenarioEditorItemId.ProvinceManpowerMax:
                    return settings?.MaxManpower ?? 0;

                case ScenarioEditorItemId.ProvinceEnergyPool:
                    return settings?.EnergyPool ?? 0;

                case ScenarioEditorItemId.ProvinceEnergyCurrent:
                    return settings?.Energy ?? 0;

                case ScenarioEditorItemId.ProvinceEnergyMax:
                    return settings?.MaxEnergy ?? 0;

                case ScenarioEditorItemId.ProvinceMetalPool:
                    return settings?.MetalPool ?? 0;

                case ScenarioEditorItemId.ProvinceMetalCurrent:
                    return settings?.Metal ?? 0;

                case ScenarioEditorItemId.ProvinceMetalMax:
                    return settings?.MaxMetal ?? 0;

                case ScenarioEditorItemId.ProvinceRareMaterialsPool:
                    return settings?.RareMaterialsPool ?? 0;

                case ScenarioEditorItemId.ProvinceRareMaterialsCurrent:
                    return settings?.RareMaterials ?? 0;

                case ScenarioEditorItemId.ProvinceRareMaterialsMax:
                    return settings?.MaxRareMaterials ?? 0;

                case ScenarioEditorItemId.ProvinceOilPool:
                    return settings?.OilPool ?? 0;

                case ScenarioEditorItemId.ProvinceOilCurrent:
                    return settings?.Oil ?? 0;

                case ScenarioEditorItemId.ProvinceOilMax:
                    return settings?.MaxOil ?? 0;

                case ScenarioEditorItemId.ProvinceSupplyPool:
                    return settings?.SupplyPool ?? 0;

                case ScenarioEditorItemId.ProvinceIcCurrent:
                    return settings?.Ic?.CurrentSize;

                case ScenarioEditorItemId.ProvinceIcMax:
                    return settings?.Ic?.MaxSize;

                case ScenarioEditorItemId.ProvinceIcRelative:
                    return settings?.Ic?.Size;

                case ScenarioEditorItemId.ProvinceInfrastructureCurrent:
                    return settings?.Infrastructure?.CurrentSize;

                case ScenarioEditorItemId.ProvinceInfrastructureMax:
                    return settings?.Infrastructure?.MaxSize;

                case ScenarioEditorItemId.ProvinceInfrastructureRelative:
                    return settings?.Infrastructure?.Size;

                case ScenarioEditorItemId.ProvinceLandFortCurrent:
                    return settings?.LandFort?.CurrentSize;

                case ScenarioEditorItemId.ProvinceLandFortMax:
                    return settings?.LandFort?.MaxSize;

                case ScenarioEditorItemId.ProvinceLandFortRelative:
                    return settings?.LandFort?.Size;

                case ScenarioEditorItemId.ProvinceCoastalFortCurrent:
                    return settings?.CoastalFort?.CurrentSize;

                case ScenarioEditorItemId.ProvinceCoastalFortMax:
                    return settings?.CoastalFort?.MaxSize;

                case ScenarioEditorItemId.ProvinceCoastalFortRelative:
                    return settings?.CoastalFort?.Size;

                case ScenarioEditorItemId.ProvinceAntiAirCurrent:
                    return settings?.AntiAir?.CurrentSize;

                case ScenarioEditorItemId.ProvinceAntiAirMax:
                    return settings?.AntiAir?.MaxSize;

                case ScenarioEditorItemId.ProvinceAntiAirRelative:
                    return settings?.AntiAir?.Size;

                case ScenarioEditorItemId.ProvinceAirBaseCurrent:
                    return settings?.AirBase?.CurrentSize;

                case ScenarioEditorItemId.ProvinceAirBaseMax:
                    return settings?.AirBase?.MaxSize;

                case ScenarioEditorItemId.ProvinceAirBaseRelative:
                    return settings?.AirBase?.Size;

                case ScenarioEditorItemId.ProvinceNavalBaseCurrent:
                    return settings?.NavalBase?.CurrentSize;

                case ScenarioEditorItemId.ProvinceNavalBaseMax:
                    return settings?.NavalBase?.MaxSize;

                case ScenarioEditorItemId.ProvinceNavalBaseRelative:
                    return settings?.NavalBase?.Size;

                case ScenarioEditorItemId.ProvinceRadarStationCurrent:
                    return settings?.RadarStation?.CurrentSize;

                case ScenarioEditorItemId.ProvinceRadarStationMax:
                    return settings?.RadarStation?.MaxSize;

                case ScenarioEditorItemId.ProvinceRadarStationRelative:
                    return settings?.RadarStation?.Size;

                case ScenarioEditorItemId.ProvinceNuclearReactorCurrent:
                    return settings?.NuclearReactor?.CurrentSize;

                case ScenarioEditorItemId.ProvinceNuclearReactorMax:
                    return settings?.NuclearReactor?.MaxSize;

                case ScenarioEditorItemId.ProvinceNuclearReactorRelative:
                    return settings?.NuclearReactor?.Size;

                case ScenarioEditorItemId.ProvinceRocketTestCurrent:
                    return settings?.RocketTest?.CurrentSize;

                case ScenarioEditorItemId.ProvinceRocketTestMax:
                    return settings?.RocketTest?.MaxSize;

                case ScenarioEditorItemId.ProvinceRocketTestRelative:
                    return settings?.RocketTest?.Size;

                case ScenarioEditorItemId.ProvinceSyntheticOilCurrent:
                    return settings?.SyntheticOil?.CurrentSize;

                case ScenarioEditorItemId.ProvinceSyntheticOilMax:
                    return settings?.SyntheticOil?.MaxSize;

                case ScenarioEditorItemId.ProvinceSyntheticOilRelative:
                    return settings?.SyntheticOil?.Size;

                case ScenarioEditorItemId.ProvinceSyntheticRaresCurrent:
                    return settings?.SyntheticRares?.CurrentSize;

                case ScenarioEditorItemId.ProvinceSyntheticRaresMax:
                    return settings?.SyntheticRares?.MaxSize;

                case ScenarioEditorItemId.ProvinceSyntheticRaresRelative:
                    return settings?.SyntheticRares?.Size;

                case ScenarioEditorItemId.ProvinceNuclearPowerCurrent:
                    return settings?.NuclearPower?.CurrentSize;

                case ScenarioEditorItemId.ProvinceNuclearPowerMax:
                    return settings?.NuclearPower?.MaxSize;

                case ScenarioEditorItemId.ProvinceNuclearPowerRelative:
                    return settings?.NuclearPower?.Size;
            }

            return null;
        }
 /// <summary>
 ///     編集項目の値を更新する
 /// </summary>
 /// <param name="control">コントロール</param>
 /// <param name="settings">プロヴィンス設定</param>
 public void UpdateItemValue(Control control, ProvinceSettings settings)
 {
     ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag;
     control.Text = ObjectHelper.ToString(GetItemValue(itemId, settings));
 }
        /// <summary>
        ///     編集項目の値を取得する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="province">プロヴィンス</param>
        /// <param name="settings">プロヴィンス設定</param>
        /// <returns>編集項目の値</returns>
        public object GetItemValue(ScenarioEditorItemId itemId, Province province, ProvinceSettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.ProvinceNameKey:
                    return !string.IsNullOrEmpty(settings?.Name) ? settings.Name : "";

                case ScenarioEditorItemId.ProvinceNameString:
                    return Scenarios.GetProvinceName(province, settings);
            }

            return null;
        }
        /// <summary>
        ///     項目値変更後の処理 - 建物最大値
        /// </summary>
        /// <param name="control1">現在値のコントロール1</param>
        /// <param name="control2">相対値のコントロール2</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="settings">プロヴィンス設定</param>
        private void PostItemChangedBuildingMax(Control control1, Control control2, object val,
            ProvinceSettings settings)
        {
            // 相対値が0でなければクリアする
            ScenarioEditorItemId itemId2 = (ScenarioEditorItemId) control2.Tag;
            double relative = (double) GetItemValue(itemId2, settings);
            if (!DoubleHelper.IsZero(relative))
            {
                OutputItemValueChangedLog(itemId2, val, settings);

                // 相対値を0に設定する
                SetItemValue(itemId2, (double) 0, settings);

                // 編集済みフラグを設定する
                SetItemDirty(itemId2, settings);

                // 編集項目の値をクリアする
                control2.Text = "";
            }

            // 最大値が現在値以上ならば何もしない
            ScenarioEditorItemId itemId1 = (ScenarioEditorItemId) control1.Tag;
            double current = (double) GetItemValue(itemId1, settings);
            if (DoubleHelper.IsGreaterOrEqual((double) val, current))
            {
                return;
            }

            OutputItemValueChangedLog(itemId1, val, settings);

            // 現在値を最大値で更新する
            SetItemValue(itemId1, val, settings);

            // 編集済みフラグを設定する
            SetItemDirty(itemId1, settings);

            // 編集項目の値を更新する
            control1.Text = DoubleHelper.ToString((double) val);

            // 編集項目の色を更新する
            control1.ForeColor = Color.Red;
        }
 /// <summary>
 ///     編集項目の編集済みフラグを取得する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="settings">プロヴィンス設定</param>
 /// <returns>編集済みフラグ</returns>
 public bool IsItemDirty(ScenarioEditorItemId itemId, ProvinceSettings settings)
 {
     return (settings != null) && settings.IsDirty((ProvinceSettings.ItemId) ItemDirtyFlags[(int) itemId]);
 }
        /// <summary>
        ///     項目値変更後の処理 - 資源最大値
        /// </summary>
        /// <param name="control">現在値のコントロール</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="settings">プロヴィンス設定</param>
        private void PostItemChangedResourceMax(Control control, object val, ProvinceSettings settings)
        {
            // 最大値が現在値以上ならば何もしない
            ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag;
            double current = (double) GetItemValue(itemId, settings);
            if (DoubleHelper.IsGreaterOrEqual((double) val, current))
            {
                return;
            }

            OutputItemValueChangedLog(itemId, val, settings);

            // 現在値を最大値で更新する
            SetItemValue(itemId, val, settings);

            // 編集済みフラグを設定する
            SetItemDirty(itemId, settings);

            // 編集項目の値を更新する
            control.Text = DoubleHelper.ToString((double) val);

            // 編集項目の色を更新する
            control.ForeColor = Color.Red;
        }
 /// <summary>
 ///     編集項目の値変更時のログを出力する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="val">編集項目の値</param>
 /// <param name="province">プロヴィンス</param>
 /// <param name="settings">プロヴィンス設定</param>
 public void OutputItemValueChangedLog(ScenarioEditorItemId itemId, object val, Province province,
     ProvinceSettings settings)
 {
     switch (itemId)
     {
         case ScenarioEditorItemId.ProvinceNameKey:
         case ScenarioEditorItemId.ProvinceNameString:
             Log.Info("[Scenario] {0}: {1} -> {2} ({3})", ItemStrings[(int) itemId],
                 GetItemValue(itemId, province, settings), val, province.Id);
             break;
     }
 }
        /// <summary>
        ///     プロヴィンス建物情報の編集項目を更新する
        /// </summary>
        /// <param name="settings">プロヴィンス設定</param>
        private void UpdateProvinceBuildingItems(ProvinceSettings settings)
        {
            _controller.UpdateItemValue(icCurrentTextBox, settings);
            _controller.UpdateItemValue(icMaxTextBox, settings);
            _controller.UpdateItemValue(icRelativeTextBox, settings);
            _controller.UpdateItemValue(infrastructureCurrentTextBox, settings);
            _controller.UpdateItemValue(infrastructureMaxTextBox, settings);
            _controller.UpdateItemValue(infrastructureRelativeTextBox, settings);
            _controller.UpdateItemValue(landFortCurrentTextBox, settings);
            _controller.UpdateItemValue(landFortMaxTextBox, settings);
            _controller.UpdateItemValue(landFortRelativeTextBox, settings);
            _controller.UpdateItemValue(coastalFortCurrentTextBox, settings);
            _controller.UpdateItemValue(coastalFortMaxTextBox, settings);
            _controller.UpdateItemValue(coastalFortRelativeTextBox, settings);
            _controller.UpdateItemValue(antiAirCurrentTextBox, settings);
            _controller.UpdateItemValue(antiAirMaxTextBox, settings);
            _controller.UpdateItemValue(antiAirRelativeTextBox, settings);
            _controller.UpdateItemValue(airBaseCurrentTextBox, settings);
            _controller.UpdateItemValue(airBaseMaxTextBox, settings);
            _controller.UpdateItemValue(airBaseRelativeTextBox, settings);
            _controller.UpdateItemValue(navalBaseCurrentTextBox, settings);
            _controller.UpdateItemValue(navalBaseMaxTextBox, settings);
            _controller.UpdateItemValue(navalBaseRelativeTextBox, settings);
            _controller.UpdateItemValue(radarStationCurrentTextBox, settings);
            _controller.UpdateItemValue(radarStationMaxTextBox, settings);
            _controller.UpdateItemValue(radarStationRelativeTextBox, settings);
            _controller.UpdateItemValue(nuclearReactorCurrentTextBox, settings);
            _controller.UpdateItemValue(nuclearReactorMaxTextBox, settings);
            _controller.UpdateItemValue(nuclearReactorRelativeTextBox, settings);
            _controller.UpdateItemValue(rocketTestCurrentTextBox, settings);
            _controller.UpdateItemValue(rocketTestMaxTextBox, settings);
            _controller.UpdateItemValue(rocketTestRelativeTextBox, settings);
            _controller.UpdateItemValue(syntheticOilCurrentTextBox, settings);
            _controller.UpdateItemValue(syntheticOilMaxTextBox, settings);
            _controller.UpdateItemValue(syntheticOilRelativeTextBox, settings);
            _controller.UpdateItemValue(syntheticRaresCurrentTextBox, settings);
            _controller.UpdateItemValue(syntheticRaresMaxTextBox, settings);
            _controller.UpdateItemValue(syntheticRaresRelativeTextBox, settings);
            _controller.UpdateItemValue(nuclearPowerCurrentTextBox, settings);
            _controller.UpdateItemValue(nuclearPowerMaxTextBox, settings);
            _controller.UpdateItemValue(nuclearPowerRelativeTextBox, settings);

            _controller.UpdateItemColor(icCurrentTextBox, settings);
            _controller.UpdateItemColor(icMaxTextBox, settings);
            _controller.UpdateItemColor(icRelativeTextBox, settings);
            _controller.UpdateItemColor(infrastructureCurrentTextBox, settings);
            _controller.UpdateItemColor(infrastructureMaxTextBox, settings);
            _controller.UpdateItemColor(infrastructureRelativeTextBox, settings);
            _controller.UpdateItemColor(landFortCurrentTextBox, settings);
            _controller.UpdateItemColor(landFortMaxTextBox, settings);
            _controller.UpdateItemColor(landFortRelativeTextBox, settings);
            _controller.UpdateItemColor(coastalFortCurrentTextBox, settings);
            _controller.UpdateItemColor(coastalFortMaxTextBox, settings);
            _controller.UpdateItemColor(coastalFortRelativeTextBox, settings);
            _controller.UpdateItemColor(antiAirCurrentTextBox, settings);
            _controller.UpdateItemColor(antiAirMaxTextBox, settings);
            _controller.UpdateItemColor(antiAirRelativeTextBox, settings);
            _controller.UpdateItemColor(airBaseCurrentTextBox, settings);
            _controller.UpdateItemColor(airBaseMaxTextBox, settings);
            _controller.UpdateItemColor(airBaseRelativeTextBox, settings);
            _controller.UpdateItemColor(navalBaseCurrentTextBox, settings);
            _controller.UpdateItemColor(navalBaseMaxTextBox, settings);
            _controller.UpdateItemColor(navalBaseRelativeTextBox, settings);
            _controller.UpdateItemColor(radarStationCurrentTextBox, settings);
            _controller.UpdateItemColor(radarStationMaxTextBox, settings);
            _controller.UpdateItemColor(radarStationRelativeTextBox, settings);
            _controller.UpdateItemColor(nuclearReactorCurrentTextBox, settings);
            _controller.UpdateItemColor(nuclearReactorMaxTextBox, settings);
            _controller.UpdateItemColor(nuclearReactorRelativeTextBox, settings);
            _controller.UpdateItemColor(rocketTestCurrentTextBox, settings);
            _controller.UpdateItemColor(rocketTestMaxTextBox, settings);
            _controller.UpdateItemColor(rocketTestRelativeTextBox, settings);
            _controller.UpdateItemColor(syntheticOilCurrentTextBox, settings);
            _controller.UpdateItemColor(syntheticOilMaxTextBox, settings);
            _controller.UpdateItemColor(syntheticOilRelativeTextBox, settings);
            _controller.UpdateItemColor(syntheticRaresCurrentTextBox, settings);
            _controller.UpdateItemColor(syntheticRaresMaxTextBox, settings);
            _controller.UpdateItemColor(syntheticRaresRelativeTextBox, settings);
            _controller.UpdateItemColor(nuclearPowerCurrentTextBox, settings);
            _controller.UpdateItemColor(nuclearPowerMaxTextBox, settings);
            _controller.UpdateItemColor(nuclearPowerRelativeTextBox, settings);
        }
 /// <summary>
 ///     編集項目の値変更時のログを出力する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="val">編集項目の値</param>
 /// <param name="settings">プロヴィンス設定</param>
 public void OutputItemValueChangedLog(ScenarioEditorItemId itemId, object val, ProvinceSettings settings)
 {
     Log.Info("[Scenario] {0}: {1} -> {2} ({3})", ItemStrings[(int) itemId],
         ObjectHelper.ToString(GetItemValue(itemId, settings)), ObjectHelper.ToString(val), settings.Id);
 }
        /// <summary>
        ///     プロヴィンス資源情報の編集項目を更新する
        /// </summary>
        /// <param name="settings">プロヴィンス設定</param>
        private void UpdateProvinceResourceItems(ProvinceSettings settings)
        {
            _controller.UpdateItemValue(manpowerCurrentTextBox, settings);
            _controller.UpdateItemValue(manpowerMaxTextBox, settings);
            _controller.UpdateItemValue(energyPoolTextBox, settings);
            _controller.UpdateItemValue(energyCurrentTextBox, settings);
            _controller.UpdateItemValue(energyMaxTextBox, settings);
            _controller.UpdateItemValue(metalPoolTextBox, settings);
            _controller.UpdateItemValue(metalCurrentTextBox, settings);
            _controller.UpdateItemValue(metalMaxTextBox, settings);
            _controller.UpdateItemValue(rareMaterialsPoolTextBox, settings);
            _controller.UpdateItemValue(rareMaterialsCurrentTextBox, settings);
            _controller.UpdateItemValue(rareMaterialsMaxTextBox, settings);
            _controller.UpdateItemValue(oilPoolTextBox, settings);
            _controller.UpdateItemValue(oilCurrentTextBox, settings);
            _controller.UpdateItemValue(oilMaxTextBox, settings);
            _controller.UpdateItemValue(suppliesPoolTextBox, settings);

            _controller.UpdateItemColor(manpowerCurrentTextBox, settings);
            _controller.UpdateItemColor(manpowerMaxTextBox, settings);
            _controller.UpdateItemColor(energyPoolTextBox, settings);
            _controller.UpdateItemColor(energyCurrentTextBox, settings);
            _controller.UpdateItemColor(energyMaxTextBox, settings);
            _controller.UpdateItemColor(metalPoolTextBox, settings);
            _controller.UpdateItemColor(metalCurrentTextBox, settings);
            _controller.UpdateItemColor(metalMaxTextBox, settings);
            _controller.UpdateItemColor(rareMaterialsPoolTextBox, settings);
            _controller.UpdateItemColor(rareMaterialsCurrentTextBox, settings);
            _controller.UpdateItemColor(rareMaterialsMaxTextBox, settings);
            _controller.UpdateItemColor(oilPoolTextBox, settings);
            _controller.UpdateItemColor(oilCurrentTextBox, settings);
            _controller.UpdateItemColor(oilMaxTextBox, settings);
            _controller.UpdateItemColor(suppliesPoolTextBox, settings);
        }
        /// <summary>
        ///     項目値変更後の処理
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="settings">プロヴィンス設定</param>
        public void PostItemChanged(ScenarioEditorItemId itemId, object val, ProvinceSettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.ProvinceManpowerCurrent:
                    PostItemChangedResourceCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceManpowerMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceManpowerMax:
                    PostItemChangedResourceMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceManpowerCurrent), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceEnergyCurrent:
                    PostItemChangedResourceCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceEnergyMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceEnergyMax:
                    PostItemChangedResourceMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceEnergyCurrent), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceMetalCurrent:
                    PostItemChangedResourceCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceMetalMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceMetalMax:
                    PostItemChangedResourceMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceMetalCurrent), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceRareMaterialsCurrent:
                    PostItemChangedResourceCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRareMaterialsMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceRareMaterialsMax:
                    PostItemChangedResourceMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRareMaterialsCurrent), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceOilCurrent:
                    PostItemChangedResourceCurrent((TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceOilMax),
                        val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceOilMax:
                    PostItemChangedResourceMax((TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceOilCurrent),
                        val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceIcCurrent:
                    PostItemChangedBuildingCurrent((TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceIcMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceIcRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceIcMax:
                    PostItemChangedBuildingMax((TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceIcCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceIcRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceIcRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceIcCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceIcMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceInfrastructureMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceInfrastructureRelative), val,
                        settings);
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceInfrastructureCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceInfrastructureRelative), val,
                        settings);
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceInfrastructureCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceInfrastructureMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceLandFortCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceLandFortMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceLandFortRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceLandFortMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceLandFortCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceLandFortRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceLandFortRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceLandFortCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceLandFortMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceCoastalFortMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceCoastalFortRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceCoastalFortCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceCoastalFortRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceCoastalFortCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceCoastalFortMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAntiAirMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAntiAirRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAntiAirCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAntiAirRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAntiAirCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAntiAirMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAirBaseMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAirBaseRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAirBaseCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAirBaseRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAirBaseCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceAirBaseMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNavalBaseMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNavalBaseRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNavalBaseCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNavalBaseRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNavalBaseCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNavalBaseMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRadarStationMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRadarStationRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRadarStationCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRadarStationRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRadarStationCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRadarStationMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearReactorMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearReactorRelative), val,
                        settings);
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearReactorCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearReactorRelative), val,
                        settings);
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearReactorCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearReactorMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRocketTestMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRocketTestRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRocketTestCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRocketTestRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRocketTestCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceRocketTestMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticOilMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticOilRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticOilCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticOilRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticOilCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticOilMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticRaresMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticRaresRelative), val,
                        settings);
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticRaresCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticRaresRelative), val,
                        settings);
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticRaresCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceSyntheticRaresMax), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerCurrent:
                    PostItemChangedBuildingCurrent(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearPowerMax),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearPowerRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerMax:
                    PostItemChangedBuildingMax(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearPowerCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearPowerRelative), val, settings);
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerRelative:
                    PostItemChangedBuildingRelative(
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearPowerCurrent),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNuclearPowerMax), val, settings);
                    break;
            }
        }
        /// <summary>
        ///     テキストボックスの値変更時の処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnProvinceStringItemTextBoxTextChanged(object sender, EventArgs e)
        {
            // 選択項目がなければ何もしない
            Province province = GetSelectedProvince();
            if (province == null)
            {
                return;
            }

            TextBox control = sender as TextBox;
            if (control == null)
            {
                return;
            }
            ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag;

            ProvinceSettings settings = Scenarios.GetProvinceSettings(province.Id);

            // 初期値から変更されていなければ何もしない
            object prev = _controller.GetItemValue(itemId, province, settings);
            string val = control.Text;
            if ((prev == null) && string.IsNullOrEmpty(val))
            {
                return;
            }

            // 値に変化がなければ何もしない
            if (val.Equals(prev))
            {
                return;
            }

            if (settings == null)
            {
                settings = new ProvinceSettings { Id = province.Id };
                Scenarios.AddProvinceSettings(settings);
            }

            _controller.OutputItemValueChangedLog(itemId, val, province, settings);

            // 項目値変更前の処理
            _controller.PreItemChanged(itemId, settings);

            // 値を更新する
            _controller.SetItemValue(itemId, val, settings);

            // 編集済みフラグを設定する
            _controller.SetItemDirty(itemId, settings);

            // 文字色を変更する
            control.ForeColor = Color.Red;

            // 項目値変更後の処理
            _controller.PostItemChanged(itemId, val, province, settings);
        }
 /// <summary>
 ///     項目値変更後の処理
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="val">編集項目の値</param>
 /// <param name="province">プロヴィンス</param>
 /// <param name="settings">プロヴィンス設定</param>
 public void PostItemChanged(ScenarioEditorItemId itemId, object val, Province province,
     ProvinceSettings settings)
 {
     switch (itemId)
     {
         case ScenarioEditorItemId.ProvinceNameKey:
             TextBox control = (TextBox) _form.GetItemControl(ScenarioEditorItemId.ProvinceNameString);
             UpdateItemValue(control, province, settings);
             UpdateItemColor(control, settings);
             break;
     }
 }