#+AUTHOR:Shariq Shah
#+EMAIL:bluerriq@gmail.com
#+TITLE:Project Symmetry
* Project Symmetry

** What?
A topdown 2D shooter exploring symmetry.

** License
All the code in this repository is under GPLv3, see LICENSE for more information

** File format specifications
*** Entity
// Comment, Sample entity definition in file, paremeters left out are set to defaults
// Empty line at the end specifies end of entity definition
entity:   "Something"
position: 0 0 0
scale:    1 1 1
rotation: 0 0 0 1
model:    "suzanne.pamesh"
material: "blinn_phong"
diffuse_color: 1 0 0 1
diffuse_texture: "checkered.tga"
specular: 0.55

*** Configuration Variables a.k.a cfg-vars
// Comment
render_width: 1024
render_height: 1024
fog_enabled: 1
fog_color: 0.5 0.2 0.2 1
// There can be comments or empty newlines in between unlike entity definitions

ambient_light: 0.1 0.1 0.1 1
msaa: 1
msaa_levels: 8

*** Keybindings
*** Level/Scene
*** Materials
*** Mesh/Geometry
* Things TODO
** DONE Input
   - State "DONE"       from "TODO"       [2015-07-02 Thu 01:24]
- Input maps (addition/removal)
- Adding removing keys to input maps
- Changing map na
** DONE Shaders
   - State "DONE"       from "TODO"       [2015-07-11 Sat 17:57]
- set asset folder
- load/compile shader
** DONE Geometry
   - State "DONE"       from "TODO"       [2015-07-11 Sat 17:57]
** DONE change struct usage 
   - State "DONE"       from "TODO"       [2015-07-21 Tue 15:13]
** DONE change Array implementation
   - State "DONE"       from "TODO"       [2015-07-25 Sat 20:27]
** DONE resolve vec-types sizes
   - State "DONE"       from "TODO"       [2015-07-25 Sat 20:27]
** DONE Transform
   - State "DONE"       from "TODO"       [2015-07-26 Sun 18:01]
** DONE Deltatime
   - State "DONE"       from "TODO"       [2015-07-27 Mon 11:54]
** DONE Investigate about Exit() and at_exit() functions and whether to use them or not.
   - State "DONE"       from "TODO"       [2015-08-02 Sun 19:09]
** DONE Fix readme markdown
- State "DONE"       from "TODO"       [2015-12-10 Thu 16:36]
** DONE Framebuffer and resolution independent rendering
- State "DONE"       from "TODO"       [2016-05-27 Fri 18:02]
** DONE A simpler build system without dependencies
- State "DONE"       from "TODO"       [2016-05-27 Fri 14:50]
** DONE Remove dependencies
- State "DONE"       from "TODO"       [2017-02-26 Sun 01:46]
- glfw3
- glew
** DONE Remove Kazmath dependency
- State "DONE"       from "TODO"       [2015-12-10 Thu 16:36]
** DONE Entity
- State "DONE"       from "TODO"       [2015-09-15 Tue 12:17]
** TODO Positive and negative values for input_maps and returning corresponding values when they are true
** DONE Find a permanent solution for build system
- State "DONE"       from "TODO"       [2017-03-15 Wed 00:59]
** TODO Text rendering using freetype or stb lib
** DONE Textures
- State "DONE"       from "TODO"       [2015-10-09 Fri 18:47]
** DONE Camera
- State "DONE"       from "TODO"       [2015-08-19 Wed 13:30]
** DONE Test render
- State "DONE"       from "TODO"       [2015-08-19 Wed 13:30]
** TODO Bounding Boxes
- Recalculated bounding boxes for rotated meshes?
** TODO Fix input lag and other framerate related issues
** TODO File extension checking for asset loading
** DONE Materials
- State "DONE"       from "TODO"       [2015-10-13 Tue 19:38]
** DONE Mesh/Model
- State "DONE"       from "TODO"       [2015-10-13 Tue 19:38]
** TODO Add modifiers to input maps to enable combinations for example, c-x, m-k etc
** TODO Only allocate hashmap bucket when required
** DONE Heirarchical Transforms
** DONE Materials with textures
- State "DONE"       from "TODO"       [2015-10-15 Thu 21:21]
** DONE Lights!
- State "DONE"       from "TODO"       [2017-03-14 Tue 00:31]
** DONE Fix problems with texture units
- State "DONE"       from "TODO"       [2016-05-30 Mon 00:57]
** CANCELED Draw light volumes
- State "CANCELED"   from "TODO"       [2017-02-26 Sun 15:39] \\
  Deferred rendering on hold for now.
** DONE Fix problems with frustrum culling 
- State "DONE"       from "TODO"       [2017-03-26 Sun 01:33]
** TODO 2d drawing routines
- Sprite batching
** DONE Gui
- State "DONE"       from "TODO"       [2017-03-15 Wed 23:41]
** CANCELED Image based lighting?
- State "CANCELED"   from "TODO"       [2017-03-14 Tue 00:31] \\
  Not a requirement for current project
