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

@ -2,13 +2,13 @@
, checkers, classy-prelude, comonad, comonad-extras, constraints
, containers, criterion, data-default, deepseq, directory, fgl
, fgl-arbitrary, file-embed, filepath, generic-arbitrary
, generic-lens, generic-monoid, groups, hgeometry
, hgeometry-combinatorial, hpack, JuicyPixels, lens
, lens-properties, lib, lifted-async, linear, megaparsec, mmorph
, monad-control, MonadRandom, mtl, optparse-applicative, parallel
, parser-combinators, pointed, QuickCheck, quickcheck-instances
, quickcheck-text, random, random-extras, random-fu, random-source
, Rasterific, raw-strings-qq, reflection, semigroupoids, splitmix
, generic-lens, groups, hgeometry, hgeometry-combinatorial, hpack
, JuicyPixels, lens, lens-properties, lib, lifted-async, linear
, megaparsec, mmorph, monad-control, MonadRandom, mtl
, optparse-applicative, parallel, parser-combinators, pointed
, QuickCheck, quickcheck-instances, quickcheck-text, random
, random-extras, random-fu, random-source, Rasterific
, raw-strings-qq, reflection, semigroupoids, semigroups, splitmix
, stache, streams, tasty, tasty-hunit, tasty-quickcheck, text
, text-zipper, tomland, transformers, vector, vty, witherable, yaml
, zlib
@ -23,54 +23,55 @@ mkDerivation {
aeson array async base bifunctors brick checkers classy-prelude
comonad comonad-extras constraints containers criterion
data-default deepseq directory fgl fgl-arbitrary file-embed
filepath generic-arbitrary generic-lens generic-monoid groups
hgeometry hgeometry-combinatorial JuicyPixels lens lifted-async
linear megaparsec mmorph monad-control MonadRandom mtl
filepath generic-arbitrary generic-lens groups hgeometry
hgeometry-combinatorial JuicyPixels lens lifted-async linear
megaparsec mmorph monad-control MonadRandom mtl
optparse-applicative parallel parser-combinators pointed QuickCheck
quickcheck-instances quickcheck-text random random-extras random-fu
random-source Rasterific raw-strings-qq reflection semigroupoids
splitmix stache streams text text-zipper tomland transformers
vector vty witherable yaml zlib
semigroups splitmix stache streams text text-zipper tomland
transformers vector vty witherable yaml zlib
];
libraryToolDepends = [ hpack ];
executableHaskellDepends = [
aeson array async base bifunctors brick checkers classy-prelude
comonad comonad-extras constraints containers criterion
data-default deepseq directory fgl fgl-arbitrary file-embed
filepath generic-arbitrary generic-lens generic-monoid groups
hgeometry hgeometry-combinatorial JuicyPixels lens lifted-async
linear megaparsec mmorph monad-control MonadRandom mtl
filepath generic-arbitrary generic-lens groups hgeometry
hgeometry-combinatorial JuicyPixels lens lifted-async linear
megaparsec mmorph monad-control MonadRandom mtl
optparse-applicative parallel parser-combinators pointed QuickCheck
quickcheck-instances quickcheck-text random random-extras random-fu
random-source Rasterific raw-strings-qq reflection semigroupoids
splitmix stache streams text text-zipper tomland transformers
vector vty witherable yaml zlib
semigroups splitmix stache streams text text-zipper tomland
transformers vector vty witherable yaml zlib
];
testHaskellDepends = [
aeson array async base bifunctors brick checkers classy-prelude
comonad comonad-extras constraints containers criterion
data-default deepseq directory fgl fgl-arbitrary file-embed
filepath generic-arbitrary generic-lens generic-monoid groups
hgeometry hgeometry-combinatorial JuicyPixels lens lens-properties
filepath generic-arbitrary generic-lens groups hgeometry
hgeometry-combinatorial JuicyPixels lens lens-properties
lifted-async linear megaparsec mmorph monad-control MonadRandom mtl
optparse-applicative parallel parser-combinators pointed QuickCheck
quickcheck-instances quickcheck-text random random-extras random-fu
random-source Rasterific raw-strings-qq reflection semigroupoids
splitmix stache streams tasty tasty-hunit tasty-quickcheck text
text-zipper tomland transformers vector vty witherable yaml zlib
semigroups splitmix stache streams tasty tasty-hunit
tasty-quickcheck text text-zipper tomland transformers vector vty
witherable yaml zlib
];
benchmarkHaskellDepends = [
aeson array async base bifunctors brick checkers classy-prelude
comonad comonad-extras constraints containers criterion
data-default deepseq directory fgl fgl-arbitrary file-embed
filepath generic-arbitrary generic-lens generic-monoid groups
hgeometry hgeometry-combinatorial JuicyPixels lens lifted-async
linear megaparsec mmorph monad-control MonadRandom mtl
filepath generic-arbitrary generic-lens groups hgeometry
hgeometry-combinatorial JuicyPixels lens lifted-async linear
megaparsec mmorph monad-control MonadRandom mtl
optparse-applicative parallel parser-combinators pointed QuickCheck
quickcheck-instances quickcheck-text random random-extras random-fu
random-source Rasterific raw-strings-qq reflection semigroupoids
splitmix stache streams text text-zipper tomland transformers
vector vty witherable yaml zlib
semigroups splitmix stache streams text text-zipper tomland
transformers vector vty witherable yaml zlib
];
prePatch = "hpack";
homepage = "https://github.com/glittershark/xanthous#readme";