fix component updates
parent
5513402573
commit
0293263684
|
@ -37,7 +37,7 @@ namespace Encompass
|
||||||
|
|
||||||
internal void WriteComponents()
|
internal void WriteComponents()
|
||||||
{
|
{
|
||||||
componentStore.SwapWith(componentMessageManager.ComponentStore);
|
componentStore.SwapWith(componentMessageManager.UpToDateComponentStore);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal IEnumerable<(TComponent, Entity)> GetComponentsIncludingEntity<TComponent>() where TComponent : struct, IComponent
|
internal IEnumerable<(TComponent, Entity)> GetComponentsIncludingEntity<TComponent>() where TComponent : struct, IComponent
|
||||||
|
@ -83,7 +83,8 @@ namespace Encompass
|
||||||
|
|
||||||
public void Remove<TComponent>(Entity entity) where TComponent : struct, IComponent
|
public void Remove<TComponent>(Entity entity) where TComponent : struct, IComponent
|
||||||
{
|
{
|
||||||
componentStore.Remove<TComponent>(entity);
|
//componentStore.Remove<TComponent>(entity);
|
||||||
|
componentMessageManager.Remove<TComponent>(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Remove(Entity entity)
|
private void Remove(Entity entity)
|
||||||
|
|
|
@ -11,16 +11,18 @@ 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 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>>();
|
||||||
|
|
||||||
public ComponentStore ComponentStore { get => componentStore; }
|
public ComponentStore UpToDateComponentStore { get => upToDateComponentStore; }
|
||||||
|
|
||||||
internal void ClearMessages()
|
internal void ClearMessages()
|
||||||
{
|
{
|
||||||
componentStore.ClearAll();
|
componentStore.ClearAll();
|
||||||
existingComponentStore.ClearAll();
|
existingComponentStore.ClearAll();
|
||||||
pendingComponentStore.ClearAll();
|
pendingComponentStore.ClearAll();
|
||||||
|
upToDateComponentStore.ClearAll();
|
||||||
|
|
||||||
foreach (var dictionary in typeToEntityToPendingComponentPriority.Values)
|
foreach (var dictionary in typeToEntityToPendingComponentPriority.Values)
|
||||||
{
|
{
|
||||||
|
@ -46,6 +48,12 @@ namespace Encompass
|
||||||
private void RegisterExistingOrPendingComponentMessage<TComponent>(Entity entity, TComponent component) where TComponent : struct, IComponent
|
private void RegisterExistingOrPendingComponentMessage<TComponent>(Entity entity, TComponent component) where TComponent : struct, IComponent
|
||||||
{
|
{
|
||||||
componentStore.Set(entity, component);
|
componentStore.Set(entity, component);
|
||||||
|
upToDateComponentStore.Set(entity, component);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateComponent<TComponent>(Entity entity, TComponent component, int priority) where TComponent : struct, IComponent
|
||||||
|
{
|
||||||
|
upToDateComponentStore.Set<TComponent>(entity, component, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
// general component reads by type
|
// general component reads by type
|
||||||
|
@ -145,5 +153,10 @@ namespace Encompass
|
||||||
{
|
{
|
||||||
return pendingComponentStore.Has(type, entity);
|
return pendingComponentStore.Has(type, entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void Remove<TComponent>(Entity entity) where TComponent : struct, IComponent
|
||||||
|
{
|
||||||
|
upToDateComponentStore.Remove<TComponent>(entity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -415,6 +415,10 @@ namespace Encompass
|
||||||
newComponentMessage.priority = priority;
|
newComponentMessage.priority = priority;
|
||||||
SendPendingComponentMessage(newComponentMessage);
|
SendPendingComponentMessage(newComponentMessage);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
componentMessageManager.UpdateComponent<TComponent>(entity, component, priority);
|
||||||
|
}
|
||||||
|
|
||||||
if (component is IDrawableComponent drawableComponent)
|
if (component is IDrawableComponent drawableComponent)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue