- We can try using painter's algorithm (y sort) for properly stacking the lights. Anything that doesn't emit light should be painted as black (zero out all color channels) which could then be painted in another step using an additive blend mode. This way, all the black areas will never get painted and the bright areas will get stenciled out.
- Add rectangle collision support. We should create a static method for testing collisions so it can handle various collision types.
- Add unit test for checking memory leaks when creating new game and tearing it down.
-
gameState
can sometimes end up in a bad state which cannot be loaded up next time. Its possible that the thread did not finish processing the most recent event.
- When boss is killed, activate quest to
talk to the bounty provider in town
. Upon interacting with bounty provider, reward the player with a new passive skill point and trigger thelevel up
effect but saynew skill point gained
. - Show indicator above npc when there is something new for the player to do.
- Integrate inventory state
-
channelBeam
ability should have a tick cooldown per target. This way the first hit will hit immediately on each new target. Currently the tick cooldown is a global which can cause undesirable situations when hitting things like interactable props. - Remove
damage
property on all classes and instead use theEntityStats.StatsRef.damage
property for damage calculation.
- tree node tooltips
- skill tree point counter
- mousewheel zoom
- panning via drag
- See if we can get rid of hover state since it adds too much complexity for ui state management. There simply is just too many possible combinations which causes a problem of state mutation.
- Use a global particle pool which should give a pretty large performance boost since we don't have to recreate new objects each frame. This will be especially important when we're using flashy particles.
- [PERFORMANCE ENHANCEMENT] save updated state to disk upon processing and loading the file. Currently the only time it gets saved is when a new session begins. This means each time we read the latest game file, it will re-process it again, which will slow the home screen down since we are always re-reading the file.
- option to clear an existing game slot by pressing a
delete
button to the right of the game slot - option in main menu to create a new game which generates a new session reference.
- create new session based on previous session
- on game load
- process session log and update the state
- save the newly processed state to disk
- delete session file? (or maybe keep x most recent session files)
- Autotile algorithm should check the current tile type against the neighboring tile type to determine what type of tile to use for autotiling. This can allow us to vary our designs when we have tiles regions next to each other but are of different types. For example, we can go from regular floor to bridge and then back to regular floor.
- Replace all base stats on
Entity
class such ashealth
andspeed
with theEntityStats.StatsRef
data structure. This way all stats are being handled by the stats system instead and keeps things nicely data driven with support for modifier events as well. - [PERFORMANCE ENHANCEMENT] We can reuse
EntityStats.StatsRef
instances by pooling them and releasing them back to the pool when an entity is destroyed. This way we can don't have to create a bunch of garbage which will be useful for when we want to create things like a multiple bullet spread. (Be sure to benchmark to validate that this will increase performance).
- Interacting with treasure chest drops loot