2024-02-11 14:24:30 +01:00
|
|
|
package observers
|
|
|
|
|
|
|
|
|
|
import (
|
2024-02-13 18:15:52 +01:00
|
|
|
"openquell/components"
|
|
|
|
|
|
2024-02-11 14:24:30 +01:00
|
|
|
"github.com/mlange-42/arche/ecs"
|
|
|
|
|
"github.com/mlange-42/arche/generic"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Used for global game state
|
|
|
|
|
type GameObserver struct {
|
2024-02-19 19:05:48 +01:00
|
|
|
CurrentLevel, Width int
|
|
|
|
|
Height, Cellsize, Score int
|
|
|
|
|
StopTimer *components.Timer
|
|
|
|
|
Lost bool // set to true if player is struck or something, by default: win!
|
|
|
|
|
Retry bool
|
|
|
|
|
NextlevelText string
|
2024-02-11 14:24:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewGameObserver(world *ecs.World, startlevel, width, height, cellsize int) *GameObserver {
|
|
|
|
|
observer := &GameObserver{
|
|
|
|
|
CurrentLevel: startlevel,
|
2024-02-13 18:15:52 +01:00
|
|
|
StopTimer: &components.Timer{},
|
2024-02-11 14:24:30 +01:00
|
|
|
Width: width,
|
|
|
|
|
Height: height,
|
|
|
|
|
Cellsize: cellsize,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resmanger := generic.NewResource[GameObserver](world)
|
|
|
|
|
resmanger.Add(observer)
|
|
|
|
|
|
|
|
|
|
return observer
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetGameObserver(world *ecs.World) *GameObserver {
|
|
|
|
|
observerID := ecs.ResourceID[GameObserver](world)
|
|
|
|
|
observer := world.Resources().Get(observerID).(*GameObserver)
|
|
|
|
|
return observer
|
|
|
|
|
}
|
2024-02-19 19:05:48 +01:00
|
|
|
|
|
|
|
|
func (observer *GameObserver) Gameover() {
|
|
|
|
|
observer.Lost = true
|
|
|
|
|
}
|