started implementing score system
This commit is contained in:
@@ -11,6 +11,10 @@ import (
|
||||
"github.com/mlange-42/arche/listener"
|
||||
)
|
||||
|
||||
type Score struct {
|
||||
Min, Score int
|
||||
}
|
||||
|
||||
// Used for global game state. Also stores mobile entities of the
|
||||
// current level. The Entities map will be reset on each level
|
||||
// initialization in grid/grid.go
|
||||
@@ -23,6 +27,7 @@ type GameObserver struct {
|
||||
Retry bool
|
||||
NextlevelText string
|
||||
Entities map[ecs.ID]map[ecs.Entity]int
|
||||
LevelScore []Score // one score per level
|
||||
}
|
||||
|
||||
func (observer *GameObserver) GetListenerCallback(comp ecs.ID) listener.Callback {
|
||||
@@ -36,7 +41,8 @@ func (observer *GameObserver) GetListenerCallback(comp ecs.ID) listener.Callback
|
||||
)
|
||||
}
|
||||
|
||||
func NewGameObserver(world *ecs.World, startlevel, width, height, cellsize int) *GameObserver {
|
||||
func NewGameObserver(world *ecs.World, startlevel, levelcount,
|
||||
width, height, cellsize int) *GameObserver {
|
||||
observer := &GameObserver{
|
||||
CurrentLevel: startlevel,
|
||||
StopTimer: &components.Timer{},
|
||||
@@ -46,9 +52,6 @@ func NewGameObserver(world *ecs.World, startlevel, width, height, cellsize int)
|
||||
World: world,
|
||||
}
|
||||
|
||||
resmanger := generic.NewResource[GameObserver](world)
|
||||
resmanger.Add(observer)
|
||||
|
||||
playerID := ecs.ComponentID[components.Player](world)
|
||||
obstacleID := ecs.ComponentID[components.Obstacle](world)
|
||||
particleID := ecs.ComponentID[components.Particle](world)
|
||||
@@ -70,6 +73,11 @@ func NewGameObserver(world *ecs.World, startlevel, width, height, cellsize int)
|
||||
observer.Entities[obstacleID] = make(map[ecs.Entity]int)
|
||||
observer.Entities[particleID] = make(map[ecs.Entity]int)
|
||||
|
||||
observer.LevelScore = make([]Score, levelcount)
|
||||
|
||||
resmanger := generic.NewResource[GameObserver](world)
|
||||
resmanger.Add(observer)
|
||||
|
||||
return observer
|
||||
}
|
||||
|
||||
@@ -124,3 +132,27 @@ func (observer *GameObserver) RemoveEntities() {
|
||||
observer.Entities[obstacleID] = make(map[ecs.Entity]int)
|
||||
observer.Entities[particleID] = make(map[ecs.Entity]int)
|
||||
}
|
||||
|
||||
func (observer *GameObserver) SetupLevelScore(min []int) {
|
||||
for level, minmoves := range min {
|
||||
observer.LevelScore[level].Min = minmoves
|
||||
}
|
||||
}
|
||||
|
||||
// to be called from scenes where player wins or looses
|
||||
func (observer *GameObserver) AddScore(level, moves int) {
|
||||
observer.LevelScore[level].Score = ((observer.LevelScore[level].Min * 100) / moves) / 30
|
||||
}
|
||||
|
||||
func (observer *GameObserver) GetScore() int {
|
||||
sum := 0
|
||||
for _, score := range observer.LevelScore {
|
||||
sum += score.Score
|
||||
}
|
||||
|
||||
return sum
|
||||
}
|
||||
|
||||
func (observer *GameObserver) GetLevelScore(level int) int {
|
||||
return observer.LevelScore[level].Score
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user