-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO.txt
206 lines (189 loc) · 8.74 KB
/
TODO.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
TO DO:
- Rewrite MotionController
- Optimise setting transformation to ISceneNode in SceneNode code
- Optimise loading and creating Entities
- Optimise btCollisionShape and CollisionShape - make a map inside
CollisionShape: (scale) -> btCollisionShape
(to avoid exact copies of btCollisionShape)
* add CollisionShape::GetNewBtCollisionShape(scale);
// not necessery uniqe, get by scale
* add CollisionShape::SetScale(btCollisionShape, newScale);
// if current btCollisionShape is unique, change it's scale;
// else if it's not unique,
// call CollisionShape::GetNewBtCollisionShape(newScale);
- Official cases:
* create documentation (for v1.0.0)
* update ChangeLog.txt
* update Readme.txt linux compilation section
* choose a license
* update Dependencies.txt for linux
- Saving and loading Entities, SceneNodes from JSON or with using scripts
- Correct MotionController varying jump height
- Make explicit instance of btCollisionObject in StaticEntity, btRigidBody
in DynamicEntity, btGhostObject in Trigger, and remove
btCollisionObject*Entity::body
- Add void Entity::SetPhysicsEnabled(bool),
void Entity::SetCollisionEnabled(bool) (and getters for them)
- Add bool Entity::EverNeedTick() const and separate lists of objects that
needs frequent/rare/none updates to reduce engine tick time
- Use Semantic Versioning (https://semver.org/) consistently
- Update Readme.txt
- Code refactor - reorder methods in classes to be consecutive and keep
that order in *.cpp files
- Code refactor - update to my new code style
- Code refactor - update license dates and licenes
- Code refactor - make classes smaller, split it's tasks to smaller classes
- Code refactor - change position of asterisk (*) and ampersand (&)
when declaring variables, members or arguments
- Code refactor - rename header files *.h to *.hpp
- Code refactor - move updating entities to Simulation class
- Code refactor - move mouse lock to event receiver irrlicht
- Add map files, loading game state, saving game state with/as scripts
- Add error validation to script parser
- Update StringToEnter class to have ctrl+arrows/delete/backspace editor
and other essential stuff
- Update Console to show cursor position
- Change MESSAGE macro to a class which manages logs, timestamps, etc.
- Add HUD class
- Add Option Menu class
- Correct GUI class which does not respects it's workspace
- Window::Draw is not stable on windows which causes lags (sometimes render
takes ~30-40 ms without no reason with stable average 4ms tick). It
mostly causes lags with mouse (it somtimes looks lik previous jiggly
mouse movement).
- Change sequence sing::engine->AddEntity(sing::entityFactory->AddEntity(
...)) to somthing cleaner
- Remove game/Event class and mov it's content to Menu/HUD
- Change starting menus by class template to starting by registered name
(similarily to ClassFactory for entities)
- Make GUI namespace and change GUI class to GUI::Renderer class, and add
GUI::Workspace class as text-workspace
TO DO (to think/code restructuring):
- Mesh class resource (combination of graphical model and it's LOD,
collision shape); possibly replacement for SceneNode
- Remove GetVersion.cpp
- Font resource class
- Replace bullet physics engine with simple box/sphere/triangle
parallel collision detection
- Change structure of threads: Renderer, Command/Script Issuer,
Update Threads, Collision Thread;
Design no-blocking threads communication, use std::shared_mutex for
thread pool
Done:
- Makefile (and binaries?) for linux
- Using compressed files
- Decoding ogg sound files
- Entity-derived classes and other class reorganisation, move from game\*
to engine\*:
* StaticEntity
* DynamicEntity
* Trigger
* CharacterWalkTrigger -> MotionControllerTrigger
* MotionController
- Multiple Entity-derived classes in one module
- Sounds
- Animations
- Loading archives from irrlicht file system
- enable window resizing with fov and aspect correction
- ResourceManager - garbage collecor
- Model class resource, integrate it with ResourceManager
- Better ray tracing
- Sound (previously SoundSampler) as resource and integrate it with
ResourceManager
- Material resource class
- Configurations in json files
- Rewrite collision shape and collision shape constructor (combine them
into one class) - make CollisionShape resource;
remove CollisionShapeManager and use ResourceManager instead
- Texture resource class, and use it while loading material
- FileSystem class and IFile and OFile class for unified file access
- High resolution clock for frame delta time
- Limit frame rate
- Menu system
- Code refactor - Remove "this->" where possible
- Code refactor - Replace "std::shared_ptr<Entity>" with "Entity*" and
"std::shared_ptr<btCollisionObject>" with "btCollisionObject*"
- Code refactor - Make Engine, World, Window, IrrlichtDevice, IVideoDriver,
ISceneManager, IGUIEnvironmentm, FileSystem, SoundEngine,
ResourceManager instances as singletons and remove every references
- Make WAVLoadFromFile to use sing::fileSystem
- Replace (std::string)Entity::name by (uint64_t)Entity::id
- All destroying Entities in destructor
- All constructing/spawning Entities in constructor
- Creating Entities from JSON
- Add ResourceManager:GetResource(JSON), Resource::GetJSON(JSON)
(remove other constructors), Resource::Resource(JSON)
- Character is based on DynamicEntity
- Remove Entity::camera
- Add self-choosing os in Makefile
- Replace RapidJSON and it's wrapper with github.com/Drwalin/JSON.git
submodule in dependencies/JSON
- Change void GetJSON(JSON&) const to JSON GetJSON() const
- Replace explicit DllLoader code and replace it with
github.com/Drwalin/DllLoader.git submodule in dep/DllLoader
- Add custom scripts interpreter to control gameplay and add native-script
(loaded from shared object) and scripts written in files, it can be
used to add in-game console and to modify objects/game state
- Add scroll bar to console
- Code refactor - added Thread class which controlls parallel to draw tick
- Code refactor - split code files into multiple directories by category and
move file *.h/*.hpp and *.cpp to the same directory
- Code refactor - clean up parallel processing code
TO DO in future:
- MotionController steps on staircase or low objects
- NavMesh
- Light maps
- Dynamic light maps
- Sound occlusion
- Mesh occlusion
- Lights
- Particles
- LOD system
- Sprites in world space
- Optimise rendering?
- Limit number of active OpenAL sound sources (choose closest and loudest
sources - eg. order and enable by distance/volume)
- Make Ogg to use sing::fileSystem
- Video player (maybe from *.png image sequence and *.ogg sound file)
- Multiplayer:
* divide code sections: server side and client side
* internet connection:
TCP - initialization, events, lossless informations
UDP - streaming entities transofrmation, movement and animation
informations in realtime
- Add TryBox and TryCylinder to ObjToShapeConverter
Bugs:
- When entering low-roofed place with very quick crouch-key press then
character behaves like standing still
- Executable once crashed whole system (needed to cut power to do anything)
(in v0.3.1a)
- Sometimes undefined coordinates of player while starting game (randomly)
(didn't met since v0.4.1)
- When pressed Exit Game button, game crashed (only one time) (v0.5.0-k)
- fprintf(stder,...) in Event::KeyPressedEvent while pressing 'T' to print
number of objects in world, crashes since [commit SHA-1:
e684b9ee8ba92cc0a29b4ca2e774f0db7ed59098] - temporarilly replaced
with std::cout which does not cause problems
- Sometimes invalid coordinates of Player in the begining (NaN/Inf) spotted
again in [commit SHA-1: ac76263793df94e73d7415d81cb62aec0021682a]
- Game crashed few times on Windows OS in [commit SHA-1:
12fe67f2b4ae7fec2c2114ba21411c7ad3b8a1c5], no reason found.
Removed bugs:
- Removing entity does not remove a ISceneNode
- When resource manager removes a Resource -> destructor is not called
- When starting MainMenu at beginig, simulation is not paused
- Crashed when raytesting for destroying Entities, randomly (v0.5.0-e)
- Very unstable fps (since v0.4.0) - only feeling of game is unstable, but
actual frame times are good - corrected in v0.5.0-e by removing
smoothing frametime between two frames
- When in game pressed ESC, then pressed RMB/LMB and then pressed ESC to
return to game, instantly Event spawns multiple boxes/spheres
(atleast since v0.5.0-k)
- Correct jiggly mouse movement while mouse is locked
To test:
- Overall test
- Add many Entities per second and destroy them to find out any memory leaks
(valgrind) and memory usage
Done tests:
- ResourceManager garbage collector
- JSON wrapper