added primary and secondary player mode

This commit is contained in:
2024-02-22 19:40:49 +01:00
parent 308f335cd1
commit c93070883a
12 changed files with 174 additions and 10 deletions

View File

@@ -1,10 +1,12 @@
package systems
import (
"log/slog"
. "openquell/components"
. "openquell/config"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/inpututil"
"github.com/mlange-42/arche/ecs"
"github.com/mlange-42/arche/generic"
)
@@ -34,10 +36,41 @@ func NewPlayerSystem(world *ecs.World, grid *GridSystem) *PlayerSystem {
}
func (system PlayerSystem) Update() error {
// first check if we need to switch player
switchable := false
query := system.Selector.Query(system.World)
for query.Next() {
playerposition, velocity, _, _, _ := query.Get()
_, _, player, _, _ := query.Get()
if !player.IsPrimary {
switchable = true
}
}
if switchable {
query := system.Selector.Query(system.World)
for query.Next() {
_, _, player, render, _ := query.Get()
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()
}
}
}
}
// check player movements etc
query = system.Selector.Query(system.World)
for query.Next() {
playerposition, velocity, player, _, _ := query.Get()
if !player.IsPrimary {
continue
}
if !velocity.Moving() {
switch {