fix: physics pause/resume crash — IsAlive checks + safe deletion
This commit is contained in:
Binary file not shown.
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user