mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2025-02-09 18:17:07 -05:00
60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
|
package d2mapgen
|
||
|
|
||
|
import (
|
||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||
|
|
||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2geom"
|
||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2mapengine"
|
||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2mapstamp"
|
||
|
)
|
||
|
|
||
|
// NewMapGenerator creates a map generator instance
|
||
|
func NewMapGenerator(a *d2asset.AssetManager, e *d2mapengine.MapEngine) (*MapGenerator, error) {
|
||
|
generator := &MapGenerator{
|
||
|
asset: a,
|
||
|
engine: e,
|
||
|
}
|
||
|
|
||
|
return generator, nil
|
||
|
}
|
||
|
|
||
|
// MapGenerator generates maps for the map engine
|
||
|
type MapGenerator struct {
|
||
|
asset *d2asset.AssetManager
|
||
|
engine *d2mapengine.MapEngine
|
||
|
}
|
||
|
|
||
|
func (g *MapGenerator) loadPreset(id, index int) *d2mapstamp.Stamp {
|
||
|
for _, file := range g.asset.Records.LevelPreset(id).Files {
|
||
|
g.engine.AddDS1(file)
|
||
|
}
|
||
|
|
||
|
return g.engine.LoadStamp(d2enum.RegionAct1Wilderness, id, index)
|
||
|
}
|
||
|
|
||
|
func areaEmpty(mapEngine *d2mapengine.MapEngine, rect d2geom.Rectangle) bool {
|
||
|
mapHeight := mapEngine.Size().Height
|
||
|
mapWidth := mapEngine.Size().Width
|
||
|
|
||
|
if rect.Top < 0 || rect.Left < 0 || rect.Bottom() >= mapHeight || rect.Right() >= mapWidth {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
for y := rect.Top; y <= rect.Bottom(); y++ {
|
||
|
for x := rect.Left; x <= rect.Right(); x++ {
|
||
|
if len(mapEngine.Tile(x, y).Components.Floors) == 0 {
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
floor := mapEngine.Tile(x, y).Components.Floors[0]
|
||
|
|
||
|
if floor.Style != 0 || floor.Sequence != 0 || floor.Prop1 != 1 {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true
|
||
|
}
|