finaly got ldtkgo to work!

This commit is contained in:
2024-03-11 18:31:01 +01:00
parent af19ccb833
commit 1d9164d140
7 changed files with 266 additions and 50 deletions

View File

@@ -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)

View File

@@ -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()
}
}
}