From 15187db9993ffe4d7b1c5f4959b3b4a126a0fa80 Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 8 Jul 2025 23:20:25 +0100 Subject: [PATCH] Unify some item updates --- src/Dodge/Creature/State.hs | 88 ++++++++++++++++++++++++++++++++---- src/Dodge/Item/HeldOffset.hs | 3 +- tags | 62 ++++++++++++------------- 3 files changed, 112 insertions(+), 41 deletions(-) diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index 9e12f6731..9b2953f30 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -160,6 +160,14 @@ invItemLocUpdate cr loc w = doAnyEquipmentEffect loc cr $ case itm ^. itType of HELD FLATSHIELD -> rootNotrootEff createShieldWall removeShieldWall itm cr w HELD MINIGUNX{} -> coolMinigun itm w HELD MACHINEPISTOL{} -> coolMachinePistol cr itm w + HELD LASER | loc ^. locLDT . ldtValue . _2 == WeaponTargetingSF + , itm ^? itLocation . ilIsAttached == Just True -> shineTargetLaser cr loc w + HELD TORCH + | itm ^? itLocation . ilIsAttached == Just True -> shineTorch' cr loc w + TARGETING tt + | itm ^? itLocation . ilIsAttached == Just True -> updateItemTargeting tt cr itm w + ARHUD + | itm ^? itLocation . ilIsAttached == Just True -> drawARHUD loc w _ -> w where haspulse = @@ -194,8 +202,12 @@ coolMachinePistol cr itm w w & d . wTime .~ _coolStart (baseItemTriggerType itm) | otherwise = w & d . wTime .~ 0 where - dosound s = soundContinue - (CrWeaponSound (_crID cr) (fromIntegral $ _itID itm)) (_crPos cr) s (Just 1) + dosound s = + soundContinue + (CrWeaponSound (_crID cr) (fromIntegral $ _itID itm)) + (_crPos cr) + s + (Just 1) d = pointerToItem itm . itParams (sid, g) = runState (takeOne [whirdownSmall1S, whirdownSmall2S]) (w ^. randGen) @@ -304,16 +316,16 @@ updateItemWithOrientation :: World updateItemWithOrientation cr m loc@(LocLDT _ itmtree) w = case (ci ^. _1 . itType, ci ^. _2) of - (HELD TORCH, _) -> shineTorch cr itmtree m w - (HELD LASER, WeaponTargetingSF) -> shineTargetLaser cr loc m w - (TARGETING tt, _) -> updateItemTargeting tt cr itm w - (ARHUD, _) -> drawARHUD loc w + (HELD TORCH, _) -> w -- shineTorch cr itmtree m w + (HELD LASER, WeaponTargetingSF) -> w -- shineTargetLaser cr loc m w + (TARGETING tt, _) -> w -- updateItemTargeting tt cr itm w + (ARHUD, _) -> w --drawARHUD loc w _ -> w where ci = itmtree ^. ldtValue itm = ci ^. _1 -drawARHUD :: LocationLDT ItemLink CItem -> World -> World +drawARHUD :: LocationLDT ItemLink OItem -> World -> World drawARHUD (LocLDT con _) w = fromMaybe w $ do itm <- con ^? cldtParent . _1 return $ @@ -321,8 +333,8 @@ drawARHUD (LocLDT con _) w = fromMaybe w $ do <>~ fold (drawTargetingAR itm w <|> drawMapperAR itm w) -shineTargetLaser :: Creature -> LocationLDT ItemLink CItem -> Point3Q -> World -> World -shineTargetLaser cr loc o w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ do +shineTargetLaser :: Creature -> LocationLDT ItemLink OItem -> World -> World +shineTargetLaser cr loc w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ do guard (crIsAiming cr) (_, mag) <- find (isammolink . fst) (itmtree ^. ldtLeft) i <- mag ^. ldtValue . _1 . itConsumables @@ -346,6 +358,7 @@ shineTargetLaser cr loc o w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ , _lpType = TargetingLaser (_itID itm) } where + o = locOrient loc cr itmtree = loc ^. locLDT (p, q) = o `Q.comp` (V3 5 0 0, Q.qID) x = 1 @@ -359,6 +372,44 @@ shineTargetLaser cr loc o w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ invid = _ilInvID $ _itLocation itm col = blue -- mixColors reloadFrac (1-reloadFrac) blue red +--shineTargetLaser :: Creature -> LocationLDT ItemLink CItem -> Point3Q -> World -> World +--shineTargetLaser cr loc o w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ do +-- guard (crIsAiming cr) +-- (_, mag) <- find (isammolink . fst) (itmtree ^. ldtLeft) +-- i <- mag ^. ldtValue . _1 . itConsumables +-- guard $ i >= x +-- maginvid <- mag ^? ldtValue . _1 . itLocation . ilInvID +-- return $ +-- w +-- & worldEventFlags . at InventoryChange ?~ () +-- & cWorld . lWorld . creatures . ix (_crID cr) +-- . crInv +-- . ix maginvid +-- . itConsumables +-- . _Just +-- -~ x +-- & cWorld . lWorld . lasers +-- .:~ Laser +-- { _lpPhaseV = 1 +-- , _lpDir = _crDir cr + argV (Q.qToV2 q) +-- , _lpPos = pos +-- , _lpColor = col +-- , _lpType = TargetingLaser (_itID itm) +-- } +-- where +-- itmtree = loc ^. locLDT +-- (p, q) = o `Q.comp` (V3 5 0 0, Q.qID) +-- x = 1 +-- isammolink AmmoInLink{} = True +-- isammolink _ = False +-- pos = _crPos cr + xyV3 (rotate3 cdir p) +-- cdir = _crDir cr +-- itm = itmtree ^. ldtValue . _1 +-- pointittarg = cWorld . lWorld . creatures . ix cid . crInv . ix invid . itTargeting +-- cid = _crID cr +-- invid = _ilInvID $ _itLocation itm +-- col = blue -- mixColors reloadFrac (1-reloadFrac) blue red + shineTorch :: Creature -> LDTree ItemLink CItem -> Point3Q -> World -> World shineTorch cr itmtree (p, q) = fromMaybe id $ do (_, mag) <- find (isammolink . fst) (itmtree ^. ldtLeft) @@ -376,6 +427,25 @@ shineTorch cr itmtree (p, q) = fromMaybe id $ do pos = _crPos cr `v2z` 0 + rotate3 cdir (p + Q.rotate q (V3 8 0 1.5)) cdir = _crDir cr +shineTorch' :: Creature -> LocationLDT ItemLink OItem -> World -> World +shineTorch' cr loc = fromMaybe id $ do + (_, mag) <- find (isammolink . fst) (itmtree ^. ldtLeft) + i <- mag ^. ldtValue . _1 . itConsumables + guard $ crIsAiming cr + guard $ i >= x + invid <- mag ^? ldtValue . _1 . itLocation . ilInvID + return $ + (cWorld . lWorld . lights .:~ LSParam pos 250 0.7) + . (cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix invid . itConsumables . _Just -~ x) + where + itmtree = loc ^. locLDT + (p, q) = locOrient loc cr + x = 10 + isammolink AmmoInLink{} = True + isammolink _ = False + pos = _crPos cr `v2z` 0 + rotate3 cdir (p + Q.rotate q (V3 8 0 1.5)) + cdir = _crDir cr + -- this probably needs to be set to null when dropped as well? -- does this need to be updated if it is not attached to the used root item? updateItemTargeting :: TargetingType -> Creature -> Item -> World -> World diff --git a/src/Dodge/Item/HeldOffset.hs b/src/Dodge/Item/HeldOffset.hs index 3f1d8716e..46a97b619 100644 --- a/src/Dodge/Item/HeldOffset.hs +++ b/src/Dodge/Item/HeldOffset.hs @@ -8,6 +8,7 @@ module Dodge.Item.HeldOffset ( handHandleOrient, ) where +import Dodge.DoubleTree import Dodge.Data.AimStance import Dodge.Data.ComposedItem import Dodge.Data.Creature @@ -55,7 +56,7 @@ handOrient cr = case cr ^. crStance . posture of locOrient :: LocationLDT ItemLink OItem -> Creature -> Point3Q locOrient loc cr = - handHandleOrient (fmap (\(x, y, _) -> (x, y)) loc) cr + handHandleOrient (fmap (\(x, y, _) -> (x, y)) $ locToTop loc) cr `Q.comp` (loc ^. locLDT . ldtValue . _3) heldItemOffset :: LocationLDT ItemLink CItem -> Creature -> Point3 -> Point3 diff --git a/tags b/tags index 76f6739cf..4f48b16bb 100644 --- a/tags +++ b/tags @@ -3355,10 +3355,8 @@ advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 44;" f aimDelaySweep src/Dodge/Render/Picture.hs 264;" f aimStance src/Dodge/Item/AimStance.hs 13;" f -aimStanceHandlePos src/Dodge/Item/HeldOffset.hs 98;" f aimStanceInfo src/Dodge/Item/Info.hs 243;" f aimTurn src/Dodge/Creature/YourControl.hs 165;" f -aimingWeaponZeroPos src/Dodge/Item/HeldOffset.hs 94;" f airlock src/Dodge/Room/Airlock.hs 19;" f airlock0 src/Dodge/Room/Airlock.hs 25;" f airlock90 src/Dodge/Room/Airlock.hs 122;" f @@ -3588,7 +3586,7 @@ centerVaultRoom src/Dodge/Room/Procedural.hs 289;" f centroid src/Geometry/Polygon.hs 130;" f centroidNum src/Geometry/Polygon.hs 133;" f chainCreatureUpdates src/Dodge/Creature/ChainUpdates.hs 6;" f -chainLinkOrientation src/Dodge/Creature/State.hs 293;" f +chainLinkOrientation src/Dodge/Creature/State.hs 306;" f chainPairs src/Geometry.hs 359;" f changeSwapOther src/Dodge/Inventory.hs 144;" f changeSwapSel src/Dodge/Inventory.hs 137;" f @@ -3720,8 +3718,10 @@ contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 57;" f convexHull src/Geometry/Polygon.hs 104;" f convexHullSafe src/Geometry/Polygon.hs 111;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 50;" f +coolMachinePistol src/Dodge/Creature/State.hs 185;" f +coolMinigun src/Dodge/Creature/State.hs 178;" f copier src/Dodge/Item/Scope.hs 88;" f -copierItemUpdate src/Dodge/Creature/State.hs 201;" f +copierItemUpdate src/Dodge/Creature/State.hs 214;" f copierItemUpdate src/Dodge/ItEffect.hs 37;" f copyItemToFloor src/Dodge/FloorItem.hs 18;" f copyItemToFloorID src/Dodge/FloorItem.hs 22;" f @@ -4015,7 +4015,7 @@ dmType src/Dodge/Damage.hs 38;" f doAfterPlacement src/Dodge/Layout.hs 86;" f doAfterPlacements src/Dodge/Layout.hs 83;" f doAimTwist src/Dodge/Creature/YourControl.hs 140;" f -doAnyEquipmentEffect src/Dodge/Creature/State.hs 211;" f +doAnyEquipmentEffect src/Dodge/Creature/State.hs 224;" f doArcStep src/Dodge/Tesla/Arc.hs 135;" f doBackspace src/Dodge/Update/Input/Text.hs 31;" f doBlBl src/Dodge/BlBl.hs 5;" f @@ -4112,7 +4112,7 @@ doublePair src/Geometry.hs 161;" f doublePairSet src/Geometry.hs 165;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 95;" f doubleV2 src/Geometry.hs 168;" f -drawARHUD src/Dodge/Creature/State.hs 321;" f +drawARHUD src/Dodge/Creature/State.hs 328;" f drawAimSweep src/Dodge/Render/Picture.hs 271;" f drawAllShadows src/Dodge/Shadows.hs 5;" f drawBaseMachine src/Dodge/Machine/Draw.hs 57;" f @@ -4529,16 +4529,16 @@ halfHeight src/Dodge/Base/Window.hs 48;" f halfWidth src/Dodge/Base/Window.hs 48;" f haltSound src/Dodge/SoundLogic.hs 38;" f hammerCheck src/Dodge/HeldUse.hs 63;" f -handHandleOrient src/Dodge/Item/HeldOffset.hs 110;" f -handOrient src/Dodge/Item/HeldOffset.hs 65;" f +handHandleOrient src/Dodge/Item/HeldOffset.hs 67;" f +handOrient src/Dodge/Item/HeldOffset.hs 38;" f handleEvent src/Dodge/Event.hs 27;" f handleHotkeys src/Dodge/Creature/YourControl.hs 45;" f handleKeyboardEvent src/Dodge/Event/Input.hs 22;" f handleMouseButtonEvent src/Dodge/Event/Input.hs 63;" f handleMouseMotionEvent src/Dodge/Event/Input.hs 47;" f handleMouseWheelEvent src/Dodge/Event/Input.hs 58;" f -handleOrient src/Dodge/Item/HeldOffset.hs 59;" f -handlePos src/Dodge/Item/HeldOffset.hs 130;" f +handleOrient src/Dodge/Item/HeldOffset.hs 32;" f +handlePos src/Dodge/Item/HeldOffset.hs 87;" f handleResizeEvent src/Dodge/Event.hs 53;" f handleTextInput src/Dodge/Event/Input.hs 18;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f @@ -4563,15 +4563,14 @@ heldAimStance src/Dodge/Item/AimStance.hs 22;" f heldAimZoom src/Dodge/Update/Camera.hs 140;" f heldEffect src/Dodge/HeldUse.hs 60;" f heldEffectMuzzles src/Dodge/HeldUse.hs 127;" f -heldHandlePos src/Dodge/Item/HeldOffset.hs 135;" f +heldHandlePos src/Dodge/Item/HeldOffset.hs 92;" f heldInfo src/Dodge/Item/Info.hs 90;" f heldItemAmmoSlots src/Dodge/Item/AmmoSlots.hs 18;" f heldItemBulkiness src/Dodge/Creature/YourControl.hs 177;" f heldItemInvLock src/Dodge/HeldUse.hs 478;" f heldItemMuzVel src/Dodge/HeldUse.hs 1024;" f heldItemMuzzles src/Dodge/HeldUse.hs 156;" f -heldItemOffset src/Dodge/Item/HeldOffset.hs 105;" f -heldItemRelativeOrient src/Dodge/Item/HeldOffset.hs 33;" f +heldItemOffset src/Dodge/Item/HeldOffset.hs 62;" f heldItemRifling src/Dodge/HeldUse.hs 1068;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 223;" f heldItemWeight src/Dodge/Creature/Statistics.hs 71;" f @@ -4864,7 +4863,7 @@ locGoHelp src/Dodge/DoubleTree.hs 273;" f locGoLeft src/Dodge/DoubleTree.hs 262;" f locGoRight src/Dodge/DoubleTree.hs 267;" f locLeftmost src/Dodge/DoubleTree.hs 255;" f -locOrient src/Dodge/Item/HeldOffset.hs 84;" f +locOrient src/Dodge/Item/HeldOffset.hs 57;" f locRightmost src/Dodge/DoubleTree.hs 258;" f locToTop src/Dodge/DoubleTree.hs 250;" f locUp src/Dodge/DoubleTree.hs 237;" f @@ -5724,7 +5723,7 @@ setOldPos src/Dodge/Update.hs 475;" f setOutLinks src/Dodge/RoomLink.hs 48;" f setOutLinksByType src/Dodge/RoomLink.hs 57;" f setOutLinksPD src/Dodge/RoomLink.hs 77;" f -setRBCreatureTargeting src/Dodge/Creature/State.hs 466;" f +setRBCreatureTargeting src/Dodge/Creature/State.hs 482;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 334;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f setShaderSource src/Shader/Compile.hs 290;" f @@ -5791,8 +5790,9 @@ shiftRoomBy src/Dodge/Room/Link.hs 37;" f shiftRoomShiftBy src/Dodge/Room/Link.hs 81;" f shiftRoomShiftToLink src/Dodge/Room/Link.hs 70;" f shiftedGrid src/Grid.hs 25;" f -shineTargetLaser src/Dodge/Creature/State.hs 329;" f -shineTorch src/Dodge/Creature/State.hs 409;" f +shineTargetLaser src/Dodge/Creature/State.hs 336;" f +shineTorch src/Dodge/Creature/State.hs 413;" f +shineTorch' src/Dodge/Creature/State.hs 430;" f shootBullet src/Dodge/HeldUse.hs 990;" f shootBullets src/Dodge/HeldUse.hs 980;" f shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f @@ -5809,7 +5809,7 @@ shootingRange src/Dodge/Room/Room.hs 332;" f shortPoint2 src/Dodge/ShortShow.hs 4;" f shortShow src/ShortShow.hs 9;" f shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 693;" f -shoulderHeight src/Dodge/Item/HeldOffset.hs 115;" f +shoulderHeight src/Dodge/Item/HeldOffset.hs 72;" f shoulderSH src/Dodge/Creature/Picture.hs 133;" f shoulderSP src/Dodge/Creature/HandPos.hs 170;" f showAttachItem src/Dodge/Item/Display.hs 91;" f @@ -5817,9 +5817,9 @@ showEquipItem src/Dodge/Item/Display.hs 105;" f showInt src/Dodge/Item/Info.hs 73;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f showInventoryPathing src/Dodge/Item/Display.hs 85;" f -showManObj src/Dodge/TestString.hs 59;" f +showManObj src/Dodge/TestString.hs 61;" f showTerminalError src/Dodge/Debug/Terminal.hs 78;" f -showTimeFlow src/Dodge/TestString.hs 82;" f +showTimeFlow src/Dodge/TestString.hs 84;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 136;" f shrinkVert src/Geometry/Polygon.hs 140;" f shuffle src/RandomHelp.hs 49;" f @@ -5959,7 +5959,7 @@ strFromEquipment src/Dodge/Creature/Statistics.hs 48;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 60;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 35;" f strictify src/MaybeHelp.hs 37;" f -strideRot src/Dodge/Item/HeldOffset.hs 118;" f +strideRot src/Dodge/Item/HeldOffset.hs 75;" f stringToList src/Picture/Base.hs 313;" f stringToListGrad src/Picture/Text.hs 12;" f stripZ src/Geometry/Vector3D.hs 97;" f @@ -6096,7 +6096,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 439;" f topInvW src/Dodge/ListDisplayParams.hs 51;" f topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismIndices src/Shader/Poke.hs 410;" f -topTestPart src/Dodge/TestString.hs 55;" f +topTestPart src/Dodge/TestString.hs 57;" f torch src/Dodge/Item/Held/Utility.hs 23;" f torchShape src/Dodge/Item/Draw/SPic.hs 267;" f torqueAmount src/Dodge/HeldUse.hs 619;" f @@ -6111,7 +6111,7 @@ tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f tractorSPic src/Dodge/TractorBeam/Draw.hs 10;" f tranRot src/Picture/Base.hs 124;" f transMat src/MatrixHelper.hs 73;" f -transToHandle src/Dodge/Item/HeldOffset.hs 28;" f +transToHandle src/Dodge/Item/HeldOffset.hs 27;" f translate src/Picture/Base.hs 116;" f translate3 src/Picture/Base.hs 120;" f translateFloatingCamera src/Dodge/Update/Camera.hs 45;" f @@ -6173,17 +6173,17 @@ tryPutItemInInvAt src/Dodge/Inventory/Add.hs 32;" f trySeedFromClipboard src/Dodge/Menu.hs 91;" f tryShellBounce src/Dodge/Projectile/Update.hs 103;" f trySpinByCID src/Dodge/Projectile/Update.hs 177;" f -trySynthBullet src/Dodge/Creature/State.hs 224;" f -tryUseParent src/Dodge/Creature/State.hs 218;" f +trySynthBullet src/Dodge/Creature/State.hs 237;" f +tryUseParent src/Dodge/Creature/State.hs 231;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turret src/Dodge/Placement/Instance/Turret.hs 35;" f -turretItemOffset src/Dodge/Item/HeldOffset.hs 23;" f +turretItemOffset src/Dodge/Item/HeldOffset.hs 22;" f tweenAngles src/Geometry/Vector.hs 195;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 80;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 28;" f twists src/Dodge/Creature/Test.hs 109;" f twoFlat src/Dodge/Creature/Test.hs 106;" f -twoFlatHRot src/Dodge/Item/HeldOffset.hs 127;" f +twoFlatHRot src/Dodge/Item/HeldOffset.hs 84;" f twoHandTwistAmount src/Dodge/Creature/YourControl.hs 150;" f twoRoomPoss src/Dodge/PlacementSpot.hs 147;" f twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 533;" f @@ -6214,7 +6214,7 @@ updateAimPos src/Dodge/Update.hs 308;" f updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla.hs 44;" f updateArc src/Dodge/Tesla/Arc.hs 100;" f -updateAttachedItems src/Dodge/Creature/State.hs 283;" f +updateAttachedItems src/Dodge/Creature/State.hs 296;" f updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 453;" f updateBarrel src/Dodge/Barreloid.hs 41;" f updateBarreloid src/Dodge/Barreloid.hs 15;" f @@ -6252,7 +6252,7 @@ updateFloatingCamera src/Dodge/Update/Camera.hs 34;" f updateFunctionKey src/Dodge/Update/Input/InGame.hs 364;" f updateFunctionKeys src/Dodge/Update/Input/InGame.hs 357;" f updateGusts src/Dodge/Update.hs 726;" f -updateHeldRootItem src/Dodge/Creature/State.hs 277;" f +updateHeldRootItem src/Dodge/Creature/State.hs 290;" f updateHumanoid src/Dodge/Humanoid.hs 13;" f updateIMl src/Dodge/Update.hs 510;" f updateIMl' src/Dodge/Update.hs 515;" f @@ -6260,8 +6260,8 @@ updateInGameCamera src/Dodge/Update/Camera.hs 78;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 400;" f updateInt2Map src/Dodge/Zoning/Base.hs 92;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f -updateItemTargeting src/Dodge/Creature/State.hs 435;" f -updateItemWithOrientation src/Dodge/Creature/State.hs 303;" f +updateItemTargeting src/Dodge/Creature/State.hs 451;" f +updateItemWithOrientation src/Dodge/Creature/State.hs 311;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 394;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 382;" f updateLampoid src/Dodge/Lampoid.hs 12;" f