pruning empty entities
parent
4d67b4ddf7
commit
f24ee21de0
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using MoonTools.FastCollections;
|
||||||
|
|
||||||
namespace Encompass
|
namespace Encompass
|
||||||
{
|
{
|
||||||
|
@ -262,5 +263,10 @@ namespace Encompass
|
||||||
drawLayerManager.UnRegisterComponentWithLayer<TComponent>(entityID);
|
drawLayerManager.UnRegisterComponentWithLayer<TComponent>(entityID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool UpToDateEntityIsEmpty(int entityID)
|
||||||
|
{
|
||||||
|
return upToDateComponentStore.EntityBitArray(entityID).AllFalse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -202,6 +202,14 @@ namespace Encompass
|
||||||
return entityManager.EntityExists(entity.ID);
|
return entityManager.EntityExists(entity.ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if an Entity with the specified ID exists.
|
||||||
|
/// </summary>
|
||||||
|
protected bool EntityExists(int entityID)
|
||||||
|
{
|
||||||
|
return entityManager.EntityExists(entityID);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns an Entity containing the specified Component type.
|
/// Returns an Entity containing the specified Component type.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -76,5 +76,17 @@ namespace Encompass
|
||||||
|
|
||||||
entitiesMarkedForDestroy.Clear();
|
entitiesMarkedForDestroy.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE: this is very suboptimal
|
||||||
|
public void PruneEmptyEntities()
|
||||||
|
{
|
||||||
|
foreach (var id in EntityIDs)
|
||||||
|
{
|
||||||
|
if (componentManager.UpToDateEntityIsEmpty(id))
|
||||||
|
{
|
||||||
|
MarkForDestroy(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,7 @@ namespace Encompass
|
||||||
}
|
}
|
||||||
|
|
||||||
messageManager.ClearMessages();
|
messageManager.ClearMessages();
|
||||||
|
entityManager.PruneEmptyEntities();
|
||||||
entityManager.DestroyMarkedEntities(enginesInOrder);
|
entityManager.DestroyMarkedEntities(enginesInOrder);
|
||||||
|
|
||||||
componentManager.RemoveMarkedComponents();
|
componentManager.RemoveMarkedComponents();
|
||||||
|
|
|
@ -1387,6 +1387,37 @@ namespace Tests
|
||||||
getComponentResult.Should().Be(new MockComponentB(5));
|
getComponentResult.Should().Be(new MockComponentB(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool entityExistsResult;
|
||||||
|
|
||||||
|
class EntityExistsEngine : Engine
|
||||||
|
{
|
||||||
|
private int _id;
|
||||||
|
|
||||||
|
public EntityExistsEngine(int id)
|
||||||
|
{
|
||||||
|
_id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Update(double dt)
|
||||||
|
{
|
||||||
|
entityExistsResult = EntityExists(_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void PruneEmptyEntities()
|
||||||
|
{
|
||||||
|
var worldBuilder = new WorldBuilder();
|
||||||
|
var entity = worldBuilder.CreateEntity();
|
||||||
|
var id = entity.ID;
|
||||||
|
|
||||||
|
var world = worldBuilder.Build();
|
||||||
|
|
||||||
|
world.Update(0.01);
|
||||||
|
|
||||||
|
entityExistsResult.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
public class QueryTests
|
public class QueryTests
|
||||||
{
|
{
|
||||||
struct MockComponentB : IComponent { }
|
struct MockComponentB : IComponent { }
|
||||||
|
|
Loading…
Reference in New Issue