diff --git a/PixelVision8Lite.CoreDesktop.csproj b/PixelVision8Lite.CoreDesktop.csproj index 8c085bc3..7c318b06 100755 --- a/PixelVision8Lite.CoreDesktop.csproj +++ b/PixelVision8Lite.CoreDesktop.csproj @@ -35,6 +35,8 @@ + + @@ -164,6 +166,9 @@ + + + diff --git a/SDK/Editor/Editors/GameEditor.cs b/SDK/Editor/Editors/GameEditor.cs index da686463..763a8cc4 100755 --- a/SDK/Editor/Editors/GameEditor.cs +++ b/SDK/Editor/Editors/GameEditor.cs @@ -1149,7 +1149,7 @@ public bool LoadFont(string path) loadService.targetEngine = targetGame; - loadService.AddParser(new FontParser(pngReader, targetGame.ColorChip, targetGame.FontChip)); + loadService.AddParser(new FontParser("", pngReader, targetGame.ColorChip, targetGame.FontChip)); loadService.LoadAll(); diff --git a/SDK/Editor/Exporters/SpriteBuilderExporter.cs b/SDK/Editor/Exporters/SpriteBuilderExporter.cs index 22257a8b..a795c8dc 100755 --- a/SDK/Editor/Exporters/SpriteBuilderExporter.cs +++ b/SDK/Editor/Exporters/SpriteBuilderExporter.cs @@ -37,7 +37,7 @@ internal class SpriteDataParser : SpriteImageParser public int[] ids; public int totalSpritesInTexture; - public SpriteDataParser(IImageParser parser, ColorChip colorChip, SpriteChip spriteChip) : base(parser, + public SpriteDataParser(IImageParser parser, ColorChip colorChip, SpriteChip spriteChip) : base("", parser, colorChip, spriteChip) { } diff --git a/SDK/Lua/Services/LuaService.cs b/SDK/Lua/Services/LuaService.cs index bcd1e783..1c11f568 100755 --- a/SDK/Lua/Services/LuaService.cs +++ b/SDK/Lua/Services/LuaService.cs @@ -283,7 +283,7 @@ public ImageData ReadImage(WorkspacePath src, string maskHex = "#ff00ff", string - var imageParser = new SpriteImageParser(reader, tmpColorChip); + var imageParser = new SpriteImageParser("", reader, tmpColorChip); // Manually call each step imageParser.ParseImageData(); diff --git a/SDK/Runner/CSharpRunner.cs b/SDK/Runner/CSharpRunner.cs index 3254b8cb..4f18f9d8 100755 --- a/SDK/Runner/CSharpRunner.cs +++ b/SDK/Runner/CSharpRunner.cs @@ -121,7 +121,7 @@ where fileExtensions.Any(val => p.EndsWith(val)) var fileHelper = new FileLoadHelper(); var imageParser = new PNGParser(_graphics.GraphicsDevice); - var loader = new Loader(fileHelper, imageParser, _graphics.GraphicsDevice); + var loader = new Loader(fileHelper, imageParser); // Process the files loader.ParseFiles(gameFiles.ToArray(), _tmpEngine); diff --git a/SDK/Runner/Parsers/AbstractParser.cs b/SDK/Runner/Parsers/AbstractParser.cs index 493494fe..ca612ed0 100755 --- a/SDK/Runner/Parsers/AbstractParser.cs +++ b/SDK/Runner/Parsers/AbstractParser.cs @@ -31,7 +31,7 @@ public abstract class AbstractParser : IAbstractParser public int CurrentStep { get; protected set; } - public string SourcePath; + protected string SourcePath; public virtual byte[] bytes { get; set; } diff --git a/SDK/Runner/Parsers/ColorParser.cs b/SDK/Runner/Parsers/ColorParser.cs index 8d487638..18fb8e2c 100755 --- a/SDK/Runner/Parsers/ColorParser.cs +++ b/SDK/Runner/Parsers/ColorParser.cs @@ -36,8 +36,9 @@ public class ColorParser : ImageParser protected Color tmpColor; protected int totalColors; - public ColorParser(IImageParser parser, ColorChip colorChip) : base(parser) + public ColorParser(string sourceFile, IImageParser parser, ColorChip colorChip) : base(parser) { + SourcePath = sourceFile; this.colorChip = colorChip; // unique = colorChip.unique; magenta = Utilities.HexToColor(colorChip.maskColor); @@ -57,20 +58,7 @@ public override void CalculateSteps() public virtual void ReadColors() { - // TODO this should be removed in future releases, it's only here to support legacy games - - // If we are loading a legacy game and no system colors are defined, used the image parser's palette - - // if (colorChip.supportedColors == null) - // { - // string[] systemColors = imageParser.colorPalette.Select(c => ((ColorData) c).ToHex()).ToArray(); - //// - // for (int i = 0; i < systemColors.Length; i++) - // { - // colorChip.AddSupportedColor(systemColors[i]); - // } - // } - + // Parse colors as normal var srcColors = Parser.colorPixels; @@ -85,24 +73,14 @@ public virtual void ReadColors() if (tmpColor.A < 1) // && !ignoreTransparent) tmpColor = magenta; - - // if(tmpColor != magenta) - colors.Add(tmpColor); + colors.Add(tmpColor); } totalColors = colors.Count; CurrentStep++; } - // - // public void ResetColorChip() - // { - // // Clear the colors first - //// colorChip.Clear(); - // - // currentStep++; - // } - + public void UpdateColors() { for (var i = 0; i < totalColors; i++) @@ -116,4 +94,13 @@ public void UpdateColors() CurrentStep++; } } + + public partial class Loader + { + [FileParser("colors.png")] + public void ParseColors(string file, IPlayerChips engine) + { + AddParser(new ColorParser(file, _imageParser, engine.ColorChip)); + } + } } \ No newline at end of file diff --git a/SDK/Runner/Parsers/FontParser.cs b/SDK/Runner/Parsers/FontParser.cs index 768c0515..90c08b73 100755 --- a/SDK/Runner/Parsers/FontParser.cs +++ b/SDK/Runner/Parsers/FontParser.cs @@ -47,8 +47,7 @@ public class FontParser : SpriteImageParser private List uniqueFontColors; private int[] fontMap; - public FontParser(IImageParser parser, ColorChip colorChip, FontChip fontChip) : base(parser, - colorChip, fontChip) + public FontParser(string sourceFile, IImageParser parser, ColorChip colorChip, FontChip fontChip) : base(sourceFile, parser, colorChip, fontChip) { this.fontChip = fontChip; } @@ -109,20 +108,10 @@ protected override void ProcessSpriteData() public partial class Loader { - [FileParser("font.png", "Fonts")] - public void ParseFonts(string[] files, IPlayerChips engine) + [FileParser("font.png")] + public void ParseFonts(string file, IPlayerChips engine) { - for (int i = 0; i < files.Length; i++) - { - // We only want to parse a single sprite file so just take the first one in the list - // var imageParser = new PNGParser(files[i], _graphicsDevice, engine.ColorChip.maskColor); - - AddParser(new FontParser(_imageParser, engine.ColorChip, engine.FontChip) - { - SourcePath = files[i] - }); - } - + AddParser(new FontParser(file, _imageParser, engine.ColorChip, engine.FontChip)); } } } \ No newline at end of file diff --git a/SDK/Runner/Parsers/Loader.cs b/SDK/Runner/Parsers/Loader.cs index dc9e9c3f..6008da50 100755 --- a/SDK/Runner/Parsers/Loader.cs +++ b/SDK/Runner/Parsers/Loader.cs @@ -37,13 +37,11 @@ public partial class Loader public class FileParser : Attribute { public string FileType; - public string FlagType; public MethodInfo MethodInfo; - public FileParser(string fileType, string flagType) + public FileParser(string fileType) { FileType = fileType; - FlagType = flagType; } } @@ -60,16 +58,13 @@ public FileParser(string fileType, string flagType) public int TotalSteps; private readonly IFileLoader _fileLoadHelper; - private GraphicsDevice _graphicsDevice; - public List ParserMapping = new List(); private IImageParser _imageParser; - public Loader(IFileLoader fileLoadHelper, IImageParser imageParser, GraphicsDevice graphicsDevice = null) + public Loader(IFileLoader fileLoadHelper, IImageParser imageParser) { _fileLoadHelper = fileLoadHelper; - _graphicsDevice = graphicsDevice; _imageParser = imageParser; var methods = GetType().GetMethods().Where(m=>m.GetCustomAttributes(typeof(FileParser), false).Length > 0).ToArray(); @@ -152,7 +147,12 @@ public virtual void ParseFiles(string[] files, IPlayerChips engine) if (filesToParse.Length > 0) { - parserInfo.MethodInfo.Invoke(this, new object[]{filesToParse, engine}); + + for (int j = 0; j < filesToParse.Length; j++) + { + parserInfo.MethodInfo.Invoke(this, new object[]{filesToParse[j], engine}); + } + } } diff --git a/SDK/Runner/Parsers/MetaDataParser.cs b/SDK/Runner/Parsers/MetaDataParser.cs index a752512a..d7f21357 100755 --- a/SDK/Runner/Parsers/MetaDataParser.cs +++ b/SDK/Runner/Parsers/MetaDataParser.cs @@ -46,4 +46,13 @@ public void ApplySettings() } } + + public partial class Loader + { + [FileParser("info.json")] + public void ParseMetaData(string file, IPlayerChips engine) + { + AddParser(new MetaDataParser(file, _fileLoadHelper, engine)); + } + } } \ No newline at end of file diff --git a/SDK/Runner/Parsers/SpriteImageParser.cs b/SDK/Runner/Parsers/SpriteImageParser.cs index a7b456b0..b3996792 100755 --- a/SDK/Runner/Parsers/SpriteImageParser.cs +++ b/SDK/Runner/Parsers/SpriteImageParser.cs @@ -40,9 +40,11 @@ public class SpriteImageParser : ImageParser protected int x, y; public ImageData ImageData; - public SpriteImageParser(IImageParser parser, ColorChip colorChip, SpriteChip spriteChip = null) : base(parser) + public SpriteImageParser(string sourceFile, IImageParser parser, ColorChip colorChip, SpriteChip spriteChip = null) : base(parser) { + SourcePath = sourceFile; + Parser = parser; // this.chips = chips; @@ -249,15 +251,10 @@ public override void Dispose() public partial class Loader { - [FileParser("sprite.png", "Sprites")] - public void ParseSprites(string[] files, IPlayerChips engine) + [FileParser("sprite.png")] + public void ParseSprites(string file, IPlayerChips engine) { - - AddParser(new SpriteImageParser(_imageParser, engine.ColorChip, engine.SpriteChip) - { - SourcePath = files[0] - }); - + AddParser(new SpriteImageParser(file, _imageParser, engine.ColorChip, engine.SpriteChip)); } } } \ No newline at end of file diff --git a/SDK/Runner/Parsers/SystemParser.cs b/SDK/Runner/Parsers/SystemParser.cs index d893796b..fae23f08 100755 --- a/SDK/Runner/Parsers/SystemParser.cs +++ b/SDK/Runner/Parsers/SystemParser.cs @@ -678,4 +678,23 @@ public void ConfigureMetaSprites(Dictionary data) } } } + + public partial class Loader + { + [FileParser("data.png")] + public void ParseSystem(string file, IPlayerChips engine) + { + // if (!string.IsNullOrEmpty(files[0])) + // { + // var fileContents = Encoding.UTF8.GetString(ReadAllBytes(file)); + + var jsonParser = new SystemParser(file, _fileLoadHelper, engine); + + jsonParser.CalculateSteps(); + + while (jsonParser.completed == false) jsonParser.NextStep(); + // } + + } + } } \ No newline at end of file diff --git a/SDK/Runner/Parsers/TilemapJsonParser.cs b/SDK/Runner/Parsers/TilemapJsonParser.cs index 27c45e7d..dcb134b6 100755 --- a/SDK/Runner/Parsers/TilemapJsonParser.cs +++ b/SDK/Runner/Parsers/TilemapJsonParser.cs @@ -294,7 +294,16 @@ public virtual void ConfigureTilemapV1() StepCompleted(); } - - + } + + public partial class Loader + { + [FileParser("tilemap.json")] + public void ParseTilemapJson(string file, IPlayerChips engine) + { + + AddParser(new TilemapJsonParser(file, _fileLoadHelper, engine)); + + } } } \ No newline at end of file diff --git a/SDK/Runner/Parsers/TilemapParser.cs b/SDK/Runner/Parsers/TilemapParser.cs index 5908c7ef..617a26a6 100755 --- a/SDK/Runner/Parsers/TilemapParser.cs +++ b/SDK/Runner/Parsers/TilemapParser.cs @@ -29,8 +29,8 @@ public class TilemapParser : SpriteImageParser private readonly TilemapChip tilemapChip; private bool autoResize; - public TilemapParser(IImageParser parser, ColorChip colorChip, SpriteChip spriteChip, TilemapChip tilemapChip, bool autoResize = false) : - base(parser, colorChip, spriteChip) + public TilemapParser(string sourceFile, IImageParser parser, ColorChip colorChip, SpriteChip spriteChip, TilemapChip tilemapChip, bool autoResize = false) : + base(sourceFile, parser, colorChip, spriteChip) { this.tilemapChip = tilemapChip; @@ -101,18 +101,10 @@ protected override void ProcessSpriteData() public partial class Loader { - [FileParser("tilemap.png", "Tilemap")] - public void ParseTilemapImage(string[] files, IPlayerChips engine) + [FileParser("tilemap.png")] + public void ParseTilemapImage(string file, IPlayerChips engine) { - - // We only want to parse a single sprite file so just take the first one in the list - // var imageParser = new PNGParser(files[0], _graphicsDevice, engine.ColorChip.maskColor); - - AddParser(new TilemapParser(_imageParser, engine.ColorChip, engine.SpriteChip, engine.TilemapChip, true) - { - SourcePath = files[0] - }); - + AddParser(new TilemapParser(file, _imageParser, engine.ColorChip, engine.SpriteChip, engine.TilemapChip, true)); } } } \ No newline at end of file diff --git a/SDK/Runner/Parsers/WavParser.cs b/SDK/Runner/Parsers/WavParser.cs index f069d73a..3092692d 100755 --- a/SDK/Runner/Parsers/WavParser.cs +++ b/SDK/Runner/Parsers/WavParser.cs @@ -61,10 +61,10 @@ public void ConfigureSamples() public partial class Loader { - [FileParser(".wav", "Music")] - public void ParseWave(string[] files, IPlayerChips engine) + [FileParser(".wav")] + public void ParseWave(string[] file, IPlayerChips engine) { - AddParser(new WavParser(files, _fileLoadHelper, engine )); + AddParser(new WavParser(file, _fileLoadHelper, engine )); } } diff --git a/SDK/Runner/Services/LoadService.cs b/SDK/Runner/Services/LoadService.cs index c8045a67..83d267e4 100755 --- a/SDK/Runner/Services/LoadService.cs +++ b/SDK/Runner/Services/LoadService.cs @@ -65,6 +65,7 @@ public LoadService(IFileLoader fileLoadHelper) /// public string Message { get; protected set; } + public virtual void ParseFiles(string[] files, IPlayerChips engine, FileFlags fileFlags) { @@ -132,7 +133,7 @@ public virtual void ParseFiles(string[] files, IPlayerChips engine, FileFlags fi { //var imageParser = new PNGFileReader(_fileLoadHelper); - _loader.ParseFonts(paths.ToArray(), targetEngine); + _loader.ParseFonts(fileName, targetEngine); // _loader.AddParser(new FontParser(imageParser, targetEngine.ColorChip, targetEngine.FontChip){ // SourcePath = fileName, // MaskHex = targetEngine.ColorChip.maskColor @@ -168,14 +169,14 @@ public virtual void ParseFiles(string[] files, IPlayerChips engine, FileFlags fi // Step 12 (optional). Look for meta sprites if ((fileFlags & FileFlags.MetaSprites) == FileFlags.MetaSprites) LoadMetaSprites(files); - ParseExtraFileTypes(files, engine, fileFlags); + // ParseExtraFileTypes(files, engine, fileFlags); } - public virtual void ParseExtraFileTypes(string[] files, IPlayerChips engine, FileFlags fileFlags) - { - // TODO Override and add extra file parsers here. - } + // public virtual void ParseExtraFileTypes(string[] files, IPlayerChips engine, FileFlags fileFlags) + // { + // // TODO Override and add extra file parsers here. + // } public void LoadAll() { @@ -240,7 +241,8 @@ protected AbstractParser LoadMetaData(string[] files) { // var fileContents = Encoding.UTF8.GetString(ReadAllBytes(file)); - return new MetaDataParser(file, _fileLoadHelper, targetEngine); + _loader.ParseMetaData(file, targetEngine); + // return new MetaDataParser(file, _fileLoadHelper, targetEngine); } return null; @@ -256,9 +258,11 @@ protected void LoadTilemap(string[] files) { // var fileContents = Encoding.UTF8.GetString(ReadAllBytes(file)); - var jsonParser = new TilemapJsonParser(file, _fileLoadHelper, targetEngine); - - _loader.AddParser(jsonParser); + _loader.ParseTilemapJson(file, targetEngine); + + // var jsonParser = new TilemapJsonParser(file, _fileLoadHelper, targetEngine); + // + // _loader.AddParser(jsonParser); return; } @@ -269,7 +273,7 @@ protected void LoadTilemap(string[] files) if (!string.IsNullOrEmpty(file)) { - _loader.ParseTilemapImage(new []{file}, targetEngine); + _loader.ParseTilemapImage(file, targetEngine); //var imageParser = new PNGFileReader(_fileLoadHelper); // _loader.AddParser(new TilemapParser(imageParser, targetEngine.ColorChip, targetEngine.SpriteChip, targetEngine.TilemapChip) @@ -291,7 +295,7 @@ protected AbstractParser LoadSprites(string[] files) if (!string.IsNullOrEmpty(file)) { - _loader.ParseSprites(new []{file}, targetEngine); + _loader.ParseSprites(file, targetEngine); //var imageParser = new PNGFileReader(_fileLoadHelper); @@ -316,13 +320,15 @@ protected AbstractParser LoadColors(string[] files) if (!string.IsNullOrEmpty(file)) { + _loader.ParseColors(file, targetEngine); + // var tex = ReadTexture(ReadAllBytes(file)); // var imageParser = new PNGFileReader(_fileLoadHelper); - return new ColorParser(imageParser, targetEngine.ColorChip) - { - SourcePath = file - }; + // return new ColorParser(file, imageParser, targetEngine.ColorChip); + // { + // SourcePath = file + // }; } return null; @@ -335,13 +341,15 @@ protected void LoadSystem(string[] files) if (!string.IsNullOrEmpty(file)) { - // var fileContents = Encoding.UTF8.GetString(ReadAllBytes(file)); - - var jsonParser = new SystemParser(file, _fileLoadHelper, targetEngine); - - jsonParser.CalculateSteps(); - - while (jsonParser.completed == false) jsonParser.NextStep(); + + _loader.ParseSystem(file, targetEngine); + // // var fileContents = Encoding.UTF8.GetString(ReadAllBytes(file)); + // + // var jsonParser = new SystemParser(file, _fileLoadHelper, targetEngine); + // + // jsonParser.CalculateSteps(); + // + // while (jsonParser.completed == false) jsonParser.NextStep(); } } @@ -355,8 +363,8 @@ protected void LoadSounds(string[] files) if (!string.IsNullOrEmpty(file)) { // var fileContents = Encoding.UTF8.GetString(ReadAllBytes(file)); - - _loader.AddParser(new SystemParser(file, _fileLoadHelper, targetEngine)); + _loader.ParseSounds(file, targetEngine); + // _loader.AddParser(new SystemParser(file, _fileLoadHelper, targetEngine)); } } @@ -371,8 +379,8 @@ protected void LoadMusic(string[] files) if (!string.IsNullOrEmpty(file)) { // var fileContents = Encoding.UTF8.GetString(ReadAllBytes(file)); - - _loader.AddParser(new SystemParser(file, _fileLoadHelper, targetEngine)); + _loader.ParseMusic(file, targetEngine); + // _loader.AddParser(new SystemParser(file, _fileLoadHelper, targetEngine)); } } @@ -383,7 +391,10 @@ protected void LoadMetaSprites(string[] files) if (!string.IsNullOrEmpty(file)) { - _loader.AddParser(new SystemParser(file, _fileLoadHelper, targetEngine)); + + _loader.ParseMetaSprites(file, targetEngine); + + // _loader.AddParser(new SystemParser(file, _fileLoadHelper, targetEngine)); } } @@ -395,13 +406,43 @@ protected void LoadSaveData(string[] files) if (!string.IsNullOrEmpty(file)) { + _loader.ParseSaveData(file, targetEngine); // var fileContents = Encoding.UTF8.GetString(ReadAllBytes(file)); - _loader.AddParser(new SystemParser(file, _fileLoadHelper, targetEngine)); + // _loader.AddParser(new SystemParser(file, _fileLoadHelper, targetEngine)); } } } + + // Custom parsers + public partial class Loader + { + [FileParser("saves.json")] + public void ParseSaveData(string file, IPlayerChips engine) + { + AddParser(new SystemParser(file, _fileLoadHelper, engine)); + } + + [FileParser("sounds.json")] + public void ParseSounds(string file, IPlayerChips engine) + { + AddParser(new SystemParser(file, _fileLoadHelper, engine)); + } + + [FileParser("music.json")] + public void ParseMusic(string file, IPlayerChips engine) + { + AddParser(new SystemParser(file, _fileLoadHelper, engine)); + } + + [FileParser("meta-sprites.json")] + public void ParseMetaSprites(string file, IPlayerChips engine) + { + AddParser(new SystemParser(file, _fileLoadHelper, engine)); + } + + } } \ No newline at end of file