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