fix: physics pause/resume crash — IsAlive checks + safe deletion

This commit is contained in:
emil28092005
2026-06-19 09:44:56 +03:00
parent ef7c808304
commit 194848d074
2 changed files with 7 additions and 7 deletions
Binary file not shown.
+7 -7
View File
@@ -133,12 +133,13 @@ class Program
var toInit = new List<(Entity, RigidBody, Transform)>(); var toInit = new List<(Entity, RigidBody, Transform)>();
world.Each((Entity e, ref RigidBody rb, ref Transform t) => world.Each((Entity e, ref RigidBody rb, ref Transform t) =>
{ {
if (!rb.IsInitialized) if (!rb.IsInitialized && e.IsAlive())
toInit.Add((e, rb, t)); toInit.Add((e, rb, t));
}); });
foreach (var (e, rb, t) in toInit) foreach (var (e, rb, t) in toInit)
{ {
if (!e.IsAlive()) continue;
var rbInit = rb; var rbInit = rb;
rbInit.IsInitialized = true; rbInit.IsInitialized = true;
e.Set(rbInit); e.Set(rbInit);
@@ -228,20 +229,19 @@ class Program
if (ImGui.Button("Reset Scene")) if (ImGui.Button("Reset Scene"))
{ {
// Delete all entities except Camera, lights, Floor // Delete all entities except Camera, lights, Floor
var toDelete = new List<string>(); var toDelete = new List<Entity>();
world.Each((Entity e, ref Transform t) => world.Each((Entity e, ref Transform t) =>
{ {
var name = e.Name(); var name = e.Name();
if (name != "Camera" && name != "MainLight" && name != "SecondLight" && name != "ThirdLight" && name != "Floor") if (name != "Camera" && name != "MainLight" && name != "SecondLight" && name != "ThirdLight" && name != "Floor")
toDelete.Add(name); toDelete.Add(e);
}); });
foreach (var name in toDelete) foreach (var ent in toDelete)
{ {
var ent = world.Lookup(name); if (ent.IsAlive()) ent.Destruct();
if ((ulong)ent.Id != 0) ent.Destruct();
} }
CreateObjects(world); CreateObjects(world);
Console.WriteLine($"[App] Scene reset: {toDelete.Count} entities deleted, scene recreated"); Console.WriteLine($"[App] Scene reset: {toDelete.Count} entities deleted");
} }
ImGui.End(); ImGui.End();