feat(xanthous): Memoize characterVisiblePositions

Memoize the return value of characterVisiblePositions to a new,
semi-abstracted "memo" field on the GameState, recalcuclated if the
character position ever changes. I'm 90% sure that the perf issues we
were encountering were actually caused by characterVisiblePositions
getting called once for *every tile* on draw, but this slightly larger
change also makes the game perform relatively-usably again.

Since this is only recalculated if the character position changes, if we
ever get non-transparent entities moving around without the characters
influence (maybe something building or knocking down walls?) we'll have
an issue there where the vision won't be updated as a result of those
changes if they happen while the character is taking a non-moving action
- but we can cross that bridge when we come to it.

Change-Id: I3fc745ddf0014d6f164f735ad7e5080da779b92a
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3185
Reviewed-by: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
This commit is contained in:
Griffin Smith 2021-06-12 14:41:24 -04:00 committed by grfn
parent 80d501d553
commit c19e3dae5f
14 changed files with 284 additions and 87 deletions

View file

@ -40,7 +40,6 @@ dependencies:
- file-embed
- filepath
- generic-arbitrary
- generic-monoid
- generic-lens
- groups
- hgeometry
@ -68,6 +67,7 @@ dependencies:
- splitmix
- streams
- stache
- semigroups
- semigroupoids
- tomland
- transformers