Skip to content

Commit 57fce6b

Browse files
Add toggles for exporting only Solid or only non Solid LevelItem geo (#253)
* Add toggles for exporting only Solid or only non Solid LevelItem geo * Update toolstrip items to represent Visible or Collidable and to check the visible or solid flags accordingly for filtered export. Added ToolTips to both. --------- Co-authored-by: ItsEasyActually <darkspines35@gmail.com>
1 parent 39e3f23 commit 57fce6b

File tree

3 files changed

+108
-29
lines changed

3 files changed

+108
-29
lines changed

SALVL/ImportExport.cs

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ private void ImportLevelItem(bool multiple = false)
8989
}
9090

9191
// Export models from stage (Assimp)
92-
private void ExportLevelObj(string fileName, bool selectedOnly)
92+
private void ExportLevelObj(string fileName, bool selectedOnly, bool exportSolidOnly, bool exportVisibleOnly)
9393
{
9494
int stepCount = 0;
9595
int numSteps = 0;
@@ -98,13 +98,33 @@ private void ExportLevelObj(string fileName, bool selectedOnly)
9898
stepCount = LevelData.TextureBitmaps[LevelData.leveltexs].Length;
9999
numSteps = stepCount;
100100
}
101-
List<COL> cols = LevelData.geo.COL;
102-
List<GeoAnimData> anims = LevelData.geo.Anim;
101+
102+
//Sort out level data
103+
List<LevelItem> items;
104+
List<GeoAnimData> anims;
103105
if (selectedOnly)
104106
{
105-
cols = selectedItems.Items.OfType<LevelItem>().Select(a => a.CollisionData).ToList();
107+
items = selectedItems.Items.OfType<LevelItem>().ToList();
106108
anims = selectedItems.Items.OfType<LevelAnim>().Select(a => a.GeoAnimationData).ToList();
107109
}
110+
else
111+
{
112+
items = LevelData.LevelItems.ToList();
113+
anims = LevelData.geo.Anim;
114+
}
115+
116+
//Sort out collision and regular models
117+
if (exportSolidOnly)
118+
{
119+
items = items.Where(a => a.Solid == true).ToList();
120+
}
121+
else if (exportVisibleOnly)
122+
{
123+
items = items.Where(a => a.Visible == true).ToList();
124+
}
125+
126+
List<COL> cols = items.Select(a => a.CollisionData).ToList();
127+
108128
stepCount += cols.Count;
109129
stepCount += anims.Count;
110130

@@ -172,7 +192,7 @@ private void ExportLevelObj(string fileName, bool selectedOnly)
172192
}
173193

174194
// Export C structs
175-
private void exportStructs(string filename, bool selectedOnly)
195+
private void exportStructs(string filename, bool selectedOnly, bool exportOnlySolid, bool exportOnlyNonSolid)
176196
{
177197
LandTableFormat fmt = LevelData.geo.Format;
178198
switch (fmt)
@@ -209,11 +229,31 @@ private void exportStructs(string filename, bool selectedOnly)
209229
if (selectedItem is LevelItem)
210230
{
211231
LevelItem levelItem = selectedItem as LevelItem;
212-
string path = Path.Combine(filename, levelItem.CollisionData.Model.Name + ".c");
213-
using (StreamWriter sw = File.CreateText(path))
232+
233+
//Only export based on collision flag
234+
bool export = true;
235+
if (exportOnlySolid)
214236
{
215-
WriteStructMetadata(sw, false, fmt, texnames);
216-
levelItem.CollisionData.Model.ToStructVariables(sw, usetBasicDXFormatToolStripMenuItem.Checked, labels, texnames);
237+
if(levelItem.Solid == false)
238+
{
239+
export = false;
240+
}
241+
} else if(exportOnlyNonSolid)
242+
{
243+
if (levelItem.Solid == true)
244+
{
245+
export = false;
246+
}
247+
}
248+
249+
if (export)
250+
{
251+
string path = Path.Combine(filename, levelItem.CollisionData.Model.Name + ".c");
252+
using (StreamWriter sw = File.CreateText(path))
253+
{
254+
WriteStructMetadata(sw, false, fmt, texnames);
255+
levelItem.CollisionData.Model.ToStructVariables(sw, usetBasicDXFormatToolStripMenuItem.Checked, labels, texnames);
256+
}
217257
}
218258
}
219259
else if (selectedItem is LevelAnim)

SALVL/MainForm.Designer.cs

Lines changed: 37 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SALVL/MainForm.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1773,7 +1773,7 @@ private void exportAssimpSelectedItemsToolStripMenuItem_Click(object sender, Eve
17731773
{
17741774
if (a.ShowDialog() == DialogResult.OK)
17751775
{
1776-
ExportLevelObj(a.FileName, true);
1776+
ExportLevelObj(a.FileName, true, exportCollisionGeometry.Checked, exportVisibleGeometry.Checked);
17771777
}
17781778
}
17791779
}
@@ -1817,7 +1817,7 @@ private void exportAssimpLevelToolStripMenuItem_Click(object sender, EventArgs e
18171817
{
18181818
if (a.ShowDialog() == DialogResult.OK)
18191819
{
1820-
ExportLevelObj(a.FileName, false);
1820+
ExportLevelObj(a.FileName, false, exportCollisionGeometry.Checked, exportVisibleGeometry.Checked);
18211821
}
18221822
}
18231823
}
@@ -1827,7 +1827,7 @@ private void exportSelectedItemsStructsToolStripMenuItem_Click(object sender, Ev
18271827
using (FolderBrowserDialog folderBrowser = new FolderBrowserDialog() { })
18281828
if (folderBrowser.ShowDialog() == DialogResult.OK)
18291829
{
1830-
exportStructs(folderBrowser.SelectedPath, true);
1830+
exportStructs(folderBrowser.SelectedPath, true, exportCollisionGeometry.Checked, exportVisibleGeometry.Checked);
18311831
}
18321832
}
18331833

@@ -1836,7 +1836,7 @@ private void exportLevelStructsToolStripMenuItem_Click(object sender, EventArgs
18361836
using (SaveFileDialog sd = new SaveFileDialog() { DefaultExt = "c", Filter = "C file|*.c" })
18371837
if (sd.ShowDialog(this) == DialogResult.OK)
18381838
{
1839-
exportStructs(sd.FileName, false);
1839+
exportStructs(sd.FileName, false, exportCollisionGeometry.Checked, exportVisibleGeometry.Checked);
18401840
}
18411841
}
18421842

@@ -2442,5 +2442,23 @@ private void addLevelAnimationToolStripMenuItem_Click(object sender, EventArgs e
24422442
{
24432443
ImportLevelAnimation();
24442444
}
2445+
2446+
private void exportOnlyNonCollideableToolStripMenuItem_Click(object sender, EventArgs e)
2447+
{
2448+
exportVisibleGeometry.Checked = exportVisibleGeometry.Checked;
2449+
if(exportVisibleGeometry.Checked == true)
2450+
{
2451+
exportCollisionGeometry.Checked = false;
2452+
}
2453+
}
2454+
2455+
private void exportOnlyCollideableToolStripMenuItem_Click(object sender, EventArgs e)
2456+
{
2457+
exportCollisionGeometry.Checked = exportCollisionGeometry.Checked;
2458+
if (exportCollisionGeometry.Checked == true)
2459+
{
2460+
exportVisibleGeometry.Checked = false;
2461+
}
2462+
}
24452463
}
24462464
}

0 commit comments

Comments
 (0)