From 9b1d1550464e9551071b294b9e2099918758610b Mon Sep 17 00:00:00 2001 From: Li Zhenhuan Date: Sun, 21 Mar 2021 16:37:02 +0800 Subject: [PATCH] Add multiple troops into one formation group. --- CHANGELOG.md | 4 + .../EnhancedBattleTest.csproj | 1 + .../EnhancedBattleTestGeneralTroopGroup.xml | 51 +++++++++ ...EnhancedBattleTestNonGeneralTroopGroup.xml | 40 +++++++ .../GUI/Prefabs/EnhancedBattleTestSide.xml | 22 +--- .../Prefabs/EnhancedBattleTestTroopGroup.xml | 81 ------------- .../Prefabs/EnhancedBattleTestTroopList.xml | 50 +++++++++ .../src/Config/BattleConfig.cs | 106 +++++++++++++++++- .../src/Config/TeamConfig.cs | 6 +- .../src/Data/EnhancedBattleTestSceneData.cs | 7 +- .../src/EnhancedBattleTestSubModule.cs | 8 +- ...hancedBattleTestSingleplayerGameManager.cs | 5 +- .../src/GameMode/EnhancedBattleTestState.cs | 23 +++- .../SinglePlayer/Config/SPCharacterConfig.cs | 2 +- .../src/UI/EnhancedBattleTestVM.cs | 4 + .../src/UI/MapSelectionGroupVM.cs | 22 +++- .../EnhancedBattleTest/src/UI/TroopGroupVM.cs | 4 +- source/EnhancedBattleTest/src/UI/TroopVM.cs | 5 +- 18 files changed, 312 insertions(+), 129 deletions(-) create mode 100644 source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestGeneralTroopGroup.xml create mode 100644 source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestNonGeneralTroopGroup.xml delete mode 100644 source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestTroopGroup.xml create mode 100644 source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestTroopList.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a0579f..9c55a9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [v2.1.0] - 2021-03-21 +## Added +- Add support to add multiple troop types into one formation group. + ## [v2.0.19] - 2021-02-09 ### Fixed - Fix spawning issue in Bannerlord e1.5.8 diff --git a/source/EnhancedBattleTest/EnhancedBattleTest.csproj b/source/EnhancedBattleTest/EnhancedBattleTest.csproj index 69166d4..6689967 100644 --- a/source/EnhancedBattleTest/EnhancedBattleTest.csproj +++ b/source/EnhancedBattleTest/EnhancedBattleTest.csproj @@ -104,6 +104,7 @@ + diff --git a/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestGeneralTroopGroup.xml b/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestGeneralTroopGroup.xml new file mode 100644 index 0000000..00fbabb --- /dev/null +++ b/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestGeneralTroopGroup.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestNonGeneralTroopGroup.xml b/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestNonGeneralTroopGroup.xml new file mode 100644 index 0000000..7788b2a --- /dev/null +++ b/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestNonGeneralTroopGroup.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestSide.xml b/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestSide.xml index 60d18e1..9a7d665 100644 --- a/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestSide.xml +++ b/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestSide.xml @@ -45,25 +45,15 @@ - + - - - - - - - - - - + + + + + - - - - - diff --git a/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestTroopGroup.xml b/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestTroopGroup.xml deleted file mode 100644 index a0706b0..0000000 --- a/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestTroopGroup.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestTroopList.xml b/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestTroopList.xml new file mode 100644 index 0000000..62c20b4 --- /dev/null +++ b/source/EnhancedBattleTest/Modules/EnhancedBattleTest/GUI/Prefabs/EnhancedBattleTestTroopList.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/EnhancedBattleTest/src/Config/BattleConfig.cs b/source/EnhancedBattleTest/src/Config/BattleConfig.cs index 25eef11..4b8a457 100644 --- a/source/EnhancedBattleTest/src/Config/BattleConfig.cs +++ b/source/EnhancedBattleTest/src/Config/BattleConfig.cs @@ -117,12 +117,114 @@ public BattleConfig(bool isMultiplayer) } } + public void Reset() + { + PlayerTeamConfig = new TeamConfig() + { + BannerKey = "11.14.14.1536.1536.768.768.1.0.0.160.0.15.512.512.769.764.1.0.0" + }; + EnemyTeamConfig = new TeamConfig() + { + BannerKey = "11.12.12.4345.4345.768.768.1.0.0.462.13.13.512.512.769.764.1.0.0" + }; + BattleTypeConfig = new BattleTypeConfig(); + MapConfig = new MapConfig(); + SiegeMachineConfig = new SiegeMachineConfig(); + if (!EnhancedBattleTestSubModule.IsMultiplayer) + { + PlayerTeamConfig.Generals = new TroopGroupConfig(false, true) + { + Troops = new List + { + new TroopConfig(false, "lord_4_6", 1), + new TroopConfig(false, "lord_4_1", 1), + new TroopConfig(false, "lord_4_25", 1), + } + }; + PlayerTeamConfig.HasGeneral = true; ; + PlayerTeamConfig.TroopGroups = new TroopGroupConfig[] + { + new TroopGroupConfig(false) + { + Troops = new List() + { + new TroopConfig(false, "vlandian_infantry", 40, 0), + new TroopConfig(false, "vlandian_billman", 40, 0), + } + }, + new TroopGroupConfig(false) + { + Troops = new List() + { + new TroopConfig(false, "vlandian_sharpshooter", 30, 0), + new TroopConfig(false, "vlandian_militia_archer", 30, 0), + } + }, + new TroopGroupConfig(false) + { + Troops = new List() + { + new TroopConfig(false, "vlandian_banner_knight", 30, 0), + new TroopConfig(false, "vlandian_champion", 30), + } + }, + new TroopGroupConfig(false), + new TroopGroupConfig(false), + new TroopGroupConfig(false), + new TroopGroupConfig(false), + new TroopGroupConfig(false), + }; + EnemyTeamConfig.Generals = new TroopGroupConfig(false, true) + { + Troops = new List + { + new TroopConfig(false, "lord_2_2", 1), + new TroopConfig(false, "lord_2_4", 1), + new TroopConfig(false, "lord_2_111", 1), + } + }; + EnemyTeamConfig.HasGeneral = true; + EnemyTeamConfig.TroopGroups = new TroopGroupConfig[] + { + new TroopGroupConfig(false) + { + Troops = new List() + { + new TroopConfig(false, "sturgian_veteran_warrior", 40, 0), + new TroopConfig(false, "sturgian_spearman", 40, 0), + } + }, + new TroopGroupConfig(false) + { + Troops = new List() + { + new TroopConfig(false, "sturgian_militia_archer", 30, 0), + new TroopConfig(false, "sturgian_archer", 30, 0), + } + }, + new TroopGroupConfig(false) + { + Troops = new List() + { + new TroopConfig(false, "druzhinnik", 30, 0), + new TroopConfig(false, "sturgian_horse_raider", 30), + } + }, + new TroopGroupConfig(false), + new TroopGroupConfig(false), + new TroopGroupConfig(false), + new TroopGroupConfig(false), + new TroopGroupConfig(false), + }; + } + } + public static BattleConfig Deserialize(bool isMultiplayer) { try { XmlSerializer serializer = new XmlSerializer(typeof(BattleConfig)); - var filePath = Path.Combine(SaveFolderPath(), isMultiplayer ? "mpconfig.xml" : "spconfig.xml"); + var filePath = Path.Combine(SaveFolderPath(), isMultiplayer ? "mpconfig.xml" : "spconfig-v2.xml"); using TextReader reader = new StreamReader(filePath); var result = (BattleConfig)serializer.Deserialize(reader); return result; @@ -140,7 +242,7 @@ public void Serialize(bool isMultiplayer) try { EnsureSaveDirectory(); - var filePath = Path.Combine(SaveFolderPath(), isMultiplayer ? "mpconfig.xml" : "spconfig.xml"); + var filePath = Path.Combine(SaveFolderPath(), isMultiplayer ? "mpconfig.xml" : "spconfig-v2.xml"); using TextWriter writer = new StreamWriter(filePath); XmlSerializer serializer = new XmlSerializer(typeof(BattleConfig)); serializer.Serialize(writer, this); diff --git a/source/EnhancedBattleTest/src/Config/TeamConfig.cs b/source/EnhancedBattleTest/src/Config/TeamConfig.cs index 1c9f196..eb2a36a 100644 --- a/source/EnhancedBattleTest/src/Config/TeamConfig.cs +++ b/source/EnhancedBattleTest/src/Config/TeamConfig.cs @@ -40,13 +40,9 @@ public string BannerKey public TeamConfig() - { - } - - public TeamConfig(bool isMultiplayer) { for (int i = 0; i < TroopGroups.Length; ++i) - TroopGroups[i] = new TroopGroupConfig(isMultiplayer); + TroopGroups[i] = new TroopGroupConfig(EnhancedBattleTestSubModule.IsMultiplayer); } } } diff --git a/source/EnhancedBattleTest/src/Data/EnhancedBattleTestSceneData.cs b/source/EnhancedBattleTest/src/Data/EnhancedBattleTestSceneData.cs index 918cfb9..b16632c 100644 --- a/source/EnhancedBattleTest/src/Data/EnhancedBattleTestSceneData.cs +++ b/source/EnhancedBattleTest/src/Data/EnhancedBattleTestSceneData.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using TaleWorlds.CampaignSystem; using TaleWorlds.Core; using TaleWorlds.Localization; @@ -88,7 +89,7 @@ public bool Equals(SceneData x, SceneData y) if (ReferenceEquals(x, null)) return false; if (ReferenceEquals(y, null)) return false; if (x.GetType() != y.GetType()) return false; - return x.Id == y.Id && x.Terrain == y.Terrain && Equals(x.TerrainTypes, y.TerrainTypes) && x.ForestDensity == y.ForestDensity && x.IsSiegeMap == y.IsSiegeMap && x.IsVillageMap == y.IsVillageMap; + return string.Equals(x.Id, y.Id, StringComparison.Ordinal) && x.Terrain == y.Terrain && x.IsSiegeMap == y.IsSiegeMap && x.IsVillageMap == y.IsVillageMap; } public int GetHashCode(SceneData obj) @@ -97,8 +98,6 @@ public int GetHashCode(SceneData obj) { var hashCode = (obj.Id != null ? obj.Id.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (int) obj.Terrain; - hashCode = (hashCode * 397) ^ (obj.TerrainTypes != null ? obj.TerrainTypes.GetHashCode() : 0); - hashCode = (hashCode * 397) ^ (int) obj.ForestDensity; hashCode = (hashCode * 397) ^ obj.IsSiegeMap.GetHashCode(); hashCode = (hashCode * 397) ^ obj.IsVillageMap.GetHashCode(); return hashCode; diff --git a/source/EnhancedBattleTest/src/EnhancedBattleTestSubModule.cs b/source/EnhancedBattleTest/src/EnhancedBattleTestSubModule.cs index b5a37d8..e884fcd 100644 --- a/source/EnhancedBattleTest/src/EnhancedBattleTestSubModule.cs +++ b/source/EnhancedBattleTest/src/EnhancedBattleTestSubModule.cs @@ -1,11 +1,11 @@ -using HarmonyLib; -using System; -using System.IO; -using System.Reflection; using EnhancedBattleTest.Data; using EnhancedBattleTest.GameMode; using EnhancedBattleTest.Patch; using EnhancedBattleTest.UI; +using HarmonyLib; +using System; +using System.IO; +using System.Reflection; using TaleWorlds.Core; using TaleWorlds.Library; using TaleWorlds.Localization; diff --git a/source/EnhancedBattleTest/src/GameMode/EnhancedBattleTestSingleplayerGameManager.cs b/source/EnhancedBattleTest/src/GameMode/EnhancedBattleTestSingleplayerGameManager.cs index 532d8e2..4cf8c95 100644 --- a/source/EnhancedBattleTest/src/GameMode/EnhancedBattleTestSingleplayerGameManager.cs +++ b/source/EnhancedBattleTest/src/GameMode/EnhancedBattleTestSingleplayerGameManager.cs @@ -2,6 +2,7 @@ using SandBox; using TaleWorlds.Core; using TaleWorlds.Engine; +using TaleWorlds.ModuleManager; using TaleWorlds.MountAndBlade; using Path = System.IO.Path; @@ -80,8 +81,8 @@ private void InitializeGameTexts(GameTextManager gameTextManager) //gameTextManager.LoadGameTexts(BasePath.Name + "Modules/Native/ModuleData/global_strings.xml"); //gameTextManager.LoadGameTexts(BasePath.Name + "Modules/Native/ModuleData/module_strings.xml"); //gameTextManager.LoadGameTexts(BasePath.Name + "Modules/Native/ModuleData/native_strings.xml"); - gameTextManager.LoadGameTexts(Path.Combine(EnhancedBattleTestSubModule.ModuleFolderPath, "ModuleData", - "module_strings.xml")); + gameTextManager.LoadGameTexts(ModuleHelper.GetXmlPath(EnhancedBattleTestSubModule.ModuleId, + "module_strings")); } } } diff --git a/source/EnhancedBattleTest/src/GameMode/EnhancedBattleTestState.cs b/source/EnhancedBattleTest/src/GameMode/EnhancedBattleTestState.cs index 1d6dcd2..4860b3b 100644 --- a/source/EnhancedBattleTest/src/GameMode/EnhancedBattleTestState.cs +++ b/source/EnhancedBattleTest/src/GameMode/EnhancedBattleTestState.cs @@ -4,9 +4,11 @@ using System.Linq; using System.Xml.Serialization; using EnhancedBattleTest.Data; +using System.Reflection; using TaleWorlds.CampaignSystem; using TaleWorlds.Core; using TaleWorlds.Library; +using TaleWorlds.ModuleManager; using TaleWorlds.MountAndBlade.CustomBattle; namespace EnhancedBattleTest.GameMode @@ -26,8 +28,9 @@ public EnhancedBattleTestState() private void InitializeScenes() { - var filePath = Path.Combine(EnhancedBattleTestSubModule.ModuleFolderPath, - "ModuleData", "enhanced_battle_test_scenes.xml"); + var filePath = + Path.Combine(ModuleHelper.GetXmlPath(EnhancedBattleTestSubModule.ModuleId, + "enhanced_battle_test_scenes")); XmlSerializer serializer = new XmlSerializer(typeof(List)); try { @@ -36,11 +39,14 @@ private void InitializeScenes() .Select(data => new SceneData(data)) .ToList(); var customGame = new CustomGame(); - customGame.LoadCustomBattleScenes(BasePath.Name + - "Modules/CustomBattle/ModuleData/custom_battle_scenes.xml"); + customGame.LoadCustomBattleScenes(ModuleHelper.GetXmlPath("CustomBattle", + "custom_battle_scenes")); Scenes.AddRange(customGame.CustomBattleScenes.Select(data => new SceneData(data))); - GameSceneDataManager.Instance.LoadSPBattleScenes(BasePath.Name + "Modules/Sandbox/ModuleData/sp_battle_scenes.xml"); + //GameSceneDataManager.Instance.LoadSPBattleScenes( + // ModuleHelper.GetXmlPath("SandBox", "sp_battle_scenes")); + ClearSceneDataManager(); Scenes.AddRange(GameSceneDataManager.Instance.SingleplayerBattleScenes.Select(data => new SceneData(data))); + ClearSceneDataManager(); Scenes = Scenes.Distinct(new SceneDataComparer()).ToList(); } catch @@ -53,5 +59,12 @@ private void InitializeScenes() // serializer.Serialize(writer, _scenes.Select(data => new SerializedSceneData(data)).ToList()); //} } + + private void ClearSceneDataManager() + { + // Todo: Check the code related to GameSceneDataManager._instance to see whether _instance is correctly cleared by official code. + typeof(GameSceneDataManager)?.GetType() + .GetField("_instance", BindingFlags.NonPublic | BindingFlags.Static)?.SetValue(null, null); + } } } diff --git a/source/EnhancedBattleTest/src/SinglePlayer/Config/SPCharacterConfig.cs b/source/EnhancedBattleTest/src/SinglePlayer/Config/SPCharacterConfig.cs index 3d7681f..f77f6f1 100644 --- a/source/EnhancedBattleTest/src/SinglePlayer/Config/SPCharacterConfig.cs +++ b/source/EnhancedBattleTest/src/SinglePlayer/Config/SPCharacterConfig.cs @@ -56,7 +56,7 @@ public override void CopyFrom(CharacterConfig other) public SPCharacterConfig() { - CharacterId = TaleWorlds.Core.Game.Current.ObjectManager.GetObjectTypeList().First().StringId; + CharacterId = Game.Current.ObjectManager.GetObjectTypeList().First().BasicTroop.StringId; } public SPCharacterConfig(string id, float femaleRatio = 0) diff --git a/source/EnhancedBattleTest/src/UI/EnhancedBattleTestVM.cs b/source/EnhancedBattleTest/src/UI/EnhancedBattleTestVM.cs index 2e58337..e034d49 100644 --- a/source/EnhancedBattleTest/src/UI/EnhancedBattleTestVM.cs +++ b/source/EnhancedBattleTest/src/UI/EnhancedBattleTestVM.cs @@ -203,6 +203,10 @@ public bool IsValid() private void RecoverConfig() { MapSelectionGroup.SearchText = _config.MapConfig.MapNameSearchText; + if (MapSelectionGroup.SearchText.IsStringNoneOrEmpty()) + { + MapSelectionGroup.SearchText = new TextObject("{=7i1vmgQ9}Select a Map").ToString(); + } MapSelectionGroup.SceneLevelSelection.SelectedIndex = _config.MapConfig.SceneLevel - 1; switch (_config.MapConfig.BreachedWallCount) { diff --git a/source/EnhancedBattleTest/src/UI/MapSelectionGroupVM.cs b/source/EnhancedBattleTest/src/UI/MapSelectionGroupVM.cs index 86beef9..4d48d0f 100644 --- a/source/EnhancedBattleTest/src/UI/MapSelectionGroupVM.cs +++ b/source/EnhancedBattleTest/src/UI/MapSelectionGroupVM.cs @@ -1,8 +1,8 @@ -using System; +using EnhancedBattleTest.Config; +using EnhancedBattleTest.Data; +using System; using System.Collections.Generic; using System.Linq; -using EnhancedBattleTest.Config; -using EnhancedBattleTest.Data; using TaleWorlds.Core; using TaleWorlds.Core.ViewModelCollection; using TaleWorlds.Library; @@ -175,8 +175,16 @@ public void OnGameTypeChange(BattleType gameType) } foreach (MapItemVM availableMap in _availableMaps) MapSearchResults.Add(availableMap); - _searchText = new TextObject("{=7i1vmgQ9}Select a Map").ToString(); - OnPropertyChanged(nameof(SearchText)); + if (_availableMaps.Count == 0) + { + Utility.DisplayLocalizedText("str_ebt_no_map"); + } + else + { + SelectedMap = _availableMaps[_availableMaps.Count - 1]; + _searchText = new TextObject("{=7i1vmgQ9}Select a Map").ToString(); + OnPropertyChanged(nameof(SearchText)); + } } public void RandomizeAll() @@ -199,6 +207,7 @@ public void RandomizeMap() // ISSUE: explicit non-virtual call if (mapSearchResults != null && mapSearchResults.Count > 0) { + SearchText = ""; MapSearchResults[MBRandom.RandomInt(MapSearchResults.Count)].ExecuteSelection(); } } @@ -224,6 +233,7 @@ private void RefreshSearch(bool isAppending) if (map.MapName.IndexOf(_searchText, StringComparison.OrdinalIgnoreCase) >= 0 && MapSearchResults.All(m => m.MapName != map.MapName)) MapSearchResults.Add(map); } + _availableMaps.ForEach(m => m.UpdateSearchedText(_searchText)); } } @@ -367,7 +377,7 @@ public string TimeOfDayText get => _timeOfDayText; set { - if (!(value != _timeOfDayText)) + if (value == _timeOfDayText) return; _timeOfDayText = value; OnPropertyChangedWithValue(value, nameof(TimeOfDayText)); diff --git a/source/EnhancedBattleTest/src/UI/TroopGroupVM.cs b/source/EnhancedBattleTest/src/UI/TroopGroupVM.cs index 3cb5ec8..b13b26d 100644 --- a/source/EnhancedBattleTest/src/UI/TroopGroupVM.cs +++ b/source/EnhancedBattleTest/src/UI/TroopGroupVM.cs @@ -68,7 +68,7 @@ public TroopGroupVM(TeamConfig teamConfig, TroopGroupConfig config, TextObject g foreach (var troopConfig in config.Troops) { Troops.Add(new TroopVM(teamConfig, troopConfig, - isPlayerSide, battleTypeConfig)); + isPlayerSide, battleTypeConfig, isGeneralTroopGroup)); } UpdateEnabled(); @@ -102,7 +102,7 @@ public void PushTroop() ? new TroopConfig(EnhancedBattleTestSubModule.IsMultiplayer) : new TroopConfig(_config.Troops[_config.Troops.Count - 1]); _config.Troops.Add(newTroop); - Troops.Add(new TroopVM(_teamConfig, newTroop, _isPlayerSide, _battleTypeConfig)); + Troops.Add(new TroopVM(_teamConfig, newTroop, _isPlayerSide, _battleTypeConfig, IsGeneralTroopGroup)); UpdateEnabled(); } diff --git a/source/EnhancedBattleTest/src/UI/TroopVM.cs b/source/EnhancedBattleTest/src/UI/TroopVM.cs index 87729ff..85bd33b 100644 --- a/source/EnhancedBattleTest/src/UI/TroopVM.cs +++ b/source/EnhancedBattleTest/src/UI/TroopVM.cs @@ -15,13 +15,16 @@ public class TroopVM : ViewModel public TextVM InvalidText { get; } - public TroopVM(TeamConfig teamConfig, TroopConfig config, bool isPlayerSide, BattleTypeConfig battleTypeConfig) + public bool IsGeneralTroop { get; } + + public TroopVM(TeamConfig teamConfig, TroopConfig config, bool isPlayerSide, BattleTypeConfig battleTypeConfig, bool isGeneralTroop = false) { CharacterButton = new CharacterButtonVM(teamConfig, config.Character, isPlayerSide, battleTypeConfig); NumberText = new TextVM(GameTexts.FindText("str_ebt_number")); Number = new NumberVM(config.Number, 0, 5000, true); Number.OnValueChanged += number => config.Number = number; InvalidText = new TextVM(GameTexts.FindText("str_ebt_invalid")); + IsGeneralTroop = isGeneralTroop; } public override void RefreshValues()