fixed world initialization and draw component removal issues
parent
0293263684
commit
571310e579
|
@ -85,6 +85,7 @@ namespace Encompass
|
||||||
{
|
{
|
||||||
//componentStore.Remove<TComponent>(entity);
|
//componentStore.Remove<TComponent>(entity);
|
||||||
componentMessageManager.Remove<TComponent>(entity);
|
componentMessageManager.Remove<TComponent>(entity);
|
||||||
|
drawLayerManager.UnRegisterComponentWithLayer<TComponent>(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Remove(Entity entity)
|
private void Remove(Entity entity)
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace Encompass
|
||||||
|
|
||||||
private readonly ComponentStore existingComponentStore = new ComponentStore();
|
private readonly ComponentStore existingComponentStore = new ComponentStore();
|
||||||
private readonly ComponentStore pendingComponentStore = new ComponentStore();
|
private readonly ComponentStore pendingComponentStore = new ComponentStore();
|
||||||
private readonly ComponentStore upToDateComponentStore = new ComponentStore();
|
private ComponentStore upToDateComponentStore = new ComponentStore();
|
||||||
|
|
||||||
private readonly Dictionary<Type, Dictionary<Entity, int>> typeToEntityToPendingComponentPriority = new Dictionary<Type, Dictionary<Entity, int>>();
|
private readonly Dictionary<Type, Dictionary<Entity, int>> typeToEntityToPendingComponentPriority = new Dictionary<Type, Dictionary<Entity, int>>();
|
||||||
|
|
||||||
|
@ -30,6 +30,11 @@ namespace Encompass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void SetStartingComponentStore(ComponentStore componentStore)
|
||||||
|
{
|
||||||
|
upToDateComponentStore = componentStore;
|
||||||
|
}
|
||||||
|
|
||||||
internal void AddExistingComponentMessage<TComponent>(ComponentMessage<TComponent> componentMessage) where TComponent : struct, IComponent
|
internal void AddExistingComponentMessage<TComponent>(ComponentMessage<TComponent> componentMessage) where TComponent : struct, IComponent
|
||||||
{
|
{
|
||||||
RegisterExistingOrPendingComponentMessage(componentMessage.entity, componentMessage.component);
|
RegisterExistingOrPendingComponentMessage(componentMessage.entity, componentMessage.component);
|
||||||
|
|
|
@ -7,7 +7,6 @@ namespace Encompass
|
||||||
internal class DrawLayerManager
|
internal class DrawLayerManager
|
||||||
{
|
{
|
||||||
private readonly SortedList<int, int> layerOrder = new SortedList<int, int>();
|
private readonly SortedList<int, int> layerOrder = new SortedList<int, int>();
|
||||||
private readonly ComponentStore componentStore = new ComponentStore();
|
|
||||||
|
|
||||||
private readonly Dictionary<int, ComponentStore> layerIndexToComponentStore = new Dictionary<int, ComponentStore>();
|
private readonly Dictionary<int, ComponentStore> layerIndexToComponentStore = new Dictionary<int, ComponentStore>();
|
||||||
private readonly Dictionary<int, HashSet<GeneralRenderer>> layerIndexToGeneralRenderers = new Dictionary<int, HashSet<GeneralRenderer>>();
|
private readonly Dictionary<int, HashSet<GeneralRenderer>> layerIndexToGeneralRenderers = new Dictionary<int, HashSet<GeneralRenderer>>();
|
||||||
|
@ -52,7 +51,12 @@ namespace Encompass
|
||||||
|
|
||||||
public void RegisterComponentWithLayer<TComponent>(Entity entity, TComponent component, int layer) where TComponent : struct, IComponent
|
public void RegisterComponentWithLayer<TComponent>(Entity entity, TComponent component, int layer) where TComponent : struct, IComponent
|
||||||
{
|
{
|
||||||
if (typeToEntityToLayer[typeof(TComponent)].ContainsKey(entity)) { UnRegisterComponentWithLayer(entity, component); }
|
if (!typeToEntityToLayer.ContainsKey(typeof(TComponent)))
|
||||||
|
{
|
||||||
|
typeToEntityToLayer.Add(typeof(TComponent), new Dictionary<Entity, int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeToEntityToLayer[typeof(TComponent)].ContainsKey(entity)) { UnRegisterComponentWithLayer<TComponent>(entity); }
|
||||||
|
|
||||||
if (layerIndexToComponentStore.ContainsKey(layer))
|
if (layerIndexToComponentStore.ContainsKey(layer))
|
||||||
{
|
{
|
||||||
|
@ -74,8 +78,10 @@ namespace Encompass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UnRegisterComponentWithLayer<TComponent>(Entity entity, TComponent component) where TComponent : struct, IComponent
|
public void UnRegisterComponentWithLayer<TComponent>(Entity entity) where TComponent : struct, IComponent
|
||||||
{
|
{
|
||||||
|
if (!typeToEntityToLayer.ContainsKey(typeof(TComponent))) { return; }
|
||||||
|
|
||||||
if (typeToEntityToLayer[typeof(TComponent)].ContainsKey(entity))
|
if (typeToEntityToLayer[typeof(TComponent)].ContainsKey(entity))
|
||||||
{
|
{
|
||||||
var layer = typeToEntityToLayer[typeof(TComponent)][entity];
|
var layer = typeToEntityToLayer[typeof(TComponent)][entity];
|
||||||
|
@ -86,7 +92,10 @@ namespace Encompass
|
||||||
|
|
||||||
public void UnRegisterEntityWithLayer(Entity entity)
|
public void UnRegisterEntityWithLayer(Entity entity)
|
||||||
{
|
{
|
||||||
componentStore.Remove(entity);
|
foreach (var store in layerIndexToComponentStore.Values)
|
||||||
|
{
|
||||||
|
store.Remove(entity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<GeneralRenderer> GeneralRenderersByLayer(int layer)
|
public IEnumerable<GeneralRenderer> GeneralRenderersByLayer(int layer)
|
||||||
|
@ -98,7 +107,9 @@ namespace Encompass
|
||||||
|
|
||||||
public IEnumerable<(Entity, Type, IComponent)> AllInLayer(int layer)
|
public IEnumerable<(Entity, Type, IComponent)> AllInLayer(int layer)
|
||||||
{
|
{
|
||||||
return layerIndexToComponentStore[layer].AllInterfaceTyped();
|
return layerIndexToComponentStore.ContainsKey(layer) ?
|
||||||
|
layerIndexToComponentStore[layer].AllInterfaceTyped() :
|
||||||
|
Enumerable.Empty<(Entity, Type, IComponent)>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,8 @@ namespace Encompass
|
||||||
{
|
{
|
||||||
private readonly List<Engine> engines = new List<Engine>();
|
private readonly List<Engine> engines = new List<Engine>();
|
||||||
private readonly DirectedGraph<Engine, Unit> engineGraph = GraphBuilder.DirectedGraph<Engine>();
|
private readonly DirectedGraph<Engine, Unit> engineGraph = GraphBuilder.DirectedGraph<Engine>();
|
||||||
private readonly ComponentStore componentStore = new ComponentStore();
|
private readonly ComponentStore startingComponentStoreForComponentManager = new ComponentStore();
|
||||||
|
private readonly ComponentStore startingComponentStoreForComponentMessageManager = new ComponentStore();
|
||||||
|
|
||||||
private readonly ComponentManager componentManager;
|
private readonly ComponentManager componentManager;
|
||||||
private readonly EntityManager entityManager;
|
private readonly EntityManager entityManager;
|
||||||
|
@ -76,7 +77,8 @@ namespace Encompass
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SetComponent<TComponent>(Entity entity, TComponent component) where TComponent : struct, IComponent
|
public void SetComponent<TComponent>(Entity entity, TComponent component) where TComponent : struct, IComponent
|
||||||
{
|
{
|
||||||
componentStore.Set(entity, component);
|
startingComponentStoreForComponentManager.Set(entity, component);
|
||||||
|
startingComponentStoreForComponentMessageManager.Set(entity, component);
|
||||||
|
|
||||||
if (component is IDrawableComponent drawableComponent)
|
if (component is IDrawableComponent drawableComponent)
|
||||||
{
|
{
|
||||||
|
@ -348,7 +350,8 @@ namespace Encompass
|
||||||
renderManager
|
renderManager
|
||||||
);
|
);
|
||||||
|
|
||||||
componentManager.SetComponentStore(componentStore);
|
componentManager.SetComponentStore(startingComponentStoreForComponentManager);
|
||||||
|
componentMessageManager.SetStartingComponentStore(startingComponentStoreForComponentMessageManager);
|
||||||
|
|
||||||
return world;
|
return world;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue