Add lenses for SPic and MountedObject positions
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
{-# LANGUAGE StrictData #-}
|
{-# LANGUAGE StrictData #-}
|
||||||
{-# LANGUAGE TemplateHaskell #-}
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
|
{-# LANGUAGE LambdaCase #-}
|
||||||
|
|
||||||
module Dodge.Data.MountedObject where
|
module Dodge.Data.MountedObject where
|
||||||
|
|
||||||
|
import Control.Lens
|
||||||
import ShapePicture.Data
|
import ShapePicture.Data
|
||||||
import Geometry.Data
|
import Geometry.Data
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
@@ -13,4 +15,9 @@ data MountedObject
|
|||||||
| MountedSPic SPic
|
| MountedSPic SPic
|
||||||
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
||||||
|
|
||||||
|
moPos :: ASetter' MountedObject Point3
|
||||||
|
moPos f = \case
|
||||||
|
MountedLight p r c -> Identity $ MountedLight (runIdentity $ f p) r c
|
||||||
|
MountedSPic sp -> Identity . MountedSPic $ sp & spPos %~ (runIdentity . f)
|
||||||
|
|
||||||
deriveJSON defaultOptions ''MountedObject
|
deriveJSON defaultOptions ''MountedObject
|
||||||
|
|||||||
+12
-10
@@ -190,6 +190,11 @@ pushCaverns :: RandomGen g => State g Room
|
|||||||
pushCaverns = do
|
pushCaverns = do
|
||||||
rm <- shuffleLinks =<< removeLights <$> roomRectAutoLights 250 100
|
rm <- shuffleLinks =<< removeLights <$> roomRectAutoLights 250 100
|
||||||
crs <- takeOne [[] ]
|
crs <- takeOne [[] ]
|
||||||
|
l <- takeOne
|
||||||
|
-- [ [MountedLight (V3 55 0 50) 200 0.5 , MountedSPic (noPic $ aBar 55 [V2 10 0,V2 60 0])]
|
||||||
|
-- , [MountedLight (V3 20 0 50) 200 0.5 , MountedSPic (noPic $ aBar 55 [V2 10 0,V2 22 0])]
|
||||||
|
[ [MountedLight (V3 30 45 50) 200 0.5 , MountedSPic (noPic $ aBar 55 [V2 10 45,V2 32 45])]
|
||||||
|
]
|
||||||
return $ rm
|
return $ rm
|
||||||
& rmBound <>~ [
|
& rmBound <>~ [
|
||||||
]
|
]
|
||||||
@@ -199,24 +204,21 @@ pushCaverns = do
|
|||||||
[ps0 (PutTrigger False) $ \i -> Just $
|
[ps0 (PutTrigger False) $ \i -> Just $
|
||||||
pContID (spos (slinks West)) (PutButton $ makeDumbSwitch i) $ \_ -> Just $
|
pContID (spos (slinks West)) (PutButton $ makeDumbSwitch i) $ \_ -> Just $
|
||||||
pContID (spos (slinks East)) (PutButton $ makeDumbSwitch i) $ \_ -> Just $
|
pContID (spos (slinks East)) (PutButton $ makeDumbSwitch i) $ \_ -> Just $
|
||||||
sps0 (PutDoor (dr & drTrigger .~ WdTrig i) defaultDoorWall) & plIDCont . mapped . mapped ?~
|
sps0 (PutDoor (dr & drTrigger .~ WdTrig i
|
||||||
sps0 (PutDoor (dr1 & drTrigger .~ WdTrig i) defaultDoorWall)
|
& drMounts .~ l) defaultDoorWall) & plIDCont . mapped . mapped ?~
|
||||||
|
sps0 (PutDoor (dr1 & drTrigger .~ WdTrig i
|
||||||
|
& drMounts .~ (l & each . moPos . _xy %~ rotateV pi)) defaultDoorWall)
|
||||||
] <> crs
|
] <> crs
|
||||||
where
|
where
|
||||||
slinks x s = (FromEdge x 0 `S.member` s)
|
slinks x s = (FromEdge x 0 `S.member` s)
|
||||||
dr = defaultDoor
|
dr = defaultDoor
|
||||||
& drUpdate .~ DoorLerp 0.005
|
& drUpdate .~ DoorLerp 0.005
|
||||||
& drZeroPos .~ (V2 (-5) 50, 0)
|
& drZeroPos .~ (V2 (-5) 50, 0)
|
||||||
& drOnePos .~ (V2 150 50, 0)
|
& drOnePos .~ (V2 145 50, 0)
|
||||||
& drFootPrint .~ IM.fromDistinctAscList (zip [0..] (loopPairs . reverse $ rectWH 10 49))
|
& drFootPrint .~ IM.fromDistinctAscList (zip [0..] (loopPairs . reverse $ rectWH 10 47))
|
||||||
& drMounts .~ [MountedLight (V3 30 0 50) 200 0.5
|
|
||||||
, MountedSPic (noPic $ aBar 55 [V2 10 0,V2 32 0])]
|
|
||||||
dr1 = dr
|
dr1 = dr
|
||||||
& drOnePos .~ (V2 255 50, 0)
|
& drOnePos .~ (V2 255 50, 0)
|
||||||
& drZeroPos .~ (V2 100 50, 0)
|
& drZeroPos .~ (V2 105 50, 0)
|
||||||
& drFootPrint .~ IM.fromDistinctAscList (zip [0..] (loopPairs . reverse $ rectWH 10 49))
|
|
||||||
& drMounts .~ [MountedLight (V3 (-30) 0 50) 200 0.5
|
|
||||||
, MountedSPic (noPic $ aBar 55 [V2 (-10) 0,V2 (-32) 0])]
|
|
||||||
f ps = case ps of
|
f ps = case ps of
|
||||||
PS _ r -> ps & psRot +~ pi & psPos +~ rotateV r (V2 0 (-5))
|
PS _ r -> ps & psRot +~ pi & psPos +~ rotateV r (V2 0 (-5))
|
||||||
_ -> ps
|
_ -> ps
|
||||||
|
|||||||
@@ -55,9 +55,6 @@ tutAnoTree = do
|
|||||||
foldMTRS
|
foldMTRS
|
||||||
[ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox
|
[ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox
|
||||||
, corDoor
|
, corDoor
|
||||||
, lasRunYinYang
|
|
||||||
, corDoor
|
|
||||||
, corDoor
|
|
||||||
, tToBTree "slowCrush" . return . cleatOnward <$> pushCaverns
|
, tToBTree "slowCrush" . return . cleatOnward <$> pushCaverns
|
||||||
, corDoor
|
, corDoor
|
||||||
, chasmSpitTerminal
|
, chasmSpitTerminal
|
||||||
|
|||||||
@@ -1,7 +1,16 @@
|
|||||||
module ShapePicture.Data where
|
module ShapePicture.Data where
|
||||||
|
|
||||||
|
import Control.Lens
|
||||||
import Data.Strict.Tuple
|
import Data.Strict.Tuple
|
||||||
|
import Geometry.Data
|
||||||
import Picture.Data
|
import Picture.Data
|
||||||
import Shape.Data
|
import Shape.Data
|
||||||
|
|
||||||
type SPic = Pair Shape Picture
|
type SPic = Pair Shape Picture
|
||||||
|
|
||||||
|
spPos :: ASetter' SPic Point3
|
||||||
|
spPos f x =
|
||||||
|
Identity $
|
||||||
|
x
|
||||||
|
& _1 . each . sfVs . each %~ (runIdentity . f)
|
||||||
|
& _2 . each . vxPos %~ (runIdentity . f)
|
||||||
|
|||||||
Reference in New Issue
Block a user