tightening up replay behavior
parent
4d47a60125
commit
6f00191258
|
@ -23,6 +23,14 @@ namespace Encompass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Set<TComponent>(int entityID, TComponent component)
|
||||||
|
{
|
||||||
|
base.Set(entityID, component);
|
||||||
|
var replayer = _replayers[typeof(TComponent)];
|
||||||
|
_currentReplayers.Add(replayer);
|
||||||
|
replayer.UnMarkRemoval(entityID);
|
||||||
|
}
|
||||||
|
|
||||||
public override bool Set<TComponent>(int entityID, TComponent component, int priority)
|
public override bool Set<TComponent>(int entityID, TComponent component, int priority)
|
||||||
{
|
{
|
||||||
var result = base.Set(entityID, component, priority);
|
var result = base.Set(entityID, component, priority);
|
||||||
|
|
|
@ -57,7 +57,7 @@ namespace Encompass
|
||||||
return Lookup<TComponent>().Get(entityID);
|
return Lookup<TComponent>().Get(entityID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Set<TComponent>(int entityID, TComponent component) where TComponent : struct, IComponent
|
public virtual void Set<TComponent>(int entityID, TComponent component) where TComponent : struct, IComponent
|
||||||
{
|
{
|
||||||
Lookup<TComponent>().Set(entityID, component);
|
Lookup<TComponent>().Set(entityID, component);
|
||||||
ComponentBitSet.Set<TComponent>(entityID);
|
ComponentBitSet.Set<TComponent>(entityID);
|
||||||
|
@ -86,6 +86,7 @@ namespace Encompass
|
||||||
public void ForceRemove<TComponent>(int entityID) where TComponent : struct, IComponent
|
public void ForceRemove<TComponent>(int entityID) where TComponent : struct, IComponent
|
||||||
{
|
{
|
||||||
Lookup<TComponent>().ForceRemove(entityID);
|
Lookup<TComponent>().ForceRemove(entityID);
|
||||||
|
ComponentBitSet.RemoveComponent<TComponent>(entityID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Remove(int entityID)
|
public virtual void Remove(int entityID)
|
||||||
|
|
|
@ -8,7 +8,8 @@ namespace Encompass
|
||||||
private readonly DrawLayerManager drawLayerManager;
|
private readonly DrawLayerManager drawLayerManager;
|
||||||
|
|
||||||
private readonly ComponentStore existingComponentStore;
|
private readonly ComponentStore existingComponentStore;
|
||||||
private readonly ComponentDeltaStore immediateComponentStore;
|
private readonly ComponentStore immediateComponentStore;
|
||||||
|
private readonly ComponentDeltaStore replayStore;
|
||||||
private ComponentStore upToDateComponentStore;
|
private ComponentStore upToDateComponentStore;
|
||||||
|
|
||||||
public Dictionary<Type, int> TypeToIndex { get; }
|
public Dictionary<Type, int> TypeToIndex { get; }
|
||||||
|
@ -22,7 +23,8 @@ namespace Encompass
|
||||||
{
|
{
|
||||||
this.drawLayerManager = drawLayerManager;
|
this.drawLayerManager = drawLayerManager;
|
||||||
existingComponentStore = new ComponentStore(typeToIndex);
|
existingComponentStore = new ComponentStore(typeToIndex);
|
||||||
immediateComponentStore = new ComponentDeltaStore(typeToIndex);
|
immediateComponentStore = new ComponentStore(typeToIndex);
|
||||||
|
replayStore = new ComponentDeltaStore(typeToIndex);
|
||||||
upToDateComponentStore = new ComponentStore(typeToIndex);
|
upToDateComponentStore = new ComponentStore(typeToIndex);
|
||||||
TypeToIndex = typeToIndex;
|
TypeToIndex = typeToIndex;
|
||||||
}
|
}
|
||||||
|
@ -31,6 +33,7 @@ namespace Encompass
|
||||||
{
|
{
|
||||||
existingComponentStore.RegisterComponentType<TComponent>();
|
existingComponentStore.RegisterComponentType<TComponent>();
|
||||||
immediateComponentStore.RegisterComponentType<TComponent>();
|
immediateComponentStore.RegisterComponentType<TComponent>();
|
||||||
|
replayStore.RegisterComponentType<TComponent>();
|
||||||
upToDateComponentStore.RegisterComponentType<TComponent>();
|
upToDateComponentStore.RegisterComponentType<TComponent>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,20 +54,16 @@ namespace Encompass
|
||||||
|
|
||||||
internal void WriteComponents()
|
internal void WriteComponents()
|
||||||
{
|
{
|
||||||
SetExistingComponentStore(upToDateComponentStore);
|
existingComponentStore.UpdateUsing(replayStore);
|
||||||
upToDateComponentStore.UpdateUsing(immediateComponentStore);
|
|
||||||
immediateComponentStore.ClearAll();
|
immediateComponentStore.ClearAll();
|
||||||
}
|
replayStore.ClearAll();
|
||||||
|
|
||||||
internal void AddExistingComponent<TComponent>(int entityID, TComponent component) where TComponent : struct, IComponent
|
|
||||||
{
|
|
||||||
upToDateComponentStore.Set(entityID, component);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool AddImmediateComponent<TComponent>(int entityID, TComponent component, int priority) where TComponent : struct, IComponent
|
internal bool AddImmediateComponent<TComponent>(int entityID, TComponent component, int priority) where TComponent : struct, IComponent
|
||||||
{
|
{
|
||||||
if (immediateComponentStore.Set(entityID, component, priority))
|
if (immediateComponentStore.Set(entityID, component, priority))
|
||||||
{
|
{
|
||||||
|
replayStore.Set(entityID, component);
|
||||||
upToDateComponentStore.Set(entityID, component);
|
upToDateComponentStore.Set(entityID, component);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -74,7 +73,12 @@ namespace Encompass
|
||||||
|
|
||||||
public bool UpdateComponent<TComponent>(int entityID, TComponent component, int priority) where TComponent : struct, IComponent
|
public bool UpdateComponent<TComponent>(int entityID, TComponent component, int priority) where TComponent : struct, IComponent
|
||||||
{
|
{
|
||||||
return upToDateComponentStore.Set(entityID, component, priority);
|
var result = upToDateComponentStore.Set(entityID, component, priority);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
replayStore.Set(entityID, component);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// existing or immediate reads
|
// existing or immediate reads
|
||||||
|
@ -215,6 +219,7 @@ namespace Encompass
|
||||||
{
|
{
|
||||||
existingComponentStore.Remove(entityID);
|
existingComponentStore.Remove(entityID);
|
||||||
immediateComponentStore.Remove(entityID);
|
immediateComponentStore.Remove(entityID);
|
||||||
|
replayStore.Remove(entityID);
|
||||||
upToDateComponentStore.Remove(entityID);
|
upToDateComponentStore.Remove(entityID);
|
||||||
drawLayerManager.UnRegisterEntityWithLayer(entityID);
|
drawLayerManager.UnRegisterEntityWithLayer(entityID);
|
||||||
}
|
}
|
||||||
|
@ -226,6 +231,7 @@ namespace Encompass
|
||||||
{
|
{
|
||||||
if (immediateComponentStore.Remove<TComponent>(entityID, priority))
|
if (immediateComponentStore.Remove<TComponent>(entityID, priority))
|
||||||
{
|
{
|
||||||
|
replayStore.Remove<TComponent>(entityID, priority);
|
||||||
upToDateComponentStore.Remove<TComponent>(entityID, priority);
|
upToDateComponentStore.Remove<TComponent>(entityID, priority);
|
||||||
drawLayerManager.UnRegisterComponentWithLayer<TComponent>(entityID);
|
drawLayerManager.UnRegisterComponentWithLayer<TComponent>(entityID);
|
||||||
return true;
|
return true;
|
||||||
|
@ -237,6 +243,7 @@ namespace Encompass
|
||||||
{
|
{
|
||||||
if (upToDateComponentStore.Remove<TComponent>(entityID, priority))
|
if (upToDateComponentStore.Remove<TComponent>(entityID, priority))
|
||||||
{
|
{
|
||||||
|
replayStore.Remove<TComponent>(entityID, priority);
|
||||||
drawLayerManager.UnRegisterComponentWithLayer<TComponent>(entityID);
|
drawLayerManager.UnRegisterComponentWithLayer<TComponent>(entityID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,6 +75,7 @@ namespace Tests
|
||||||
var world = worldBuilder.Build();
|
var world = worldBuilder.Build();
|
||||||
|
|
||||||
world.Update(0.01);
|
world.Update(0.01);
|
||||||
|
world.Update(0.01);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -258,6 +259,7 @@ namespace Tests
|
||||||
|
|
||||||
var world = worldBuilder.Build();
|
var world = worldBuilder.Build();
|
||||||
|
|
||||||
|
world.Update(0.01);
|
||||||
world.Update(0.01);
|
world.Update(0.01);
|
||||||
|
|
||||||
Assert.AreEqual(mockComponent, gottenMockComponent);
|
Assert.AreEqual(mockComponent, gottenMockComponent);
|
||||||
|
|
Loading…
Reference in New Issue