Skip to content
This repository has been archived by the owner on Jan 4, 2023. It is now read-only.

Commit

Permalink
Cleaning up MetaSprite API.
Browse files Browse the repository at this point in the history
  • Loading branch information
jessefreeman committed Jan 25, 2020
1 parent 72ad434 commit d64a6e5
Show file tree
Hide file tree
Showing 20 changed files with 541 additions and 265 deletions.
1 change: 0 additions & 1 deletion Runners/PixelVision8/Runner/Editors/GameEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
using PixelVision8.Engine;
using PixelVision8.Engine.Audio;
using PixelVision8.Engine.Chips;
using PixelVision8.Engine.Data;
using PixelVision8.Engine.Services;
using PixelVision8.Engine.Utils;
using PixelVision8.Runner.Chips;
Expand Down
167 changes: 167 additions & 0 deletions Runners/PixelVision8/Runner/Exporters/MetaSpriteExporter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
//
// Copyright (c) Jesse Freeman, Pixel Vision 8. All rights reserved.
//
// Licensed under the Microsoft Public License (MS-PL) except for a few
// portions of the code. See LICENSE file in the project root for full
// license information. Third-party libraries used by Pixel Vision 8 are
// under their own licenses. Please refer to those libraries for details
// on the license they use.
//
// Contributors
// --------------------------------------------------------
// This is the official list of Pixel Vision 8 contributors:
//
// Jesse Freeman - @JesseFreeman
// Christina-Antoinette Neofotistou @CastPixel
// Christer Kaitila - @McFunkypants
// Pedro Medeiros - @saint11
// Shawn Rakowski - @shwany
//

using System.Linq;
using System.Text;
using PixelVision8.Engine;
using PixelVision8.Runner.Utils;

namespace PixelVision8.Runner.Exporters
{
public class MetaSpriteExporter : AbstractExporter
{
private readonly IEngine targetEngine;
private StringBuilder sb;

public MetaSpriteExporter(string fileName, IEngine targetEngine) : base(fileName)
{
this.targetEngine = targetEngine;

CalculateSteps();
}

public override void CalculateSteps()
{
if (targetEngine.gameChip.TotalMetaSprites < 1)
return;

base.CalculateSteps();

// Create a new string builder
steps.Add(CreateStringBuilder);


steps.Add(MetaSpriteData);

// Save the final string builder
steps.Add(CloseStringBuilder);
}

private void MetaSpriteData()
{
var gameChip = targetEngine.gameChip;

// Save Data
sb.Append("\"metaSprites\":");

sb.Append("[");

JsonUtil.indentLevel++;
JsonUtil.GetLineBreak(sb, 1);

var savedData = gameChip.savedData;

for (int i = 0; i < gameChip.TotalMetaSprites; i++)
{
var metaSprite = gameChip.MetaSprite(i);
var childrenSprites = metaSprite.Sprites;
var totalChildrenSprites = childrenSprites.Count;

if (totalChildrenSprites > 0)
{

sb.Append("{");
JsonUtil.indentLevel++;
JsonUtil.GetLineBreak(sb, 1);

// var item = savedData.ElementAt(i);
sb.Append($"\"name\": \"{metaSprite.Name}\",");
JsonUtil.GetLineBreak(sb, 1);

sb.Append("\"sprites\":[");
JsonUtil.indentLevel++;
for (int j = 0; j < totalChildrenSprites; j++)
{
JsonUtil.GetLineBreak(sb, 1);
var childSprite = childrenSprites[j];
sb.Append("{");
sb.Append($"\"id\":{childSprite.Id},\"x\":{childSprite.X},\"y\":{childSprite.Y},\"flipH\":{childSprite.FlipH.ToString().ToLower()},\"flipV\":{childSprite.FlipV.ToString().ToLower()},\"colorOffset\":{childSprite.ColorOffset}");
sb.Append("},");
}

// Hack to remove the last comma from the sprite list
sb.Length = sb.Length - 1;

JsonUtil.GetLineBreak(sb, 1);
JsonUtil.indentLevel--;
// sb.Append(item.Key);
// sb.Append("\": \"");
// sb.Append(item.Value);
// sb.Append("\"");
// if (i > 0)
// {
// sb.Append(",");
// JsonUtil.GetLineBreak(sb, 1);
// }

// TODO need to add all the sprites and end this with the correct comma

sb.Append("]");
JsonUtil.indentLevel--;
JsonUtil.GetLineBreak(sb, 1);
sb.Append("},");
}

}

// Hack to remove the last comma
sb.Length = sb.Length - 1;

currentStep++;
}

private void CreateStringBuilder()
{
sb = new StringBuilder();

sb.Append("{");
JsonUtil.GetLineBreak(sb, 1);

JsonUtil.indentLevel++;


sb.Append("\"GameChip\":");

JsonUtil.GetLineBreak(sb);
sb.Append("{");
JsonUtil.GetLineBreak(sb, 1);

currentStep++;
}

private void CloseStringBuilder()
{
JsonUtil.indentLevel--;
JsonUtil.GetLineBreak(sb, 1);
sb.Append("]");

JsonUtil.indentLevel--;
JsonUtil.GetLineBreak(sb, 1);
sb.Append("}");

JsonUtil.GetLineBreak(sb);
sb.Append("}");

bytes = Encoding.UTF8.GetBytes(sb.ToString());

currentStep++;
}
}
}
2 changes: 1 addition & 1 deletion Runners/PixelVision8/Runner/Exporters/SongExporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
// Shawn Rakowski - @shwany
//

