A 3d fps game made in OpenGL
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.
 
 
 
 
Symmetry/todo.txt

321 lines
18 KiB

Todo:
- Display default mesh when selected entity type in editor does not have a mesh
- Allow picking and selecting other entity types in editor i.e. the ones that don't have meshes
- Separate entity types in entity heirarchy view by the entity type or use a tree view to show parent/child relation or use differnt colours for different entity types
- Finish mesh and material properties serialization to and from file
- Editor functionality to add entity from specific file to scene
- Scene read/write to file with scene file only containing names of
entity archetypes
- Console command to read/write scene to/from file
- Editor functionality to read/write scene to/from file
? Entity creator window to create new types of entities and write them
to disk
- Entity browser window which lists all existing entity types from
where new entities can be creating by dragging and dropping on to
the current scene
- Better, more accurate picking
- Editor related messages/notifications in the bottom status bar
? Disable entity picking when tool is in use or only allow picking when pressing ALT
- Disable editor event recievers on game mode change
- Editor Undo
- Duplicate with Ctrl-D
- Color picker
- Color palette, picker and dropper
- Key binding and function to snap editor camera to selected entity
location
- Implement resetting complete transform or just rotation, translation
or scale for selected entity
- Key binding and function to orient entity to camera orientation
- Display the name of the hovered entity either as a tooltip under the
cursor of in the top/bottom status bar
- Make lights and other entity types pickable
- Mouse warp to opposite side of the window when it reaches bounds
- Add other axis combinations like YZ and XY to transform tool
- Transformation space selection for translation, rotation and scale.
- Subscribe and Unsubscribe based on game mode changes
- Use actual selected entity's mesh for tool mesh when the entity already has a mesh and use a placeholder like a sphere when there is not mesh
- Add warning to genie build script when running on windows and WindowsSdkVersion cannot be found. This happens when the script is not run from vcvarsall command prompt
- Improve README and add a screenshot to make the repository ready for making it public
- Show Transformation deltas for example a line showing where we are to where we are going to be if we click and apply the selected transformation
- Refactor all global application state into 'Application_Context' struct. A single global instance of which is available everywhere
? Improve bounding sphere calculation
- Change the way lights are set as uniforms to remove snprintf calls per frame for every light attribute
- Filter Scene heirarchy by search using entity name
- Command interface that allows applying commands to selected entity like r x 30 would rotate the selected entity or entities on x axis by 30 degrees
- Quick scene filter and entity selection by popping up a menu which has list of entities and fuzzy matches them based on the typed name
- Screen mouse coordinates to world-coordinates for aiming
- Player projectiles and sounds
- Console command history
- Console command help
- Debug drawing/variable display that also works in game mode. Can be toggled with a console command. Can show variable values or plots their graphs or debug textures etc
- Space partitioning and scene handling
- Move Gui_State and Editor_State into game_state and modify usage as needed
- Get editor camera speed and other settings from config file
- Recompile Soloud on windows to use static sdl2 backend
- Refactor input sub-system to be the same as other sub-systems embedded
in game state.
- Figure out a way to reduce of remove snprintf calls from render code
- Re-Implement saving/loading scene to/from files
- Implement storing console's scroll location and restore it when console is toggled
- Implement collision/physics data serialization, read and write.
- Physics forces/torque etc
- Implement physics debug visualizations for other primitives and tri mesh shapes
- Serializing/Deserializing physics data
- Proper implementation of Scene struct with per-scene settings and configurations that can be loaded/saved to file instead of just dumping entities into a file
- Necessary basic editor additions like placing objects, scaling, rotating etc
- Add fallback shader
- Implement Game States
- Store Materials in new format supported by parser
- Add model description file which has the same syntax supported by parser and modify old blender exporter to conform to new standards
- Fix bugs with sound sources not updating
- Add creating distributable build and uploading to itch.io account support to GENie under windows and linux.
- Remove hardcoded numerical values from sscanf and other format strings.
? Recalculated bounding boxes for rotated meshes
? Wrap malloc and free calls in custom functions to track usage
? File extension checking for asset loading
? Only allocate hashmap bucket when required
- Mapping actions to keybindings, for example map action "Jump" to Space key etc
? Add marking or queuing up custom meshes for debug render with particular transform and color for rendering bounding spheres for example
? Interleaved vbos for meshes and changes to blender exporter accordingly
- Enumerate and save all the uniform and attribute positions in shader when it is added and cache them in shader object?
? Better handling incase assets folder is not found
- Write entity to/from file
- Ogg format loading and playback
- Implement HiDPI support
- Sound streaming
- Implment missing sound source properties (inner/outer cone, getting sound source data)
- Shadow maps
- Print processor stats and machine capabilites RAM etc on every run to log.
- Do input maps really need to be queried by their string names?
- Write default config/keybindings etc to file if none are found in preferences dir
- Multisampled textures and framebuffers
- Validate necessary assets at game launch
- Gamma correctness
- Log and debug/stats output in gui
- Textual/Binary format for data serialization and persistance
- Array based string type comptible with cstring(char*)
- Reduce fps on window focus loss or minimization
- ???
- Profit!
Improvements:
- Better naming semantics for example, init/deinit for initialization and cleanup and create/destroy when memory is allocated or deallocated
- Categorized entity list in editor for example different subtree for lights and static meshes
- Depth testing for editor grid
- Improve picking and automatically improve everything in editor
- Improve culling
- Allow scaling on all axes at once
- Improve grid/immediate mode drawing by switching to glDrawElements instead of glDrawArrays.
Bugs:
- Better handling of wav format checking at load time
- Fix light rotation/direction bugs
- Fix lights type not being correctly saved/loaded from file
- Fix bounding boxes not aligning in editor
- Investigate memory usage increase when window is minimized
- Fix hang on fullscreen toggle
- Fix axis lines not aligning with grid lines
- Fix arc angles resetting when rotating
- Fix shader preprocessor failing when the file in //include directive is empty
- Fix bug with blinn shader reaching maximum uniform number on mac
- Fix delete in editor not working when the cursor is hovering over scene heirarchy window
Done:
* Input
* Shaders
* Geometry
* change struct usage
* change Array implementation
* resolve vec-types sizes
* Transform
* Deltatime
* Investigate about Exit() and at_exit() functions and whether to use them or not.
* Fix readme markdown
* Framebuffer and resolution independent rendering
* A simpler build system without dependencies
* Remove dependencies
* Remove Kazmath dependency
* Entity
* Find a permanent solution for build system
* Textures
* Camera
* Test render
* Fix input lag and other framerate related issues
* Materials
* Mesh/Model
* Add modifiers to input maps to enable combinations for example, c-x, m-k etc
* Heirarchical Transforms
* Materials with textures
* Lights!
* Fix problems with texture units
* Fix problems with frustrum culling
* Gui
* Fix mouse bugs on windows
* Configuration/Settings load/save handling
* Fix mousewheel bugs and gui not responding to mousewheel input
* Setup cross compilation with mingw or stick to msvc?
* Toggleable debug drawing for meshes
* Font selection
* Font atlas proper cleanup
* 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
* Show SDL dialogbox if we cannot launch at all?
* Writing back to config file
* Reading from config file
* Variant -> String conversion procedure. Use in editor for debug var slots
* Add strings and booleans to variant types
* Fix Key release not being reported
* OpenAL not working in releasebuilds
* 3d sound using OpenAL
* Fix frustum culling bugs
* Array-based Hashmaps
* Fix bugs with heirarchical transformations
* Remove reduntant "settings" structures and move all configuration stuff to config variables
* Log output to file on every run
* Add option to specify where to read/write files from instead of being hard-coded assets dir
* Fix input map bugs
* Live data views in editor
* Camera resize on window reisze
* Resizable framebuffers and textures
* Support for multiple color attachments in framebuffers?
* Better way to store and manage textures attached to framebuffers
* Variant type
* Editor
* Fix frustum culling sometimes not working
* Compile and test on windows
* Fix mouse bugs
* Fix issues with opengl context showing 2.1 only
* Improve this readme
* Replace orgfile with simple text readme and reduce duplication
* Fix camera acting all weird when right click is held
* Fix README to conform with markdown syntax
* Added video driver selection to make game launch under wayland or x11 on linux.
* Separate game code into a dynamical library that can be reloaded at runtime.
* Move game, common and game library related code into separate folders.
* Fixed game crashing on exit after game library has been reloaded more than once.
* Made game compile and run under windows with visual studio 2017 using GENie
* Implemented file copy and file delete on windows and linux.
* Implemented a work-around for dll locking on windows by creating a copy of the game lib at launch and when reloading,
unloading the current dll, deleting it and creating new copy of the updated dll and loading that
* Added file copy and delete to platform api
* Made dll reloading workaround compatilble on linux
* Default keybindings as fallback
* Implemented writing scene to file
* Fixed space not being added after light entities are written to file by adding missing new-line
* Fixed error caused by the way eof was checked in scene file
* Camera fbo params are now written to file when entity is saved
* Fixed several bugs with entity loading
* Removed duplicate parsing logic
* Fixed bugs in stripping key name for input map
* Modify entity loading logic to use the new parsing code by parsing all entity properties into a hashmap first then recreating entity from that
* Implmented writing to file through the new Parser and Parser_Objects
* Changed Config to read/write using new Parser and Parser_Objects
* Implemented Reading/Writing keybindings using new parser object
* Replaced OpenAL with Soloud with SDL2 backend
* Implemented sound/listener loading from scene file
* Finished loading scene from file
* Initial implementation of immediate-mode batched sprite render
* Fixed bugs with shader include file pre-processor
* Fixed bugs with editor's camera property viewer
* Fixed bugs related to changing camera projection
* Fixed bugs with sprite batch renderer not working with projection matrix
* Fixed broken orthographic camera
* Implement necessary changes to run Soloud on linux
* Moved third party libs/include directories into root/lib and root/include. Put common includes like header-only libs into root/include/common and others which require platform specific stuff into root/include/linux etc.
* Got rid of pkg-confg and system-installed SDL2 dependancy on linux and instead put custom compiled SDL libs in libs folder similar to how we're handling it in windows
* Proper physics time-step and speed
* Proper handling of rigidbody associated with an entity and notifying it of movement or collision
* Added physics spheres and other primitive shapes
* Separated collision shape and rigidbody
* Implemented Getting/Modifying primitive physics shapes' values like length, radius etc
* Update physics if entity position/rotation/scale etc are changed
* Implemented Physics raycasting
* Implemented immediate mode renderer that can draw arbitrary points, lines and triangles
* Converted IM_Vertex array to only be used as temporary storage for vertices between begin and end calls
* Implemented Debug physics mesh drawing for box and sphere primitives
* Completed Phase 1 of codebase refactoring
* Improved editor camera handling
* Re-implemented showing all the entities in the editor
* Player init, update, visual representation and movement
* Switching between editor and game mode/cameras
* In-game basis for scrollable console/log-viewer
* Console log output
* Console error/warning output
* Implemented Auto scrolling to the bottom in console
* Implemented screen coordinate to ray conversion and ray-sphere collision
* Split todo and readme into two files
* Replace all renderer_check_gl calls with GL_CHECK macro
* Fixed Console bug when enabled in editor mode
* Migrated from bitbucket to github and from mercurial back to git
* Removed the game executable and game library split.
* Event Subsystem
* Fixed mouse button press/release behaviour by using event callbacks for editor mouse picking
* Ray picking for editor
* Highlight entity selected in editor in a specific color
* Implemented showing a placeholder when an entity other than a static mesh is selected
* Prevented ray casting when clicking on editor window and buttons
* Implemented handling drawing other entity types that can be selected in the editor but are not static meshes
* Implemented proper topbar
* Changed config vars are used.
* Changed all usages of bool types and nuklear causing buggy behaviour in editor code by using int instead of bool or by using variants of the functions that do take int as parameter instead of int*
* Added Grid to editor
* Added Editor settings window and grid configuration to editor settings window
* Specific rendering mode for editor related rendering
* Editor modes for Transform, Rotate, Scale that operate similar to vim or blender.
Modes can be toggled by hotkeys and the operation will be applied to the selected object.
By default, we work on the ground axis i.e the xz plane and when we have alt pressed, we work in the vertical or y axis.
* Move plane creation into its own function
* De-select object on escape key in editor
* Vertical translation in translate mode
* Axis selection/cycling
* Axis switching and returning back to previously selected axis after releasing alt in translate mode
* Display tool/cursor location in editor statusbar
* Displaying camera position and tool transformation space in top bar
* Display editor camera parameter adjustment in top bar
* Display Transform mode selection in top bar
* Display Axis selection in top bar
* Immediate mode render order, drawing axis and helpers on top of grid
* Draw coloured axes lines at world origin or grid origin
* Make axis lines always follow the same colour scheme for consistency across all tools, red for X axis, green for Y axis and blue for Z axis
* Toggle between relative and static grid i.e, grid that moves along with the selected object or grid that remains stationary at the origin
* Implement circle drawing with immediate mode renderer
* Implement arc drawing with renderer
* Impement im_filled_circle
* Draw rotation gizmo using filled circles to better reflect the underlying logic
* Handle negative values in im_arc
* Rotate mode tool widget
* Complete rotate mode
* Implement arc values greater than 360 or -360
* Rotation degree snapping
* Reset mouse cursor position to the center of the screen in editor mode after the right click is released
* Remove fixed editor windows locations and bring back floating windows
* Only show rotation gizmo for one axis at a time
* Cancel tool action when right click is pressed in between
* Rotate mesh along mouse movement or show what the rotation is going to look like by using a wireframe version of mesh when rotating
* Match amount to be rotate with actual axes and the gizmo arc being drawn
* Handle all other axes combinations
* Fixed issue with picking not working when the other entity is inside
rotation radius
* Removed all usages of tool_mesh_position
* Renamed editor modes to editor tools to make the code more
consistent
* Implemented reverting back to previously selected axis when not
moving the camera any more and rotate tool is selected.
* Scale Mode
* Highlight if we are about to select an entity or perform the tool action like translate when mouse is hovered and an entity can be selected at that location
* Display the projected position if we perform the action for example display what the new location would be right next to the tool mesh
* Tooltips for current action or hovered entity
* Fix broken spot light degree/radian conversions
* Fix rotation arc starting and ending degree calculations
* Fix releasing ALT in translate tool not reverting back to previous
axis
* Disabled editor functionalites when console is toggled
* Entity to file read/write
* Added editor shortcut key to delete selected entity
* Console command to read/write entity to file and add it to scene
* Fix editor camera right-click behaviour
* Moved #version definition from shaders to c code for easier control
* Moved MAX_LIGHTS shader definition from inside the shader to be dynamically defined and added to the shader code when it is compiled
to reduce inconsistencies
* Fixed symlink issue in genie for macos which interferes with fopen operations
* Implement/Fix copying libraries to executable folder after build completes on mac os
* Fixed all sound related bugs and completede sound to/from file