Skip to content

Commit 275ac71

Browse files
committed
support preset build tiles
Adds support for the "pregen" tiles that are included in EmbarkModules.xml to QudUX's sprite selection menu
1 parent 46d9a00 commit 275ac71

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

Screen Extenders/CharacterTileScreenExtender.cs

+32
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using static QudUX.Utilities.Logger;
1212
using QudUX.Concepts;
1313
using Newtonsoft.Json;
14+
using System.Xml;
1415

1516
namespace QudUX.ScreenExtenders
1617
{
@@ -136,6 +137,10 @@ public void InitBlueprintTiles(string query)
136137
.Where(bp => !bp.Tags.ContainsKey("BaseObject") && bp.Name.EndsWith(" Cherub"));
137138
Tiles = LoadBlueprintTiles(matches).OrderBy(tm => tm.Tile).ThenBy(tm => tm.ForegroundColorIndex).ToList();
138139
}
140+
else if (query == "character presets")
141+
{
142+
Tiles = LoadPresetTiles().OrderBy(tm => tm.Tile).ThenBy(tm => tm.ForegroundColorIndex).ToList();
143+
}
139144
else if (query.Length > 0)
140145
{
141146
var matches = GameObjectFactory.Factory.BlueprintList
@@ -264,6 +269,33 @@ public IEnumerable<TileMetadata> LoadBlueprintTiles(IEnumerable<GameObjectBluepr
264269
}
265270
}
266271

272+
public IEnumerable<TileMetadata> LoadPresetTiles()
273+
{
274+
List<string> embarkModuleFiles = new List<string>();
275+
embarkModuleFiles.Add(DataManager.FilePath("EmbarkModules.xml"));
276+
ModManager.ForEachFile("EmbarkModules.xml", delegate (string path) { embarkModuleFiles.Add(path); });
277+
foreach (string embarkModuleXmlPath in embarkModuleFiles)
278+
{
279+
if (File.Exists(embarkModuleXmlPath))
280+
{
281+
XmlDocument embarkModulesXml = new XmlDocument();
282+
embarkModulesXml.Load(DataManager.FilePath("EmbarkModules.xml"));
283+
XmlNodeList pregenNodes = embarkModulesXml.GetElementsByTagName("pregen");
284+
foreach (XmlNode pregenNode in pregenNodes)
285+
{
286+
string tilePath = pregenNode.Attributes["Tile"]?.Value;
287+
string detailColor = pregenNode.Attributes["Detail"]?.Value;
288+
string foregroundColor = IsPhotosynthetic ? "g" : pregenNode.Attributes["Foreground"]?.Value;
289+
string displayName = pregenNode.Attributes["Name"]?.Value;
290+
string blueprintPath = $"Character Presets > {displayName}";
291+
yield return new TileMetadata(tilePath, detailColor, foregroundColor, displayName, blueprintPath);
292+
}
293+
pregenNodes = null;
294+
embarkModulesXml = null;
295+
}
296+
}
297+
}
298+
267299
public string BlueprintPath(GameObjectBlueprint blueprint)
268300
{
269301
string path = string.Empty;

Screens/QudUX_CharacterTileScreen.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public ScreenReturn Show(GameObject targetBody)
4040
ScreenMode screenMode = ScreenMode.CoreTiles;
4141
List<string> tileCategories = new List<string>()
4242
{
43-
"Animals", "Humanoids", "Robots", "Plants and Fungi", "Cherubim", "Statues", "Furniture", "Other (search)"
43+
"Animals", "Humanoids", "Robots", "Plants and Fungi", "Cherubim", "Statues", "Furniture", "Character Presets", "Other (search)"
4444
};
4545
List<List<string>> tileCategoryBlueprintNodes = new List<List<string>>()
4646
{
@@ -51,6 +51,7 @@ public ScreenReturn Show(GameObject targetBody)
5151
null,
5252
new List<string>() { "Statue", "Eater Hologram" },
5353
new List<string>() { "Furniture", "FoldingChair", "Vessel", "Catchbasin" },
54+
null,
5455
null
5556
//TODO: add "Pets" and "Sprites from Installed Mods" ?
5657
};
@@ -162,7 +163,7 @@ public ScreenReturn Show(GameObject targetBody)
162163
{
163164
tiler = new CharacterTileScreenExtender(targetBody, tileCategoryBlueprintNodes[tileCategoryIndex]);
164165
}
165-
else
166+
else //"Character Presets" or "Cherubim"
166167
{
167168
tiler = new CharacterTileScreenExtender(targetBody, category);
168169
}

0 commit comments

Comments
 (0)