Start allowing for more granular control of remote projectiles, cleanup
This commit is contained in:
+19
-18
@@ -1,3 +1,4 @@
|
||||
{-# LANGUAGE LambdaCase #-}
|
||||
module Dodge.Item.Display (
|
||||
itemDisplay,
|
||||
itemBaseName,
|
||||
@@ -13,6 +14,10 @@ import LensHelp
|
||||
import Padding
|
||||
import ShortShow
|
||||
|
||||
-- Principles: base names should identify an item, numbers can change based on a
|
||||
-- variety of factors but typically don't depend on functional quality,
|
||||
-- colour gives an indication of an item's function within a structure
|
||||
|
||||
itemDisplay :: Creature -> ComposedItem -> [String]
|
||||
itemDisplay cr ci =
|
||||
zipWithDefaults
|
||||
@@ -39,7 +44,7 @@ itemDisplayPad ls rs
|
||||
basicItemDisplay :: Item -> [String]
|
||||
basicItemDisplay itm =
|
||||
Prelude.take (itInvHeight itm) $
|
||||
itemBaseName itm :
|
||||
itemBaseName (itm ^. itType) :
|
||||
--catMaybes [maybeWarmupStatus itm, maybeRateStatus itm]
|
||||
catMaybes [maybeWarmupStatus itm]
|
||||
++ repeat "*"
|
||||
@@ -47,36 +52,28 @@ basicItemDisplay itm =
|
||||
itemString :: Item -> String
|
||||
itemString = head . basicItemDisplay
|
||||
|
||||
itemBaseName :: Item -> String
|
||||
itemBaseName itm = case _itType itm of
|
||||
-- this should be immutable with the item type
|
||||
itemBaseName :: ItemType -> String
|
||||
itemBaseName = \case
|
||||
CRAFT str -> show str
|
||||
HELD hit -> case hit ^? xNum of
|
||||
Just i -> takeWhile (/= ' ') (show hit) ++ show i
|
||||
Nothing -> show hit
|
||||
EQUIP eit -> showEquipItem eit
|
||||
ATTACH ait -> showAttachItem ait itm
|
||||
ATTACH ait -> showAttachItem ait
|
||||
AMMOMAG ait -> show ait
|
||||
TARGETING tt -> show tt
|
||||
-- BULLETMOD (BulletModTrajectory btt) -> show btt
|
||||
BULLETMOD (BulletModPayload btt) -> show btt
|
||||
BULLETMOD (BulletModEffect btt) -> show btt
|
||||
|
||||
showAttachItem :: AttachType -> Item -> String
|
||||
showAttachItem t itm = case t of
|
||||
showAttachItem :: AttachType -> String
|
||||
showAttachItem t = case t of
|
||||
ZOOMSCOPE -> "ZOOMSCOPE"
|
||||
BULLETSYNTH -> "BSYNTH"
|
||||
REMOTESCREEN ->
|
||||
"REMOTE SCREEN "
|
||||
++ maybe
|
||||
mempty
|
||||
show
|
||||
(itm ^? itUse . uaParams . apLinkedProjectile . _Just)
|
||||
REMOTEDETONATOR ->
|
||||
"REM.DETONATOR"
|
||||
++ maybe
|
||||
mempty
|
||||
show
|
||||
(itm ^? itUse . uaParams . apLinkedProjectile . _Just)
|
||||
REMOTESCREEN -> "REM.SCREEN"
|
||||
REMOTECONTROLLER -> "REM.CONTR0LR"
|
||||
REMOTEDETONATOR -> "REM.DETONATR"
|
||||
HOMINGMODULE -> "HOMING MOD"
|
||||
AUGMENTEDHUD -> "AUGMENTED HUD"
|
||||
SHELLPAYLOAD x -> show x
|
||||
@@ -86,6 +83,9 @@ showEquipItem eit = case eit of
|
||||
INVISIBILITYEQUIPMENT esite -> "INVISIBILITY " ++ show esite
|
||||
_ -> show eit
|
||||
|
||||
-- this can change, but probably won't when (say) dropped and then picked up
|
||||
-- again
|
||||
-- that is to say, it should not change based on functional positioning
|
||||
itemNumberDisplay :: Creature -> ComposedItem -> [String]
|
||||
itemNumberDisplay cr ci
|
||||
| EQUIP WRIST_ECG <- ci ^. _1 . itType =
|
||||
@@ -98,6 +98,7 @@ itemNumberDisplay cr ci
|
||||
["!TARG!"]
|
||||
| Just x <- ci ^? _1 . itConsumables . magLoadStatus . iaLoaded = [shortShow x]
|
||||
| UseAttach (APInt i) <- ci ^. _1 . itUse = [show i]
|
||||
| UseAttach (APLinkProjectile i) <- ci ^. _1 . itUse = [show i]
|
||||
| UseScope OpticScope{_opticZoom = x} <- ci ^. _1 . itUse = [shortShow x]
|
||||
| otherwise = mempty
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@ itemToBreakLists itm itmf = case (itm ^. itType, itmf) of
|
||||
let screenanddet = case atype of
|
||||
LauncherAmmo -> [ (RemoteScreenSF, RemoteScreenLink)
|
||||
, (RemoteDetonatorSF, RemoteDetonatorLink)
|
||||
, (RemoteControllerSF, RemoteControllerLink)
|
||||
]
|
||||
_ -> []
|
||||
return
|
||||
@@ -106,6 +107,7 @@ itemToFunction itm = case itm ^. itType of
|
||||
AmmoMagSF amtype
|
||||
AMMOMAG{} -> maybe UncomposableIsolateSF AmmoMagSF $ itm ^? itConsumables . magType
|
||||
ATTACH REMOTESCREEN -> RemoteScreenSF
|
||||
ATTACH REMOTECONTROLLER -> RemoteControllerSF
|
||||
ATTACH REMOTEDETONATOR -> RemoteDetonatorSF
|
||||
ATTACH BULLETSYNTH -> AmmoModifierSF BulletAmmo
|
||||
ATTACH ZOOMSCOPE -> WeaponScopeSF
|
||||
|
||||
@@ -18,6 +18,7 @@ itemInvColor ci = case ci ^. _2 of
|
||||
AugmentedHUDSF -> rose
|
||||
AmmoMagSF{} -> red
|
||||
RemoteScreenSF -> azure
|
||||
RemoteControllerSF -> azure
|
||||
RemoteDetonatorSF -> azure
|
||||
UncomposableIsolateSF -> greyN 0.5
|
||||
AmmoModifierSF{} -> orange
|
||||
|
||||
@@ -3,6 +3,7 @@ module Dodge.Item.Scope (
|
||||
zoomScope,
|
||||
targetingScope,
|
||||
remoteScreen,
|
||||
remoteController,
|
||||
remoteDetonator,
|
||||
homingModule,
|
||||
-- bulletTargetingModule,
|
||||
@@ -61,3 +62,7 @@ remoteScreen = makeAttach REMOTESCREEN
|
||||
remoteDetonator :: Item
|
||||
remoteDetonator = makeAttach REMOTEDETONATOR
|
||||
& itUse . uaParams .~ APLinkProjectile Nothing
|
||||
|
||||
remoteController :: Item
|
||||
remoteController = makeAttach REMOTECONTROLLER
|
||||
& itUse . uaParams .~ APLinkProjectile Nothing
|
||||
|
||||
Reference in New Issue
Block a user