openquell/TODO.md

2.1 KiB

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

  • Obstacle don't stop at collectibles

  • Player can collect collectible hidden under obstacle (should be fixed when above is fixed)

  • With new tileset images, hidden doors visually not working anymore. So I need entit-tiles containing the wall tiles AND I need to add a shader for a wall destruct animation. Otherwise I'd have to store lots of images pairs, and I can't do that in LDTK.

  • https://www.quasilyte.dev/blog/post/ebitengine-shaders/#round-1-applying-the-damage-mask

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!