feat(xan): Generate random villages
This algorithm is a little rough around the edges right now, but generally the idea is we find a relatively closed-off region of the map, and place rooms randomly on it, expanding them until they run into each other, then we put doors in the walls of the rooms and a single door opening into the region. Later on, we'll generate friendly (or unfriendly!) NPCs to put in those rooms. Change-Id: Ic989b9905f55ad92a01fdf6db11aa57afb4ce383 Reviewed-on: https://cl.tvl.fyi/c/depot/+/726 Reviewed-by: glittershark <grfn@gws.fyi>
This commit is contained in:
parent
6c7e14d2dc
commit
bf9b09bd8c
12 changed files with 302 additions and 22 deletions
|
|
@ -79,8 +79,17 @@ module Xanthous.Data
|
|||
, edges
|
||||
, neighborDirections
|
||||
, neighborPositions
|
||||
, neighborCells
|
||||
, arrayNeighbors
|
||||
, rotations
|
||||
, HasTopLeft(..)
|
||||
, HasTop(..)
|
||||
, HasTopRight(..)
|
||||
, HasLeft(..)
|
||||
, HasRight(..)
|
||||
, HasBottomLeft(..)
|
||||
, HasBottom(..)
|
||||
, HasBottomRight(..)
|
||||
|
||||
-- *
|
||||
, Hitpoints(..)
|
||||
|
|
@ -439,6 +448,9 @@ neighborDirections = Neighbors
|
|||
neighborPositions :: Num a => Position' a -> Neighbors (Position' a)
|
||||
neighborPositions pos = (`move` pos) <$> neighborDirections
|
||||
|
||||
neighborCells :: Num a => (a, a) -> Neighbors (a, a)
|
||||
neighborCells = map (view _Position) . neighborPositions . review _Position
|
||||
|
||||
arrayNeighbors
|
||||
:: (IArray a e, Ix i, Num i)
|
||||
=> a (i, i) e
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue