alchemyst/engine/gamemap/mapgens/delaunay_mst_ext.go
2020-09-25 00:45:45 +03:00

48 lines
1.1 KiB
Go

package mapgens
import (
"lab.zaar.be/thefish/alchemyst-go/engine/gamemap"
"lab.zaar.be/thefish/alchemyst-go/engine/types"
"lab.zaar.be/thefish/alchemyst-go/util"
"lab.zaar.be/thefish/alchemyst-go/util/delaunay"
)
func DelaunayMstExtGen(l *gamemap.Level) (*gamemap.Level, []gamemap.Room) {
rng := util.NewRNG()
//fill with walls
for i := 0; i < l.W; i ++ {
for j := 0; j < l.H; j++ {
l.SetTileByXY(i, j, gamemap.NewWall())
}
}
rooms := GetRandomRoomList(rng, l, maxrooms, minRoomSize, maxRoomSize)
BlitToLevel(l, rooms)
centers := make([]types.Coords, 0)
for _, room := range rooms {
centers = append(centers, room.Center)
}
edges := delaunay.GetMst(centers, l.W, l.H, l.W) //get negative Weights
outlyingCorridors := make([]types.Edge, 0)
outlyingCorrCount := 0
for _, edge := range edges {
MedianStraight(rng, l, rooms, centers, edge)
outlyingCorridors = append(outlyingCorridors, edge)
outlyingCorrCount++
if outlyingCorrCount > 8 {
break
}
}
edges = delaunay.GetMst(centers, l.W, l.H, 0) //get negative Weights
for _, edge := range edges {
MedianStraight(rng, l, rooms, centers, edge)
}
return l, rooms
}