From 02e26c368cc6fd9ef6023c863ca9d6294e699a2b Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 14 Apr 2026 21:07:46 +0100 Subject: [PATCH] Add compass item --- src/Dodge/Data/ComposedItem.hs | 3 ++- src/Dodge/Data/Item/Combine.hs | 1 + src/Dodge/Inventory/SelectionList.hs | 16 ++++++++++++++++ src/Dodge/Item.hs | 1 + src/Dodge/Item/Display.hs | 1 + src/Dodge/Item/Draw/SPic.hs | 1 + src/Dodge/Item/Grammar.hs | 6 ++++-- src/Dodge/Item/Held/BatteryGuns.hs | 4 ++++ src/Dodge/Item/InventoryColor.hs | 2 +- 9 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/Dodge/Data/ComposedItem.hs b/src/Dodge/Data/ComposedItem.hs index 0eafa8901..189ee2e54 100644 --- a/src/Dodge/Data/ComposedItem.hs +++ b/src/Dodge/Data/ComposedItem.hs @@ -3,6 +3,7 @@ module Dodge.Data.ComposedItem where +import Color.Data import Control.Lens import Dodge.Data.AmmoType import Dodge.Data.Item @@ -26,7 +27,7 @@ data ItemSF -- Structural Function | JoystickSF | RemoteDetonatorSF | SmokeReducerSF - | NoSF + | NoSF Color | AmmoModifierSF AmmoType | AmmoTargetingSF AmmoType | AmmoPayloadSF AmmoType diff --git a/src/Dodge/Data/Item/Combine.hs b/src/Dodge/Data/Item/Combine.hs index 06a490ff5..be5063bb3 100644 --- a/src/Dodge/Data/Item/Combine.hs +++ b/src/Dodge/Data/Item/Combine.hs @@ -33,6 +33,7 @@ data ItemType | DETECTOR {_ibtDetector :: Detector} | ARHUD | LASER + | COMPASS deriving (Eq, Ord, Show, Read) data InventoryPathing diff --git a/src/Dodge/Inventory/SelectionList.hs b/src/Dodge/Inventory/SelectionList.hs index a69c769e1..0d455946b 100644 --- a/src/Dodge/Inventory/SelectionList.hs +++ b/src/Dodge/Inventory/SelectionList.hs @@ -8,6 +8,7 @@ module Dodge.Inventory.SelectionList ( getItemValue, ) where +import Geometry.Vector import Dodge.Creature.MaxHP import Dodge.Data.Equipment.Misc import Numeric @@ -83,6 +84,7 @@ itemExternalValue :: Item -> World -> Creature -> Maybe (Either Int String) itemExternalValue itm w cr | EQUIP WRIST_ECG <- itm ^. itType = Just . Right . displayPulse $ cr ^?! crType . avatarPulse . pulseProgress + | COMPASS <- itm ^. itType = Just . Right . radToCompass . normalizeAngle $ w ^. wCam . camRot | Just t <- itm ^? itType . ibtIntroScanType = Just $ introScanValue cr t | ITEMSCAN <- itm ^. itType , Just ExamineInventory <- w ^? hud . subInventory @@ -106,6 +108,20 @@ itemExternalValue itm w cr Just . Left $ ugateCalc x y | otherwise = mempty +radToCompass :: Float -> String +radToCompass x + | x > f 7 = "N" + | x > f 6 = "NE" + | x > f 5 = "E" + | x > f 4 = "SE" + | x > f 3 = "S" + | x > f 2 = "SW" + | x > f 1 = "W" + | x > f 0 = "NW" + | otherwise = "N" + where + f i = i * pi / 4 + pi/8 + ugateCalc :: Int -> Int -> Int ugateCalc x y = (x `div` ((2::Int) ^ (f y ::Int))::Int) `mod` 2 where diff --git a/src/Dodge/Item.hs b/src/Dodge/Item.hs index 749891616..5a5dbf730 100644 --- a/src/Dodge/Item.hs +++ b/src/Dodge/Item.hs @@ -38,6 +38,7 @@ itemFromBase = \case UNIGATE -> unigate BINGATE -> bingate LASER -> laser + COMPASS -> compass itemFromAmmoMag :: AmmoMagType -> Item itemFromAmmoMag at = case at of diff --git a/src/Dodge/Item/Display.hs b/src/Dodge/Item/Display.hs index 834e34dd3..51a29f73f 100644 --- a/src/Dodge/Item/Display.hs +++ b/src/Dodge/Item/Display.hs @@ -82,6 +82,7 @@ itemBaseName = \case UNIGATE -> "UNIGATE" NULGATE -> "NULGATE" LASER -> "LASER" + COMPASS -> "COMPASS" showInventoryPathing :: InventoryPathing -> String showInventoryPathing = \case diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index 28ed20e64..567ab228f 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -36,6 +36,7 @@ itemSPic it = case it ^. itType of UNIGATE -> defSPic NULGATE -> defSPic LASER -> lasGunPic it + COMPASS -> defSPic craftItemSPic :: CraftType -> Shape craftItemSPic = \case diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index ea09fadb0..efec7560d 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -9,6 +9,7 @@ module Dodge.Item.Grammar ( invIndents, ) where +import Color import NewInt import Dodge.Item.Orientation import Dodge.ItemUseCondition @@ -122,7 +123,7 @@ itemToFunction itm = case itm ^. itType of _ | Just amtype <- magAmmoType itm-- ^? itConsumables . magType , Just _ <- itm ^? itLocation . ilEquipSite . _Just -> AmmoMagSF 0 amtype - AMMOMAG{} -> maybe NoSF (AmmoMagSF 0) $ magAmmoType itm -- ^? itConsumables . magType + AMMOMAG{} -> maybe (NoSF (greyN 0.5)) (AmmoMagSF 0) $ magAmmoType itm -- ^? itConsumables . magType ATTACH REMOTESCREEN -> RemoteScreenSF ATTACH JOYSTICK -> JoystickSF ATTACH REMOTEDETONATOR -> RemoteDetonatorSF @@ -143,7 +144,8 @@ itemToFunction itm = case itm ^. itType of ATTACH CAPACITOR -> CapacitorSF CRAFT TRANSFORMER -> TransformerSF CRAFT PUMP -> PumpSF - _ -> NoSF + COMPASS -> NoSF white + _ -> NoSF $ greyN 0.5 treeToPotentialFunction :: DTree CItem -> S.Set ItemSF treeToPotentialFunction ldt = case ldt ^. dtValue . _1 . itType of diff --git a/src/Dodge/Item/Held/BatteryGuns.hs b/src/Dodge/Item/Held/BatteryGuns.hs index 938448f46..ee9d2b306 100644 --- a/src/Dodge/Item/Held/BatteryGuns.hs +++ b/src/Dodge/Item/Held/BatteryGuns.hs @@ -2,6 +2,7 @@ module Dodge.Item.Held.BatteryGuns ( teslaCoil, laser, tractorGun, + compass, ) where import Control.Lens @@ -35,6 +36,9 @@ laser = } & itType .~ LASER +compass :: Item +compass = defHeldItem & itType .~ COMPASS + -- previous attractionPower values: 1, -1, -10, 0 tractorGun :: Item tractorGun = defHeldItem & itType .~ HELD TRACTORGUN diff --git a/src/Dodge/Item/InventoryColor.hs b/src/Dodge/Item/InventoryColor.hs index 37b6cb6b0..eed562c95 100644 --- a/src/Dodge/Item/InventoryColor.hs +++ b/src/Dodge/Item/InventoryColor.hs @@ -29,7 +29,7 @@ sfInvColor = \case JoystickSF -> azure RemoteDetonatorSF -> azure SmokeReducerSF -> azure - NoSF -> greyN 0.5 + NoSF c -> c AmmoModifierSF{} -> orange AmmoTargetingSF{} -> green AmmoPayloadSF{} -> violet