module Dodge.Room.Ngon where import Data.List import Data.Maybe import Data.Tile import Dodge.Data.GenWorld import Dodge.Default.Room import Dodge.Placement.Instance import Dodge.PlacementSpot import Dodge.RoomLink import Geometry import Tile roomNgon :: Int -> Float -> Room roomNgon n x = defaultRoom { _rmPolys = [poly] , _rmLinks = map toBothLnk lnks -- muout (init lnks) ++ muin[last lnks] , _rmPath = mempty -- TODO , _rmPmnts = [mntLightLnkCond $ resetPLUse $ rprBool $ const . isInLnk] , _rmBound = [poly] , _rmFloor = Tiled [makeTileFromPoly poly 2] , _rmName = show n ++ "gon" } where rot = 2 * pi / fromIntegral n rots = map ((rot *) . fromIntegral) [0 .. n -1] poly = mapMaybe (\(ra, rb) -> intersectLineLine' (rotateV ra bl) (rotateV ra br) (rotateV rb bl) (rotateV rb br)) $ loopPairs rots bl = V2 x x br = V2 (- x) x lnks = sortOn ((\(V2 a b) -> (negate b, a)) . fst) $ map (\r -> (rotateV r (V2 0 x), r)) rots