buildat/doc/todo.txt

78 lines
4.2 KiB
Plaintext

Buildat TODO
============
- Modules should be run in threads.
- Design how to manage scenes in a future-proof way
- Implement easy Lua scripting on the server
- Allow creating Lua modules on the server, for those who don't like C++
- Allow recycling the same Lua code on the client and the server
- Move all Lua functions from client/app.cpp to a reusable location so that they
can be used from server-side Lua in the future
- New things in meta.json?
- disable_module
- override_module (in such a way that the module will be gotten from the
server with it's original name, and with the name of the overridden
module. The overridden module will still be loaded and be available to the
overriding module in some way.)
- Doxygen for the C++ interfaces
- Copy compiler flags (at least -m32/64 and stuff like -D_GLIBCXX_DEBUG) from
CMake to RCC++
- Support Cereal's shared pointer serialization in Lua
- Automatically fetch and build and patch Urho3D when building buildat
- Maybe no
- Precompiled mode
- Singleplayer UI
- Show all exceptions and errors on client using ui_utils.show_message_dialog
- magic.sub_sync_node_added -> replicate.sub_sync_node_added
- Use tags for module dependencies (tags, require_tag, disallow_tag), and
auto-tag each module at runtime with game_<current_game>
- Threaded mesh generation
- If an error occurs on the client in module initialization, show error and quit
- Show sandbox_test status at corner and don't show dialog unless something is
found
- Local split-screen multiplayer: Two options:
- One Urho3D instance with systems in place to manage two UIs and things in
the same instance (may be impossible)
- Allow connecting the input systems of multiple windows, which is simple
but less automatic and most people don't know how to get rid of window
borders
- Maintain a global budget of background processing per frame so that a long
woxelworld:update and ThreadPool::run_post() will not be run on the same frame
- Pre (lod) geometry can take up to 2500us, and post can take 7200us, which
means this will have a visible effect.
- Don't emit all world generation events at once
- Handle module load order properly in reloads (unload by popping from top,
then reload everything until top)
- Is this actually needed?
- When reloading a module, unload all dependants first; then load dependants
again
- Each module should be able to choose whether they want their dependants
unloaded or not; eg. network can just store the socket fds and be reloaded
without anyone noticing
- Altough, network is very rarely modified so it doesn't really matter
- If a file tracked by client_data is deleted and re-added, it won't get updated
before server restart(?)
- An option in the server to just compile and quit (to be used when one wants to
check for compiler errors but not actually run anything)
- Saving and loading of the world
- Redirect stdout and stderr of compiler to log so that it's readable on Windows
- voxelworld: An easy way of turning a piece of static voxels to a dynamic node
- Fix server from crashing to socket "no error" on windows when a client
disconnects
- Keep track of voxel instances with handler_module defined on the client, and
call the handler module in construction and destruction
- Make some kind of an ace of spades clone (or less of a clone); something that
requires the game to control the creation and deletion of the world anyway,
and implement the required interfaces
- If loading a pre-built module fails even while files haven't been modified,
try building it again (this is sometimes needed when buildat_core is updated
without header modifications)
- Figure out a way to let the windows executables run without copying all DLLs
to the same binary directory (can be done on the client, but on the server
they must be in the compiler directory too)
- When a module is modified at runtime and reload fails, the server crashes:
- terminate called after throwing an instance of 'Exception'
what(): access_module(): Module "main" not found
- Probably should try building first, and only if it succeeds, then unload
and reload
- Implement backtraces in Windows: http://stackoverflow.com/questions/16768363/exception-handling-and-stacktrace-under-windows-mingw-gcc