turn player into primary if only one left

This commit is contained in:
Thomas von Dein 2024-02-27 16:52:20 +01:00
parent 18be0ebe38
commit ac88a74bd7
3 changed files with 22 additions and 9 deletions

View File

@ -5,7 +5,7 @@ Background: background-lila
########W#
# v #
# v#
# #
#S s#
############

View File

@ -3,6 +3,8 @@ package observers
import (
"openquell/components"
"log/slog"
"github.com/mlange-42/arche/ecs"
"github.com/mlange-42/arche/ecs/event"
"github.com/mlange-42/arche/generic"
@ -27,6 +29,7 @@ func (observer *GameObserver) GetListenerCallback(comp ecs.ID) listener.Callback
return listener.NewCallback(
func(world *ecs.World, event ecs.EntityEvent) {
observer.RemoveEntity(event.Entity, comp)
slog.Debug("player removed")
},
event.EntityRemoved,
comp,

View File

@ -32,6 +32,8 @@ func (system PlayerSystem) Update() error {
// first check if we need to switch player
switchable := false
query := system.Selector.Query(system.World)
count := query.Count()
for query.Next() {
_, _, player, _ := query.Get()
if !player.IsPrimary {
@ -43,6 +45,13 @@ func (system PlayerSystem) Update() error {
query := system.Selector.Query(system.World)
for query.Next() {
_, _, player, render := query.Get()
if count == 1 && !player.IsPrimary {
// there's only one player left, make it the primary one
player.IsPrimary = true
render.Image = player.SwitchSprite()
} else {
// many players, switch when requested
if inpututil.IsKeyJustPressed(ebiten.KeyTab) {
slog.Debug("switch players")
if player.IsPrimary {
@ -55,6 +64,7 @@ func (system PlayerSystem) Update() error {
}
}
}
}
// check player movements etc
query = system.Selector.Query(system.World)