Fill the outer edges of generated levels
To avoid the character being able to go OOB. This is something we had in the Rust version but I hadn't ported over yet
This commit is contained in:
parent
33c831d23d
commit
6678ac986c
2 changed files with 13 additions and 1 deletions
|
@ -98,6 +98,7 @@ generate' params dims = do
|
|||
let steps' = params ^. steps
|
||||
when (steps' > 0)
|
||||
$ for_ [0 .. pred steps'] . const $ stepAutomata cells dims params
|
||||
lift $ fillOuterEdgesM cells
|
||||
pure cells
|
||||
|
||||
stepAutomata :: forall s g. MCells s -> Dimensions -> Params -> CellM g s ()
|
||||
|
|
|
@ -7,6 +7,7 @@ module Xanthous.Generators.Util
|
|||
, randInitialize
|
||||
, numAliveNeighborsM
|
||||
, numAliveNeighbors
|
||||
, fillOuterEdgesM
|
||||
, cloneMArray
|
||||
, floodFill
|
||||
, regions
|
||||
|
@ -20,7 +21,7 @@ import Control.Monad.Random
|
|||
import Data.Monoid
|
||||
import Data.Foldable (Foldable, toList)
|
||||
--------------------------------------------------------------------------------
|
||||
import Xanthous.Util (foldlMapM', between)
|
||||
import Xanthous.Util (foldlMapM')
|
||||
import Xanthous.Data (Dimensions, width, height)
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
@ -93,6 +94,16 @@ numAliveNeighbors cells (x, y) =
|
|||
neighborPositions :: [(Int, Int)]
|
||||
neighborPositions = [(i, j) | i <- [-1..1], j <- [-1..1], (i, j) /= (0, 0)]
|
||||
|
||||
fillOuterEdgesM :: (MArray a Bool m, Ix i, Ix j) => a (i, j) Bool -> m ()
|
||||
fillOuterEdgesM arr = do
|
||||
((minX, minY), (maxX, maxY)) <- getBounds arr
|
||||
for_ (range (minX, maxX)) $ \x -> do
|
||||
writeArray arr (x, minY) True
|
||||
writeArray arr (x, maxY) True
|
||||
for_ (range (minY, maxY)) $ \y -> do
|
||||
writeArray arr (minX, y) True
|
||||
writeArray arr (maxX, y) True
|
||||
|
||||
safeGet :: (IArray a e, Ix i) => a i e -> i -> Maybe e
|
||||
safeGet arr idx =
|
||||
let (minIdx, maxIdx) = bounds arr
|
||||
|
|
Loading…
Reference in a new issue