/// <summary> /// ユニットモデルを挿入する /// </summary> /// <param name="model">挿入対象のユニットモデル</param> /// <param name="index">挿入する位置</param> /// <param name="name">ユニットモデル名</param> public void InsertModel(UnitModel model, int index, string name) { Log.Info("[Unit] Insert model: {0} ({1})", index, this); // 挿入位置以降のユニットモデル名を変更する SlideModelNamesDown(index, Models.Count - 1); // 挿入位置の国別ユニットモデル名を削除する foreach (Country country in Countries.Tags) { RemoveModelName(index, country); } // 挿入位置のユニットモデル名を変更する SetModelName(index, name); // ユニットモデルリストに項目を挿入する Models.Insert(index, model); // 編集済みフラグを設定する model.SetDirtyAll(); SetDirtyFile(); }
/// <summary> /// ユニットモデルを挿入する /// </summary> /// <param name="unit">ユニットクラス</param> /// <param name="model">挿入対象のユニットモデル</param> /// <param name="index">挿入する位置</param> /// <param name="name">ユニットモデル名</param> private void InsertModel(UnitClass unit, UnitModel model, int index, string name) { // ユニットクラスにユニットモデルを挿入する unit.InsertModel(model, index, name); // ユニットモデルリストの表示を更新する UpdateModelList(); // 挿入した項目を選択する modelListView.Items[index].Focused = true; modelListView.Items[index].Selected = true; // 挿入した項目が表示されるようにする modelListView.EnsureVisible(index); }
/// <summary> /// 装備リストビューの項目を更新する /// </summary> /// <param name="model"></param> private void UpdateEquipmentList(UnitModel model) { // 項目を順に登録する equipmentListView.BeginUpdate(); equipmentListView.Items.Clear(); foreach (UnitEquipment equipment in model.Equipments) { equipmentListView.Items.Add(CreateEquipmentListItem(equipment)); } equipmentListView.EndUpdate(); // 項目がなければ編集項目を無効化する if (model.Equipments.Count == 0) { DisableEquipmentItems(); return; } // 先頭の項目を選択する equipmentListView.Items[0].Focused = true; equipmentListView.Items[0].Selected = true; // 編集項目を有効化する EnableEquipmentItems(); }
/// <summary> /// 複製ボタン押下時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnCloneButtonClick(object sender, EventArgs e) { // 選択中のユニットクラスがなければ何もしない UnitClass unit = classListBox.SelectedItem as UnitClass; if (unit == null) { return; } // 選択中のユニットモデルがなければ何もしない if (modelListView.SelectedIndices.Count == 0) { return; } int index = modelListView.SelectedIndices[0]; // ユニットモデルを挿入する UnitModel model = new UnitModel(unit.Models[index]); InsertModel(unit, model, index + 1, unit.GetModelName(index)); // ユニットモデルリストの更新を通知する HoI2EditorController.OnItemChanged(EditorItemId.ModelList, this); }
/// <summary> /// 新規ボタン押下時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnNewButtonClick(object sender, EventArgs e) { // 選択中のユニットクラスがなければ何もしない UnitClass unit = classListBox.SelectedItem as UnitClass; if (unit == null) { return; } // ユニットモデルを挿入する UnitModel model = new UnitModel(); int index = modelListView.SelectedIndices.Count > 0 ? modelListView.SelectedIndices[0] + 1 : 0; InsertModel(unit, model, index, ""); // ユニットモデルリストの更新を通知する HoI2EditorController.OnItemChanged(EditorItemId.ModelList, this); }
/// <summary> /// 海軍師団のモデルデータを書き出す /// </summary> /// <param name="model">ユニットモデルデータ</param> /// <param name="writer">ファイル書き込み用</param> private static void WriteNavalDivision(UnitModel model, StreamWriter writer) { writer.WriteLine("\tcost\t\t\t\t\t\t= {0}", DoubleHelper.ToString(model.Cost)); // 必要ICが0のモデルは未定義と扱う if (DoubleHelper.IsZero(model.Cost)) { return; } writer.WriteLine("\tbuildtime \t\t\t\t\t= {0}", DoubleHelper.ToString(model.BuildTime)); writer.WriteLine("\tdefaultorganisation \t\t= {0}", DoubleHelper.ToString(model.DefaultOrganization)); writer.WriteLine("\tmorale\t\t\t\t\t\t= {0}", DoubleHelper.ToString(model.Morale)); writer.WriteLine("\tmanpower\t\t\t\t\t= {0}", DoubleHelper.ToString(model.ManPower)); writer.WriteLine("\tmaxspeed\t\t\t\t\t= {0}", DoubleHelper.ToString(model.MaxSpeed)); writer.WriteLine("\tsurfacedetectioncapability\t= {0}", DoubleHelper.ToString(model.SurfaceDetectionCapability)); writer.WriteLine("\tairdetectioncapability\t\t= {0}", DoubleHelper.ToString(model.AirDetectionCapability)); writer.WriteLine("\tsubdetectioncapability\t\t= {0}", DoubleHelper.ToString(model.SubDetectionCapability)); writer.WriteLine("\tvisibility\t\t\t\t\t= {0}", DoubleHelper.ToString(model.Visibility)); writer.WriteLine("\tseadefence\t\t\t\t\t= {0}", DoubleHelper.ToString(model.SeaDefense)); writer.WriteLine("\tairdefence\t\t\t\t\t= {0}", DoubleHelper.ToString(model.AirDefence)); writer.WriteLine("\tseaattack\t\t\t\t\t= {0}", DoubleHelper.ToString(model.SeaAttack)); writer.WriteLine("\tairattack\t\t\t\t\t= {0}", DoubleHelper.ToString(model.AirAttack)); writer.WriteLine("\tsubattack\t\t\t\t\t= {0}", DoubleHelper.ToString(model.SubAttack)); writer.WriteLine("\tconvoyattack\t\t\t\t\t= {0}", DoubleHelper.ToString(model.ConvoyAttack)); writer.WriteLine("\tshorebombardment\t\t\t= {0}", DoubleHelper.ToString(model.ShoreBombardment)); writer.WriteLine("\ttransportcapability\t\t\t= {0}", DoubleHelper.ToString(model.TransportCapability)); writer.WriteLine("\trange\t\t\t\t\t\t= {0}", DoubleHelper.ToString(model.Range)); writer.WriteLine("\tsupplyconsumption\t\t\t= {0}", DoubleHelper.ToString(model.SupplyConsumption)); writer.WriteLine("\tfuelconsumption\t\t\t\t= {0}", DoubleHelper.ToString(model.FuelConsumption)); writer.WriteLine("\tdistance\t\t\t\t\t= {0}", DoubleHelper.ToString(model.Distance)); if ((Game.Type == GameType.DarkestHour) && !DoubleHelper.IsZero(model.UpgradeTimeFactor)) { writer.WriteLine("\tupgrade_time_factor = {0}", DoubleHelper.ToString(model.UpgradeTimeFactor)); } if ((Game.Type == GameType.DarkestHour) && !DoubleHelper.IsZero(model.UpgradeCostFactor)) { writer.WriteLine("\tupgrade_cost_factor = {0}", DoubleHelper.ToString(model.UpgradeCostFactor)); } if ((Game.Type == GameType.DarkestHour) && !DoubleHelper.IsZero(model.ReinforceTimeFactor)) { writer.WriteLine("\treinforce_time\t\t= {0}", DoubleHelper.ToString(model.ReinforceTimeFactor)); } if ((Game.Type == GameType.DarkestHour) && !DoubleHelper.IsZero(model.ReinforceCostFactor)) { writer.WriteLine("\treinforce_cost \t\t= {0}", DoubleHelper.ToString(model.ReinforceCostFactor)); } }
/// <summary> /// modelセクションを書き出す /// </summary> /// <param name="model">ユニットモデルデータ</param> /// <param name="unit">ユニットデータ</param> /// <param name="index">ユニットモデルのインデックス</param> /// <param name="writer">ファイル書き込み用</param> private static void WriteModel(UnitModel model, UnitClass unit, int index, StreamWriter writer) { writer.WriteLine("# {0} - {1}", index, unit.GetModelName(index)); writer.WriteLine("model = {"); // 兵科固有部分 switch (unit.Branch) { case Branch.Army: if (unit.Organization == UnitOrganization.Division) { WriteLandDivision(model, writer); } else { WriteLandBrigade(model, writer); } break; case Branch.Navy: if (unit.Organization == UnitOrganization.Division) { WriteNavalDivision(model, writer); } else { WriteNavalBrigade(model, writer); } break; case Branch.Airforce: if (unit.Organization == UnitOrganization.Division) { WriteAirDivision(model, writer); } else { WriteAirBrigade(model, writer); } break; } if (Game.Type == GameType.DarkestHour) { // 自動改良 if (model.AutoUpgrade) { writer.WriteLine("\t{0}\t\t\t\t= {1}", Units.Strings[(int) model.UpgradeClass], model.UpgradeModel); } // upgrade_time_boost if (!model.UpgradeTimeBoost) { writer.WriteLine("\tupgrade_time_boost \t= {0}", model.UpgradeTimeBoost ? "yes" : "no"); } } // equipment (DH1.03以降) if ((Game.Type == GameType.DarkestHour) && (Game.Version >= 103) && (model.Equipments.Count > 0)) { writer.Write("\tequipment = {"); foreach (UnitEquipment equipment in model.Equipments) { writer.Write(" {0} = {1}", Units.EquipmentStrings[(int) equipment.Resource], equipment.Quantity); } writer.WriteLine(" }"); } writer.WriteLine("}"); }
/// <summary> /// 陸軍師団のモデルデータを書き出す /// </summary> /// <param name="model">ユニットモデルデータ</param> /// <param name="writer">ファイル書き込み用</param> private static void WriteLandDivision(UnitModel model, StreamWriter writer) { writer.WriteLine("\tcost \t\t\t\t\t= {0}", DoubleHelper.ToString(model.Cost)); // 必要ICが0のモデルは未定義と扱う if (DoubleHelper.IsZero(model.Cost)) { return; } writer.WriteLine("\tbuildtime\t \t\t\t= {0}", DoubleHelper.ToString(model.BuildTime)); writer.WriteLine("\tmanpower \t\t\t\t= {0}", DoubleHelper.ToString(model.ManPower)); writer.WriteLine("\tmaxspeed \t\t\t\t= {0}", DoubleHelper.ToString(model.MaxSpeed)); writer.WriteLine("\tdefaultorganisation \t= {0}", DoubleHelper.ToString(model.DefaultOrganization)); writer.WriteLine("\tmorale\t\t\t\t\t= {0}", DoubleHelper.ToString(model.Morale)); writer.WriteLine("\tdefensiveness \t\t\t= {0}", DoubleHelper.ToString(model.Defensiveness)); writer.WriteLine("\ttoughness\t\t\t\t= {0}", DoubleHelper.ToString(model.Toughness)); writer.WriteLine("\tsoftness\t\t\t\t= {0}", DoubleHelper.ToString(model.Softness)); writer.WriteLine("\tsuppression\t\t\t\t= {0}", DoubleHelper.ToString(model.Suppression)); writer.WriteLine("\tairdefence\t\t\t\t= {0}", DoubleHelper.ToString(model.AirDefence)); writer.WriteLine("\tsoftattack\t\t\t\t= {0}", DoubleHelper.ToString(model.SoftAttack)); writer.WriteLine("\thardattack\t\t\t\t= {0}", DoubleHelper.ToString(model.HardAttack)); writer.WriteLine("\tairattack\t\t\t\t= {0}", DoubleHelper.ToString(model.AirAttack)); writer.WriteLine("\ttransportweight\t\t\t= {0}", DoubleHelper.ToString(model.TransportWeight)); writer.WriteLine("\tsupplyconsumption \t\t= {0}", DoubleHelper.ToString(model.SupplyConsumption)); writer.WriteLine("\tfuelconsumption\t\t\t= {0}", DoubleHelper.ToString(model.FuelConsumption)); if ((Game.Type == GameType.DarkestHour) && !DoubleHelper.IsZero(model.NoFuelCombatMod)) { writer.WriteLine("\tno_fuel_combat_mod \t\t= {0}", DoubleHelper.ToString(model.NoFuelCombatMod)); } if (!DoubleHelper.IsZero(model.SpeedCapArt)) { writer.WriteLine("\tspeed_cap_art\t\t\t= {0}", DoubleHelper.ToString(model.SpeedCapArt)); } if (!DoubleHelper.IsZero(model.SpeedCapEng)) { writer.WriteLine("\tspeed_cap_eng\t\t\t= {0}", DoubleHelper.ToString(model.SpeedCapEng)); } if (!DoubleHelper.IsZero(model.SpeedCapAt)) { writer.WriteLine("\tspeed_cap_at\t\t\t= {0}", DoubleHelper.ToString(model.SpeedCapAt)); } if (!DoubleHelper.IsZero(model.SpeedCapAa)) { writer.WriteLine("\tspeed_cap_aa\t\t\t= {0}", DoubleHelper.ToString(model.SpeedCapAa)); } writer.WriteLine("\tupgrade_time_factor = {0}", DoubleHelper.ToString(model.UpgradeTimeFactor)); writer.WriteLine("\tupgrade_cost_factor = {0}", DoubleHelper.ToString(model.UpgradeCostFactor)); if ((Game.Type == GameType.ArsenalOfDemocracy) && !DoubleHelper.IsZero(model.MaxSupplyStock)) { writer.WriteLine("\tmax_supply_stock = {0}", DoubleHelper.ToString(model.MaxSupplyStock)); } if ((Game.Type == GameType.ArsenalOfDemocracy) && !DoubleHelper.IsZero(model.MaxOilStock)) { writer.WriteLine("\tmax_oil_stock = {0}", DoubleHelper.ToString(model.MaxOilStock)); } if ((Game.Type == GameType.DarkestHour) && !DoubleHelper.IsZero(model.ReinforceTimeFactor)) { writer.WriteLine("\treinforce_time\t\t= {0}", DoubleHelper.ToString(model.ReinforceTimeFactor)); } if ((Game.Type == GameType.DarkestHour) && !DoubleHelper.IsZero(model.ReinforceCostFactor)) { writer.WriteLine("\treinforce_cost \t\t= {0}", DoubleHelper.ToString(model.ReinforceCostFactor)); } }
/// <summary> /// 陸軍旅団のモデルデータを書き出す /// </summary> /// <param name="model">ユニットモデルデータ</param> /// <param name="writer">ファイル書き込み用</param> private static void WriteLandBrigade(UnitModel model, StreamWriter writer) { writer.WriteLine("\tcost \t\t\t\t= {0}", DoubleHelper.ToString(model.Cost)); // 必要ICが0のモデルは未定義と扱う if (DoubleHelper.IsZero(model.Cost)) { return; } writer.WriteLine("\tbuildtime\t \t\t= {0}", DoubleHelper.ToString(model.BuildTime)); writer.WriteLine("\tmanpower \t\t\t= {0}", DoubleHelper.ToString(model.ManPower)); if (!DoubleHelper.IsZero(model.MaxSpeed)) { writer.WriteLine("\tmaxspeed \t\t\t= {0}", DoubleHelper.ToString(model.MaxSpeed)); } if (!DoubleHelper.IsZero(model.DefaultOrganization)) { writer.WriteLine("\tdefaultorganisation = {0}", DoubleHelper.ToString(model.DefaultOrganization)); } if (!DoubleHelper.IsZero(model.Morale)) { writer.WriteLine("\tmorale\t\t\t\t\t= {0}", DoubleHelper.ToString(model.Morale)); } if (!DoubleHelper.IsZero(model.Defensiveness)) { writer.WriteLine("\tdefensiveness \t\t= {0}", DoubleHelper.ToString(model.Defensiveness)); } if (!DoubleHelper.IsZero(model.Toughness)) { writer.WriteLine("\ttoughness \t\t\t= {0}", DoubleHelper.ToString(model.Toughness)); } if (!DoubleHelper.IsZero(model.Softness)) { writer.WriteLine("\tsoftness\t\t\t= {0}", DoubleHelper.ToString(model.Softness)); } if (!DoubleHelper.IsZero(model.Suppression)) { writer.WriteLine("\tsuppression\t\t\t= {0}", DoubleHelper.ToString(model.Suppression)); } if (!DoubleHelper.IsZero(model.AirDefence)) { writer.WriteLine("\tairdefence\t\t\t\t= {0}", DoubleHelper.ToString(model.AirDefence)); } if (!DoubleHelper.IsZero(model.SoftAttack)) { writer.WriteLine("\tsoftattack\t\t\t= {0}", DoubleHelper.ToString(model.SoftAttack)); } if (!DoubleHelper.IsZero(model.HardAttack)) { writer.WriteLine("\thardattack\t\t\t= {0}", DoubleHelper.ToString(model.HardAttack)); } if (!DoubleHelper.IsZero(model.AirAttack)) { writer.WriteLine("\tairattack\t\t\t= {0}", DoubleHelper.ToString(model.AirAttack)); } if ((Game.Type == GameType.ArsenalOfDemocracy) && !DoubleHelper.IsZero(model.ArtilleryBombardment)) { writer.WriteLine("\tartillery_bombardment\t\t= {0}", DoubleHelper.ToString(model.ArtilleryBombardment)); } if (!DoubleHelper.IsZero(model.TransportWeight)) { writer.WriteLine("\ttransportweight\t\t\t= {0}", DoubleHelper.ToString(model.TransportWeight)); } writer.WriteLine("\tsupplyconsumption \t= {0}", DoubleHelper.ToString(model.SupplyConsumption)); if (!DoubleHelper.IsZero(model.FuelConsumption)) { writer.WriteLine("\tfuelconsumption\t\t= {0}", DoubleHelper.ToString(model.FuelConsumption)); } writer.WriteLine("\tupgrade_time_factor = {0}", DoubleHelper.ToString(model.UpgradeTimeFactor)); writer.WriteLine("\tupgrade_cost_factor = {0}", DoubleHelper.ToString(model.UpgradeCostFactor)); if ((Game.Type == GameType.DarkestHour) && (Game.Version >= 103) && !DoubleHelper.IsZero(model.SpeedCap)) { writer.WriteLine("\tspeed_cap\t\t\t= {0}", DoubleHelper.ToString(model.SpeedCap)); } }
/// <summary> /// 空軍旅団のモデルデータを書き出す /// </summary> /// <param name="model">ユニットモデルデータ</param> /// <param name="writer">ファイル書き込み用</param> private static void WriteAirBrigade(UnitModel model, StreamWriter writer) { writer.WriteLine("\tcost \t\t\t\t\t= {0}", DoubleHelper.ToString(model.Cost)); // 必要ICが0のモデルは未定義と扱う if (DoubleHelper.IsZero(model.Cost)) { return; } writer.WriteLine("\tbuildtime\t \t\t\t= {0}", DoubleHelper.ToString(model.BuildTime)); writer.WriteLine("\tdefaultorganisation \t\t= {0}", DoubleHelper.ToString(model.DefaultOrganization)); writer.WriteLine("\tmorale\t\t\t\t\t= {0}", DoubleHelper.ToString(model.Morale)); writer.WriteLine("\tmanpower\t\t\t\t= {0}", DoubleHelper.ToString(model.ManPower)); writer.WriteLine("\tmaxspeed\t\t\t\t= {0}", DoubleHelper.ToString(model.MaxSpeed)); writer.WriteLine("\tsurfacedetectioncapability\t= {0}", DoubleHelper.ToString(model.SurfaceDetectionCapability)); writer.WriteLine("\tairdetectioncapability\t\t= {0}", DoubleHelper.ToString(model.AirDetectionCapability)); writer.WriteLine("\tsurfacedefence\t\t\t\t= {0}", DoubleHelper.ToString(model.SurfaceDefence)); writer.WriteLine("\tairdefence\t\t\t\t= {0}", DoubleHelper.ToString(model.AirDefence)); writer.WriteLine("\tairattack\t\t\t\t= {0}", DoubleHelper.ToString(model.AirAttack)); writer.WriteLine("\tstrategicattack\t\t\t\t= {0}", DoubleHelper.ToString(model.StrategicAttack)); writer.WriteLine("\tsoftattack\t\t\t\t= {0}", DoubleHelper.ToString(model.SoftAttack)); writer.WriteLine("\thardattack\t\t\t\t= {0}", DoubleHelper.ToString(model.HardAttack)); writer.WriteLine("\tnavalattack\t\t\t\t= {0}", DoubleHelper.ToString(model.NavalAttack)); if (!DoubleHelper.IsZero(model.TransportCapability)) { writer.WriteLine("\ttransportcapability\t\t\t= {0}", DoubleHelper.ToString(model.TransportCapability)); } writer.WriteLine("\trange\t\t\t\t\t= {0}", DoubleHelper.ToString(model.Range)); writer.WriteLine("\tsupplyconsumption \t\t\t= {0}", DoubleHelper.ToString(model.SupplyConsumption)); writer.WriteLine("\tfuelconsumption\t\t\t\t= {0}", DoubleHelper.ToString(model.FuelConsumption)); writer.WriteLine("\tupgrade_time_factor = {0}", DoubleHelper.ToString(model.UpgradeTimeFactor)); writer.WriteLine("\tupgrade_cost_factor = {0}", DoubleHelper.ToString(model.UpgradeCostFactor)); }