/// <summary> /// ユニットを追加する /// </summary> /// <param name="index">追加先のインデックス</param> /// <param name="branch">兵科</param> /// <param name="parent">親ノード</param> /// <param name="units">ユニットリスト</param> /// <param name="settings">国家設定</param> private void AddUnit(int index, Branch branch, TreeNode parent, List <Unit> units, CountrySettings settings) { // ユニットを作成する Unit unit = new Unit { Id = settings.GetNewUnitTypeId(), Branch = branch }; unit.SetDirtyAll(); // ユニットの位置を初期化する InitUnitLocation(unit, settings); // ツリーノードを追加する TreeNode node = CreateUnitNode(unit); node.Text = Resources.UnitTreeNewUnit; parent.Nodes.Insert(index, node); // ユニットリストに追加する units.Insert(index, unit); // 編集済みフラグを設定する settings.SetDirty(); Scenarios.SetDirty(); // 追加したノードを選択する _treeView.SelectedNode = node; }
/// <summary> /// ユニットを削除する /// </summary> /// <param name="unit">削除対象のユニット</param> private void RemoveUnit(Unit unit) { TreeNode node = _treeView.SelectedNode; TreeNode parent = node.Parent; parent.Nodes.Remove(node); CountrySettings settings = Scenarios.GetCountrySettings(_country) ?? Scenarios.CreateCountrySettings(_country); // 編集済みフラグを設定する settings.SetDirty(); Scenarios.SetDirty(); // 陸軍/海軍/空軍/搭載ユニット switch ((NodeType)parent.Tag) { case NodeType.Land: settings.LandUnits.Remove(unit); break; case NodeType.Naval: settings.NavalUnits.Remove(unit); break; case NodeType.Air: settings.AirUnits.Remove(unit); break; case NodeType.Boarding: Unit transport = (Unit)parent.Parent.Tag; transport.LandUnits.Remove(unit); break; } }
/// <summary> /// 師団を移動する /// </summary> /// <param name="division">移動対象の師団</param> /// <param name="index">移動先のインデックス</param> private void MoveDivision(Division division, int index) { TreeNode node = _treeView.SelectedNode; TreeNode parent = node.Parent; parent.Nodes.Remove(node); parent.Nodes.Insert(index, node); CountrySettings settings = Scenarios.GetCountrySettings(_country) ?? Scenarios.CreateCountrySettings(_country); // 編集済みフラグを設定する settings.SetDirty(); Scenarios.SetDirty(); // 陸軍/海軍/空軍/搭載師団 Unit unit = parent.Tag as Unit; if (unit != null) { unit.Divisions.Remove(division); unit.Divisions.Insert(index, division); // 移動対象のノードを選択する _treeView.SelectedNode = node; return; } // 未配備陸軍/海軍/空軍師団 switch ((NodeType)parent.Tag) { case NodeType.UndeployedLand: settings.LandDivisions.Remove(division); settings.LandDivisions.Insert(index, division); break; case NodeType.UndeployedNaval: settings.NavalDivisions.Remove(division); settings.NavalDivisions.Insert(index, division); break; case NodeType.UndeployedAir: settings.AirDivisions.Remove(division); settings.AirDivisions.Insert(index, division); break; } // 移動対象のノードを選択する _treeView.SelectedNode = node; }
/// <summary> /// 師団を複製する /// </summary> /// <param name="original">複製対象の師団</param> private void CloneDivision(Division original) { Division division = new Division(original); division.SetDirtyAll(); TreeNode selected = _treeView.SelectedNode; TreeNode parent = selected.Parent; TreeNode node; int index = parent.Nodes.IndexOf(selected) + 1; CountrySettings settings = Scenarios.GetCountrySettings(_country) ?? Scenarios.CreateCountrySettings(_country); // 編集済みフラグを設定する settings.SetDirty(); Scenarios.SetDirty(); // 陸軍/海軍/空軍/搭載師団 Unit unit = parent.Tag as Unit; if (unit != null) { switch ((NodeType)parent.Parent.Tag) { case NodeType.Land: case NodeType.Boarding: node = CreateLandDivisionNode(division); if (string.IsNullOrEmpty(division.Name)) { node.Text = Resources.UnitTreeNewDivision; } parent.Nodes.Insert(index, node); unit.Divisions.Insert(index, division); _treeView.SelectedNode = node; break; case NodeType.Naval: node = CreateNavalDivisionNode(division); if (string.IsNullOrEmpty(division.Name)) { node.Text = Resources.UnitTreeNewDivision; } parent.Nodes.Insert(index, node); unit.Divisions.Insert(index, division); _treeView.SelectedNode = node; break; case NodeType.Air: node = CreateAirDivisionNode(division); if (string.IsNullOrEmpty(division.Name)) { node.Text = Resources.UnitTreeNewDivision; } parent.Nodes.Insert(index, node); unit.Divisions.Insert(index, division); _treeView.SelectedNode = node; break; } return; } // 未配備陸軍/海軍/空軍師団 switch ((NodeType)parent.Tag) { case NodeType.UndeployedLand: node = CreateLandDivisionNode(division); if (string.IsNullOrEmpty(division.Name)) { node.Text = Resources.UnitTreeNewDivision; } parent.Nodes.Insert(index, node); settings.LandDivisions.Insert(index, division); _treeView.SelectedNode = node; break; case NodeType.UndeployedNaval: node = CreateNavalDivisionNode(division); if (string.IsNullOrEmpty(division.Name)) { node.Text = Resources.UnitTreeNewDivision; } parent.Nodes.Insert(index, node); settings.NavalDivisions.Insert(index, division); _treeView.SelectedNode = node; break; case NodeType.UndeployedAir: node = CreateAirDivisionNode(division); if (string.IsNullOrEmpty(division.Name)) { node.Text = Resources.UnitTreeNewDivision; } parent.Nodes.Insert(index, node); settings.AirDivisions.Insert(index, division); _treeView.SelectedNode = node; break; } }
/// <summary> /// ユニットを複製する /// </summary> /// <param name="original">複製対象のユニット</param> private void CloneUnit(Unit original) { CountrySettings settings = Scenarios.GetCountrySettings(_country) ?? Scenarios.CreateCountrySettings(_country); Unit unit = new Unit(original); unit.SetDirtyAll(); TreeNode selected = _treeView.SelectedNode; TreeNode parent = selected.Parent; TreeNode node; int index = parent.Nodes.IndexOf(selected) + 1; // 編集済みフラグを設定する settings.SetDirty(); Scenarios.SetDirty(); // 陸軍/海軍/空軍/搭載ユニット switch ((NodeType)parent.Tag) { case NodeType.Land: node = CreateLandUnitNode(unit); if (string.IsNullOrEmpty(unit.Name)) { node.Text = Resources.UnitTreeNewUnit; } parent.Nodes.Insert(index, node); settings.LandUnits.Insert(index, unit); _treeView.SelectedNode = node; break; case NodeType.Naval: node = CreateNavalUnitNode(unit); if (string.IsNullOrEmpty(unit.Name)) { node.Text = Resources.UnitTreeNewUnit; } parent.Nodes.Insert(index, node); settings.NavalUnits.Insert(index, unit); _treeView.SelectedNode = node; break; case NodeType.Air: node = CreateAirUnitNode(unit); if (string.IsNullOrEmpty(unit.Name)) { node.Text = Resources.UnitTreeNewUnit; } parent.Nodes.Insert(index, node); settings.AirUnits.Insert(index, unit); _treeView.SelectedNode = node; break; case NodeType.Boarding: node = CreateLandUnitNode(unit); if (string.IsNullOrEmpty(unit.Name)) { node.Text = Resources.UnitTreeNewUnit; } parent.Nodes.Insert(index, node); Unit transport = (Unit)parent.Parent.Tag; transport.LandUnits.Insert(index, unit); _treeView.SelectedNode = node; break; } }
/// <summary> /// 師団を追加する /// </summary> public void AddDivision() { CountrySettings settings = Scenarios.GetCountrySettings(_country) ?? Scenarios.CreateCountrySettings(_country); TreeNode node = _treeView.SelectedNode; TreeNode parent = node.Parent; // 編集済みフラグを設定する settings.SetDirty(); Scenarios.SetDirty(); // 未配備陸軍/海軍/空軍師団のルートノード if (parent == null) { switch ((NodeType)node.Tag) { case NodeType.UndeployedLand: AddDivision(Branch.Army, node, settings.LandDivisions, settings); break; case NodeType.UndeployedNaval: AddDivision(Branch.Navy, node, settings.NavalDivisions, settings); break; case NodeType.UndeployedAir: AddDivision(Branch.Airforce, node, settings.AirDivisions, settings); break; } return; } // 陸軍/海軍/空軍/搭載ユニット Unit unit = node.Tag as Unit; if (unit != null) { AddDivision(unit.Branch, node, unit.Divisions, settings); return; } int index = parent.Nodes.IndexOf(node) + 1; // 陸軍/海軍/空軍/搭載師団 unit = parent.Tag as Unit; if (unit != null) { AddDivision(index, unit.Branch, parent, unit.Divisions, settings); return; } // 未配備陸軍/海軍/空軍師団 switch ((NodeType)parent.Tag) { case NodeType.UndeployedLand: AddDivision(index, Branch.Army, parent, settings.LandDivisions, settings); break; case NodeType.UndeployedNaval: AddDivision(index, Branch.Navy, parent, settings.NavalDivisions, settings); break; case NodeType.UndeployedAir: AddDivision(index, Branch.Airforce, parent, settings.AirDivisions, settings); break; } }
/// <summary> /// 項目値変更後の処理 - 師団の最大組織率 /// </summary> /// <param name="control">現在値のコントロール</param> /// <param name="division">師団</param> /// <param name="settings">国家設定</param> private void PostItemChangedMaxOrganisation(TextBox control, Division division, CountrySettings settings) { if (DoubleHelper.IsZero(division.Organisation) || DoubleHelper.IsLessOrEqual(division.Organisation, division.MaxOrganisation)) { return; } // 現在値を最大値に合わせる division.Organisation = division.MaxOrganisation; // 編集済みフラグを設定する division.SetDirty(Division.ItemId.Organisation); settings.SetDirty(); Scenarios.SetDirty(); // 項目の値を更新する UpdateItemValue(control, division); // 項目の色を更新する UpdateItemColor(control, division); }
/// <summary> /// 項目値変更後の処理 - 師団の戦力 /// </summary> /// <param name="control">最大値のコントロール</param> /// <param name="division">師団</param> /// <param name="settings">国家設定</param> private void PostItemChangedStrength(TextBox control, Division division, CountrySettings settings) { if (DoubleHelper.IsZero(division.MaxStrength) || DoubleHelper.IsLessOrEqual(division.Strength, division.MaxStrength)) { return; } // 最大値を現在値に合わせる division.MaxStrength = division.Strength; // 編集済みフラグを設定する division.SetDirty(Division.ItemId.MaxStrength); settings.SetDirty(); Scenarios.SetDirty(); // 項目の値を更新する UpdateItemValue(control, division); // 項目の色を更新する UpdateItemColor(control, division); }
/// <summary> /// 編集項目の編集済みフラグを設定する /// </summary> /// <param name="itemId">項目ID</param> /// <param name="division">師団</param> /// <param name="settings">国家設定</param> public void SetItemDirty(ScenarioEditorItemId itemId, Division division, CountrySettings settings) { division.SetDirty((Division.ItemId) ItemDirtyFlags[(int) itemId]); settings.SetDirty(); Scenarios.SetDirty(); }
/// <summary> /// 編集項目の編集済みフラグを設定する /// </summary> /// <param name="itemId">項目ID</param> /// <param name="unit">ユニット</param> /// <param name="settings">国家設定</param> public void SetItemDirty(ScenarioEditorItemId itemId, Unit unit, CountrySettings settings) { unit.SetDirty((Unit.ItemId) ItemDirtyFlags[(int) itemId]); settings.SetDirty(); Scenarios.SetDirty(); }
/// <summary> /// 編集項目の編集済みフラグを設定する /// </summary> /// <param name="itemId">項目ID</param> /// <param name="province">プロヴィンス</param> /// <param name="settings">国家設定</param> public void SetItemDirty(ScenarioEditorItemId itemId, Province province, CountrySettings settings) { switch (itemId) { case ScenarioEditorItemId.CountryCapital: settings.SetDirty((CountrySettings.ItemId) ItemDirtyFlags[(int) itemId]); Scenarios.SetDirty(); break; case ScenarioEditorItemId.CountryCoreProvinces: settings.SetDirtyCoreProvinces(province.Id); Scenarios.SetDirty(); break; case ScenarioEditorItemId.CountryOwnedProvinces: settings.SetDirtyOwnedProvinces(province.Id); Scenarios.SetDirty(); break; case ScenarioEditorItemId.CountryControlledProvinces: settings.SetDirtyControlledProvinces(province.Id); Scenarios.Data.SetDirtyProvinces(); Scenarios.SetDirty(); break; case ScenarioEditorItemId.CountryClaimedProvinces: settings.SetDirtyClaimedProvinces(province.Id); Scenarios.SetDirty(); break; } }
/// <summary> /// 編集項目の編集済みフラグを設定する /// </summary> /// <param name="itemId">項目ID</param> /// <param name="settings">国家設定</param> public void SetItemDirty(ScenarioEditorItemId itemId, CountrySettings settings) { settings.SetDirty((CountrySettings.ItemId) ItemDirtyFlags[(int) itemId]); Scenarios.SetDirty(); }
/// <summary> /// 編集項目の編集済みフラグを設定する /// </summary> /// <param name="itemId">項目ID</param> /// <param name="relation">国家関係</param> /// <param name="settings">国家設定</param> public void SetItemDirty(ScenarioEditorItemId itemId, Relation relation, CountrySettings settings) { relation.SetDirty((Relation.ItemId) ItemDirtyFlags[(int) itemId]); settings.SetDirty(); Scenarios.SetDirty(); }