From 87fedcb6c9bc251a5a23a632ccf985b674b84bc7 Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Wed, 16 Oct 2019 12:10:59 -0400 Subject: Add draw priority Rather than blindly taking one entity from the list when we have multiple entities on the same tile, add a `drawPriority` method to the Draw typeclass which allows individual entities to request to be drawn on top - this avoids the "noodles floating over your head" bug we saw before. --- src/Xanthous/Game/Draw.hs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/Xanthous/Game/Draw.hs') diff --git a/src/Xanthous/Game/Draw.hs b/src/Xanthous/Game/Draw.hs index 24c177513ed1..b7d7a76956ed 100644 --- a/src/Xanthous/Game/Draw.hs +++ b/src/Xanthous/Game/Draw.hs @@ -4,12 +4,12 @@ module Xanthous.Game.Draw ) where -------------------------------------------------------------------------------- import Xanthous.Prelude -import Brick hiding (loc) +import Brick hiding (loc, on) import Brick.Widgets.Border import Brick.Widgets.Border.Style import Brick.Widgets.Edit -------------------------------------------------------------------------------- -import Xanthous.Data (Position'(..), type Position, x, y, loc) +import Xanthous.Data import Xanthous.Data.EntityMap (EntityMap, atPosition) import qualified Xanthous.Data.EntityMap as EntityMap import Xanthous.Entities @@ -68,7 +68,10 @@ drawEntities canRenderPos allEnts | canRenderPos pos = let neighbors = EntityMap.neighbors pos allEnts in maybe (str " ") (drawWithNeighbors neighbors) - $ allEnts ^? atPosition pos . folded + $ maximumByOf + (atPosition pos . folded) + (compare `on` drawPriority) + allEnts | otherwise = str " " drawMap :: GameState -> Widget Name -- cgit 1.4.1