diff --git a/src/Content/strawberry-seeds.ttf b/src/Content/strawberry-seeds.ttf deleted file mode 100644 index c94216b..0000000 Binary files a/src/Content/strawberry-seeds.ttf and /dev/null differ diff --git a/src/Core/Game.bf b/src/Core/Game.bf index 98d6c42..97b9029 100644 --- a/src/Core/Game.bf +++ b/src/Core/Game.bf @@ -14,7 +14,7 @@ namespace Strawberry static public Game Game; } - public class Game + public abstract class Game { public readonly List VirtualInputs; public readonly String Title; @@ -30,6 +30,7 @@ namespace Strawberry public PlatformLayer PlatformLayer { get; private set; } public Batcher Batcher { get; private set; } public Color ClearColor = .Black; + public bool DebugOverlay = false; private bool* keyboardState; private int32 updateCounter; @@ -61,7 +62,6 @@ namespace Strawberry Tracker.[Friend]BuildAssignmentLists(); Assets.LoadAll(); - Strawberry.StrwConsole.Init(); } public ~this() @@ -83,7 +83,6 @@ namespace Strawberry Assets.DisposeAll(); Input.[Friend]Dispose(); - Strawberry.StrwConsole.Dispose(); delete Batcher; @@ -132,6 +131,10 @@ namespace Strawberry for (var i in VirtualInputs) i.Update(); + //Debug Overlay + if (Input.KeyPressed(.Grave)) + DebugOverlay = !DebugOverlay; + //Switch scenes if (switchToScene != scene) { @@ -154,8 +157,6 @@ namespace Strawberry Time.PreviousElapsed = Time.Elapsed; Time.Elapsed += Time.Delta; } - - Strawberry.StrwConsole.[Friend]Update(); } private void Render() @@ -163,16 +164,20 @@ namespace Strawberry PlatformLayer.GameRenderBegin(); Draw(); PlatformLayer.GameRenderEnd(); + + if (DebugOverlay) + { + PlatformLayer.EditorRenderBegin(); + DebugOverlay(); + PlatformLayer.EditorRenderEnd(); + } + PlatformLayer.RenderEnd(); } public virtual void Draw() { Scene?.Draw(); - - if (Strawberry.StrwConsole.Enabled) - Strawberry.StrwConsole.[Friend]Draw(); - Batcher.Draw(); } @@ -190,5 +195,10 @@ namespace Strawberry switchToScene = value; } } + + public virtual void DebugOverlay() + { + + } } } diff --git a/src/Static/StrwConsole.bf b/src/Static/StrwConsole.bf deleted file mode 100644 index 1ed04d0..0000000 --- a/src/Static/StrwConsole.bf +++ /dev/null @@ -1,239 +0,0 @@ -using System; -using System.Collections; -using System.Reflection; -using Strawberry; - -namespace Strawberry -{ - [AttributeUsage(.Method, .AlwaysIncludeTarget | .ReflectAttribute)] - public struct CommandAttribute : Attribute - { - public String Name; - public String Help; - - public this(String name, String help = "") - { - Name = name; - Help = help; - } - } - - [Reflect] - static public class StrwConsole - { - static public bool Open; - - static private bool enabled; - static private SDL2.SDLTTF.Font* font; - static private String entry; - static private List commandHistory; - static private List messages; - static private Dictionary commands; - - static public void Init() - { - bool* b = &enabled; - *b = false; - - enabled = true; - font = SDL2.SDLTTF.OpenFont("../../../../Strawberry/src/Content/strawberry-seeds.ttf", 8); - entry = new String(); - commandHistory = new List(); - messages = new List(); - commands = new Dictionary(); - - //Find commands - for (let type in Type.Types) - { - for (let method in type.GetMethods(.Static | .NonPublic | .Public)) - { - let attr = method.GetCustomAttribute(); - if (attr != .Err) - commands.Add(attr.Value.Name, new CommandInfo(method, attr.Value)); - } - } - } - - static public void Dispose() - { - SDL2.SDLTTF.CloseFont(font); - delete entry; - DeleteContainerAndItems!(commandHistory); - DeleteContainerAndItems!(messages); - for (let c in commands.Values) - delete c; - delete commands; - } - - static public bool Enabled - { - get => enabled; - set - { - enabled = value; - if (!enabled) - Open = false; - } - } - - static public void Log(StringView str) - { - messages.Add(new String(str)); - while (messages.Count > MessageRows) - { - delete messages[0]; - messages.RemoveAt(0); - } - } - - static public void Log(StringView str, params Object[] args) - { - let string = Calc.StringArgs(scope String(str), params args); - Log(string); - } - - [Reflect] - [Command("clear", "Clears the console window")] - static public void Clear() - { - ClearAndDeleteItems!(messages); - } - - static private void Update() - { - if (enabled) - { - if (Input.KeyPressed(.Grave)) - Open = !Open; - - if (Open) - { - Input.KeystrokesIntoString(entry, 0.25f, 0.05f); - if (Input.KeyPressed(.Delete)) - entry.Clear(); - if (Input.KeyPressed(.Return) && entry.Length > 0 && !String.IsNullOrWhiteSpace(entry)) - SubmitEntry(); - } - } - } - - static private void SubmitEntry() - { - let line = new String(entry); - commandHistory.Add(line); - Log(line); - - //Parse command and arguments - { - let list = String.StackSplit!(line, ' '); - list.RemoveAll(scope => String.IsNullOrWhiteSpace); - - if (commands.ContainsKey(list[0])) - { - Log(line); - let args = scope String[list.Count - 1]; - for (let i < args.Count) - args[i] = list[i + 1]; - commands[list[0]].Call(args); - } - else - Log("Command '{0}' not recognized.", list[0]); - } - - entry.Clear(); - } - - static private void Draw() - { - if (enabled && Open) - { - Game.Batcher.Rect(0, 0, Game.Width, Game.Height, .Black * 0.6f); - Game.Batcher.Rect(0, Game.Height - 14, Game.Width, 14, .Black * 0.6f); - - //Entry - if (entry.Length > 0) - Text(entry, 0, 0, .White); - if (Time.BetweenInterval(0.25f)) - Text("_", 0, entry.Length, .White); - - //Messages - for (int i = messages.Count - 1; i >= 0; i--) - Text(messages[i], messages.Count - i, 0, .White); - } - } - - static private void Text(String str, int row, int col, Color color) - { - Point pos = .(4 + 6 * col, Game.Height - 10 - 10 * row); - if (row > 0) - pos.Y -= 4; - - //Draw.Text(font, str, pos + .Down, .Black); - //Draw.Text(font, str, pos, color); - } - - static private int MessageRows => (int)Math.Ceiling((Game.Height - 14) / 10f); - - private class CommandInfo - { - public String Help; - public String Usage ~ delete _; - public MethodInfo Method; - - public this(MethodInfo method, CommandAttribute attr) - { - Help = attr.Help; - Method = method; - } - - public void Call(String[] args) - { - if (Method.ParamCount == 0) - Method.Invoke(null); - else - { - let objs = scope Object[Method.ParamCount]; - for (let i < objs.Count) - { - if (i < args.Count) - objs[i] = Convert(args[i], Method.GetParamType(i)); - else - objs[i] = Method.GetParamType(i).CreateValueDefault(); - } - - Method.Invoke(null, params objs); - } - } - } - - static private Object Convert(String str, Type type) - { - switch (type) - { - case typeof(StringView): - return str; - - case typeof(int): - return int.Parse(str).Value; - - case typeof(float): - return float.Parse(str).Value; - - case typeof(bool): - return bool.Parse(str).Value; - - case typeof(String): - Runtime.FatalError("String arguments not supported in commands. Use StringView instead."); - - default: - { - let name = scope String(); - type.GetName(name); - let error = Calc.StringArgs("{0} type arguments not supported in commands.", scope Object[]({ name })); - Runtime.FatalError(error); - } - - } - } - } -}