## Levels: - ignore comments in lvl files - Grid Observer: https://github.com/mlange-42/arche/issues/374 - Add shaders for animation (player destruction etc) - 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. - 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) - Turn menu button in hud_system (events in level_scene!) into ebitenui button - On level loose, do not offer "next level" - Moving obstacles don't kill the player when they hit him, they just stop there. - use grid/collider.CheckGridCollision() for players AND obstacles. Currenty if I use it with obstacles, the don't move anymore when a player bumps into it, for whatever strange reasons. Maybe add a func argument to it so that the function can respond to the event as the entity wishes. ## 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!