last_light/game/model/flat_ground_dungeon_level.go
2024-05-03 13:46:32 +03:00

75 lines
1.4 KiB
Go

package model
import (
"math/rand"
"mvvasilev/last_light/util"
"github.com/gdamore/tcell/v2"
)
type FlatGroundDungeonLevel struct {
tiles [][]Tile
}
func CreateFlatGroundDungeonLevel(width, height int) *FlatGroundDungeonLevel {
level := new(FlatGroundDungeonLevel)
level.tiles = make([][]Tile, height)
for h := range height {
level.tiles[h] = make([]Tile, width)
for w := range width {
if w == 0 || h == 0 || w >= width-1 || h >= height-1 {
level.tiles[h][w] = CreateStaticTile(w, h, TileTypeRock())
continue
}
level.tiles[h][w] = genRandomGroundTile(w, h)
}
}
return level
}
func genRandomGroundTile(width, height int) Tile {
switch rand.Intn(2) {
case 0:
return CreateStaticTile(width, height, TileTypeGround())
case 1:
return CreateStaticTile(width, height, TileTypeGrass())
default:
return CreateStaticTile(width, height, TileTypeGround())
}
}
func (edl *FlatGroundDungeonLevel) Size() util.Size {
return util.SizeOf(len(edl.tiles[0]), len(edl.tiles))
}
func (edl *FlatGroundDungeonLevel) SetTileAt(x int, y int, t Tile) {
if len(edl.tiles) <= y || len(edl.tiles[0]) <= x {
return
}
edl.tiles[y][x] = t
}
func (edl *FlatGroundDungeonLevel) TileAt(x int, y int) Tile {
if y < 0 || y >= len(edl.tiles) {
return nil
}
if x < 0 || x >= len(edl.tiles[y]) {
return nil
}
return edl.tiles[y][x]
}
func (edl *FlatGroundDungeonLevel) Input(e *tcell.EventKey) {
}
func (edl *FlatGroundDungeonLevel) Tick() {
}