Exemple #1
0
        /// <summary>
        ///     ユニットモデルを移動する
        /// </summary>
        /// <param name="unit">ユニットクラス</param>
        /// <param name="src">移動元の位置</param>
        /// <param name="dest">移動先の位置</param>
        private void MoveModel(UnitClass unit, int src, int dest)
        {
            // ユニットクラスのユニットモデルを移動する
            unit.MoveModel(src, dest);

            // ユニットモデルリストの表示を更新する
            UpdateModelList();

            // 移動先の項目を選択する
            modelListView.Items[dest].Focused = true;
            modelListView.Items[dest].Selected = true;

            // 移動先の項目を表示する
            modelListView.EnsureVisible(dest);
        }
Exemple #2
0
        /// <summary>
        ///     改良リストビューの項目を更新する
        /// </summary>
        /// <param name="unit"></param>
        private void UpdateUpgradeList(UnitClass unit)
        {
            // 項目を順に登録する
            upgradeListView.BeginUpdate();
            upgradeListView.Items.Clear();
            foreach (UnitUpgrade upgrade in unit.Upgrades)
            {
                upgradeListView.Items.Add(CreateUpgradeListItem(upgrade));
            }
            upgradeListView.EndUpdate();

            // 改良情報が登録されていなければ編集項目を無効化する
            if (unit.Upgrades.Count == 0)
            {
                DisableUpgradeItems();
                return;
            }

            // 編集項目を有効化する
            EnableUpgradeItems();
        }
Exemple #3
0
        /// <summary>
        ///     ユニットモデルを削除する
        /// </summary>
        /// <param name="unit">ユニットクラス</param>
        /// <param name="index">削除する位置</param>
        private void RemoveModel(UnitClass unit, int index)
        {
            // ユニットクラスからユニットモデルを削除する
            unit.RemoveModel(index);

            // ユニットモデルリストの表示を更新する
            UpdateModelList();

            // 削除した項目の次の項目を選択する
            if (index < modelListView.Items.Count - 1)
            {
                modelListView.Items[index].Focused = true;
                modelListView.Items[index].Selected = true;
            }
            else if (modelListView.Items.Count > 0)
            {
                modelListView.Items[index - 1].Focused = true;
                modelListView.Items[index - 1].Selected = true;
            }
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        /// <summary>
        ///     ユニットモデル画像のファイル名を取得する
        /// </summary>
        /// <param name="unit">ユニットクラス</param>
        /// <param name="index">ユニットモデルのインデックス</param>
        /// <param name="country">国タグ</param>
        /// <returns>ユニットモデル画像のファイル名</returns>
        private static string GetModelImageFileName(UnitClass unit, int index, Country country)
        {
            string name;
            string fileName;
            if (country != Country.None)
            {
                // 国タグ指定/モデル番号指定
                name = string.Format(
                    unit.Organization == UnitOrganization.Division
                        ? "ill_div_{0}_{1}_{2}.bmp"
                        : "ill_bri_{0}_{1}_{2}.bmp",
                    Countries.Strings[(int) country],
                    Units.UnitNumbers[(int) unit.Type],
                    index);
                fileName = Game.GetReadFileName(Game.ModelPicturePathName, name);
                if (File.Exists(fileName))
                {
                    return fileName;
                }

                // 国タグ指定/モデル番号は0指定
                name = string.Format(
                    unit.Organization == UnitOrganization.Division
                        ? "ill_div_{0}_{1}_0.bmp"
                        : "ill_bri_{0}_{1}_0.bmp",
                    Countries.Strings[(int) country],
                    Units.UnitNumbers[(int) unit.Type]);
                fileName = Game.GetReadFileName(Game.ModelPicturePathName, name);
                if (File.Exists(fileName))
                {
                    return fileName;
                }
            }

            // モデル番号指定
            name = string.Format(
                unit.Organization == UnitOrganization.Division
                    ? "ill_div_{0}_{1}.bmp"
                    : "ill_bri_{0}_{1}.bmp",
                Units.UnitNumbers[(int) unit.Type],
                index);
            fileName = Game.GetReadFileName(Game.ModelPicturePathName, name);
            if (File.Exists(fileName))
            {
                return fileName;
            }

            // モデル番号は0指定
            name = string.Format(
                unit.Organization == UnitOrganization.Division
                    ? "ill_div_{0}_0.bmp"
                    : "ill_bri_{0}_0.bmp",
                Units.UnitNumbers[(int) unit.Type]);
            fileName = Game.GetReadFileName(Game.ModelPicturePathName, name);
            return File.Exists(fileName) ? fileName : string.Empty;
        }
Exemple #6
0
        /// <summary>
        ///     ユニットモデルリストビューの項目を作成する
        /// </summary>
        /// <param name="unit">ユニットクラス</param>
        /// <param name="index">ユニットモデルのインデックス</param>
        /// <returns>ユニットモデルリストビューの項目</returns>
        private ListViewItem CreateModelListItem(UnitClass unit, int index)
        {
            UnitModel model = unit.Models[index];

            ListViewItem item = new ListViewItem { Text = IntHelper.ToString(index) };
            string name = unit.GetCountryModelName(index, GetSelectedCountry());
            if (string.IsNullOrEmpty(name))
            {
                name = unit.GetModelName(index);
            }
            item.SubItems.Add(name);
            item.SubItems.Add(DoubleHelper.ToString(model.Cost));
            item.SubItems.Add(DoubleHelper.ToString(model.BuildTime));
            item.SubItems.Add(DoubleHelper.ToString(model.ManPower));
            item.SubItems.Add(DoubleHelper.ToString(model.SupplyConsumption));
            item.SubItems.Add(DoubleHelper.ToString(model.FuelConsumption));
            item.SubItems.Add(DoubleHelper.ToString(model.DefaultOrganization));
            item.SubItems.Add(DoubleHelper.ToString(model.Morale));
            item.SubItems.Add(DoubleHelper.ToString(model.MaxSpeed));

            return item;
        }
Exemple #7
0
        /// <summary>
        ///     ユニットモデルアイコンのファイル名を取得する
        /// </summary>
        /// <param name="unit">ユニットクラス</param>
        /// <param name="index">ユニットモデルのインデックス</param>
        /// <returns>ユニットモデルアイコンのファイル名</returns>
        private static string GetModelIconFileName(UnitClass unit, int index)
        {
            // 旅団にはアイコンが存在しないので空文字列を返す
            if (unit.Organization == UnitOrganization.Brigade)
            {
                return string.Empty;
            }

            string name = $"model_{Units.UnitNumbers[(int) unit.Type]}_{index}.bmp";
            string fileName = Game.GetReadFileName(Game.ModelPicturePathName, name);
            return File.Exists(fileName) ? fileName : string.Empty;
        }
Exemple #8
0
        /// <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("}");
        }
