diff options
author | Griffin Smith <root@gws.fyi> | 2019-10-16T16·10-0400 |
---|---|---|
committer | Griffin Smith <root@gws.fyi> | 2019-10-16T16·10-0400 |
commit | 87fedcb6c9bc251a5a23a632ccf985b674b84bc7 (patch) | |
tree | 739fab972e9ae8af9849f3e8f65dad0f5bf13c7d /src/Xanthous/Entities.hs | |
parent | 4882350f5d7e54a6ae5c8760f2510273dae19c60 (diff) |
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.
Diffstat (limited to 'src/Xanthous/Entities.hs')
-rw-r--r-- | src/Xanthous/Entities.hs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/Xanthous/Entities.hs b/src/Xanthous/Entities.hs index 93c4813cc483..ccd3ae42bfc3 100644 --- a/src/Xanthous/Entities.hs +++ b/src/Xanthous/Entities.hs @@ -10,6 +10,7 @@ module Xanthous.Entities , DrawCharacter(..) , DrawStyledCharacter(..) , DrawRawChar(..) + , DrawRawCharPriority(..) , Entity(..) , SomeEntity(..) , downcastEntity @@ -97,6 +98,21 @@ instance ) => Draw (DrawRawChar rawField a) where draw (DrawRawChar e) = draw $ e ^. field @rawField . char +newtype DrawRawCharPriority + (rawField :: Symbol) + (priority :: Nat) + (a :: Type) + = DrawRawCharPriority a + +instance + forall rawField priority a raw. + ( HasField rawField a a raw raw + , KnownNat priority + , HasChar raw EntityChar + ) => Draw (DrawRawCharPriority rawField priority a) where + draw (DrawRawCharPriority e) = draw $ e ^. field @rawField . char + drawPriority = const . fromIntegral $ natVal @priority Proxy + -------------------------------------------------------------------------------- data EntityChar = EntityChar |