mirror of
https://github.com/MaddyThorson/StrawberryBF.git
synced 2025-06-27 18:45:11 +08:00
Assets split off. Better Calc.Log
This commit is contained in:
parent
951cd6bd07
commit
2a9940d7bd
13
src/Assets/Asset.bf
Normal file
13
src/Assets/Asset.bf
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
namespace Strawberry
|
||||||
|
{
|
||||||
|
public abstract class Asset
|
||||||
|
{
|
||||||
|
public readonly String Path;
|
||||||
|
|
||||||
|
protected this(String path)
|
||||||
|
{
|
||||||
|
Path = path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
src/Assets/Font.bf
Normal file
21
src/Assets/Font.bf
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using SDL2;
|
||||||
|
|
||||||
|
namespace Strawberry
|
||||||
|
{
|
||||||
|
public class Font : Asset
|
||||||
|
{
|
||||||
|
private SDLTTF.Font* font;
|
||||||
|
|
||||||
|
private this(String path)
|
||||||
|
: base(path)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ~this()
|
||||||
|
{
|
||||||
|
SDLTTF.CloseFont(font);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -7,32 +7,8 @@ using MiniZ;
|
|||||||
|
|
||||||
namespace Strawberry
|
namespace Strawberry
|
||||||
{
|
{
|
||||||
public class Sprite
|
public class Sprite : Asset
|
||||||
{
|
{
|
||||||
private enum Modes
|
|
||||||
{
|
|
||||||
Indexed = 1,
|
|
||||||
Grayscale = 2,
|
|
||||||
RGBA = 4,
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum Chunks
|
|
||||||
{
|
|
||||||
OldPaletteA = 0x0004,
|
|
||||||
OldPaletteB = 0x0011,
|
|
||||||
Layer = 0x2004,
|
|
||||||
Cel = 0x2005,
|
|
||||||
CelExtra = 0x2006,
|
|
||||||
Mask = 0x2016,
|
|
||||||
Path = 0x2017,
|
|
||||||
FrameTags = 0x2018,
|
|
||||||
Palette = 0x2019,
|
|
||||||
UserData = 0x2020,
|
|
||||||
Slice = 0x2022
|
|
||||||
}
|
|
||||||
|
|
||||||
public readonly String Path;
|
|
||||||
|
|
||||||
public int Width { get; private set; }
|
public int Width { get; private set; }
|
||||||
public int Height { get; private set; }
|
public int Height { get; private set; }
|
||||||
|
|
||||||
@ -43,14 +19,13 @@ namespace Strawberry
|
|||||||
private Modes mode;
|
private Modes mode;
|
||||||
|
|
||||||
private this(String path)
|
private this(String path)
|
||||||
|
: base(path)
|
||||||
{
|
{
|
||||||
Path = new String(path);
|
|
||||||
Load();
|
Load();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ~this()
|
public ~this()
|
||||||
{
|
{
|
||||||
delete Path;
|
|
||||||
Unload();
|
Unload();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,6 +413,28 @@ namespace Strawberry
|
|||||||
|
|
||||||
// Data
|
// Data
|
||||||
|
|
||||||
|
private enum Modes
|
||||||
|
{
|
||||||
|
Indexed = 1,
|
||||||
|
Grayscale = 2,
|
||||||
|
RGBA = 4,
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum Chunks
|
||||||
|
{
|
||||||
|
OldPaletteA = 0x0004,
|
||||||
|
OldPaletteB = 0x0011,
|
||||||
|
Layer = 0x2004,
|
||||||
|
Cel = 0x2005,
|
||||||
|
CelExtra = 0x2006,
|
||||||
|
Mask = 0x2016,
|
||||||
|
Path = 0x2017,
|
||||||
|
FrameTags = 0x2018,
|
||||||
|
Palette = 0x2019,
|
||||||
|
UserData = 0x2020,
|
||||||
|
Slice = 0x2022
|
||||||
|
}
|
||||||
|
|
||||||
public class Frame
|
public class Frame
|
||||||
{
|
{
|
||||||
public SDL.Texture* Texture;
|
public SDL.Texture* Texture;
|
@ -15,7 +15,6 @@ namespace Strawberry
|
|||||||
|
|
||||||
public class Game
|
public class Game
|
||||||
{
|
{
|
||||||
public readonly Dictionary<String, Sprite> Sprites;
|
|
||||||
public readonly List<VirtualInput> VirtualInputs;
|
public readonly List<VirtualInput> VirtualInputs;
|
||||||
public readonly String Title;
|
public readonly String Title;
|
||||||
public readonly int Width;
|
public readonly int Width;
|
||||||
@ -84,10 +83,8 @@ namespace Strawberry
|
|||||||
VirtualInputs = new List<VirtualInput>();
|
VirtualInputs = new List<VirtualInput>();
|
||||||
Input.[Friend]Init(gamepadLimit);
|
Input.[Friend]Init(gamepadLimit);
|
||||||
|
|
||||||
Sprites = new Dictionary<String, Sprite>();
|
|
||||||
LoadSprites();
|
|
||||||
|
|
||||||
BuildTypeLists();
|
BuildTypeLists();
|
||||||
|
Assets.LoadAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ~this()
|
public ~this()
|
||||||
@ -107,10 +104,9 @@ namespace Strawberry
|
|||||||
delete VirtualInputs;
|
delete VirtualInputs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Assets.DisposeAll();
|
||||||
DisposeTypeLists();
|
DisposeTypeLists();
|
||||||
Input.[Friend]Dispose();
|
Input.[Friend]Dispose();
|
||||||
DisposeSprites();
|
|
||||||
Sprite.[Friend]Dispose();
|
|
||||||
Game = null;
|
Game = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,54 +226,6 @@ namespace Strawberry
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load Images
|
|
||||||
|
|
||||||
private void LoadSprites()
|
|
||||||
{
|
|
||||||
let root = scope String(ContentRoot);
|
|
||||||
root.Append(Path.DirectorySeparatorChar);
|
|
||||||
root.Append("Sprites");
|
|
||||||
if (Directory.Exists(root))
|
|
||||||
LoadSpritesDir(root);
|
|
||||||
else
|
|
||||||
Calc.Log("Content/Sprites folder does not exist!");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LoadSpritesDir(String directory)
|
|
||||||
{
|
|
||||||
for (let dir in Directory.EnumerateDirectories(directory))
|
|
||||||
{
|
|
||||||
let path = scope String();
|
|
||||||
dir.GetFilePath(path);
|
|
||||||
LoadSpritesDir(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let file in Directory.EnumerateFiles(directory, "*.ase*"))
|
|
||||||
{
|
|
||||||
let path = scope String();
|
|
||||||
file.GetFilePath(path);
|
|
||||||
if (path.EndsWith(".ase") || path.EndsWith(".aseprite"))
|
|
||||||
{
|
|
||||||
let sprite = new [Friend]Sprite(path);
|
|
||||||
|
|
||||||
path.Remove(0, ContentRoot.Length + 9);
|
|
||||||
path.RemoveFromEnd(path.Length - path.IndexOf('.'));
|
|
||||||
Sprites.Add(new String(path), sprite);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DisposeSprites()
|
|
||||||
{
|
|
||||||
for (let kv in Sprites)
|
|
||||||
{
|
|
||||||
delete kv.key;
|
|
||||||
delete kv.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
delete Sprites;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Type assignable caching
|
// Type assignable caching
|
||||||
|
|
||||||
private void BuildTypeLists()
|
private void BuildTypeLists()
|
||||||
|
62
src/Static/Assets.bf
Normal file
62
src/Static/Assets.bf
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace Strawberry
|
||||||
|
{
|
||||||
|
static public class Assets
|
||||||
|
{
|
||||||
|
static public Dictionary<String, Sprite> Sprites { get; private set; }
|
||||||
|
static public Dictionary<String, Font> Fonts { get; private set; }
|
||||||
|
|
||||||
|
static public void LoadAll()
|
||||||
|
{
|
||||||
|
Sprites = new Dictionary<String, Sprite>();
|
||||||
|
Load<Sprite>("Sprites", "*.ase*", Sprites);
|
||||||
|
|
||||||
|
Fonts = new Dictionary<String, Font>();
|
||||||
|
Load<Font>("Fonts", "*.ttf", Fonts);
|
||||||
|
}
|
||||||
|
|
||||||
|
static public void DisposeAll()
|
||||||
|
{
|
||||||
|
DeleteDictionaryAndKeysAndItems!(Sprites);
|
||||||
|
DeleteDictionaryAndKeysAndItems!(Fonts);
|
||||||
|
Sprite.[Friend]Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
static private void Load<T>(String directory, String wildcard, Dictionary<String, T> putInto) where T : Asset
|
||||||
|
{
|
||||||
|
let root = scope String(Game.ContentRoot);
|
||||||
|
root.Append(Path.DirectorySeparatorChar);
|
||||||
|
root.Append(directory);
|
||||||
|
if (Directory.Exists(root))
|
||||||
|
LoadDir<T>(root, wildcard, putInto);
|
||||||
|
else
|
||||||
|
Calc.Log("Content/{0} folder does not exist!", directory);
|
||||||
|
}
|
||||||
|
|
||||||
|
static private void LoadDir<T>(String directory, String wildcard, Dictionary<String, T> putInto) where T : Asset
|
||||||
|
{
|
||||||
|
//Recursive folder search
|
||||||
|
for (let dir in Directory.EnumerateDirectories(directory))
|
||||||
|
{
|
||||||
|
let path = scope String();
|
||||||
|
dir.GetFilePath(path);
|
||||||
|
LoadDir<T>(path, wildcard, putInto);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Load files
|
||||||
|
for (let file in Directory.EnumerateFiles(directory, wildcard))
|
||||||
|
{
|
||||||
|
let path = scope String();
|
||||||
|
file.GetFilePath(path);
|
||||||
|
let sprite = new [Friend]T(path);
|
||||||
|
|
||||||
|
path.Remove(0, Game.ContentRoot.Length + 9);
|
||||||
|
path.RemoveFromEnd(path.Length - path.IndexOf('.'));
|
||||||
|
putInto.Add(new String(path), sprite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -75,5 +75,24 @@ namespace Strawberry
|
|||||||
del(string);
|
del(string);
|
||||||
Debug.WriteLine(string);
|
Debug.WriteLine(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public void Log(StringView str, params Object[] args)
|
||||||
|
{
|
||||||
|
String string = scope String(str);
|
||||||
|
|
||||||
|
for (let i < args.Count)
|
||||||
|
{
|
||||||
|
String arg = scope String();
|
||||||
|
String num = scope String("{x}");
|
||||||
|
i.ToString(arg);
|
||||||
|
num.Replace("x", arg);
|
||||||
|
|
||||||
|
arg.Clear();
|
||||||
|
args[i].ToString(arg);
|
||||||
|
string.Replace(num, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.WriteLine(string);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user