Commit before moving to external weapon magazines

This commit is contained in:
2023-05-30 11:07:30 +01:00
parent 02c34f99f1
commit b8f03f7d8c
5 changed files with 74 additions and 53 deletions
+16 -8
View File
@@ -1,16 +1,16 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Item.Combine where
import Dodge.Data.Item.Targeting
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import qualified Data.Map.Strict as M
import Dodge.Data.Equipment.Misc
import Dodge.Data.Item.Targeting
import Dodge.Data.Item.Use.Consumption
data ItemType = ItemType
@@ -18,10 +18,12 @@ data ItemType = ItemType
, _iyModules :: M.Map ModuleSlot ItemModuleType
}
deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
data Stack = NoStack | Stack ItAmount
deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
data CraftType
@@ -29,10 +31,8 @@ data CraftType
| TUBE
| HARDWARE
| SPRING
| HOSE
| TAPE
| CAN
| TIN
| STEELDRUM
@@ -78,9 +78,9 @@ data CraftType
| TIMEMODULE
| SIZEMODULE
| GRAVITYMODULE
| TARGETMODULE TargetType
deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Enum, Read) --Generic, Flat)
data ItemBaseType
@@ -88,15 +88,18 @@ data ItemBaseType
| HELD {_ibtHeld :: HeldItemType}
| LEFT {_ibtLeft :: LeftItemType}
| EQUIP {_ibtEquip :: EquipItemType}
| AMMO {_ibtAmmo :: AmmoItemType}
| Consumable {_ibtConsumable :: ConsumableItemType}
| CRAFT CraftType
deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
data ConsumableItemType
= MEDKIT Int
| EXPLOSIVES
deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
data EquipItemType
@@ -112,15 +115,14 @@ data EquipItemType
| POWERLEGS
| SPEEDLEGS
| JUMPLEGS
| JETPACK
| FUELPACK
| BULLETBELTPACK
| BULLETBELTBRACER
| BATTERYPACK
| AUTODETECTOR Detector
deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
data LeftItemType
@@ -183,6 +185,11 @@ data HeldItemType
| KEYCARD Int
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data AmmoItemType
= TINMAGAZINE
| DRUMMAGAZINE
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data ItemModuleType
= EMPTYMODULE
| DRUMMAG
@@ -232,11 +239,12 @@ deriveJSON defaultOptions ''Detector
deriveJSON defaultOptions ''EquipItemType
deriveJSON defaultOptions ''LeftItemType
deriveJSON defaultOptions ''HeldItemType
deriveJSON defaultOptions ''AmmoItemType
deriveJSON defaultOptions ''ItemModuleType
deriveJSON defaultOptions ''ModuleSlot
deriveJSON defaultOptions ''ItemBaseType
deriveJSON defaultOptions ''ItemType
instance ToJSONKey ModuleSlot
instance FromJSONKey ModuleSlot
+3 -2
View File
@@ -1,7 +1,7 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
@@ -56,6 +56,7 @@ data LeftConsumption
newtype ItAmount = ItAmount {_getItAmount :: Int}
-- deriving (Eq, Ord, Read Show, Num, Real,) --Generic, Flat)
deriving newtype (Eq, Ord, Read, Show, Num, Real, Enum, Integral)
-- deriving stock (Generic)
-- deriving anyclass (Flat)
+7
View File
@@ -7,6 +7,7 @@ module Dodge.Item (
itemFromBase,
) where
import Dodge.Item.Ammo
import Dodge.Data.Item
import Dodge.Item.Consumable
import Dodge.Item.Craftable
@@ -20,9 +21,15 @@ itemFromBase ibt = case ibt of
HELD ht -> itemFromHeldType ht
LEFT lt -> itemFromLeftType lt
EQUIP et -> itemFromEquipType et
AMMO at -> itemFromAmmoType at
Consumable et -> itemFromConsumableType et
CRAFT cr -> makeTypeCraft cr
itemFromAmmoType :: AmmoItemType -> Item
itemFromAmmoType at = case at of
TINMAGAZINE -> tinMagazine
DRUMMAGAZINE -> drumMagazine
itemFromConsumableType :: ConsumableItemType -> Item
itemFromConsumableType ct = case ct of
MEDKIT i -> medkit i
+14 -10
View File
@@ -10,9 +10,9 @@ module Dodge.Item.Display (
import Control.Applicative
import Control.Monad
import Dodge.Item.Info
import Data.Maybe
import Dodge.Data.Creature
import Dodge.Item.Info
import Dodge.Item.SlotsTaken
import Dodge.Module
import LensHelp
@@ -20,11 +20,14 @@ import Padding
itemDisplayOffset :: Creature -> Item -> (Int, [String])
itemDisplayOffset cr itm = case itm ^. itType . iyBase of
EQUIP (TARGETINGHAT tt) | targetItemCanAttachAbove cr itm
-> (-1, leftPad 15 ' ' (targetingTypeString tt) :
(itemDisplay cr itm & ix 0 %~ (\s -> itemDisplayPad s (replicate (length (targetingTypeString tt)) '^') )))
EQUIP (TARGETINGHAT tt)
-> (0, itemDisplay cr itm & ix 0 %~ (\s -> itemDisplayPad s (targetingTypeString tt)))
| targetItemCanAttachAbove cr itm ->
( -1
, leftPad 15 ' ' (targetingTypeString tt) :
(itemDisplay cr itm & ix 0 %~ (\s -> itemDisplayPad s (replicate (length (targetingTypeString tt)) '^')))
)
EQUIP (TARGETINGHAT tt) ->
(0, itemDisplay cr itm & ix 0 %~ (\s -> itemDisplayPad s (targetingTypeString tt)))
_ -> (0, itemDisplay cr itm)
targetItemCanAttachAbove :: Creature -> Item -> Bool
@@ -46,10 +49,9 @@ targetingTypeString tt = case tt of
TargetRBCreature -> "LIFEFORM"
TargetCursor -> "CURSOR"
itemDisplay :: Creature -> Item -> [String]
itemDisplay cr itm = --itemDisplayWithNumber (showConsumption cr it) it
itemDisplay cr itm =
--itemDisplayWithNumber (showConsumption cr it) it
zipWithDefaults id (leftPad 15 ' ') itemDisplayPad (basicItemDisplay itm) (itemNumberDisplay cr itm)
zipWithDefaults :: (a -> c) -> (b -> c) -> (a -> b -> c) -> [a] -> [b] -> [c]
@@ -59,7 +61,6 @@ zipWithDefaults f g h = go
go as [] = map f as
go (a : as) (b : bs) = h a b : go as bs
itemDisplayPad :: [Char] -> String -> [Char]
itemDisplayPad ls rs
| rs == "" = ls
@@ -85,6 +86,7 @@ itemBaseName it = case _iyBase $ _itType it of
Nothing -> show hit
LEFT lit -> show lit
EQUIP eit -> showEquipItem eit
AMMO ait -> show ait
Consumable cit -> show cit
showEquipItem :: EquipItemType -> String
@@ -141,7 +143,9 @@ showAmmoSource cr itm = fromMaybe ["FAIL"] $ do
at' <- cr ^? crInv . ix (i + 1) . itUse . heldConsumption . laSourceType
as <- cr ^? crInv . ix (i + 1) . itUse . heldConsumption . laSource
guard (at' == atype && as == AboveSource)
return ["vvvv",x] ) <|> Just [x]
return ["vvvv", x]
)
<|> Just [x]
showReloadProgress :: Creature -> Item -> String
showReloadProgress cr itm = case ic ^? laSource of
+1
View File
@@ -23,6 +23,7 @@ itemSPic it =
HELD ht -> heldItemSPic ht it
LEFT lt -> leftItemSPic lt it
EQUIP et -> equipItemSPic et it
AMMO {} -> defSPic
Consumable{} -> defSPic
equipItemSPic :: EquipItemType -> Item -> SPic