mirror of
https://github.com/mvvasilev/last_light.git
synced 2025-04-19 12:49:52 +03:00
128 lines
2.6 KiB
Go
128 lines
2.6 KiB
Go
|
package model
|
||
|
|
||
|
// import "mvvasilev/last_light/engine"
|
||
|
|
||
|
// type MultilevelMap struct {
|
||
|
// layers []Map
|
||
|
// }
|
||
|
|
||
|
// func CreateMultilevelMap(maps ...Map) *MultilevelMap {
|
||
|
// m := new(MultilevelMap)
|
||
|
|
||
|
// m.layers = maps
|
||
|
|
||
|
// return m
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) Size() engine.Size {
|
||
|
// if len(mm.layers) == 0 {
|
||
|
// return engine.SizeOf(0, 0)
|
||
|
// }
|
||
|
|
||
|
// return mm.layers[0].Size()
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) SetTileAt(x, y int, t Tile) Tile {
|
||
|
// return mm.layers[0].SetTileAt(x, y, t)
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) UnsetTileAtHeight(x, y, height int) {
|
||
|
// if len(mm.layers) < height {
|
||
|
// return
|
||
|
// }
|
||
|
|
||
|
// mm.layers[height].SetTileAt(x, y, nil)
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) SetTileAtHeight(x, y, height int, t Tile) {
|
||
|
// if len(mm.layers) < height {
|
||
|
// return
|
||
|
// }
|
||
|
|
||
|
// mm.layers[height].SetTileAt(x, y, t)
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) CollectTilesAt(x, y int, filter func(t Tile) bool) []Tile {
|
||
|
// tiles := make([]Tile, len(mm.layers))
|
||
|
|
||
|
// if !mm.IsInBounds(x, y) {
|
||
|
// return tiles
|
||
|
// }
|
||
|
|
||
|
// for i := len(mm.layers) - 1; i >= 0; i-- {
|
||
|
// tile := mm.layers[i].TileAt(x, y)
|
||
|
|
||
|
// if tile != nil && !tile.Transparent() && filter(tile) {
|
||
|
// tiles = append(tiles, tile)
|
||
|
// }
|
||
|
|
||
|
// }
|
||
|
|
||
|
// return tiles
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) TileAt(x int, y int) Tile {
|
||
|
// if !mm.IsInBounds(x, y) {
|
||
|
// return CreateStaticTile(x, y, TileTypeVoid())
|
||
|
// }
|
||
|
|
||
|
// for i := len(mm.layers) - 1; i >= 0; i-- {
|
||
|
// tile := mm.layers[i].TileAt(x, y)
|
||
|
|
||
|
// if tile != nil && !tile.Transparent() {
|
||
|
// return tile
|
||
|
// }
|
||
|
|
||
|
// }
|
||
|
|
||
|
// return CreateStaticTile(x, y, TileTypeVoid())
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) IsInBounds(x, y int) bool {
|
||
|
// if x < 0 || y < 0 {
|
||
|
// return false
|
||
|
// }
|
||
|
|
||
|
// if x >= mm.Size().Width() || y >= mm.Size().Height() {
|
||
|
// return false
|
||
|
// }
|
||
|
|
||
|
// return true
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) MarkExplored(x, y int) {
|
||
|
// for _, m := range mm.layers {
|
||
|
// m.MarkExplored(x, y)
|
||
|
// }
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) ExploredTileAt(x, y int) Tile {
|
||
|
// for i := len(mm.layers) - 1; i >= 0; i-- {
|
||
|
// tile := mm.layers[i].ExploredTileAt(x, y)
|
||
|
|
||
|
// if tile != nil && !tile.Transparent() {
|
||
|
// return tile
|
||
|
// }
|
||
|
// }
|
||
|
|
||
|
// return CreateStaticTile(x, y, TileTypeVoid())
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) TileAtHeight(x, y, height int) Tile {
|
||
|
// if !mm.IsInBounds(x, y) {
|
||
|
// return CreateStaticTile(x, y, TileTypeVoid())
|
||
|
// }
|
||
|
|
||
|
// if height > len(mm.layers)-1 {
|
||
|
// return CreateStaticTile(x, y, TileTypeVoid())
|
||
|
// }
|
||
|
|
||
|
// return mm.layers[height].TileAt(x, y)
|
||
|
// }
|
||
|
|
||
|
// func (mm *MultilevelMap) Tick(dt int64) {
|
||
|
// for _, l := range mm.layers {
|
||
|
// l.Tick(dt)
|
||
|
// }
|
||
|
// }
|