mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2025-02-03 15:17:04 -05:00
9ffbf1320c
* logger for d2audio & d2map * logger for d2ui e.t.c * d2inventory now passes on error messages * no more importing log in d2core * implemented #925 * added logger to part of d2networking & fixed "need to be changed" comments * fixed lints * fixed errors Co-authored-by: M. Sz <mszeptuch@protonmail.com>
71 lines
1.7 KiB
Go
71 lines
1.7 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/d2common/d2util"
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2mapengine"
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2mapstamp"
|
|
)
|
|
|
|
const (
|
|
logPrefix = "Map Generator"
|
|
)
|
|
|
|
// NewMapGenerator creates a map generator instance
|
|
func NewMapGenerator(a *d2asset.AssetManager, l d2util.LogLevel, e *d2mapengine.MapEngine) (*MapGenerator, error) {
|
|
generator := &MapGenerator{
|
|
asset: a,
|
|
engine: e,
|
|
}
|
|
|
|
generator.Logger = d2util.NewLogger()
|
|
generator.Logger.SetLevel(l)
|
|
generator.Logger.SetPrefix(logPrefix)
|
|
|
|
return generator, nil
|
|
}
|
|
|
|
// MapGenerator generates maps for the map engine
|
|
type MapGenerator struct {
|
|
asset *d2asset.AssetManager
|
|
engine *d2mapengine.MapEngine
|
|
|
|
*d2util.Logger
|
|
}
|
|
|
|
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
|
|
}
|