From 0a7f5079ad5187daae0bc09fe95121f065c89f0d Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 25 Sep 2023 13:38:47 +0100 Subject: [PATCH] Work on weapon attachments --- src/Dodge/Data/Item/Combine.hs | 7 ++++--- src/Dodge/Data/Item/Use.hs | 1 + src/Dodge/Debug/Terminal.hs | 2 +- src/Dodge/Default.hs | 2 +- src/Dodge/Default/Item.hs | 23 +++++++---------------- src/Dodge/Default/Item/Use.hs | 1 - src/Dodge/Item.hs | 5 +++-- src/Dodge/Item/Consumable.hs | 2 +- src/Dodge/Item/Display.hs | 8 +++++--- src/Dodge/Item/Draw/SPic.hs | 3 +-- src/Dodge/Item/Held/Cane.hs | 4 ++-- src/Dodge/Item/Info.hs | 4 ++-- 12 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/Dodge/Data/Item/Combine.hs b/src/Dodge/Data/Item/Combine.hs index a0a539fe2..d93d878e4 100644 --- a/src/Dodge/Data/Item/Combine.hs +++ b/src/Dodge/Data/Item/Combine.hs @@ -84,12 +84,11 @@ data CraftType --deriving (Eq, Ord, Show, Enum, Read) --Generic, Flat) data ItemBaseType - = NoItemType - | HELD {_ibtHeld :: HeldItemType} + = HELD {_ibtHeld :: HeldItemType} | LEFT {_ibtLeft :: LeftItemType} | EQUIP {_ibtEquip :: EquipItemType} | AMMO {_ibtAmmo :: AmmoItemType} - | Consumable {_ibtConsumable :: ConsumableItemType} + | CONSUMABLE {_ibtConsumable :: ConsumableItemType} | CRAFT CraftType | ATTACH AttachType deriving (Eq, Ord, Show, Read) @@ -98,6 +97,8 @@ data ItemBaseType data AttachType = ZOOMSCOPE + | TINMAG + | DRUMMAG deriving (Eq, Ord, Show, Read) data ConsumableItemType diff --git a/src/Dodge/Data/Item/Use.hs b/src/Dodge/Data/Item/Use.hs index 5d4a302d2..ba357d3ed 100644 --- a/src/Dodge/Data/Item/Use.hs +++ b/src/Dodge/Data/Item/Use.hs @@ -60,6 +60,7 @@ data ItemUse data AttachParams = ZoomScopeParams + | AmmoAttachParams data ItemUse' = ItemHeld HeldUse' diff --git a/src/Dodge/Debug/Terminal.hs b/src/Dodge/Debug/Terminal.hs index a5b7b0e79..e37d0812c 100644 --- a/src/Dodge/Debug/Terminal.hs +++ b/src/Dodge/Debug/Terminal.hs @@ -38,7 +38,7 @@ applyTerminalCommand s = case s of applyTerminalCommandArguments :: String -> [String] -> Universe -> Universe applyTerminalCommandArguments command args u = case command of - "ITEM" -> fromMaybe u $ do + "IT" -> fromMaybe u $ do (ibt, n) <- parseItem args return $ u & uvWorld %~ flip (foldr ($)) (replicate n (snd . createPutItem (itemFromBase ibt))) "DEX" -> fromMaybe u $ do diff --git a/src/Dodge/Default.hs b/src/Dodge/Default.hs index 18ebbd3cf..4d96ab47f 100644 --- a/src/Dodge/Default.hs +++ b/src/Dodge/Default.hs @@ -25,7 +25,7 @@ import Geometry import Picture defaultEquipment :: Item -defaultEquipment = defaultItem & itUse .~ defaultEquipUse +defaultEquipment = defaultHeldItem & itUse .~ defaultEquipUse defaultFlIt :: FloorItem defaultFlIt = FlIt{_flItRot = 0, _flIt = defaultConsumable, _flItPos = V2 0 0, _flItID = 0} diff --git a/src/Dodge/Default/Item.hs b/src/Dodge/Default/Item.hs index e2667bfb1..fd64e72df 100644 --- a/src/Dodge/Default/Item.hs +++ b/src/Dodge/Default/Item.hs @@ -18,37 +18,28 @@ defaultItemDimension = ItemDimension , _dimAttachPos = V3 10 (-5) 3 } -defaultItem :: Item -defaultItem = - Item +defaultHeldItem :: Item +defaultHeldItem = Item { _itCurseStatus = Uncursed - , _itType = defaultItemType + , _itType = ItemType (HELD PISTOL) mempty , _itEffect = defaultItEffect , _itID = 0 , _itIsHeld = False --- , _itInvColor = yellow , _itInvSize = 1 , _itLocation = InVoid , _itDimension = defaultItemDimension - , _itUse = CraftUse (ItAmount 1) + , _itUse = defaultHeldUse , _itParams = NoParams , _itTweaks = NoTweaks , _itScope = NoScope , _itAttachments = mempty --- , _itValue = ItemValue 0 MundaneItem } defaultLeftItem :: Item -defaultLeftItem = defaultItem & itUse .~ defaultLeftUse - -defaultHeldItem :: Item -defaultHeldItem = defaultItem & itUse .~ defaultHeldUse +defaultLeftItem = defaultHeldItem & itUse .~ defaultLeftUse defaultCraftItem :: Item -defaultCraftItem = defaultItem & itUse .~ CraftUse 1 - -defaultItemType :: ItemType -defaultItemType = ItemType NoItemType mempty +defaultCraftItem = defaultHeldItem & itUse .~ CraftUse 1 defaultBulletWeapon :: Item defaultBulletWeapon = @@ -70,5 +61,5 @@ defaultWeapon = ] defaultConsumable :: Item -defaultConsumable = defaultItem & itUse .~ ConsumeUse CDoNothing 1 +defaultConsumable = defaultHeldItem & itUse .~ ConsumeUse CDoNothing 1 diff --git a/src/Dodge/Default/Item/Use.hs b/src/Dodge/Default/Item/Use.hs index ff2f61bc3..f86bf9246 100644 --- a/src/Dodge/Default/Item/Use.hs +++ b/src/Dodge/Default/Item/Use.hs @@ -36,5 +36,4 @@ defaultHeldUse = , _heldAim = defaultAimParams , _heldScroll = HeldScrollDoNothing , _heldConsumption = defaultLoadable --- , _useTargeting = Nothing } diff --git a/src/Dodge/Item.hs b/src/Dodge/Item.hs index 4f60fa016..1676099c5 100644 --- a/src/Dodge/Item.hs +++ b/src/Dodge/Item.hs @@ -17,18 +17,19 @@ import Dodge.Item.Weapon itemFromBase :: ItemBaseType -> Item itemFromBase ibt = case ibt of - NoItemType -> undefined HELD ht -> itemFromHeldType ht LEFT lt -> itemFromLeftType lt EQUIP et -> itemFromEquipType et AMMO at -> itemFromAmmoType at - Consumable et -> itemFromConsumableType et + CONSUMABLE et -> itemFromConsumableType et CRAFT cr -> makeTypeCraft cr ATTACH at -> itemFromAttachType at itemFromAttachType :: AttachType -> Item itemFromAttachType at = case at of ZOOMSCOPE -> zoomScope + DRUMMAG -> drumMag + TINMAG -> tinMag itemFromAmmoType :: AmmoItemType -> Item itemFromAmmoType at = case at of diff --git a/src/Dodge/Item/Consumable.hs b/src/Dodge/Item/Consumable.hs index 8c56f28fd..04b14d21e 100644 --- a/src/Dodge/Item/Consumable.hs +++ b/src/Dodge/Item/Consumable.hs @@ -9,7 +9,7 @@ medkit :: Int -> Item medkit i = defaultConsumable & itUse . cUse .~ CHeal i - & itType . iyBase .~ Consumable (MEDKIT i) + & itType . iyBase .~ CONSUMABLE (MEDKIT i) heal25 :: Int -> World -> Maybe World heal25 = heal 25 diff --git a/src/Dodge/Item/Display.hs b/src/Dodge/Item/Display.hs index 581870764..189f1e3b4 100644 --- a/src/Dodge/Item/Display.hs +++ b/src/Dodge/Item/Display.hs @@ -79,7 +79,6 @@ itemString = head . basicItemDisplay itemBaseName :: Item -> String itemBaseName it = case _iyBase $ _itType it of - NoItemType -> show "NoItemType" CRAFT str -> show str HELD hit -> case hit ^? xNum of Just i -> takeWhile (/= ' ') (show hit) ++ show i @@ -87,7 +86,7 @@ itemBaseName it = case _iyBase $ _itType it of LEFT lit -> show lit EQUIP eit -> showEquipItem eit AMMO ait -> show ait - Consumable cit -> show cit + CONSUMABLE cit -> show cit ATTACH ait -> show ait showEquipItem :: EquipItemType -> String @@ -121,7 +120,10 @@ itemNumberDisplay cr itm = case iu of HeldUse{} -> [showReloadProgress cr itm] LeftUse{} -> [showAutoRechargeProgress (_leftConsumption iu)] EquipUse{} -> showEquipmentNumber cr itm - _ -> [show $ iu ^?! useAmount . getItAmount] + CraftUse x -> [show $ x ^. getItAmount] + ConsumeUse {_useAmount = x} -> [show $ x ^. getItAmount] + AttachUse {} -> [] + where iu = itm ^?! itUse diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index 8dfa031ab..d660bf517 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -18,13 +18,12 @@ import ShapePicture itemSPic :: Item -> SPic itemSPic it = M.foldMapWithKey (modulesSPic it) (_iyModules $ _itType it) <> case it ^. itType . iyBase of - NoItemType -> over _1 (colorSH magenta) defSPic CRAFT _ -> defSPic HELD ht -> heldItemSPic ht it LEFT lt -> leftItemSPic lt it EQUIP et -> equipItemSPic et it AMMO {} -> defSPic - Consumable{} -> defSPic + CONSUMABLE{} -> defSPic ATTACH {} -> defSPic equipItemSPic :: EquipItemType -> Item -> SPic diff --git a/src/Dodge/Item/Held/Cane.hs b/src/Dodge/Item/Held/Cane.hs index cdd875d98..ab7fc5afd 100644 --- a/src/Dodge/Item/Held/Cane.hs +++ b/src/Dodge/Item/Held/Cane.hs @@ -99,8 +99,8 @@ miniGunUse i = & heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5} & heldConsumption .~ (defaultBulletLoadable & laSource .~ AboveSource) - & heldConsumption . laSource . _InternalSource . iaCycle - .~ [loadEject 40, loadInsert 40, loadPrime 40] +-- & heldConsumption . laSource . _InternalSource . iaCycle +-- .~ [loadEject 40, loadInsert 40, loadPrime 40] miniGunX :: Int -> Item miniGunX i = diff --git a/src/Dodge/Item/Info.hs b/src/Dodge/Item/Info.hs index 35387bb2f..f61b75835 100644 --- a/src/Dodge/Item/Info.hs +++ b/src/Dodge/Item/Info.hs @@ -23,7 +23,7 @@ itmBaseInfo itm = case itm ^. itType . iyBase of HELD hit -> heldInfo hit LEFT lit -> leftInfo lit EQUIP eit -> equipInfo eit - Consumable cit -> consumableInfo cit + CONSUMABLE cit -> consumableInfo cit CRAFT fit -> craftInfo fit _ -> "THIS SHOULD NOT BE DISPLAYED" @@ -222,7 +222,7 @@ itmUsageInfo itm = case itm ^. itType . iyBase of "This item can be equipped" ++ itmEquipSiteInfo itm ++ ". When equipped, it can be activated." EQUIP _ -> "This item can be equipped " ++ itmEquipSiteInfo itm ++ "." - Consumable _ -> "This item can be consumed." + CONSUMABLE _ -> "This item can be consumed." CRAFT _ -> "" _ -> "THIS SHOULD NOT BE DISPLAYED"