
Build System:
    ✔ Add a build option to do a build without the editor @done (9/17/2021, 7:25:08 PM)
    ☐ Modify .sh scripts to recognize the noeditor flag

Core:
    ☐ Add log settings to the state file
    ✔ Add run modes (Editor, Game, Test) to state file @done (9/15/2021, 7:27:03 PM)
    ✔ Add run mode interface class @done (9/15/2021, 8:22:35 PM)
    ☐ Read the window size and position on shutdown and write these to the state file
    
    Graphics:
        ✔ Decide on a font/text rendering system @done (9/7/2021, 1:39:53 PM)
        ✔ Add FreeType to the project @done (9/7/2021, 2:23:13 PM)
        ✔ Add a new class for font loading/management and text rendering @done (9/7/2021, 3:57:08 PM)
        ✔ Make the text renderer smarter about breaking up words on multiple lines @low @done (9/8/2021, 2:23:03 PM)
        ✔ Implement the Image creation methods @done (9/9/2021, 2:50:20 PM)
        ✔ Implement Render to Texture @done (9/15/2021, 7:00:33 PM)
        ✔ Adjust the font loading code to use the binary file buffer instead of ifstream @done (9/17/2021, 6:11:06 PM)

        
        GUI:
            ✔ Dear ImGui class with basic initialization @done (9/10/2021, 1:42:19 PM)
            ✔ Debug log window @done (9/10/2021, 4:44:48 PM)
            ✔ Add key to show debug log window @done (9/13/2021, 6:47:44 PM)
            ☐ Add checkboxes to disable log categories and levels
            ☐ Add LUA Console window

    Input:
        ✔ Port over the Element2D input system and adjust it to use glfw @done (9/8/2021, 8:20:07 PM)
        ✔ Add the InputManager to the core @done (9/9/2021, 2:57:06 PM)

    Audio:

    Scripting:
        Script Managment class:
            ☐ Manage LUA states
            ☐ Initialize new scripts
        
        Interface Class:
            ☐ Provide Methods that give access to the C++ code

Utils:
    ☐ Make Logger fully static (no need to ever GetInstance)
        ☐ Need to add a static initialize method

Game:
    ☐ Implement Run Mode interface class
    ☐ Load game project data
    ☐ Manage list of scenes
    ☐ Manage global scripts
    ☐ Handle Events from the core

    Scene:
        ☐ Manage scene scripts
        ☐ Manage game objects in scene

        Manage list of Regions:
            ☐ Track which regions should be loaded


    Region:
        ☐ List of renderable images for each layer

    Game Object:
        ☐ List of components

    Components:
        ☐ Transform
        ☐ Image
        ☐ Animation Controller
        ☐ Collider
        ☐ Script

    Animations:
        ☐ Animated Sprite class


Editor:
    ✔ Come up with project directory structure @done (9/17/2021, 6:46:44 PM)
    ☐ Implement Run Mode interface class
    ☐ Reference raw asset files in a "content" folder
    ☐ Platform independant file browsing
    ☐ Scan script files to make sure they don't overwrite globals
    
    Raw Asset Loaders:
        - Need classes to load raw resource files for the editor
        ☐ Raw Resource loader interface class
        ☐ Raw Image loader class
        ☐ Raw Sound loader class
        ☐ Raw font file loader class

    GUI Panels:
        Project Overview (Tree view):

        Game Viewport:

        Scene View:

        Tile Map Editor:
            ☐ Tile map canvas
            ☐ Tile map pallete
            ☐ Hideable grid
            ☐ Stamp creater

        Asset Viewer:

        Properties:
        

        

Assets:
    Types:
        - Classes that represent each resource Types
        ✔ Image class @done (9/16/2021, 2:46:34 PM)
        ☐ Font class
        ☐ Sound class
        ☐ Script class

    Loaders:
        - Need class (or classes?) to load resources from the packed format that the pipeline generates
        Come up with binary file formats for each type:
            ☐ .xml (This will probably be multiple different formats depending on what the .xml file is describing)
            ☐ Image
            ☐ Script
            ☐ Audio

    Asset Pipeline:
        ☐ Read through the contents folder and generate asset files in a custom format (useable by the engine)

Tester:
    - A special class that is used to unit-test features of the engine
    ☐ Implement Run Mode interface class
    ☐ Needs a timer to keep track of how long a test has run
    ☐ Main Tick method should use the timer to determine when to switch to the next test
    ☐ Add function for testing render to Texture
    ☐ Add function for testing input
    ☐ Add function for testing text rendering
    ☐ Add function for testing shape drawing
    ☐ Add function for testing image drawing
    