diff options
Diffstat (limited to 'users/grfn/xanthous/src/Xanthous/Entities')
3 files changed, 25 insertions, 2 deletions
diff --git a/users/grfn/xanthous/src/Xanthous/Entities/RawTypes.hs b/users/grfn/xanthous/src/Xanthous/Entities/RawTypes.hs index b7c5fe31c995..88070ed7b8bd 100644 --- a/users/grfn/xanthous/src/Xanthous/Entities/RawTypes.hs +++ b/users/grfn/xanthous/src/Xanthous/Entities/RawTypes.hs @@ -51,11 +51,12 @@ import Data.Aeson.Generic.DerivingVia import Data.Aeson (ToJSON, FromJSON) -------------------------------------------------------------------------------- import Xanthous.Messages (Message(..)) -import Xanthous.Data (TicksPerTile, Hitpoints) +import Xanthous.Data (TicksPerTile, Hitpoints, Per, Grams, Cubic, Meters) import Xanthous.Data.EntityChar import Xanthous.Util.QuickCheck import Xanthous.Generators.Speech (Language, gormlak, english) import Xanthous.Orphans () +import Data.Interval (Interval, lowerBound', upperBound') -------------------------------------------------------------------------------- -- | Identifiers for languages that creatures can speak. @@ -153,10 +154,12 @@ data ItemType = ItemType , _description :: !Text , _longDescription :: !Text , _char :: !EntityChar + , _density :: !(Interval (Grams `Per` Cubic Meters)) + , _volume :: !(Interval (Cubic Meters)) , _edible :: !(Maybe EdibleItem) , _wieldable :: !(Maybe WieldableItem) } - deriving stock (Show, Eq, Ord, Generic) + deriving stock (Show, Eq, Generic) deriving anyclass (NFData, CoArbitrary, Function) deriving Arbitrary via GenericArbitrary ItemType deriving (ToJSON, FromJSON) @@ -164,6 +167,20 @@ data ItemType = ItemType ItemType makeFieldsNoPrefix ''ItemType +instance Ord ItemType where + compare x y + = compareOf name x y + <> compareOf description x y + <> compareOf longDescription x y + <> compareOf char x y + <> compareOf (density . to extractInterval) x y + <> compareOf (volume . to extractInterval) x y + <> compareOf edible x y + <> compareOf wieldable x y + where + compareOf l = comparing (view l) + extractInterval = lowerBound' &&& upperBound' + -- | Can this item be eaten? isEdible :: ItemType -> Bool isEdible = has $ edible . _Just diff --git a/users/grfn/xanthous/src/Xanthous/Entities/Raws/noodles.yaml b/users/grfn/xanthous/src/Xanthous/Entities/Raws/noodles.yaml index c3f19dce91d1..c0501a18a8e0 100644 --- a/users/grfn/xanthous/src/Xanthous/Entities/Raws/noodles.yaml +++ b/users/grfn/xanthous/src/Xanthous/Entities/Raws/noodles.yaml @@ -10,3 +10,5 @@ Item: hitpointsHealed: 2 eatMessage: - You slurp up the noodles. Yumm! + density: 500000 + volume: 0.001 diff --git a/users/grfn/xanthous/src/Xanthous/Entities/Raws/stick.yaml b/users/grfn/xanthous/src/Xanthous/Entities/Raws/stick.yaml index bc7fde4d8b02..4100808ca071 100644 --- a/users/grfn/xanthous/src/Xanthous/Entities/Raws/stick.yaml +++ b/users/grfn/xanthous/src/Xanthous/Entities/Raws/stick.yaml @@ -12,3 +12,7 @@ Item: - You bonk the {{creature.creatureType.name}} over the head with your stick. - You bash the {{creature.creatureType.name}} on the noggin with your stick. - You whack the {{creature.creatureType.name}} with your stick. + # https://www.sciencedirect.com/topics/agricultural-and-biological-sciences/wood-density + # it's a hard stick. so it's dense wood. + density: 890000 # g/m³ + volume: [ 0.003, 0.006 ] # ≈3.5 cm radius × ≈1m length |