You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
334 lines
15 KiB
334 lines
15 KiB
#+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
|
|
|
|
- Add to_string functions for major structs like transform, model etc to ease in conversion?
|
|
|
|
*** Configuration Variables a.k.a cfg-vars
|
|
# Comment
|
|
render_width: 1024
|
|
render_height: 1024
|
|
debug_draw_enabled: true
|
|
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: true
|
|
msaa_levels: 8
|
|
|
|
*** Keybindings
|
|
# All keys are parsed by comparing the output of SDL_GetKeyname
|
|
# Each line represents a keybinding
|
|
Move_Forward: W
|
|
|
|
# Multiple keys to a single binding are specified with commas
|
|
Move_Backward: S,Down
|
|
|
|
# Combinations are specified with a hyphen/dash
|
|
# When specifing combinations, modifiers(shift, alt, ctrl) always come before
|
|
# the hyphen and the actual key comes afterwards. At the moment modifier keys are
|
|
# forced to be on the left side i.e. Left Control, Left Shift and Left Alt.
|
|
Quit: Left Ctrl-Q
|
|
|
|
# Single modifier keys are allowed but multiple modifier keys without corresponding
|
|
# non-modifier key are not allowed
|
|
Sprint: Left Shift
|
|
|
|
*** Level/Scene
|
|
- Binary format with header attached at the top
|
|
- Save child entities first
|
|
- Copy paste all entites in the file one by one. Since the entites all look
|
|
the same in memory and are made up of tagged unions, a simple memcpy approach
|
|
should suffice. The problem is entity heirarchies. There are multiple approaches to
|
|
solve this problem.
|
|
-- Save a sorted list of entites to file i.e. before saving create a new list that does
|
|
not have the empty array slots in the entity list and then just copy and paste. This
|
|
is the simplest way to solve the problem as we don't have to worry about indexes of
|
|
parent/child entites in heirarchy. We can take the whole array and paste it to the
|
|
file but creating a copy of entity list for this purpose only would be slow and consume a lot of memory.
|
|
-- Instead of creating a copy of the entity list for sorting and saving, sort the actual entity list
|
|
and update all references as necessary then save the array to file.
|
|
-- Just write the name of the parent entity as parent. Make sure that all entity names are unique.
|
|
*** Materials
|
|
*** Mesh/Geometry
|
|
** Notes on entity Systems
|
|
- Fat entites with all related properties, i.e. position, mesh etc in them. Easy to serialize, memory friendly, simple to implement
|
|
but would require significant changes to the current codebase. e.g.
|
|
struct Entity
|
|
{
|
|
int type;
|
|
char* name;
|
|
struct Transform {....};
|
|
struct Camera {....};
|
|
|
|
// Separate properties unique to entity types by using unions
|
|
struct Renderable
|
|
{
|
|
struct Model {....};
|
|
union
|
|
{
|
|
struct Player
|
|
{
|
|
int score;
|
|
int bullets;
|
|
};
|
|
|
|
struct Enemy
|
|
{
|
|
int target;
|
|
};
|
|
}
|
|
}
|
|
};
|
|
- Change component implementation by using anonymous unions to simulate interfaces. e.g
|
|
struct Component
|
|
{
|
|
int type;
|
|
union
|
|
{
|
|
struct Transform {....};
|
|
struct Model {....};
|
|
struct Camera {....};
|
|
}
|
|
}
|
|
- Use handles for assets
|
|
- Use something similar to Variant to use as entity, not sure what or how
|
|
- Don't forget to think of the actual use-case and usage when coming up with a solution, don't build castles in the air!
|
|
|
|
* 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?
|
|
** DONE Fix input lag and other framerate related issues
|
|
- State "DONE" from "TODO" [2017-05-07 Sun 18:40]
|
|
** 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]
|
|
** DONE Add modifiers to input maps to enable combinations for example, c-x, m-k etc
|
|
- State "DONE" from "TODO" [2017-05-20 Sat 21:54]
|
|
** TODO Only allocate hashmap bucket when required
|
|
** TODO Mapping actions to keybindings, for example map action "Jump" to Space key etc
|
|
** 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]
|
|
** DONE Configuration/Settings load/save handling
|
|
- State "DONE" from "TODO" [2017-05-20 Sat 21:54]
|
|
** 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 Switch to completely static allocation of entites i.e. have a static array of MAX_ENTITIES size. This way we can store pointers to entites and they'll still be in an array and fast to process.
|
|
** DONE Setup cross compilation with mingw or stick to msvc?
|
|
- State "DONE" from "TODO" [2017-05-20 Sat 21:55]
|
|
- Done, going with mingw for now.
|
|
** 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 Remove components and switch to "Fat Entities" i.e. one entity struct contains all combinations
|
|
** TODO Use variants for material params
|
|
** TODO Improve Material Parameters/Pipeline Uniforms/Instance Uniforms are handled
|
|
** TODO Fix light rotation/direction bugs
|
|
** DONE In second refactor pass, use entities everywhere, no need to pass in transform and model separately for example since they're both part of the same entity anyway
|
|
- State "DONE" from "TODO" [2017-05-31 Wed 21:44]
|
|
** DONE Show SDL dialogbox if we cannot launch at all?
|
|
- State "DONE" from "TODO" [2017-05-26 Fri 00:41]
|
|
** DONE Writing back to config file
|
|
- State "DONE" from "TODO" [2017-05-08 Mon 00:57]
|
|
** DONE Reading from config file
|
|
- State "DONE" from "TODO" [2017-05-07 Sun 23:52]
|
|
** DONE Variant -> String conversion procedure. Use in editor for debug var slots
|
|
- State "DONE" from "TODO" [2017-05-07 Sun 18:43]
|
|
** 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?
|
|
** TODO Write entity to/from file
|
|
** 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
|
|
** DONE Fix frustum culling bugs
|
|
- State "DONE" from "TODO" [2017-05-31 Wed 23:38]
|
|
** DONE Array-based Hashmaps
|
|
- State "DONE" from "TODO" [2017-05-07 Sun 18:42]
|
|
** TODO Sprite sheet animations
|
|
** DONE Fix bugs with heirarchical transformations
|
|
- State "DONE" from "TODO" [2017-06-01 Thu 00:20]
|
|
** TODO Replace orgfile with simple text readme and reduce duplication?
|
|
** TODO Ray picking
|
|
** DONE Remove reduntant "settings" structures and move all configuration stuff to config variables
|
|
- State "DONE" from "TODO" [2017-06-05 Mon 02:25]
|
|
** TODO Shadow maps
|
|
** DONE Log output to file on every run
|
|
- State "DONE" from "TODO" [2017-05-26 Fri 00:41]
|
|
** 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
|
|
x Configuration files and "cvars" load/reload
|
|
x Keybindings in config
|
|
x Log output on every run.
|
|
- Implement entity load/save to file
|
|
? Prefab load/save to file
|
|
** 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 Make logging to file and console toggleable at complie-time or run-time
|
|
** DONE Add option to specify where to read/write files from instead of being hard-coded assets dir
|
|
- State "DONE" from "TODO" [2017-05-24 Wed 17:12]
|
|
** TODO Add default keybindings
|
|
** TODO Write default config/keybindings etc to file if none are found in preferences dir
|
|
** DONE Fix input map bugs
|
|
- State "DONE" from "TODO" [2017-05-31 Wed 23:19]
|
|
** TODO Wrap malloc and free calls in custom functions to track usage
|
|
** TODO Flatpak packaging for linux releases
|
|
** TODO Use hashmap for debugvar slots in editor
|
|
** TODO Use hashmap to store input maps
|
|
** 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 automatic window layout adjusting to the current window resolution
|
|
** DONE Editor
|
|
- State "DONE" from "TODO" [2017-06-20 Tue 01:12]
|
|
** 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*)
|
|
** TODO Separate game, engine and assets into different repositories. Combine as sub-repositories
|
|
** 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!
|
|
|