refactored recursive systems out of player_system => game/levels.go

This commit is contained in:
2024-02-23 18:47:15 +01:00
parent c93070883a
commit ab07bc23e3
11 changed files with 198 additions and 183 deletions

View File

@@ -11,13 +11,13 @@ import (
)
type Game struct {
World *ecs.World
Bounds image.Rectangle
ScreenWidth, ScreenHeight int
Scenes map[SceneName]Scene
CurrentScene SceneName
Observer *observers.GameObserver
Levels []*Level // needed to feed select_scene
World *ecs.World
Bounds image.Rectangle
ScreenWidth, ScreenHeight, Cellsize int
Scenes map[SceneName]Scene
CurrentScene SceneName
Observer *observers.GameObserver
Levels []*Level // needed to feed select_scene
}
func NewGame(width, height, cellsize, startlevel int, startscene SceneName) *Game {
@@ -29,6 +29,7 @@ func NewGame(width, height, cellsize, startlevel int, startscene SceneName) *Gam
ScreenWidth: width,
ScreenHeight: height,
Scenes: map[SceneName]Scene{},
Cellsize: cellsize,
}
observers.NewPlayerObserver(&world)

View File

@@ -21,40 +21,53 @@ type Level struct {
Name string
Description string
Mapslice map[image.Point]*assets.Tile
Player *systems.PlayerSystem
GridSystem *systems.GridSystem
Grid *grid.Grid
GridContainer *grid.GridContainer
Systems []systems.System
Grid *grid.Grid
}
func NewLevel(game *Game, cellsize int, plan *assets.RawLevel) *Level {
gridsystem := systems.NewGridSystem(game.World, game.ScreenWidth,
game.ScreenHeight, cellsize, plan.Background)
systemlist := []systems.System{}
playersystem := systems.NewPlayerSystem(game.World, gridsystem)
gridcontainer := &grid.GridContainer{}
systemlist = append(systemlist,
systems.NewGridSystem(game.World, game.ScreenWidth, game.ScreenHeight, cellsize, plan.Background))
systemlist = append(systemlist, systems.NewCollectibleSystem(game.World))
systemlist = append(systemlist,
systems.NewPlayerSystem(game.World, gridcontainer))
systemlist = append(systemlist, systems.NewParticleSystem(game.World, game.Cellsize))
systemlist = append(systemlist, systems.NewObstacleSystem(game.World, gridcontainer))
systemlist = append(systemlist, systems.NewTransientSystem(game.World, gridcontainer))
return &Level{
Mapslice: LevelToSlice(game, plan, cellsize),
Cellsize: cellsize,
World: game.World,
Width: game.ScreenWidth,
Height: game.ScreenHeight,
Description: plan.Description,
Name: plan.Name,
GridSystem: gridsystem,
Player: playersystem,
Mapslice: LevelToSlice(game, plan, cellsize),
Cellsize: cellsize,
World: game.World,
Width: game.ScreenWidth,
Height: game.ScreenHeight,
Description: plan.Description,
Name: plan.Name,
GridContainer: gridcontainer,
Systems: systemlist,
}
}
func (level *Level) Update() {
level.GridSystem.Update()
level.Player.Update()
for _, sys := range level.Systems {
sys.Update()
}
}
func (level *Level) Draw(screen *ebiten.Image) {
level.GridSystem.Draw(screen)
level.Player.Draw(screen)
for _, sys := range level.Systems {
sys.Draw(screen)
}
}
func (level *Level) Position2Point(position *components.Position) image.Point {
@@ -80,7 +93,7 @@ func (level *Level) SetupGrid(game *Game) {
playerobserver.RemoveEntities()
// setup world
level.GridSystem.SetGrid(
level.GridContainer.SetGrid(
grid.NewGrid(game.World, level.Cellsize, level.Width, level.Height, level.Mapslice))
}