Remove ItemLink from item orientation code

This commit is contained in:
2025-07-10 21:17:01 +01:00
parent a9d730a5c1
commit fd5f5105aa
4 changed files with 49 additions and 51 deletions
+2 -2
View File
@@ -12,8 +12,8 @@ import Linear
import qualified Linear.Quaternion as Q
data ItemLink
= AmmoInLink Int AmmoType
| TriggerLink
= TriggerLink
| AmmoInLink Int AmmoType
| AmmoModLink
| AmmoTargetingLink
| AmmoPayloadLink
+2 -2
View File
@@ -27,8 +27,8 @@ itemTreeSPic (LDT (itm,_) l r) = itemSPic itm <> foldMap (itemRotTreeSPic itm) (
itemRotTreeSPic :: Item -> (ItemLink, LDTree ItemLink CItem) -> SPic
itemRotTreeSPic par (il, t) = translateSP p . overPosSP (Q.rotate q) $ itemTreeSPic t
where
(p, q) = orientAttachment par il itm
itm = t ^. ldtValue . _1
(p, q) = orientAttachment par itm
itm = t ^. ldtValue
itemSPic :: Item -> SPic
itemSPic it = case it ^. itType of
+11 -11
View File
@@ -21,26 +21,26 @@ orientChild itm = case _itType itm of
--r = Q.axisAngle (V3 0 0 1) (-pi/4)
r = Q.qID
orientByLink :: Item -> ItemLink -> Point3Q
orientByLink itm lt = case (_itType itm, lt) of
(HELD FLAMETHROWER, AmmoInLink{}) -> (V3 4 (-6) 0, Q.qID)
(HELD _, AmmoInLink{}) -> (V3 7 (-2) 0, Q.qID)
(HELD _, WeaponScopeLink) -> (V3 5 0 5, Q.qID)
orientByParentChSF :: Item -> ItemStructuralFunction -> Point3Q
orientByParentChSF itm lt = case (_itType itm, lt) of
(HELD FLAMETHROWER, AmmoMagSF{}) -> (V3 4 (-6) 0, Q.qID)
(HELD _, AmmoMagSF{}) -> (V3 7 (-2) 0, Q.qID)
(HELD _, WeaponScopeSF) -> (V3 5 0 5, Q.qID)
_ -> (0, Q.qID)
orientAttachment :: Item -> ItemLink -> Item -> Point3Q
orientAttachment par lnk ch = case (_itType par, lnk, _itType ch) of
(ATTACH UNDERBARRELSLOT, _, _) -> (V3 (-5) (-8) 0, Q.qID)
(_,SFLink LaserWeaponSF,_) -> (V3 2 8 0, Q.qID)
orientAttachment :: Item -> CItem -> Point3Q
orientAttachment par (ch,chsf) = case (_itType par, chsf) of
(ATTACH UNDERBARRELSLOT, _) -> (V3 (-5) (-8) 0, Q.qID)
(_,LaserWeaponSF) -> (V3 2 8 0, Q.qID)
-- (HELD BURSTRIFLE, _, HELD TORCH) -> (V3 20 0 0, Q.axisAngle (V3 0 0 1) (pi/2))
-- (HELD LAUNCHER, _, HELD TORCH) -> (V3 0 20 0, Q.axisAngle (V3 0 0 1) (pi/4))
_ -> (t1 + Q.rotate q1 t2, q1 * q2)
where
(t1, q1) = orientByLink par lnk
(t1, q1) = orientByParentChSF par chsf
(t2, q2) = orientChild ch
propagateOrientation :: LDTree ItemLink CItem -> LDTree ItemLink OItem
propagateOrientation = ldtStartPropagate g f
where
g (x,y) = (x,y,(V3 0 0 0,Q.qID))
f (x,_,pq) i (y,y1) = (y,y1,Q.comp pq $ orientAttachment x i y)
f (x,_,pq) i (y,y1) = (y,y1,Q.comp pq $ orientAttachment x (y,y1))
+34 -36
View File
@@ -59,7 +59,7 @@ Ammo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 3;" m
Ammo src/Dodge/Item/Ammo.hs 1;" m
AmmoEffectLink src/Dodge/Data/ComposedItem.hs 20;" C
AmmoEffectSF src/Dodge/Data/ComposedItem.hs 58;" C
AmmoInLink src/Dodge/Data/ComposedItem.hs 15;" C
AmmoInLink src/Dodge/Data/ComposedItem.hs 16;" C
AmmoMagSF src/Dodge/Data/ComposedItem.hs 49;" C
AmmoMagType src/Dodge/Data/Item/Combine.hs 105;" t
AmmoModLink src/Dodge/Data/ComposedItem.hs 17;" C
@@ -443,6 +443,7 @@ DTMidAboveNode src/Dodge/Data/DoubleTree.hs 19;" C
DTMidBelowNode src/Dodge/Data/DoubleTree.hs 20;" C
DTRootNode src/Dodge/Data/DoubleTree.hs 17;" C
DTTopNode src/Dodge/Data/DoubleTree.hs 18;" C
DTree src/Dodge/Data/DoubleTree.hs 31;" t
Damage src/Dodge/Data/Damage.hs 19;" t
Damage src/Dodge/Creature/Damage.hs 1;" m
Damage src/Dodge/Damage.hs 3;" m
@@ -535,7 +536,6 @@ DoorPart src/Dodge/Data/Wall/Structure.hs 14;" C
DoorStatus src/Dodge/Data/Door.hs 23;" t
DoubleRes src/Dodge/Data/Config.hs 97;" C
DoubleStack src/DoubleStack.hs 1;" m
DoubleTree src/Dodge/Data/DoubleTree.hs 31;" t
DoubleTree src/Dodge/Data/DoubleTree.hs 7;" m
DoubleTree src/Dodge/DoubleTree.hs 1;" m
DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 16;" t
@@ -977,7 +977,7 @@ Kill src/Dodge/Data/ActionPlan.hs 198;" C
LASER src/Dodge/Data/Item/Combine.hs 168;" C
LDT src/Dodge/Data/DoubleTree.hs 34;" C
LDTBottomNode src/Dodge/Data/DoubleTree.hs 29;" C
LDTComb src/Dodge/Item/Grammar.hs 169;" t
LDTComb src/Dodge/Item/Grammar.hs 185;" t
LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 27;" C
LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 28;" C
LDTRootNode src/Dodge/Data/DoubleTree.hs 25;" C
@@ -1371,7 +1371,7 @@ Option src/Dodge/Menu/Option.hs 1;" m
OptionScreen src/Dodge/Data/Universe.hs 82;" C
OptionScreenFlag src/Dodge/Data/Universe.hs 72;" t
OptionType src/Dodge/Menu/OptionType.hs 2;" m
Orientation src/Dodge/Item/Orientation.hs 3;" m
Orientation src/Dodge/Item/Orientation.hs 1;" m
OutAction src/Dodge/Creature/Action.hs 45;" t
OutLink src/Dodge/Data/Room.hs 43;" C
OutPlacement src/Dodge/Data/GenWorld.hs 126;" t
@@ -2022,7 +2022,7 @@ TreeHelp src/TreeHelp.hs 12;" m
Triangulate src/Geometry/Triangulate.hs 3;" m
Trie src/SimpleTrie.hs 9;" t
TriggerDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 1;" m
TriggerLink src/Dodge/Data/ComposedItem.hs 16;" C
TriggerLink src/Dodge/Data/ComposedItem.hs 15;" C
TriggerSF src/Dodge/Data/ComposedItem.hs 47;" C
TriggerType src/Dodge/Data/TriggerType.hs 10;" t
TriggerType src/Dodge/Data/TriggerType.hs 4;" m
@@ -3355,7 +3355,7 @@ advanceScrollAmount src/Dodge/Update.hs 422;" f
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 14;" f
aimStance src/Dodge/Item/AimStance.hs 10;" f
aimStanceInfo src/Dodge/Item/Info.hs 243;" f
aimTurn src/Dodge/Creature/YourControl.hs 165;" f
airlock src/Dodge/Room/Airlock.hs 19;" f
@@ -3366,8 +3366,8 @@ 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 267;" f
allInvLocs' src/Dodge/Item/Grammar.hs 288;" f
allInvLocs src/Dodge/Item/Grammar.hs 283;" f
allInvLocs' src/Dodge/Item/Grammar.hs 304;" f
allVisibleWalls src/Dodge/Base/Collide.hs 132;" f
alongSegBy src/Geometry.hs 40;" f
alteRifle src/Dodge/Item/Held/Cane.hs 22;" f
@@ -3468,7 +3468,7 @@ barrel src/Dodge/Creature/Inanimate.hs 17;" f
barrelShape src/Dodge/Render/ShapePicture.hs 46;" f
baseAMRShape src/Dodge/Item/Draw/SPic.hs 405;" f
baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f
baseCI src/Dodge/Item/Grammar.hs 166;" f
baseCI src/Dodge/Item/Grammar.hs 182;" f
baseCaneShape src/Dodge/Item/Draw/SPic.hs 311;" f
baseDebris src/Dodge/Block/Debris.hs 122;" f
baseFloorTileSize src/Tile.hs 45;" f
@@ -4323,8 +4323,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 100;" f
extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 109;" f
extraWeaponLinks src/Dodge/Item/Grammar.hs 116;" f
extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 125;" f
extractRoomPos src/Dodge/RoomPos.hs 6;" f
faceEdges src/Polyhedra.hs 65;" f
facesToVF src/Polyhedra/Geodesic.hs 69;" f
@@ -4443,11 +4443,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 116;" f
getAmmoLinks src/Dodge/Item/Grammar.hs 132;" f
getArguments src/Dodge/Update/Scroll.hs 178;" f
getArguments' src/Dodge/Update/Scroll.hs 166;" f
getAttachedSFLink src/Dodge/HeldUse.hs 802;" f
getAutoSpringLinks src/Dodge/Item/Grammar.hs 95;" f
getAutoSpringLinks src/Dodge/Item/Grammar.hs 111;" f
getAvailableListLines src/Dodge/SelectionList.hs 10;" f
getBulHitDams src/Dodge/Bullet.hs 171;" f
getBulletType src/Dodge/HeldUse.hs 927;" f
@@ -4559,7 +4559,7 @@ healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 483;" f
healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 74;" f
healthTest src/Dodge/Room/LasTurret.hs 95;" f
heightWallPS src/Dodge/Placement/Instance/Wall.hs 13;" f
heldAimStance src/Dodge/Item/AimStance.hs 27;" f
heldAimStance src/Dodge/Item/AimStance.hs 23;" f
heldAimZoom src/Dodge/Update/Camera.hs 140;" f
heldEffect src/Dodge/HeldUse.hs 60;" f
heldEffectMuzzles src/Dodge/HeldUse.hs 127;" f
@@ -4663,18 +4663,18 @@ 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 244;" f
invAdj src/Dodge/Item/Grammar.hs 260;" 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 153;" f
invLDT src/Dodge/Item/Grammar.hs 221;" f
invLDT' src/Dodge/Item/Grammar.hs 226;" f
invLDT src/Dodge/Item/Grammar.hs 237;" f
invLDT' src/Dodge/Item/Grammar.hs 242;" f
invRootItemEffs src/Dodge/Creature/State.hs 146;" f
invRootMap src/Dodge/Item/Grammar.hs 233;" f
invRootTrees src/Dodge/Item/Grammar.hs 254;" f
invRootTrees' src/Dodge/Item/Grammar.hs 260;" f
invRootMap src/Dodge/Item/Grammar.hs 249;" f
invRootTrees src/Dodge/Item/Grammar.hs 270;" f
invRootTrees' src/Dodge/Item/Grammar.hs 276;" f
invSelectionItem src/Dodge/Inventory/SelectionList.hs 32;" f
invSetSelection src/Dodge/Inventory.hs 185;" f
invSetSelectionPos src/Dodge/Inventory.hs 193;" f
@@ -4723,7 +4723,7 @@ itInvHeight src/Dodge/Item/InvSize.hs 11;" f
itUseCondition src/Dodge/ItemUseCondition.hs 6;" f
itemAmmoSlots src/Dodge/Item/AmmoSlots.hs 12;" f
itemBaseName src/Dodge/Item/Display.hs 60;" f
itemBaseStance src/Dodge/Item/AimStance.hs 22;" f
itemBaseStance src/Dodge/Item/AimStance.hs 18;" f
itemBlips src/Dodge/RadarSweep.hs 93;" f
itemBulkiness src/Dodge/Creature/YourControl.hs 172;" f
itemCombinations src/Dodge/Combine/Combinations.hs 56;" f
@@ -4751,8 +4751,8 @@ itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 120;" f
itemScrollValue src/Dodge/Inventory/SelectionList.hs 147;" f
itemSidePush src/Dodge/HeldUse.hs 419;" f
itemString src/Dodge/Item/Display.hs 56;" f
itemToBreakLists src/Dodge/Item/Grammar.hs 39;" f
itemToFunction src/Dodge/Item/Grammar.hs 122;" f
itemToBreakLists src/Dodge/Item/Grammar.hs 55;" f
itemToFunction src/Dodge/Item/Grammar.hs 138;" f
itemTreeSPic src/Dodge/Item/Draw/SPic.hs 24;" f
itemTriggerType src/Dodge/BaseTriggerType.hs 15;" f
itemWeight src/Dodge/Creature/Statistics.hs 66;" f
@@ -4764,7 +4764,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 211;" f
joinItemsInList src/Dodge/Item/Grammar.hs 227;" 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
@@ -4814,10 +4814,10 @@ ldtToIM src/Dodge/DoubleTree.hs 184;" f
ldtToIndentList src/Dodge/DoubleTree.hs 187;" f
ldtToLoc src/Dodge/DoubleTree.hs 233;" f
left src/DoubleStack.hs 16;" f
leftChildList src/Dodge/Item/Grammar.hs 185;" f
leftIsParentCombine src/Dodge/Item/Grammar.hs 171;" f
leftChildList src/Dodge/Item/Grammar.hs 201;" f
leftIsParentCombine src/Dodge/Item/Grammar.hs 187;" f
leftPad src/Padding.hs 15;" f
leftRightCombine src/Dodge/Item/Grammar.hs 197;" f
leftRightCombine src/Dodge/Item/Grammar.hs 213;" f
legsSPic src/Dodge/Item/Draw/SPic.hs 475;" f
liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f
light src/Color.hs 104;" f
@@ -5164,11 +5164,9 @@ orderAroundFirst src/Geometry/Polygon.hs 82;" f
orderAroundFirstReverse src/Geometry/Polygon.hs 78;" f
orderPolygon src/Geometry/Polygon.hs 87;" f
orderPolygonAround src/Geometry/Polygon.hs 70;" f
orientAttachment src/Dodge/Item/Orientation.hs 33;" f
orientByLink src/Dodge/Item/Orientation.hs 26;" f
orientChild src/Dodge/Item/Orientation.hs 16;" f
orientLocation src/Dodge/Item/Orientation.hs 53;" f
orientLocation' src/Dodge/Item/Orientation.hs 43;" f
orientAttachment src/Dodge/Item/Orientation.hs 31;" f
orientByParentChSF src/Dodge/Item/Orientation.hs 24;" f
orientChild src/Dodge/Item/Orientation.hs 13;" f
orthogonalPointOnSeg src/Geometry/Intersect.hs 291;" f
outLink src/Dodge/RoomLink.hs 105;" f
outsideScreenPolygon src/Dodge/Debug/Picture.hs 44;" f
@@ -5388,7 +5386,7 @@ propSPic src/Dodge/Prop/Draw.hs 15;" f
propSetToggleAnd src/Dodge/Prop/Update.hs 41;" f
propUpdateIf src/Dodge/Prop/Update.hs 25;" f
propUpdatePosition src/Dodge/Prop/Update.hs 30;" f
propagateOrientation src/Dodge/Item/Orientation.hs 60;" f
propagateOrientation src/Dodge/Item/Orientation.hs 42;" f
ps0 src/Dodge/LevelGen/PlacementHelper.hs 51;" f
ps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 79;" f
ps0PushPSw src/Dodge/LevelGen/PlacementHelper.hs 83;" f
@@ -5556,8 +5554,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
rightChildList src/Dodge/Item/Grammar.hs 191;" f
rightIsParentCombine src/Dodge/Item/Grammar.hs 178;" f
rightChildList src/Dodge/Item/Grammar.hs 207;" f
rightIsParentCombine src/Dodge/Item/Grammar.hs 194;" f
rightPad src/Padding.hs 19;" f
rightPadNoSquash src/Padding.hs 23;" f
rlPosDir src/Dodge/RoomLink.hs 94;" f
@@ -6147,7 +6145,7 @@ treeMaxDepthFromTrunk src/Dodge/Layout/Generate.hs 21;" f
treePath src/Dodge/Tree/GenerateStructure.hs 13;" f
treePaths src/TreeHelp.hs 138;" f
treePost src/TreeHelp.hs 45;" f
treeToPotentialFunction src/Dodge/Item/Grammar.hs 156;" f
treeToPotentialFunction src/Dodge/Item/Grammar.hs 172;" f
triLootRoom src/Dodge/Room/Treasure.hs 22;" f
triggerDoorRoom src/Dodge/Room/Door.hs 30;" f
triggerSwitch src/Dodge/Placement/Instance/Button.hs 47;" f