added primary and secondary player mode
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user