diff options
author | Griffin Smith <grfn@gws.fyi> | 2021-06-12T18·41-0400 |
---|---|---|
committer | grfn <grfn@gws.fyi> | 2021-06-12T18·57+0000 |
commit | c19e3dae5f6087c7e446c6be620c370d9957cf7c (patch) | |
tree | 29c3c1206c615478cac96da978c96271b05e4f1b /users/grfn/xanthous/src/Xanthous/Game/State.hs | |
parent | 80d501d553b4aa5c7f687c69cb473ea2ac299354 (diff) |
feat(xanthous): Memoize characterVisiblePositions r/2653
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
Diffstat (limited to 'users/grfn/xanthous/src/Xanthous/Game/State.hs')
-rw-r--r-- | users/grfn/xanthous/src/Xanthous/Game/State.hs | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/users/grfn/xanthous/src/Xanthous/Game/State.hs b/users/grfn/xanthous/src/Xanthous/Game/State.hs index f614cad47339..cdaf23edcd48 100644 --- a/users/grfn/xanthous/src/Xanthous/Game/State.hs +++ b/users/grfn/xanthous/src/Xanthous/Game/State.hs @@ -16,6 +16,7 @@ module Xanthous.Game.State , promptState , characterEntityID , autocommand + , memo , GamePromptState(..) -- * Game Level @@ -107,6 +108,7 @@ import Xanthous.Data.Entities import Xanthous.Orphans () import Xanthous.Game.Prompt import Xanthous.Game.Env +import Xanthous.Game.Memo (MemoState) -------------------------------------------------------------------------------- data MessageHistory @@ -502,6 +504,8 @@ data GameState = GameState , _promptState :: !(GamePromptState AppM) , _debugState :: !DebugState , _autocommand :: !AutocommandState + + , _memo :: MemoState } deriving stock (Show, Generic) deriving anyclass (NFData) |