Move towards externalizing item attachment updates

This commit is contained in:
2025-06-26 23:36:59 +01:00
parent 377900662a
commit 4710dd7631
2 changed files with 57 additions and 44 deletions
+22 -11
View File
@@ -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)
+35 -33
View File
@@ -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