diff --git a/src/Dodge/LevelGen/LevelStructure.hs b/src/Dodge/LevelGen/LevelStructure.hs new file mode 100644 index 000000000..ca7a01d02 --- /dev/null +++ b/src/Dodge/LevelGen/LevelStructure.hs @@ -0,0 +1,15 @@ +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE StrictData #-} +module Dodge.LevelGen.LevelStructure where +import Dodge.LevelGen.Data +--import Dodge.Tree.Compose.Data +import Dodge.Data + +--import Data.Tree +import qualified Data.IntMap.Strict as IM +--import System.Random + +data GenWorld = GenWorld + { _gWorld :: World + , _gPlacements :: IM.IntMap [Placement] + } diff --git a/src/Dodge/Placement/Shift.hs b/src/Dodge/Placement/Shift.hs new file mode 100644 index 000000000..cd7e0b767 --- /dev/null +++ b/src/Dodge/Placement/Shift.hs @@ -0,0 +1,19 @@ +module Dodge.Placement.Shift + ( shiftPlacement + , shiftPSBy + ) where +import Dodge.LevelGen.Data +import Dodge.ShiftPoint +import Geometry +import Control.Lens +shiftPSBy :: (Point2,Float) -> PlacementSpot -> PlacementSpot +shiftPSBy (pos,rot) ps = ps + & psPos %~ shiftPointBy (pos,rot) + & psRot %~ (+ rot) +shiftPlacement :: (Point2,Float) -> Placement -> Placement +shiftPlacement shift plmnt = case plmnt of + Placement {} -> plmnt & plSpot %~ shiftPSBy shift + & plIDCont %~ fmap (fmap $ shiftPlacement shift) + PlacementUsingPos p f -> PlacementUsingPos (shiftPoint3By shift p) + (fmap (shiftPlacement shift) f) + RandomPlacement rpl -> RandomPlacement $ fmap (shiftPlacement shift) rpl