From 8b97683f6ef53605130542ea6de1e587b353aa5b Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Sat, 19 Jun 2021 10:42:32 -0400 Subject: feat(xanthous): Track the volume and density of item types Allow the itemType raw to have density and volume fields, both of which represent *intervals* of both density and volume (because both can hypothetically vary a bit). The idea here is that when we're making an *instance* of one of these items, we pick a random value in the range. Lots of stuff in this commit is datatype and typeclass instances to support things like intervals being fields on datatypes that get serialized to saved games - including a manual definition of Ord for Item since Ord isn't well-defined for intervals Change-Id: Ia088f2f75cdce9d00560297e5c269e3310b85bc3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3225 Reviewed-by: grfn Tested-by: BuildkiteCI --- users/grfn/xanthous/src/Xanthous/App.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'users/grfn/xanthous/src/Xanthous/App.hs') diff --git a/users/grfn/xanthous/src/Xanthous/App.hs b/users/grfn/xanthous/src/Xanthous/App.hs index 1e915a03fe..6ed545e3aa 100644 --- a/users/grfn/xanthous/src/Xanthous/App.hs +++ b/users/grfn/xanthous/src/Xanthous/App.hs @@ -32,6 +32,7 @@ import Xanthous.Data , position , Position , (|*|) + , Tiles(..) ) import Xanthous.Data.App (ResourceName, Panel(..), AppEvent(..)) import qualified Xanthous.Data.EntityMap as EntityMap @@ -127,7 +128,7 @@ handleCommand (Move dir) = do collisionAt newPos >>= \case Nothing -> do characterPosition .= newPos - stepGameBy =<< uses (character . speed) (|*| 1) + stepGameBy =<< uses (character . speed) (|*| Tiles 1) describeEntitiesAt newPos Just Combat -> attackAt newPos Just Stop -> pure () -- cgit 1.4.1