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#
|
########W#
|
||||||
# v #
|
# v#
|
||||||
# #
|
# #
|
||||||
#S s#
|
#S s#
|
||||||
############
|
############
|
||||||
|
|||||||
@ -3,6 +3,8 @@ package observers
|
|||||||
import (
|
import (
|
||||||
"openquell/components"
|
"openquell/components"
|
||||||
|
|
||||||
|
"log/slog"
|
||||||
|
|
||||||
"github.com/mlange-42/arche/ecs"
|
"github.com/mlange-42/arche/ecs"
|
||||||
"github.com/mlange-42/arche/ecs/event"
|
"github.com/mlange-42/arche/ecs/event"
|
||||||
"github.com/mlange-42/arche/generic"
|
"github.com/mlange-42/arche/generic"
|
||||||
@ -27,6 +29,7 @@ func (observer *GameObserver) GetListenerCallback(comp ecs.ID) listener.Callback
|
|||||||
return listener.NewCallback(
|
return listener.NewCallback(
|
||||||
func(world *ecs.World, event ecs.EntityEvent) {
|
func(world *ecs.World, event ecs.EntityEvent) {
|
||||||
observer.RemoveEntity(event.Entity, comp)
|
observer.RemoveEntity(event.Entity, comp)
|
||||||
|
slog.Debug("player removed")
|
||||||
},
|
},
|
||||||
event.EntityRemoved,
|
event.EntityRemoved,
|
||||||
comp,
|
comp,
|
||||||
|
|||||||
@ -32,6 +32,8 @@ func (system PlayerSystem) Update() error {
|
|||||||
// first check if we need to switch player
|
// first check if we need to switch player
|
||||||
switchable := false
|
switchable := false
|
||||||
query := system.Selector.Query(system.World)
|
query := system.Selector.Query(system.World)
|
||||||
|
count := query.Count()
|
||||||
|
|
||||||
for query.Next() {
|
for query.Next() {
|
||||||
_, _, player, _ := query.Get()
|
_, _, player, _ := query.Get()
|
||||||
if !player.IsPrimary {
|
if !player.IsPrimary {
|
||||||
@ -43,14 +45,22 @@ func (system PlayerSystem) Update() error {
|
|||||||
query := system.Selector.Query(system.World)
|
query := system.Selector.Query(system.World)
|
||||||
for query.Next() {
|
for query.Next() {
|
||||||
_, _, player, render := query.Get()
|
_, _, player, render := query.Get()
|
||||||
if inpututil.IsKeyJustPressed(ebiten.KeyTab) {
|
|
||||||
slog.Debug("switch players")
|
if count == 1 && !player.IsPrimary {
|
||||||
if player.IsPrimary {
|
// there's only one player left, make it the primary one
|
||||||
player.IsPrimary = false
|
player.IsPrimary = true
|
||||||
render.Image = player.SwitchSprite()
|
render.Image = player.SwitchSprite()
|
||||||
} else {
|
} else {
|
||||||
player.IsPrimary = true
|
// many players, switch when requested
|
||||||
render.Image = player.SwitchSprite()
|
if inpututil.IsKeyJustPressed(ebiten.KeyTab) {
|
||||||
|
slog.Debug("switch players")
|
||||||
|
if player.IsPrimary {
|
||||||
|
player.IsPrimary = false
|
||||||
|
render.Image = player.SwitchSprite()
|
||||||
|
} else {
|
||||||
|
player.IsPrimary = true
|
||||||
|
render.Image = player.SwitchSprite()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user