## Levels:

- Start New game starts with last played level, better add a Resume
  Game menu item for this and use Start New always for level 1.

- Turn menu button in hud_system (events in level_scene!) into ebitenui button

- Obstacle don't stop at collectibles

-  Player can  collect collectible  hidden under  obstacle (should  be
  fixed when above is fixed)
  
- Add player idle animation

- Add player collision animation

- Create pixel art ui elements (button, list things) and ui borders/backgrounds

- Modify font and font color matching the palette

- Replace HUD with pixel art variant

- On game start respond to any key (ebitengine-input has an anykey func)

- Switch to use https://github.com/quasilyte/ebitengine-input

- Add drag support: point and hold on the player, move cursor in some
  direction and let the player start moving on release. Respond to
  mouse and touch pad. See ~/tmp/ebiten/examples/drag/.
  
- Add options scene (mouse, player speed, sound options etc)

- Add save to disk feature including settings and player
  accomplishements (FIXME: find the lib, asked in Discord)

-  Rework sprites  (again!) to  match stellar  background: maybe  more
  technical tiles and items? Like some robotic setup?
  
  
  
  
  

## Collider Rework [abandoned: see branch collider-system, fails]

- do not use the map anymore for collision detection
- central collision_system
- add Collider component with callback funcs to call on certain events
- callback types:
  - rect intersect (== future collision)
  - collision resolve (set new position)
  - pass over foreign rect (to e.g. change sprite while flying over sprite)
  - pass over done (switch sprite)
- check  for all  moving objects against  non-moving ones  like moving
  obstacle, player, bullet, laser
- check if executing callbacks within query loop is allowed
- callback  function needs to be  able to modify other  components, so
  possibly use observers for them, e.g.:
  Collider.IntersectResolve => func(newpos) {player.pos = newpos; player.vel = stop}
- in the end it must be  possible to add new entities without the need
  to write a collision check for them, but have collision detection anyway!

## Just in case stuff

- for finding caller:
	pc := make([]uintptr, 10)
	n := runtime.Callers(0, pc)
	pc = pc[:n]
	fs := runtime.CallersFrames(pc)
	source, _ := fs.Next()
	source, _ = fs.Next()
	source, _ = fs.Next()

	slog.Debug("get observer", "minmoves", observer.LevelScore,
		"file", source.File, "line", source.Line)
