From 4710dd763180a7e13ebdb73dd0bbcc55e1183eda Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 26 Jun 2025 23:36:59 +0100 Subject: [PATCH] Move towards externalizing item attachment updates --- src/Dodge/Item/Grammar.hs | 33 ++++++++++++------- tags | 68 ++++++++++++++++++++------------------- 2 files changed, 57 insertions(+), 44 deletions(-) diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index b9d2a02d9..0aee9847d 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -37,15 +37,7 @@ useBreakL :: [(ItemStructuralFunction, ItemLink)] -> [(ItemStructuralFunction, ItemLink)] -> LinkTest -useBreakL x y = useBreakListsLinkTest (map (uncurry noa) x) (map (uncurry noa) y) - where - noa a b = (a, b) - -useBreakListsLinkTest :: - [(ItemStructuralFunction, ItemLink)] -> - [(ItemStructuralFunction, ItemLink)] -> - LinkTest -useBreakListsLinkTest llist rlist = LTest ltest rtest +useBreakL llist rlist = LTest ltest rtest where ltest ldt = do let xs = @@ -53,7 +45,7 @@ useBreakListsLinkTest llist rlist = LTest ltest rtest ((\s -> not $ S.member s (structureToPotentialFunction ldt)) . fst) llist (sf, linktype) <- safeHead xs - return $ LUpdate linktype (set _3 (useBreakListsLinkTest (tail xs) rlist)) + return $ LUpdate linktype (set _3 (useBreakL (tail xs) rlist)) (_2 .~ sf) rtest ldt = do let xs = @@ -61,7 +53,7 @@ useBreakListsLinkTest llist rlist = LTest ltest rtest ((\s -> not $ S.member s (structureToPotentialFunction ldt)) . fst) rlist (sf, linktype) <- safeHead xs - return $ LUpdate linktype (set _3 (useBreakListsLinkTest llist (tail xs))) + return $ LUpdate linktype (set _3 (useBreakL llist (tail xs))) (_2 .~ sf) itemToBreakLists :: @@ -78,6 +70,8 @@ itemToBreakLists itm itmf = case (itm ^. itType, itmf) of <> getAutoSpringLinks itm <> extraWeaponLinks itm ) + (_, UnderBarrelPlatformSF) -> + ( getAmmoLinks itm,[]) (DETECTOR {}, _) -> ( getAmmoLinks itm , [(ARHUDSF,SFLink ARHUDSF),(TriggerSF, TriggerLink),(MapperSF,SFLink MapperSF)] @@ -237,6 +231,9 @@ springLinkTest = LTest (const Nothing) $ type LDTComb a b = LabelDoubleTree b a -> LabelDoubleTree b a -> Maybe (LabelDoubleTree b a) +leftIsParentCombine' :: LDTComb CItem ItemLink +leftIsParentCombine' ltree rtree = Nothing + leftIsParentCombine :: LDTComb CItem ItemLink leftIsParentCombine ltree rtree = do lu <- (ltree ^. ldtValue . _3 . tryRightLink) rtree --(rtree ^. ldtValue) @@ -246,6 +243,20 @@ leftIsParentCombine ltree rtree = do rightIsParentCombine :: LDTComb CItem ItemLink rightIsParentCombine ltree rtree = do + let l = leftChildList rtree + xs = dropWhile ((\s -> not $ S.member s (structureToPotentialFunction ltree)) . fst) l + (sf,linktype) <- safeHead xs + return $ + rtree & ldtLeft .:~ (linktype, ltree & ldtValue . _2 .~ sf) + +leftChildList :: LabelDoubleTree ItemLink CItem -> [(ItemStructuralFunction, ItemLink)] +leftChildList t = foldl' f l (reverse $ t ^.. ldtLeft . each . _1) + where + l = fst $ itemToBreakLists (t ^. ldtValue . _1) (t ^. ldtValue . _2) + f x y = tail $ dropWhile ((/=y) . snd) x + +rightIsParentCombine' :: LDTComb CItem ItemLink +rightIsParentCombine' ltree rtree = do lu <- (rtree ^. ldtValue . _3 . tryLeftLink) ltree -- (ltree ^. ldtValue) return $ rtree & ldtValue %~ (lu ^. luParentUpdate) diff --git a/tags b/tags index bbe3faa84..0bea4aa38 100644 --- a/tags +++ b/tags @@ -978,7 +978,7 @@ Kill src/Dodge/Data/ActionPlan.hs 198;" C LASER src/Dodge/Data/Item/Combine.hs 168;" C LDT src/Dodge/Data/DoubleTree.hs 40;" C LDTBottomNode src/Dodge/Data/DoubleTree.hs 28;" C -LDTComb src/Dodge/Item/Grammar.hs 238;" t +LDTComb src/Dodge/Item/Grammar.hs 230;" t LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 26;" C LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 27;" C LDTRootNode src/Dodge/Data/DoubleTree.hs 24;" C @@ -3295,7 +3295,7 @@ aRadarPulse src/Dodge/RadarSweep.hs 19;" f aShape src/Dodge/Placement/Instance/LightSource.hs 107;" f aSound src/Dodge/SoundLogic.hs 74;" f aTreeStrut src/Dodge/Tree/GenerateStructure.hs 42;" f -accessTerminal src/Dodge/WorldEffect.hs 54;" f +accessTerminal src/Dodge/WorldEffect.hs 52;" f activateDetonator src/Dodge/Creature/Impulse/UseItem.hs 83;" f activeTargetCursorPic src/Dodge/Targeting/Draw.hs 31;" f addArmour src/Dodge/Creature.hs 85;" f @@ -3352,7 +3352,7 @@ airlockDoor src/Dodge/Room/Airlock.hs 51;" f airlockDoubleDoor src/Dodge/Room/Airlock.hs 54;" f airlockSimple src/Dodge/Room/Airlock.hs 66;" f airlockZ src/Dodge/Room/Airlock.hs 91;" f -allInvLocs src/Dodge/Item/Grammar.hs 317;" f +allInvLocs src/Dodge/Item/Grammar.hs 323;" f allVisibleWalls src/Dodge/Base/Collide.hs 132;" f alongSegBy src/Geometry.hs 40;" f alteRifle src/Dodge/Item/Held/Cane.hs 22;" f @@ -3453,7 +3453,7 @@ barrel src/Dodge/Creature/Inanimate.hs 17;" f barrelShape src/Dodge/Render/ShapePicture.hs 46;" f baseAMRShape src/Dodge/Item/Draw/SPic.hs 407;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f -baseCI src/Dodge/Item/Grammar.hs 192;" f +baseCI src/Dodge/Item/Grammar.hs 184;" f baseCaneShape src/Dodge/Item/Draw/SPic.hs 313;" f baseDebris src/Dodge/Block/Debris.hs 122;" f baseFloorTileSize src/Tile.hs 45;" f @@ -4014,8 +4014,8 @@ doCrWdAc src/Dodge/CreatureEffect.hs 77;" f doCrWdImp src/Dodge/CreatureEffect.hs 16;" f doCrWdWd src/Dodge/CreatureEffect.hs 20;" f doDamage src/Dodge/Creature/State.hs 129;" f -doDeathToggle src/Dodge/WorldEffect.hs 93;" f -doDeathTriggers src/Dodge/WorldEffect.hs 88;" f +doDeathToggle src/Dodge/WorldEffect.hs 91;" f +doDeathTriggers src/Dodge/WorldEffect.hs 86;" f doDebugTest src/Dodge/Update/Input/DebugTest.hs 22;" f doDebugTest2 src/Dodge/Update/Input/DebugTest.hs 37;" f doDebugTestF10 src/Dodge/Update/Input/DebugTest.hs 62;" f @@ -4065,7 +4065,7 @@ doSectionSize src/Dodge/DisplayInventory.hs 217;" f doSideEffects appDodge/Main.hs 120;" f doStep src/Dodge/ArcStep.hs 9;" f doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 166;" f -doTerminalBootProgram src/Dodge/WorldEffect.hs 96;" f +doTerminalBootProgram src/Dodge/WorldEffect.hs 94;" f doTerminalCommandEffect src/Dodge/Terminal.hs 135;" f doTestDrawing src/Dodge/Render.hs 42;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f @@ -4073,13 +4073,13 @@ doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 149;" f doTimeScroll src/Dodge/Update.hs 202;" f doTmTm src/Dodge/TmTm.hs 6;" f -doTmWdWd src/Dodge/WorldEffect.hs 101;" f +doTmWdWd src/Dodge/WorldEffect.hs 99;" f doWallRotate src/Dodge/Update/Camera.hs 212;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 37;" f doWdCrCr src/Dodge/CreatureEffect.hs 12;" f doWdP2f src/Dodge/WdP2f.hs 12;" f -doWdWd src/Dodge/WorldEffect.hs 29;" f +doWdWd src/Dodge/WorldEffect.hs 27;" f doWorldEvents src/Dodge/Update.hs 432;" f doWorldPos src/Dodge/WorldPos.hs 7;" f door src/Dodge/Room/Door.hs 13;" f @@ -4305,8 +4305,8 @@ extTrigLitPos src/Dodge/Placement/Instance/Button.hs 84;" f extendAway src/Dodge/Placement/Instance/LightSource.hs 200;" f extendConeToScreenEdge src/Dodge/Debug/Picture.hs 82;" f extraPics src/Dodge/Render/ShapePicture.hs 73;" f -extraWeaponLinks src/Dodge/Item/Grammar.hs 125;" f -extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 134;" f +extraWeaponLinks src/Dodge/Item/Grammar.hs 117;" f +extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 126;" f extractRoomPos src/Dodge/RoomPos.hs 6;" f faceEdges src/Polyhedra.hs 65;" f facesToVF src/Polyhedra/Geodesic.hs 69;" f @@ -4425,11 +4425,11 @@ geometryTests test/Spec.hs 17;" f geometryUnitTests test/Spec.hs 22;" f geqConstr src/SameConstr.hs 21;" f getAimZoom src/Dodge/Update/Camera.hs 135;" f -getAmmoLinks src/Dodge/Item/Grammar.hs 141;" f +getAmmoLinks src/Dodge/Item/Grammar.hs 133;" f getArguments src/Dodge/Update/Scroll.hs 178;" f getArguments' src/Dodge/Update/Scroll.hs 166;" f getAttachedSFLink src/Dodge/HeldUse.hs 809;" f -getAutoSpringLinks src/Dodge/Item/Grammar.hs 120;" f +getAutoSpringLinks src/Dodge/Item/Grammar.hs 112;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 171;" f getBulletType src/Dodge/HeldUse.hs 928;" f @@ -4646,16 +4646,16 @@ interweave src/Justify.hs 17;" f introScan src/Dodge/Item/Scope.hs 57;" f introScanValue src/Dodge/Inventory/SelectionList.hs 79;" f intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f -invAdj src/Dodge/Item/Grammar.hs 298;" f +invAdj src/Dodge/Item/Grammar.hs 304;" f invCursorParams src/Dodge/ListDisplayParams.hs 36;" f invDP src/Dodge/ListDisplayParams.hs 30;" f invDimColor src/Dodge/DisplayInventory.hs 192;" f invHead src/Dodge/Render/HUD.hs 405;" f invItemLocUpdate src/Dodge/Creature/State.hs 154;" f -invLDT src/Dodge/Item/Grammar.hs 278;" f +invLDT src/Dodge/Item/Grammar.hs 284;" f invRootItemEffs src/Dodge/Creature/State.hs 147;" f -invRootMap src/Dodge/Item/Grammar.hs 287;" f -invRootTrees src/Dodge/Item/Grammar.hs 308;" f +invRootMap src/Dodge/Item/Grammar.hs 293;" f +invRootTrees src/Dodge/Item/Grammar.hs 314;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 32;" f invSetSelection src/Dodge/Inventory.hs 185;" f invSetSelectionPos src/Dodge/Inventory.hs 193;" f @@ -4703,7 +4703,7 @@ itEffectOnPickup src/Dodge/Item/BackgroundEffect.hs 64;" f itInvHeight src/Dodge/Item/InvSize.hs 11;" f itUseCondition src/Dodge/ItemUseCondition.hs 6;" f itemAmmoSlots src/Dodge/Item/AmmoSlots.hs 12;" f -itemBaseConnections src/Dodge/Item/Grammar.hs 195;" f +itemBaseConnections src/Dodge/Item/Grammar.hs 187;" f itemBaseName src/Dodge/Item/Display.hs 59;" f itemBaseStance src/Dodge/Item/AimStance.hs 17;" f itemBlips src/Dodge/RadarSweep.hs 93;" f @@ -4734,8 +4734,8 @@ itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 120;" f itemScrollValue src/Dodge/Inventory/SelectionList.hs 147;" f itemSidePush src/Dodge/HeldUse.hs 432;" f itemString src/Dodge/Item/Display.hs 55;" f -itemToBreakLists src/Dodge/Item/Grammar.hs 67;" f -itemToFunction src/Dodge/Item/Grammar.hs 147;" f +itemToBreakLists src/Dodge/Item/Grammar.hs 59;" f +itemToFunction src/Dodge/Item/Grammar.hs 139;" f itemTreeSPic src/Dodge/Item/Draw/SPic.hs 24;" f itemTriggerType src/Dodge/BaseTriggerType.hs 12;" f itemWeight src/Dodge/Creature/Statistics.hs 66;" f @@ -4747,7 +4747,7 @@ itmSpaceInfo src/Dodge/Item/Info.hs 25;" f itmUsageInfo src/Dodge/Item/Info.hs 230;" f jShape src/Dodge/Placement/Instance/LightSource.hs 85;" f jaggedShape src/Dodge/Block/Debris.hs 191;" f -joinItemsInList src/Dodge/Item/Grammar.hs 268;" f +joinItemsInList src/Dodge/Item/Grammar.hs 274;" f joystick src/Dodge/Item/Scope.hs 149;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 60;" f jps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 63;" f @@ -4781,7 +4781,7 @@ lasTunnel src/Dodge/Room/LasTurret.hs 126;" f lasTunnelRunPast src/Dodge/Room/LasTurret.hs 167;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 38;" f laser src/Dodge/Item/Held/BatteryGuns.hs 41;" f -laserLinkTest src/Dodge/Item/Grammar.hs 201;" f +laserLinkTest src/Dodge/Item/Grammar.hs 193;" f lastMap src/Dodge/DoubleTree.hs 174;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f layoutLevelFromSeed src/Dodge/LevelGen.hs 47;" f @@ -4796,9 +4796,11 @@ ldtToIM src/Dodge/DoubleTree.hs 143;" f ldtToIndentList src/Dodge/DoubleTree.hs 146;" f ldtToLoc src/Dodge/DoubleTree.hs 187;" f left src/DoubleStack.hs 16;" f -leftIsParentCombine src/Dodge/Item/Grammar.hs 240;" f +leftChildList src/Dodge/Item/Grammar.hs 250;" f +leftIsParentCombine src/Dodge/Item/Grammar.hs 235;" f +leftIsParentCombine' src/Dodge/Item/Grammar.hs 232;" f leftPad src/Padding.hs 15;" f -leftRightCombine src/Dodge/Item/Grammar.hs 254;" f +leftRightCombine src/Dodge/Item/Grammar.hs 260;" f legsSPic src/Dodge/Item/Draw/SPic.hs 477;" f liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f light src/Color.hs 104;" f @@ -4813,7 +4815,7 @@ lineCol src/Picture/Base.hs 230;" f lineGeom src/Dodge/Base.hs 32;" f lineOnScreenCone src/Dodge/Debug/Picture.hs 60;" f lineOrth src/Dodge/Creature/Boid.hs 126;" f -lineOutputTerminal src/Dodge/WorldEffect.hs 76;" f +lineOutputTerminal src/Dodge/WorldEffect.hs 74;" f lineSplit src/Justify.hs 26;" f lineThick src/Picture/Base.hs 234;" f lineUp src/Dodge/Creature/Boid.hs 148;" f @@ -4826,8 +4828,8 @@ listCursorChooseBorderScale src/Dodge/Render/List.hs 135;" f listGuard src/Dodge/Creature/ReaderUpdate.hs 190;" f listSelectionColorPicture src/Dodge/DisplayInventory.hs 308;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f -llleft src/Dodge/Item/Grammar.hs 204;" f -llright src/Dodge/Item/Grammar.hs 210;" f +llleft src/Dodge/Item/Grammar.hs 196;" f +llright src/Dodge/Item/Grammar.hs 202;" f lmt src/MatrixHelper.hs 43;" f lnkBothAnd src/Dodge/Room/Procedural.hs 121;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 394;" f @@ -5535,7 +5537,8 @@ rezText' src/Dodge/Story.hs 17;" f rhombus src/Polyhedra.hs 72;" f rifle src/Dodge/Item/Held/Cane.hs 19;" f right src/DoubleStack.hs 16;" f -rightIsParentCombine src/Dodge/Item/Grammar.hs 247;" f +rightIsParentCombine src/Dodge/Item/Grammar.hs 242;" f +rightIsParentCombine' src/Dodge/Item/Grammar.hs 253;" f rightPad src/Padding.hs 19;" f rightPadNoSquash src/Padding.hs 23;" f rlPosDir src/Dodge/RoomLink.hs 94;" f @@ -5883,7 +5886,7 @@ spreadCenter src/Dodge/Base.hs 187;" f spreadFromCenter src/Dodge/Base.hs 176;" f spreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 12;" f spreadOut src/Dodge/Creature/Boid.hs 158;" f -springLinkTest src/Dodge/Item/Grammar.hs 222;" f +springLinkTest src/Dodge/Item/Grammar.hs 214;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f square src/Geometry/Polygon.hs 46;" f @@ -5940,7 +5943,7 @@ strideRot src/Dodge/Item/HeldOffset.hs 78;" f stringToList src/Picture/Base.hs 313;" f stringToListGrad src/Picture/Text.hs 12;" f stripZ src/Geometry/Vector3D.hs 97;" f -structureToPotentialFunction src/Dodge/Item/Grammar.hs 182;" f +structureToPotentialFunction src/Dodge/Item/Grammar.hs 174;" f structureUseAtLoc src/Dodge/Creature/Impulse/UseItem.hs 75;" f subInvX src/Dodge/ListDisplayParams.hs 48;" f subMap src/TreeHelp.hs 118;" f @@ -6053,7 +6056,7 @@ toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 148;" f toFloatVAs src/Shader/Compile.hs 211;" f toLabel src/Dodge/Cleat.hs 16;" f -toLasgunUpdate src/Dodge/Item/Grammar.hs 215;" f +toLasgunUpdate src/Dodge/Item/Grammar.hs 207;" f toMultiset src/Multiset.hs 64;" f toOnward src/Dodge/Tree/Compose.hs 101;" f toTopLeft src/Dodge/Render/List.hs 219;" f @@ -6079,7 +6082,7 @@ topTestPart src/Dodge/TestString.hs 58;" f torch src/Dodge/Item/Held/Utility.hs 23;" f torchShape src/Dodge/Item/Draw/SPic.hs 269;" f torqueAmount src/Dodge/HeldUse.hs 629;" f -torqueCr src/Dodge/WorldEffect.hs 69;" f +torqueCr src/Dodge/WorldEffect.hs 67;" f torso src/Dodge/Creature/Picture.hs 99;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f @@ -6321,7 +6324,6 @@ upperPrismPolySU src/Shape.hs 114;" f upperPrismPolyTS src/Shape.hs 120;" f upperRounded src/Shape.hs 185;" f useBreakL src/Dodge/Item/Grammar.hs 36;" f -useBreakListsLinkTest src/Dodge/Item/Grammar.hs 44;" f useBulletPayload src/Dodge/Bullet.hs 113;" f useC src/Dodge/Cuse.hs 8;" f useC' src/Dodge/Cuse.hs 13;" f