refactored recursive systems out of player_system => game/levels.go
This commit is contained in:
15
game/game.go
15
game/game.go
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user