lotsa fixes:

- fixed obstacle collision and death on obstacle spike
- moved player move into separate loop after other collision checks
  are done
- fixed level setup, generation and selection
- added test levels for obstacles
This commit is contained in:
2024-02-21 12:50:17 +01:00
parent 646b227b8e
commit f696660ccd
17 changed files with 74 additions and 15 deletions

View File

@@ -52,7 +52,7 @@ func (system *ObstacleSystem) Update() {
playerposition := (*Position)(system.World.Get(player, posID))
playervelocity := (*Velocity)(system.World.Get(player, veloID))
ok, newpos := playerposition.Intersects(obsposition, playervelocity)
ok, newpos := obsposition.Intersects(playerposition, playervelocity)
if ok {
slog.Debug("bumped into obstacle", "obstacle", obstacle)

View File

@@ -36,7 +36,7 @@ func (system PlayerSystem) Update() error {
query := system.Selector.Query(system.World)
for query.Next() {
playerposition, velocity, _, _, speed := query.Get()
playerposition, velocity, _, _, _ := query.Get()
if !velocity.Moving() {
switch {
@@ -71,14 +71,19 @@ func (system PlayerSystem) Update() error {
}
}
}
playerposition.Move(velocity, speed)
}
system.Particle.Update()
system.Particle.Update() // may set player position
system.Obstacle.Update()
system.Collectible.Update()
query = system.Selector.Query(system.World)
for query.Next() {
// move player after obstacle or collectible updates
playerposition, velocity, _, _, speed := query.Get()
playerposition.Move(velocity, speed)
}
return nil
}