added transient entities: when crossed, turns into wall tile
This commit is contained in:
@@ -33,6 +33,7 @@ func NewGame(width, height, cellsize, startlevel int, startscene SceneName) *Gam
|
||||
|
||||
observers.NewPlayerObserver(&world)
|
||||
observers.NewParticleObserver(&world)
|
||||
observers.NewObstacleObserver(&world)
|
||||
game.Observer = observers.NewGameObserver(&world, startlevel, width, height, cellsize)
|
||||
|
||||
game.Scenes[Welcome] = NewWelcomeScene(game)
|
||||
|
||||
@@ -70,7 +70,8 @@ func (scene *LevelScene) Update() error {
|
||||
|
||||
func (scene *LevelScene) Draw(screen *ebiten.Image) {
|
||||
if scene.CurrentLevel != scene.Game.Observer.CurrentLevel {
|
||||
slog.Debug("level", "current", scene.CurrentLevel, "next", scene.Game.Observer.CurrentLevel)
|
||||
slog.Debug("level", "current", scene.CurrentLevel,
|
||||
"next", scene.Game.Observer.CurrentLevel)
|
||||
scene.CurrentLevel = scene.Game.Observer.CurrentLevel
|
||||
scene.Levels[scene.CurrentLevel].SetupGrid(scene.Game)
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"openquell/grid"
|
||||
"openquell/observers"
|
||||
"openquell/systems"
|
||||
"openquell/util"
|
||||
"strings"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
@@ -79,9 +80,11 @@ func (level *Level) SetupGrid(game *Game) {
|
||||
playerobserver.RemoveEntities()
|
||||
|
||||
// setup world
|
||||
level.GridSystem.SetGrid(grid.NewGrid(game.World, level.Cellsize, level.Width, level.Height, level.Mapslice))
|
||||
level.GridSystem.SetGrid(
|
||||
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 *assets.RawLevel, tilesize int) map[image.Point]*assets.Tile {
|
||||
size := game.ScreenWidth * game.ScreenHeight
|
||||
mapslice := make(map[image.Point]*assets.Tile, size)
|
||||
@@ -93,6 +96,10 @@ func LevelToSlice(game *Game, level *assets.RawLevel, tilesize int) map[image.Po
|
||||
}
|
||||
|
||||
for x, char := range line {
|
||||
if !util.Exists(assets.Tiles, byte(char)) {
|
||||
log.Fatalf("unregistered tile type %c encountered", char)
|
||||
}
|
||||
|
||||
mapslice[image.Point{x, y}] = assets.Tiles[byte(char)]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user