finaly got ldtkgo to work!
This commit is contained in:
@@ -31,8 +31,7 @@ func (scene *LevelScene) GenerateLevels(game *Game) {
|
||||
for _, level := range assets.Project.Levels {
|
||||
level := level
|
||||
scene.Levels = append(scene.Levels, NewLevel(game, 32, level))
|
||||
level.PropertyByIdentifier("min-moves")
|
||||
min = append(min, level.PropertyByIdentifier("min-moves").AsInt())
|
||||
min = append(min, level.PropertyByIdentifier("minmoves").AsInt())
|
||||
}
|
||||
|
||||
scene.Game.Observer.SetupLevelScore(min)
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"openquell/grid"
|
||||
"openquell/observers"
|
||||
"openquell/systems"
|
||||
"strings"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
"github.com/mlange-42/arche/ecs"
|
||||
@@ -35,6 +34,7 @@ func NewLevel(game *Game, cellsize int, plan *ldtkgo.Level) *Level {
|
||||
|
||||
gridcontainer := &grid.GridContainer{}
|
||||
|
||||
// FIXME: use plan.BGImage.Path here?
|
||||
systemlist = append(systemlist,
|
||||
systems.NewGridSystem(game.World, game.ScreenWidth, game.ScreenHeight, cellsize,
|
||||
assets.Assets[plan.PropertyByIdentifier("background").AsString()]))
|
||||
@@ -112,11 +112,23 @@ func (level *Level) SetupGrid(game *Game) {
|
||||
grid.NewGrid(game.World, level.Cellsize, level.Width, level.Height, level.Mapslice))
|
||||
}
|
||||
|
||||
// parses a RawLevel and generates a mapslice from it, which is being used as grid
|
||||
func LevelToSlice(game *Game, level *ldtkgo.Level, tilesize int) (Map, Map) {
|
||||
func NewMapSlice(game *Game, tilesize int) Map {
|
||||
size := game.ScreenWidth * game.ScreenHeight
|
||||
mapslice := make(Map, size)
|
||||
backupmap := make(Map, size)
|
||||
|
||||
for y := 0; y < game.ScreenHeight; y += 32 {
|
||||
for x := 0; x < game.ScreenWidth; x += 32 {
|
||||
mapslice[image.Point{x / tilesize, y / tilesize}] = assets.Tiles["floor"]
|
||||
}
|
||||
}
|
||||
|
||||
return mapslice
|
||||
}
|
||||
|
||||
// parses a RawLevel and generates a mapslice from it, which is being used as grid
|
||||
func LevelToSlice(game *Game, level *ldtkgo.Level, tilesize int) (Map, Map) {
|
||||
mapslice := NewMapSlice(game, tilesize)
|
||||
backupmap := NewMapSlice(game, tilesize)
|
||||
|
||||
for _, layer := range level.Layers {
|
||||
switch layer.Type {
|
||||
@@ -129,14 +141,19 @@ func LevelToSlice(game *Game, level *ldtkgo.Level, tilesize int) (Map, Map) {
|
||||
// but referenced from LDTK file, that way we
|
||||
// could use multiple tileset images
|
||||
tile := assets.Tiles["default"]
|
||||
tile.Sprite = assets.Assets[strings.TrimSuffix(layer.Tileset.Path, ".png")].SubImage(
|
||||
|
||||
tile.Sprite = assets.Assets["map"].SubImage(
|
||||
image.Rect(tileData.Src[0],
|
||||
tileData.Src[1],
|
||||
tileData.Src[0]+layer.GridSize,
|
||||
tileData.Src[1]+layer.GridSize)).(*ebiten.Image)
|
||||
|
||||
mapslice[image.Point{tileData.Position[0], tileData.Position[1]}] = tile
|
||||
backupmap[image.Point{tileData.Position[0], tileData.Position[1]}] = tile.Clone()
|
||||
point := image.Point{
|
||||
tileData.Position[0] / tilesize,
|
||||
tileData.Position[1] / tilesize}
|
||||
|
||||
mapslice[point] = tile
|
||||
backupmap[point] = tile.Clone()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,13 +166,19 @@ func LevelToSlice(game *Game, level *ldtkgo.Level, tilesize int) (Map, Map) {
|
||||
tile := assets.Tiles[entity.Identifier]
|
||||
|
||||
tileRect := entity.TileRect
|
||||
//slog.Debug("tilerect", "x", tileRect.X, "y", tileRect.Y, "which", entity.Identifier)
|
||||
|
||||
tile.Sprite = tileset.SubImage(
|
||||
image.Rect(tileRect.X, tileRect.Y,
|
||||
tileRect.X+tileRect.W,
|
||||
tileRect.Y+tileRect.H)).(*ebiten.Image)
|
||||
|
||||
mapslice[image.Point{entity.Position[0], entity.Position[1]}] = tile
|
||||
backupmap[image.Point{entity.Position[0], entity.Position[1]}] = tile.Clone()
|
||||
point := image.Point{
|
||||
entity.Position[0] / tilesize,
|
||||
entity.Position[1] / tilesize}
|
||||
|
||||
mapslice[point] = tile
|
||||
backupmap[point] = tile.Clone()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user