Add static/gift/trade generic editors

This commit is contained in:
Kurt
2019-11-30 18:10:28 -08:00
parent 7237f7264f
commit 4b3bf3380b
9 changed files with 63 additions and 12 deletions

View File

@@ -1,7 +1,7 @@
namespace pkNX.Structures
{
public class EncounterGift8Archive
public class EncounterGift8Archive : IFlatBufferArchive<EncounterGift8>
{
public EncounterGift8[] Encounters { get; set; }
public EncounterGift8[] Table { get; set; }
}
}

View File

@@ -1,7 +1,7 @@
namespace pkNX.Structures
{
public class EncounterStatic8Archive
public class EncounterStatic8Archive : IFlatBufferArchive<EncounterStatic8>
{
public EncounterStatic8[] Encounters { get; set; }
public EncounterStatic8[] Table { get; set; }
}
}

View File

@@ -0,0 +1,7 @@
namespace pkNX.Structures
{
public interface IFlatBufferArchive<T> where T : class
{
T[] Table { get; set; }
}
}

View File

@@ -2,7 +2,7 @@
namespace pkNX.Structures
{
public class EncounterTrade8Archive
public class EncounterTrade8Archive : IFlatBufferArchive<EncounterTrade8>
{
public EncounterTrade8[] Table { get; set; }
}

View File

@@ -266,7 +266,7 @@ public void DumpGifts()
{
var path = ROM.GetFile(GameFile.EncounterGift).FilePath;
var gifts = FlatBufferConverter.DeserializeFrom<EncounterGift8Archive>(path);
var table = TableUtil.GetTable(gifts.Encounters);
var table = TableUtil.GetTable(gifts.Table);
var fn = GetPath("GiftEncounters.txt");
File.WriteAllText(fn, table);
}
@@ -275,7 +275,7 @@ public void DumpStatic()
{
var path = ROM.GetFile(GameFile.EncounterStatic).FilePath;
var gifts = FlatBufferConverter.DeserializeFrom<EncounterStatic8Archive>(path);
var table = TableUtil.GetTable(gifts.Encounters);
var table = TableUtil.GetTable(gifts.Table);
var fn = GetPath("StaticEncounters.txt");
File.WriteAllText(fn, table);
}

View File

@@ -1,5 +1,6 @@
using System;
using System.IO;
using System.Linq;
using pkNX.Containers;
using pkNX.Game;
using pkNX.Structures;
@@ -203,7 +204,7 @@ private void PopWildEdit(string file)
using var form = new SSWE(ROM, s, h);
form.ShowDialog();
if (!form.Saved)
if (!form.Modified)
return;
var sd = FlatBufferConverter.SerializeFrom(s);
@@ -214,6 +215,49 @@ private void PopWildEdit(string file)
fp[0] = data_table.Write();
}
public void EditStatic()
{
var arc = ROM.GetFile(GameFile.EncounterStatic);
var data = arc[0];
if (CreateGenericEditor<EncounterStatic8Archive, EncounterStatic8>(ref data, "Static Encounters"))
arc[0] = data;
}
public void EditGift()
{
var arc = ROM.GetFile(GameFile.EncounterGift);
var data = arc[0];
if (CreateGenericEditor<EncounterGift8Archive, EncounterGift8>(ref data, "Gift Encounters"))
arc[0] = data;
}
public void EditTrade()
{
var arc = ROM.GetFile(GameFile.EncounterTrade);
var data = arc[0];
if (CreateGenericEditor<EncounterTrade8Archive, EncounterTrade8>(ref data, "Trade Encounters"))
arc[0] = data;
}
private bool CreateGenericEditor<TA, T1>(ref byte[] data, string title, string[] names = null) where TA : IFlatBufferArchive<T1> where T1 : class
{
var objs = FlatBufferConverter.DeserializeFrom<TA>(data);
if (names == null)
names = Enumerable.Range(1, objs.Table.Length).Select(z => z.ToString()).ToArray();
var result = PopEdit(objs.Table, title, names);
if (result)
data = FlatBufferConverter.SerializeFrom(objs);
return result;
}
private bool PopEdit<T>(T[] data, string title, string[] names) where T : class
{
var cache = new DirectCache<T>(data);
using var form = new GenericEditor<T>(cache, names, title);
form.ShowDialog();
return form.Modified;
}
public void EditMasterDump()
{
using var md = new DumperSWSH((GameManagerSWSH)ROM);

View File

@@ -1,7 +1,7 @@
namespace pkNX.Structures;
table EncounterGift8Archive {
Encounters:[EncounterGift8];
Table:[EncounterGift8];
}
table EncounterGift8 {

View File

@@ -1,7 +1,7 @@
namespace pkNX.Structures;
table EncounterStatic8Archive {
Encounters:[EncounterStatic8];
Table:[EncounterStatic8];
}
table EncounterStatic8 {

View File

@@ -52,7 +52,7 @@ public LocationHash(ulong hash, string loc)
}
}
public bool Saved { get; private set; }
public bool Modified { get; private set; }
public void LoadLocations()
{
@@ -136,7 +136,7 @@ void Save(EncounterList8[] arr, EncounterArchive8 arc)
private void B_Save_Click(object sender, EventArgs e)
{
SaveEntry(entry);
Saved = true;
Modified = true;
Close();
}