obstacle collision fixes, player alive checks, player remove
workaround, see TODO
This commit is contained in:
@@ -50,6 +50,10 @@ func (system *CollectibleSystem) Update() error {
|
||||
colposition, collectible, _ := query.Get()
|
||||
|
||||
for player := range playerobserver.Entities {
|
||||
if !system.World.Alive(player) {
|
||||
continue
|
||||
}
|
||||
|
||||
playerposition := (*Position)(system.World.Get(player, posID))
|
||||
playervelocity := (*Velocity)(system.World.Get(player, veloID))
|
||||
|
||||
|
||||
@@ -46,13 +46,16 @@ func (system *ObstacleSystem) Update() error {
|
||||
EntitiesToRemove := []ecs.Entity{}
|
||||
|
||||
query := system.Selector.Query(system.World)
|
||||
gameover := false
|
||||
|
||||
for query.Next() {
|
||||
obsposition, obsvelocity, _, _ := query.Get()
|
||||
|
||||
// check if one player has bumped into current obstacle
|
||||
for player := range playerobserver.Entities {
|
||||
if !system.World.Alive(player) {
|
||||
continue
|
||||
}
|
||||
|
||||
playerposition := (*Position)(system.World.Get(player, posID))
|
||||
playervelocity := (*Velocity)(system.World.Get(player, veloID))
|
||||
|
||||
@@ -63,11 +66,10 @@ func (system *ObstacleSystem) Update() error {
|
||||
if CheckObstacleSide(playervelocity, obsvelocity.Direction) {
|
||||
// player died
|
||||
EntitiesToRemove = append(EntitiesToRemove, player)
|
||||
gameover = true
|
||||
} else {
|
||||
// bumped into nonlethal obstacle side, stop the
|
||||
// player, set the obstacle in motion, if possible
|
||||
slog.Debug("bump not die", "originalpos", playerposition)
|
||||
//slog.Debug("bump not die", "originalpos", playerposition, "newpos", newpos, "obspos", obsposition)
|
||||
obsvelocity.Set(playervelocity)
|
||||
playervelocity.Change(Stop)
|
||||
playerposition.Set(newpos)
|
||||
@@ -113,11 +115,13 @@ func (system *ObstacleSystem) Update() error {
|
||||
}
|
||||
|
||||
for _, entity := range EntitiesToRemove {
|
||||
slog.Debug("remove player")
|
||||
system.World.RemoveEntity(entity)
|
||||
playerobserver.RemoveEntity(entity)
|
||||
}
|
||||
|
||||
if gameover {
|
||||
// winner, winner, chicken dinner!
|
||||
if len(playerobserver.Entities) == 0 {
|
||||
// lost
|
||||
timer := gameobserver.StopTimer
|
||||
|
||||
if !timer.Running {
|
||||
|
||||
Reference in New Issue
Block a user