2.5 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	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)