diff --git a/src/Dodge/Data/ComposedItem.hs b/src/Dodge/Data/ComposedItem.hs index 05a40079f..962f40aba 100644 --- a/src/Dodge/Data/ComposedItem.hs +++ b/src/Dodge/Data/ComposedItem.hs @@ -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 diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index 0988197f5..d7d81b232 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -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 diff --git a/src/Dodge/Item/Orientation.hs b/src/Dodge/Item/Orientation.hs index c4552310f..b251d3106 100644 --- a/src/Dodge/Item/Orientation.hs +++ b/src/Dodge/Item/Orientation.hs @@ -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)) diff --git a/tags b/tags index b6aa9ffae..265972500 100644 --- a/tags +++ b/tags @@ -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