** CANCELED Deferred rendering?
- State "CANCELED"   from "TODO"       [2017-02-26 Sun 01:49] \\
  Sticking with forward rendering for now and focusing on tools etc.
** DONE Fix mouse bugs on windows
- State "DONE"       from "TODO"       [2017-03-25 Sat 17:27]
** TODO Configuration/Settings load/save handling
** DONE Fix mousewheel bugs and gui not responding to mousewheel input
- State "DONE"       from "TODO"       [2017-03-19 Sun 01:31]
** TODO Ability to mark meshes for debug rendering with possibility of different color for each?
** TODO Setup cross compilation with mingw or stick to msvc?
** TODO Add marking or queuing up custom meshes for debug render with particular transform and color for rendering bounding spheres for example
** DONE Toggleable debug drawing for meshes
- State "DONE"       from "TODO"       [2017-03-18 Sat 16:18]
** TODO Interleaved vbos for meshes and changes to blender exporter accordingly
** TODO Enumerate and save all the uniform and attribute positions in shader when it is added and cache them in shader object?
** TODO Physics/Collision detection in 2d
** TODO Complete gui integration
x Font selection
x Font atlas proper cleanup
- Decoupled event handling of gui and input if possible
- Custom rendering for gui
** TODO Allow passsing base path as commandline argument?
** TODO Variant -> String conversion procedure. Use in editor for debug var slots
** DONE Add strings and booleans to variant types
- State "DONE"       from "TODO"       [2017-03-29 Wed 00:23]
** DONE Fix Key release not being reported
- State "DONE"       from "TODO"       [2017-03-26 Sun 01:16]
** TODO Better handling incase assets folder is not found?
** DONE OpenAL not working in releasebuilds
- State "DONE"       from "TODO"       [2017-03-25 Sat 02:06]
** DONE 3d sound using OpenAL
- State "DONE"       from "TODO"       [2017-03-23 Thu 01:43]
** TODO Ogg format loading and playback
** TODO Stick with OpenAL or switch to SoLoud + SDL for sound?
** TODO Sound streaming
** TODO Implment missing sound source properties (inner/outer cone, getting sound source data)
** TODO Ingame console and console commands etc
** TODO Allow binding/unbinding input maps to functions at runtime, for example if input map "Recompute" is triggered, it would call some function that can recompute bounding spheres.
** TODO Better handling of wav format checking at load time
** TODO Array-based Hashmaps
** TODO Sprite sheet animations
** TODO Replace orgfile with simple text readme and reduce duplication?
** TODO Ray picking
** TODO Shadow maps
** TODO Log output to file on every run
** TODO Print processor stats and machine capabilites RAM etc on every run to log.
** TODO Milestone: Pong!
- In order to put things into perspective and get a feel for what really needs to be prioritized, a very small but actual game release is necessary.
- Release platforms: Windows and Linux
- Makefile additions. Try to compile game as a dynamically loaded library with ability to reload on recompile
- Separation between game and engine base
- Game .so with init, update and cleanup functions
- Configuration files and "cvars" load/reload
- Keybindings in config
- Log output on every run.
** TODO Do input maps really need to be queried by their string names?
** TODO Reloading all the things! (textures/shaders/models/settings/entities etc)
** TODO Separate Debug/Editor camera from the active camera in the scene that can be switched to at any time
** TODO Use hashmaps for debugvar slots in editor
** DONE Live data views in editor
- State "DONE"       from "TODO"       [2017-03-22 Wed 02:14]
** DONE Camera resize on window reisze
- State "DONE"       from "TODO"       [2017-03-20 Mon 15:22]
** DONE Resizable framebuffers and textures
- State "DONE"       from "TODO"       [2017-03-16 Thu 22:50]
** DONE Support for multiple color attachments in framebuffers?
- State "DONE"       from "TODO"       [2017-03-16 Thu 22:51]
** TODO Multisampled textures and framebuffers
** DONE Better way to store and manage textures attached to framebuffers
- State "DONE"       from "TODO"       [2017-03-16 Thu 22:51]
** TODO Validate necessary assets at game launch
** TODO Gamma correctness
** DONE Variant type
- State "DONE"       from "TODO"       [2017-03-22 Wed 02:14]
** TODO Log and debug/stats output in gui
** TODO Editor
** TODO Event Subsystem
** TODO Keybindings for gui?
** TODO Textual/Binary format for data serialization and persistance 
** TODO Better logging
** TODO Hatching/Ink rendering style
** DONE Fix frustum culling sometimes not working
- State "DONE"       from "TODO"       [2017-03-25 Sat 19:10]
** DONE Compile and test on windows
- State "DONE"       from "TODO"       [2017-03-14 Tue 00:32]
** TODO Array based string type comptible with cstring(char*)
** DONE Fix mouse bugs
- State "DONE"       from "TODO"       [2017-03-01 Wed 00:45]
** DONE Fix
** DONE issues with opengl context showing 2.1 only
- State "DONE"       from "TODO"       [2017-03-19 Sun 14:03]
- State "DONE"       from "TODO"       [2017-02-26 Sun 15:39]
** TODO Improve this readme
** TODO ???
** TODO Profit!