Exemple #9
0
 /// <summary>
 ///     師団ユニットクラス定義を書き込む
 /// </summary>
 /// <param name="unit">ユニットクラスデータ</param>
 /// <param name="writer">ファイル書き込み用</param>
 private static void WriteDivisionType(UnitClass unit, StreamWriter writer)
 {
     writer.WriteLine();
     if (unit.Type < UnitType.ReserveDivision33 || unit.Type > UnitType.ReserveDivision40)
     {
         writer.WriteLine("{0} = {{", Units.Strings[(int) unit.Type]);
     }
     else
     {
         writer.WriteLine("{0} = {{\t# Reserved for use by Darkest Hour Full", Units.Strings[(int) unit.Type]);
     }
     writer.WriteLine("\t#ID\t\t\t{0}", Units.UnitNumbers[(int) unit.Type]);
     if (unit.ExistsEntity() || (unit.Models.Count > 0))
     {
         writer.WriteLine("\ttype\t\t= {0}", Units.RealStrings[(int) unit.RealType]);
         writer.WriteLine("\tname\t\t= {0}", unit.Name);
         writer.WriteLine("\tshort_name\t= {0}", unit.ShortName);
         writer.WriteLine("\tdesc\t\t= {0}", unit.Desc);
         writer.WriteLine("\tshort_desc\t= {0}", unit.ShortDesc);
         writer.WriteLine("\teyr\t\t\t= {0}", unit.Eyr);
         writer.WriteLine("\tsprite\t\t= {0}", Units.SpriteStrings[(int) unit.Sprite]);
         writer.WriteLine("\ttransmute\t= {0}", Units.Strings[(int) unit.Transmute]);
         writer.WriteLine("\tgfx_prio\t= {0}", unit.GfxPrio);
         if (unit.DefaultType)
         {
             string s = Units.RealStrings[(int) unit.RealType];
             int len = s.Length;
             if (len < 4)
             {
                 writer.WriteLine("\t{0}\t\t\t= yes", s);
             }
             else if (len < 8)
             {
                 writer.WriteLine("\t{0}\t\t= yes", s);
             }
             else if (len < 12)
             {
                 writer.WriteLine("\t{0}\t= yes", s);
             }
             else
             {
                 writer.WriteLine("\t{0} = yes", s);
             }
         }
         writer.WriteLine("\tvalue\t\t= {0}", DoubleHelper.ToString(unit.Value));
         if (unit.Productable)
         {
             writer.WriteLine("\tproduction\t= yes");
         }
     }
     writer.WriteLine("\tlist_prio\t= {0}", unit.ListPrio);
     if (unit.UiPrio != 0)
     {
         writer.WriteLine("\tui_prio\t\t= {0}", unit.UiPrio);
     }
     writer.WriteLine("}");
 }