using PixelVision8.Engine;
using PixelVision8.Engine.Audio;
using PixelVision8.Engine.Chips;
using PixelVision8.Runner.Data;

namespace PixelVision8.Runner.Exporters
{
Expand Down
55 changes: 15 additions & 40 deletions Runners/PixelVision8/Runner/Exporters/SystemExporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,6 @@ private void SerializeDisplay(DisplayChip display)
sb.Append("\"layers\":");
sb.Append(display.layers);

// sb.Append(",");

JsonUtil.GetLineBreak(sb, 1);

JsonUtil.GetLineBreak(sb);
sb.Append("}");

Expand Down Expand Up @@ -201,8 +197,6 @@ private void SerializeColorChip(ColorChip colorChip)

sb.Append("\"debug\":");
sb.Append(colorChip.debugMode.ToString().ToLower());
sb.Append(",");
JsonUtil.GetLineBreak(sb, 1);

JsonUtil.GetLineBreak(sb);
sb.Append("}");
Expand Down Expand Up @@ -238,6 +232,15 @@ private void SerializeFontChip(FontChip fontChip)
sb.Append("\"FontChip\":");
JsonUtil.GetLineBreak(sb);
sb.Append("{");
JsonUtil.GetLineBreak(sb, 1);
// Mode
sb.Append("\"unique\":");
sb.Append(fontChip.unique.ToString().ToLower());
sb.Append(",");
JsonUtil.GetLineBreak(sb, 1);

sb.Append("\"pages\":");
sb.Append(fontChip.pages);

JsonUtil.GetLineBreak(sb);
sb.Append("}");
Expand All @@ -255,38 +258,11 @@ private void SerializeGameChip(GameChip gameChip)
sb.Append("{");
JsonUtil.GetLineBreak(sb, 1);

// Name
// sb.Append("\"name\":");
// sb.Append("\"");
// sb.Append(gameChip.name);
// sb.Append("\"");
// sb.Append(",");
// JsonUtil.GetLineBreak(sb, 1);
//
// // Description
// sb.Append("\"description\":");
// sb.Append("\"");
// sb.Append(gameChip.description);
// sb.Append("\"");
// sb.Append(",");
// JsonUtil.GetLineBreak(sb, 1);
//
// // Version
// sb.Append("\"version\":");
// sb.Append("\"");
// sb.Append(gameChip.version);
// sb.Append("\"");
// sb.Append(",");
// JsonUtil.GetLineBreak(sb, 1);
//
//
// // ext
// sb.Append("\"ext\":");
// sb.Append("\"");
// sb.Append(gameChip.ext);
// sb.Append("\"");
// sb.Append(",");
// JsonUtil.GetLineBreak(sb, 1);
// Total Meta Sprites
sb.Append("\"totalMetaSprites\":");
sb.Append(gameChip.TotalMetaSprites);
sb.Append(",");
JsonUtil.GetLineBreak(sb, 1);

// Lock Specs
sb.Append("\"lockSpecs\":");
Expand Down Expand Up @@ -491,14 +467,13 @@ private void SerializeTilemapChip(TilemapChip tilemapChip)

sb.Append("\"autoImport\":");
sb.Append(tilemapChip.autoImport.ToString().ToLower());
sb.Append(",");
JsonUtil.GetLineBreak(sb, 1);

JsonUtil.GetLineBreak(sb);
sb.Append("}");
sb.Append(",");

currentStep++;
}

}
}
3 changes: 1 addition & 2 deletions Runners/PixelVision8/Runner/PixelVision8Runner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -663,10 +663,9 @@ public override void RunGame()
base.RunGame();
}

