Work on weapon attachments

This commit is contained in:
2023-09-25 13:38:47 +01:00
parent f9c6769262
commit 0a7f5079ad
12 changed files with 28 additions and 34 deletions
+4 -3
View File
@@ -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
+1
View File
@@ -60,6 +60,7 @@ data ItemUse
data AttachParams
= ZoomScopeParams
| AmmoAttachParams
data ItemUse'
= ItemHeld HeldUse'
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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}
+7 -16
View File
@@ -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
-1
View File
@@ -36,5 +36,4 @@ defaultHeldUse =
, _heldAim = defaultAimParams
, _heldScroll = HeldScrollDoNothing
, _heldConsumption = defaultLoadable
-- , _useTargeting = Nothing
}
+3 -2
View File
@@ -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
+1 -1
View File
@@ -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
+5 -3
View File
@@ -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
+1 -2
View File
@@ -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
+2 -2
View File
@@ -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 =
+2 -2
View File
@@ -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"