From 2e12e326efcf89fdc03617839b96d0eeae1252b9 Mon Sep 17 00:00:00 2001 From: Kurt Date: Mon, 26 Nov 2018 21:18:50 -0800 Subject: [PATCH] Make GameManager abstract --- pkNX.Game/GameManager.cs | 61 ++++++---------------- pkNX.Game/GameManagerGG.cs | 47 +++++++++++++++++ pkNX.WinForms/MainEditor/EditorProvider.cs | 2 +- 3 files changed, 63 insertions(+), 47 deletions(-) create mode 100644 pkNX.Game/GameManagerGG.cs diff --git a/pkNX.Game/GameManager.cs b/pkNX.Game/GameManager.cs index 5569e8c3..48fc1f0d 100644 --- a/pkNX.Game/GameManager.cs +++ b/pkNX.Game/GameManager.cs @@ -1,5 +1,4 @@ using System; -using System.IO; using pkNX.Containers; using pkNX.Structures; @@ -8,16 +7,13 @@ namespace pkNX.Game /// /// Manages fetching of game data. /// - public sealed class GameManager + public abstract class GameManager { private readonly GameLocation ROM; private readonly TextManager Text; // GameText private readonly GameFileMapping FileMap; public readonly GameInfo Info; - public string ROMPath => ROM.RomFS; - public string EXEPath => ROM.ExeFS; - /// /// Language to use when fetching string & graphic assets. /// @@ -31,14 +27,14 @@ public sealed class GameManager /// /// Generally useful game data that can be used by multiple editors. /// - public GameData Data { get; private set; } + public GameData Data { get; protected set; } /// /// Initializes a new for the input with initial . /// /// /// - public GameManager(GameLocation rom, int language) + protected GameManager(GameLocation rom, int language) { ROM = rom; Language = language; @@ -86,45 +82,7 @@ public void SaveAll(bool closing) Initialize(); } - private void Initialize() - { - if (ROM.Game == GameVersion.GG) - InitializeDataGG(); - } - - private void InitializeDataGG() - { - // initialize gametext - GetFilteredFolder(GameFile.GameText, z => Path.GetExtension(z) == ".dat"); - - // initialize common structures - Data = new GameData - { - MoveData = new DataCache(this[GameFile.MoveStats]) // mini - { - Create = z => new Move7(z), - Write = z => z.Write(), - }, - LevelUpData = new DataCache(this[GameFile.Learnsets]) // gfpak - { - Create = z => new Learnset6(z), - Write = z => z.Write(), - }, - - // folders - PersonalData = new PersonalTable(GetFilteredFolder(GameFile.PersonalStats, z => Path.GetFileNameWithoutExtension(z) == "personal_total").GetFiles().Result[0], Game), - MegaEvolutionData = new DataCache(GetFilteredFolder(GameFile.MegaEvolutions)) - { - Create = MegaEvolutionSet.ReadArray, - Write = MegaEvolutionSet.WriteArray, - }, - EvolutionData = new DataCache(GetFilteredFolder(GameFile.Evolutions)) - { - Create = (data) => new EvolutionSet7(data), - Write = evo => evo.Write(), - }, - }; - } + protected abstract void Initialize(); public FolderContainer GetFilteredFolder(GameFile type, Func filter = null) { @@ -132,5 +90,16 @@ public FolderContainer GetFilteredFolder(GameFile type, Func filte c.Initialize(filter); return c; } + + public static GameManager GetManager(GameLocation loc, int language) + { + switch (loc.Game) + { + case GameVersion.GG: + return new GameManagerGG(loc, language); + default: + throw new ArgumentException(nameof(loc.Game)); + } + } } } diff --git a/pkNX.Game/GameManagerGG.cs b/pkNX.Game/GameManagerGG.cs new file mode 100644 index 00000000..cab0ed06 --- /dev/null +++ b/pkNX.Game/GameManagerGG.cs @@ -0,0 +1,47 @@ +using System.IO; +using pkNX.Structures; + +namespace pkNX.Game +{ + public class GameManagerGG : GameManager + { + public GameManagerGG(GameLocation rom, int language) : base(rom, language) { } + + private const string Pikachu = "010003F003A34000"; + private const string Eevee = "0100187003A36000"; + + protected override void Initialize() + { + // initialize gametext + GetFilteredFolder(GameFile.GameText, z => Path.GetExtension(z) == ".dat"); + + // initialize common structures + Data = new GameData + { + MoveData = new DataCache(this[GameFile.MoveStats]) // mini + { + Create = z => new Move7(z), + Write = z => z.Write(), + }, + LevelUpData = new DataCache(this[GameFile.Learnsets]) // gfpak + { + Create = z => new Learnset6(z), + Write = z => z.Write(), + }, + + // folders + PersonalData = new PersonalTable(GetFilteredFolder(GameFile.PersonalStats, z => Path.GetFileNameWithoutExtension(z) == "personal_total").GetFiles().Result[0], Game), + MegaEvolutionData = new DataCache(GetFilteredFolder(GameFile.MegaEvolutions)) + { + Create = MegaEvolutionSet.ReadArray, + Write = MegaEvolutionSet.WriteArray, + }, + EvolutionData = new DataCache(GetFilteredFolder(GameFile.Evolutions)) + { + Create = (data) => new EvolutionSet7(data), + Write = evo => evo.Write(), + }, + }; + } + } +} \ No newline at end of file diff --git a/pkNX.WinForms/MainEditor/EditorProvider.cs b/pkNX.WinForms/MainEditor/EditorProvider.cs index 0909eb5e..c679f39e 100644 --- a/pkNX.WinForms/MainEditor/EditorProvider.cs +++ b/pkNX.WinForms/MainEditor/EditorProvider.cs @@ -57,7 +57,7 @@ private static EditorBase GetEditor(GameManager ROM) public static EditorBase GetEditor(string loc, int language) { var gl = GameLocation.GetGame(loc); - var gm = new GameManager(gl, language); + GameManager gm = GameManager.GetManager(gl, language); EditorBase editor = GetEditor(gm); editor.Location = loc; return editor;