stardance has been extended another month! the new deadline is october 31 :)

You are browsing as a guest. Sign up (or log in) to start making projects!

3h 1m 11s logged

uhhh

changes

dont nuke scene on failed load

  • scene deserialization moved out of Scene::OnEnter into SceneManager::LoadScene, and now runs before the old scene gets torn down. if the new one fails, you stay in the old scene (LoadSceneByPath returns a bool now)
  • loading is stricter. missing map files, bad/out-of-range/cyclic parent values and broken UI sections fail the load instead of logging an error and limping on
  • persistent entity migration happens before the swap too, so a failed asset acquire can’t leave you half in the new scene
  • the editor’s LoadScene used to clear the current project before trying to load. now undo history and selection only get cleared once the load actually worked
  • saving: map write failures now propagate instead of reporting success, and files get closed before the error check

destroying entities

  • DestroyEntity was recursive, now it’s iterative with a visited set. deep hierarchies, cycles and duplicate child entries no longer kaboom the stack or double delete, and children go first (wow that sounds dark)
  • Reparent and SetParentDirect go through CanSetParent, which rejects cycles and stale parents, even if the existing hierarchy is already cyclic
  • script DestroyEntity / entity.Destroy() now use RequestDestroy to tag the entity and its whole subtree instead of deleting immediately, so on_destroy runs before deletion. scene exit drains the destroy queue too, including entities tagged by exit hooks
  • the script wrapper cache evicts an entity when it’s destroyed
  • a dumb one…: the hot-reload cleanup list had on_exit in it twice and no on_destroy, so on_destroy GC roots never got released …
  • the script system was holding raw ScriptComponent* across initialization, which dangles if a script spawns enough entities to grow the pool. it looks components up by entity ID now
  • script runtime reinitialization after a scene change uses the VFS path and reruns setup, so using imports keep working from the mounted project

ui undo

UI elements have UUIDs now, and undo commands resolve them by UUID instead of holding raw pointers. removing an element captures the whole subtree plus its sibling position, so undo restores the hierarchy and order. renaming also updates the name index live.

smaller fixes

  • collision broadphase is a “spatial hash grid” now instead of checking every pair
  • lightmap rebakes when ambient changes, and handles maps with no tiles
  • atomic file writes use unique temp names so concurrent writers don’t trip over each other
  • project changes wait for background asset loads to finish
  • timeout timers are mutex-protected, and callbacks can schedule more timers without deadlocking
  • SmallTask over-aligned captures fall back to the heap
  • VFS::Resolve("..") had UB from a std::mismatch that wasn’t bounded on the second range…
  • PlayMusic stops, swaps and starts under the lock now instead of racing!!!

tests

wrote a pile of tests alongside all this: atomic writes, wrapper cache, hierarchy safety, map serialization, save concurrency, scene loading failures, script lifecycle, script modules, SmallTask and timeouts. expanded to the editor command, save game and VFS tests.


so EVEN LESS explosions !!! Woo!

0
45

Comments 0

No comments yet. Be the first!