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
+28 -20
View File
@@ -1,38 +1,38 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StrictData #-} {-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Item.Combine where module Dodge.Data.Item.Combine where
import Dodge.Data.Item.Targeting
import Control.Lens import Control.Lens
import Data.Aeson import Data.Aeson
import Data.Aeson.TH import Data.Aeson.TH
import qualified Data.Map.Strict as M import qualified Data.Map.Strict as M
import Dodge.Data.Equipment.Misc import Dodge.Data.Equipment.Misc
import Dodge.Data.Item.Targeting
import Dodge.Data.Item.Use.Consumption import Dodge.Data.Item.Use.Consumption
data ItemType = ItemType data ItemType = ItemType
{ _iyBase :: ItemBaseType { _iyBase :: ItemBaseType
, _iyModules :: M.Map ModuleSlot ItemModuleType , _iyModules :: M.Map ModuleSlot ItemModuleType
} }
deriving (Eq,Ord,Show,Read) deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
data Stack = NoStack | Stack ItAmount data Stack = NoStack | Stack ItAmount
deriving (Eq,Ord,Show,Read) deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
data CraftType data CraftType
= PIPE = PIPE
| TUBE | TUBE
| HARDWARE | HARDWARE
| SPRING | SPRING
| HOSE | HOSE
| TAPE | TAPE
| CAN | CAN
| TIN | TIN
| STEELDRUM | STEELDRUM
@@ -78,26 +78,29 @@ data CraftType
| TIMEMODULE | TIMEMODULE
| SIZEMODULE | SIZEMODULE
| GRAVITYMODULE | GRAVITYMODULE
| TARGETMODULE TargetType | TARGETMODULE TargetType
deriving (Eq,Ord,Show,Read) deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Enum, Read) --Generic, Flat)
--deriving (Eq, Ord, Show, Enum, Read) --Generic, Flat)
data ItemBaseType data ItemBaseType
= NoItemType = NoItemType
| HELD {_ibtHeld :: HeldItemType} | HELD {_ibtHeld :: HeldItemType}
| LEFT {_ibtLeft :: LeftItemType} | LEFT {_ibtLeft :: LeftItemType}
| EQUIP {_ibtEquip :: EquipItemType} | EQUIP {_ibtEquip :: EquipItemType}
| AMMO {_ibtAmmo :: AmmoItemType}
| Consumable {_ibtConsumable :: ConsumableItemType} | Consumable {_ibtConsumable :: ConsumableItemType}
| CRAFT CraftType | CRAFT CraftType
deriving (Eq,Ord,Show,Read) deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
data ConsumableItemType data ConsumableItemType
= MEDKIT Int = MEDKIT Int
| EXPLOSIVES | EXPLOSIVES
deriving (Eq,Ord,Show,Read) deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
data EquipItemType data EquipItemType
= MAGSHIELD = MAGSHIELD
@@ -112,16 +115,15 @@ data EquipItemType
| POWERLEGS | POWERLEGS
| SPEEDLEGS | SPEEDLEGS
| JUMPLEGS | JUMPLEGS
| JETPACK | JETPACK
| FUELPACK | FUELPACK
| BULLETBELTPACK | BULLETBELTPACK
| BULLETBELTBRACER | BULLETBELTBRACER
| BATTERYPACK | BATTERYPACK
| AUTODETECTOR Detector | AUTODETECTOR Detector
deriving (Eq,Ord,Show,Read) deriving (Eq, Ord, Show, Read)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
data LeftItemType data LeftItemType
= BOOSTER = BOOSTER
@@ -183,6 +185,11 @@ data HeldItemType
| KEYCARD Int | KEYCARD Int
deriving (Eq, Ord, Show, Read) --Generic, Flat) deriving (Eq, Ord, Show, Read) --Generic, Flat)
data AmmoItemType
= TINMAGAZINE
| DRUMMAGAZINE
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data ItemModuleType data ItemModuleType
= EMPTYMODULE = EMPTYMODULE
| DRUMMAG | DRUMMAG
@@ -232,11 +239,12 @@ deriveJSON defaultOptions ''Detector
deriveJSON defaultOptions ''EquipItemType deriveJSON defaultOptions ''EquipItemType
deriveJSON defaultOptions ''LeftItemType deriveJSON defaultOptions ''LeftItemType
deriveJSON defaultOptions ''HeldItemType deriveJSON defaultOptions ''HeldItemType
deriveJSON defaultOptions ''AmmoItemType
deriveJSON defaultOptions ''ItemModuleType deriveJSON defaultOptions ''ItemModuleType
deriveJSON defaultOptions ''ModuleSlot deriveJSON defaultOptions ''ModuleSlot
deriveJSON defaultOptions ''ItemBaseType deriveJSON defaultOptions ''ItemBaseType
deriveJSON defaultOptions ''ItemType deriveJSON defaultOptions ''ItemType
instance ToJSONKey ModuleSlot instance ToJSONKey ModuleSlot
instance FromJSONKey ModuleSlot instance FromJSONKey ModuleSlot
+10 -9
View File
@@ -1,7 +1,7 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StrictData #-} {-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TemplateHaskell #-}
@@ -32,12 +32,12 @@ data AmmoSource
deriving (Eq, Show, Read) --Generic, Flat) deriving (Eq, Show, Read) --Generic, Flat)
data InternalAmmo = InternalAmmo data InternalAmmo = InternalAmmo
{ _iaMax :: Int { _iaMax :: Int
, _iaLoaded :: Int , _iaLoaded :: Int
, _iaPrimed :: Bool , _iaPrimed :: Bool
, _iaCycle :: [LoadAction] , _iaCycle :: [LoadAction]
, _iaProgress :: Maybe [LoadAction] , _iaProgress :: Maybe [LoadAction]
} }
deriving (Eq, Show, Read) --Generic, Flat) deriving (Eq, Show, Read) --Generic, Flat)
data LeftConsumption data LeftConsumption
@@ -54,8 +54,9 @@ data LeftConsumption
deriving (Eq, Show, Read) --Generic, Flat) deriving (Eq, Show, Read) --Generic, Flat)
newtype ItAmount = ItAmount {_getItAmount :: Int} newtype ItAmount = ItAmount {_getItAmount :: Int}
-- deriving (Eq, Ord, Read Show, Num, Real,) --Generic, Flat) -- deriving (Eq, Ord, Read Show, Num, Real,) --Generic, Flat)
deriving newtype (Eq, Ord, Read, Show, Num, Real, Enum, Integral) deriving newtype (Eq, Ord, Read, Show, Num, Real, Enum, Integral)
-- deriving stock (Generic) -- deriving stock (Generic)
-- deriving anyclass (Flat) -- deriving anyclass (Flat)
+7
View File
@@ -7,6 +7,7 @@ module Dodge.Item (
itemFromBase, itemFromBase,
) where ) where
import Dodge.Item.Ammo
import Dodge.Data.Item import Dodge.Data.Item
import Dodge.Item.Consumable import Dodge.Item.Consumable
import Dodge.Item.Craftable import Dodge.Item.Craftable
@@ -20,9 +21,15 @@ itemFromBase ibt = case ibt of
HELD ht -> itemFromHeldType ht HELD ht -> itemFromHeldType ht
LEFT lt -> itemFromLeftType lt LEFT lt -> itemFromLeftType lt
EQUIP et -> itemFromEquipType et EQUIP et -> itemFromEquipType et
AMMO at -> itemFromAmmoType at
Consumable et -> itemFromConsumableType et Consumable et -> itemFromConsumableType et
CRAFT cr -> makeTypeCraft cr CRAFT cr -> makeTypeCraft cr
itemFromAmmoType :: AmmoItemType -> Item
itemFromAmmoType at = case at of
TINMAGAZINE -> tinMagazine
DRUMMAGAZINE -> drumMagazine
itemFromConsumableType :: ConsumableItemType -> Item itemFromConsumableType :: ConsumableItemType -> Item
itemFromConsumableType ct = case ct of itemFromConsumableType ct = case ct of
MEDKIT i -> medkit i MEDKIT i -> medkit i
+25 -21
View File
@@ -2,7 +2,7 @@ module Dodge.Item.Display (
--itemDisplay, --itemDisplay,
itemDisplayOffset, itemDisplayOffset,
canAttachTargetingBelow, canAttachTargetingBelow,
-- selectedItemDisplay, -- selectedItemDisplay,
itemString, itemString,
itemBaseName, itemBaseName,
basicItemDisplay, basicItemDisplay,
@@ -10,21 +10,24 @@ module Dodge.Item.Display (
import Control.Applicative import Control.Applicative
import Control.Monad import Control.Monad
import Dodge.Item.Info
import Data.Maybe import Data.Maybe
import Dodge.Data.Creature import Dodge.Data.Creature
import Dodge.Item.Info
import Dodge.Item.SlotsTaken import Dodge.Item.SlotsTaken
import Dodge.Module import Dodge.Module
import LensHelp import LensHelp
import Padding import Padding
itemDisplayOffset :: Creature -> Item -> (Int,[String]) itemDisplayOffset :: Creature -> Item -> (Int, [String])
itemDisplayOffset cr itm = case itm ^. itType . iyBase of 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) 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) _ -> (0, itemDisplay cr itm)
targetItemCanAttachAbove :: Creature -> Item -> Bool targetItemCanAttachAbove :: Creature -> Item -> Bool
@@ -46,10 +49,9 @@ targetingTypeString tt = case tt of
TargetRBCreature -> "LIFEFORM" TargetRBCreature -> "LIFEFORM"
TargetCursor -> "CURSOR" TargetCursor -> "CURSOR"
itemDisplay :: Creature -> Item -> [String] 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 id (leftPad 15 ' ') itemDisplayPad (basicItemDisplay itm) (itemNumberDisplay cr itm)
zipWithDefaults :: (a -> c) -> (b -> c) -> (a -> b -> c) -> [a] -> [b] -> [c] zipWithDefaults :: (a -> c) -> (b -> c) -> (a -> b -> c) -> [a] -> [b] -> [c]
@@ -57,18 +59,17 @@ zipWithDefaults f g h = go
where where
go [] bs = map g bs go [] bs = map g bs
go as [] = map f as go as [] = map f as
go (a:as) (b:bs) = h a b : go as bs go (a : as) (b : bs) = h a b : go as bs
itemDisplayPad :: [Char] -> String -> [Char] itemDisplayPad :: [Char] -> String -> [Char]
itemDisplayPad ls rs itemDisplayPad ls rs
| rs == "" = ls | rs == "" = ls
| otherwise = midPadL 15 ' ' ls (' ':rs) | otherwise = midPadL 15 ' ' ls (' ' : rs)
basicItemDisplay :: Item -> [String] basicItemDisplay :: Item -> [String]
basicItemDisplay itm = basicItemDisplay itm =
Prelude.take (itSlotsTaken itm) $ Prelude.take (itSlotsTaken itm) $
itemBaseName itm : itemBaseName itm :
catMaybes [maybeWarmupStatus itm, maybeRateStatus itm] catMaybes [maybeWarmupStatus itm, maybeRateStatus itm]
++ moduleStrings itm ++ moduleStrings itm
++ repeat "*" ++ repeat "*"
@@ -85,6 +86,7 @@ itemBaseName it = case _iyBase $ _itType it of
Nothing -> show hit Nothing -> show hit
LEFT lit -> show lit LEFT lit -> show lit
EQUIP eit -> showEquipItem eit EQUIP eit -> showEquipItem eit
AMMO ait -> show ait
Consumable cit -> show cit Consumable cit -> show cit
showEquipItem :: EquipItemType -> String showEquipItem :: EquipItemType -> String
@@ -125,8 +127,8 @@ itemNumberDisplay cr itm = case iu of
showEquipmentNumber :: Creature -> Item -> [String] showEquipmentNumber :: Creature -> Item -> [String]
showEquipmentNumber cr itm = case _eeUse ee of showEquipmentNumber cr itm = case _eeUse ee of
EFuelSource x _ -> [show x] EFuelSource x _ -> [show x]
EAmmoSource {} -> showAmmoSource cr itm EAmmoSource{} -> showAmmoSource cr itm
EBatterySource {_euseBatteryAmount = x} -> [show x] EBatterySource{_euseBatteryAmount = x} -> [show x]
_ -> [""] _ -> [""]
where where
ee = itm ^?! itUse . equipEffect ee = itm ^?! itUse . equipEffect
@@ -137,11 +139,13 @@ showAmmoSource cr itm = fromMaybe ["FAIL"] $ do
atype <- eu ^? euseAmmoSourceType atype <- eu ^? euseAmmoSourceType
x <- fmap showIntKMG' $ eu ^? euseAmmoAmount x <- fmap showIntKMG' $ eu ^? euseAmmoAmount
i <- itm ^? itLocation . ipInvID i <- itm ^? itLocation . ipInvID
(do ( do
at' <- cr ^? crInv . ix (i + 1) . itUse . heldConsumption . laSourceType at' <- cr ^? crInv . ix (i + 1) . itUse . heldConsumption . laSourceType
as <- cr ^? crInv . ix (i + 1) . itUse . heldConsumption . laSource as <- cr ^? crInv . ix (i + 1) . itUse . heldConsumption . laSource
guard (at' == atype && as == AboveSource) guard (at' == atype && as == AboveSource)
return ["vvvv",x] ) <|> Just [x] return ["vvvv", x]
)
<|> Just [x]
showReloadProgress :: Creature -> Item -> String showReloadProgress :: Creature -> Item -> String
showReloadProgress cr itm = case ic ^? laSource of showReloadProgress cr itm = case ic ^? laSource of
+1
View File
@@ -23,6 +23,7 @@ itemSPic it =
HELD ht -> heldItemSPic ht it HELD ht -> heldItemSPic ht it
LEFT lt -> leftItemSPic lt it LEFT lt -> leftItemSPic lt it
EQUIP et -> equipItemSPic et it EQUIP et -> equipItemSPic et it
AMMO {} -> defSPic
Consumable{} -> defSPic Consumable{} -> defSPic
equipItemSPic :: EquipItemType -> Item -> SPic equipItemSPic :: EquipItemType -> Item -> SPic