75 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ## 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
 | |
|   Replace HUD with pixel art variant
 | |
| 
 | |
| - Modify font and font color matching the palette
 | |
| 
 | |
| - 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)
 |