vengi/TODO.md

4.1 KiB

Shader

world.frag

ERROR: (0) Failed to validate: shaders/world
INFO: (0) Validation output: shaders/world
active samplers with a different type refer to the same texture image unit

Persistence

Checks

ALTER TABLE products ADD CHECK (name <> '');

or even better - do it in code.

Prepared statements

Better support for prepared statements

Joins

Add support (auto-generate) for joins for the foreign keys in the models

Enums

Support enums?

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

Databasetool

  • Support (x, y, z) primarykey (like we do for unique keys)
  • Lock table metainfo whenever we try to update the database structure

Shadertool

Validate that each $out of the vertex shader has a $in in the fragment shader and vice versa.

EventMgr

Proper event-end-while-application-is-not-running handling

If an event was stopped, this must be persisted in the event table - skip those in the event provider. if the endtime has passed, but that flag is not set, just load the event as usual and stop it in the next frame this is needed if the server had a downtime while the event would have ended. In such a case, no loot would get hand out to the players. To work around this, we let the event just restore all its states and then stop properly.

Rename EventProvider to EventSelector

The EventProvider should read the event lua scripts - the EventProvider should read the event run configuration (start- and end dates) from the database

LootMgr

Implement LootMgr that is able to hand out or change items via the stock system. Implement lua loot definition 'parsing'.

Stock

Think about the design again - Item shouldn't be a shared_ptr, just use the type in the map. That would also make an atomic counter useless, because we aren't operating on a shared data anymore. The Stock instance would be the owner and only instance that is able to modify the internal data.

Container move operations with filters - if might e.g. cost currency to move from one container to another.

World

Implement island style maps. Each Map instance gets its own ai Zone. There should be portals on the islands to get to other islands. Provide an overview map of where the islands are. (Theoretically we could scale/cluster per Map and each jump could include a server switch) Maybe also allow to sail to a another island...?

These islands should not only be created by noise - just supported by noise to vary. But they should still be hand crafted to make them more interesting.

The World class manages the Map classes and should have a threadpool to update the maps in. Use libuv timers and forward the updating into the threads.

The Map should have a lua tick - which is e.g. able to spawn new npcs or let stuff happen on the map. It needs access to all the users, all the npcs and must be called on events like user-add/remove-from-map and npc-add/remove-from-map.

SpawnMgr

Configure entity types and amounts via lua map script

AttackMgr

The attack manager should get updated in the map tick and should maintain a list of attackers and victims.

SignUp

Implement signup with email verification, Lost password and co - also see password related point in the persistence section. Maybe use https://github.com/est31/csrp-gmp

Compute module (opencl)

  • Support adding #pragma unroll automatically?

LUA

Add support for lua_check linter

Worldrenderer

Culling

see "Silhouette Algorithms" by Bruce Gooch, Mark Hartner, and Nathan Beddes

calculate whether the sides of a chunk are completely filled - can be done with a bitmask of uint8_t for each chunk. this can help culling later on.

the first few entries should get lesser chunk in the multi query than the ones that are far away from the camera - it's more likely that the far away chunks are occluded. doing one query per chunk is most likely a little bit overkill.

Deployment

  • set up kubernetes manifests

Core

Add alias command to group commands Expose bash-completion for commands

Bugs

Alpha rendering with opacity <1.0 doesn't work on osx (visible in Voxedit undo/redo not visible in a new scene) HighDPI rendering doesn't work