Exemple #10
0
        /// <summary>
        ///     旅団ユニットクラス定義を書き込む
        /// </summary>
        /// <param name="unit">ユニットクラスデータ</param>
        /// <param name="writer">ファイル書き込み用</param>
        private static void WriteBrigadeType(UnitClass unit, StreamWriter writer)
        {
            writer.WriteLine();
            if (unit.Type == UnitType.None)
            {
                writer.WriteLine("{0} = {{\t#DO NOT CHANGE!!!", Units.Strings[(int) unit.Type]);
            }
            else if (unit.Type >= UnitType.ReserveBrigade36 && unit.Type <= UnitType.ReserveBrigade40)
            {
                writer.WriteLine("{0} = {{\t# Reserved for use by Darkest Hour Full", Units.Strings[(int) unit.Type]);
            }
            else
            {
                writer.WriteLine("{0} = {{", Units.Strings[(int) unit.Type]);
            }
            writer.WriteLine("\t#ID\t\t\t{0}", Units.UnitNumbers[(int) unit.Type]);
            if (unit.ExistsEntity() || (unit.Models.Count > 0))
            {
                switch (unit.Branch)
                {
                    case Branch.Army:
                        writer.WriteLine("\ttype\t\t= land");
                        break;

                    case Branch.Navy:
                        writer.WriteLine("\ttype\t\t= naval");
                        break;

                    case Branch.Airforce:
                        writer.WriteLine("\ttype\t\t= air");
                        break;
                }
                writer.WriteLine("\tname\t\t= {0}", unit.Name);
                writer.WriteLine("\tshort_name\t= {0}", unit.ShortName);
                writer.WriteLine("\tdesc\t\t= {0}", unit.Desc);
                writer.WriteLine("\tshort_desc\t= {0}", unit.ShortDesc);
                writer.WriteLine("\tvalue\t\t= {0}", DoubleHelper.ToString(unit.Value));
                if (unit.Cag)
                {
                    writer.WriteLine("\tcag\t\t\t= yes");
                }
                if (unit.Escort)
                {
                    writer.WriteLine("\tescort\t\t= yes");
                }
                if (unit.Engineer)
                {
                    writer.WriteLine("\tengineer\t= yes");
                }
            }
            if ((unit.Type != UnitType.None) || (unit.ListPrio != -1))
            {
                writer.WriteLine("\tlist_prio\t= {0}", unit.ListPrio);
            }
            writer.WriteLine("}");
        }
Exemple #11
0
        /// <summary>
        ///     ユニットデータをファイルへ書き込む
        /// </summary>
        /// <param name="unit">ユニットデータ</param>
        /// <param name="fileName">ファイル名</param>
        public static void Write(UnitClass unit, string fileName)
        {
            using (StreamWriter writer = new StreamWriter(fileName, false, Encoding.GetEncoding(Game.CodePage)))
            {
                // unit_type
                if (Game.Type == GameType.ArsenalOfDemocracy)
                {
                    switch (unit.Branch)
                    {
                        case Branch.Army:
                            writer.WriteLine("land_unit_type = 1");
                            break;

                        case Branch.Navy:
                            writer.WriteLine("naval_unit_type = 1");
                            break;

                        case Branch.Airforce:
                            writer.WriteLine("air_unit_type = 1");
                            break;
                    }
                }

                // max_speed_step
                if ((Game.Type == GameType.ArsenalOfDemocracy) &&
                    (unit.Organization == UnitOrganization.Division) &&
                    (unit.MaxSpeedStep < 2))
                {
                    writer.WriteLine("max_speed_step = {0}", unit.MaxSpeedStep);
                }

                // detachable
                if (Game.Type == GameType.DarkestHour && unit.Detachable)
                {
                    writer.WriteLine("detachable = yes");
                    writer.WriteLine();
                }

                // locked
                if ((Game.Type == GameType.ArsenalOfDemocracy) &&
                    (unit.Organization == UnitOrganization.Brigade) &&
                    !unit.Detachable)
                {
                    writer.WriteLine("locked = 1");
                }

                // allowed_brigades
                if (unit.AllowedBrigades.Count > 0)
                {
                    foreach (UnitType brigade in unit.AllowedBrigades)
                    {
                        writer.WriteLine("allowed_brigades = {0}", Units.Strings[(int) brigade]);
                    }
                    // max_allowed_brigades
                    if ((Game.Type == GameType.DarkestHour) && (unit.MaxAllowedBrigades >= 0))
                    {
                        writer.WriteLine("max_allowed_brigades = {0}", unit.MaxAllowedBrigades);
                    }
                    writer.WriteLine();
                }

                // upgrade
                if ((Game.Type == GameType.DarkestHour) && (unit.Upgrades.Count > 0))
                {
                    foreach (UnitUpgrade upgrade in unit.Upgrades)
                    {
                        writer.WriteLine(
                            "upgrade = {{ type = {0} upgrade_time_factor = {1} upgrade_cost_factor = {2} }}",
                            Units.Strings[(int) upgrade.Type],
                            DoubleHelper.ToString(upgrade.UpgradeTimeFactor),
                            DoubleHelper.ToString(upgrade.UpgradeCostFactor));
                    }
                    writer.WriteLine();
                }

                // model
                int index = 0;
                foreach (UnitModel model in unit.Models)
                {
                    WriteModel(model, unit, index, writer);
                    index++;
                }
            }
        }