turn player into primary if only one left
This commit is contained in:
parent
18be0ebe38
commit
ac88a74bd7
@ -5,7 +5,7 @@ Background: background-lila
|
||||
|
||||
|
||||
########W#
|
||||
# v #
|
||||
# v#
|
||||
# #
|
||||
#S s#
|
||||
############
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user