public virtual bool Load(string path, RunnerMode newMode = RunnerMode.Playing,
public override bool Load(string path, RunnerMode newMode = RunnerMode.Playing,
Dictionary<string, string> metaData = null)
{

// Make sure we stop recording when loading a new game
if (recording) StopRecording();

Expand Down
26 changes: 4 additions & 22 deletions Runners/PixelVision8/Runner/Services/ExportService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -196,33 +196,11 @@ public void ExportGame(string path, IEngine engine, SaveFlags saveFlags)
}
}


// var fontExtension = ".font.png";
//
// var paths = files.Keys.Where(s => s.EndsWith(fontExtension)).ToArray();
//
// foreach (var fileName in paths)
// {
// var fontName = fileName.Split('.')[0];
//
// parser = LoadFont(fontName, files[fileName]);
// if (parser != null)
// AddExporter(parser);
// }
}
//


// if ((saveFlags & SaveFlags.TilemapFlags) == SaveFlags.TilemapFlags)
// {
//// ExportUtil.CreateTileMapFlagTexture(ref tex, engine);
//// SaveTextureToFile(path, "tilemap-flags", tex);
// }
//
if ((saveFlags & SaveFlags.Tilemap) == SaveFlags.Tilemap)
AddExporter(new TilemapJsonExporter(path + "tilemap.json", targetEngine));


// Step 8 (optional). Look for meta data and override the game
if ((saveFlags & SaveFlags.Meta) == SaveFlags.Meta)
AddExporter(new MetadataExporter(path + "info.json", targetEngine));
Expand All @@ -239,6 +217,10 @@ public void ExportGame(string path, IEngine engine, SaveFlags saveFlags)
if ((saveFlags & SaveFlags.SaveData) == SaveFlags.SaveData)
AddExporter(new SavedDataExporter(path + "saves.json", targetEngine));

// Step 11 (optional). Look for meta data and override the game
if ((saveFlags & SaveFlags.MetaSprites) == SaveFlags.MetaSprites)
AddExporter(new MetaSpriteExporter(path + "meta-sprites.json", targetEngine));

totalParsers = exporters.Count;
currentParserID = 0;

Expand Down
2 changes: 0 additions & 2 deletions SDK/Engine/Chips/Audio/IChannel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
// Shawn Rakowski - @shwany
//

using PixelVision8.Engine.Data;

namespace PixelVision8.Engine.Audio
{
/// <summary>
Expand Down
2 changes: 0 additions & 2 deletions SDK/Engine/Chips/Audio/Sfxr/SfxrSynthChannel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@
using System.Collections.Generic;
using System.IO;
using Microsoft.Xna.Framework.Audio;
using PixelVision8.Engine.Data;
using PixelVision8.Runner.Data;

namespace PixelVision8.Engine.Audio
{
Expand Down
1 change: 0 additions & 1 deletion SDK/Engine/Chips/Audio/SoundChip.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using PixelVision8.Engine.Audio;
using PixelVision8.Engine.Data;

namespace PixelVision8.Engine.Chips
{
Expand Down

0 comments on commit d64a6e5

Please sign in to comment.