all component reads use ComponentMessage now
parent
a42123f58d
commit
3deff94dfe
|
@ -161,7 +161,7 @@ namespace Encompass
|
|||
throw new IllegalReadException("Engine {0} tried to read undeclared Component {1}", GetType().Name, typeof(TComponent).Name);
|
||||
}
|
||||
|
||||
return componentManager.GetComponentsByEntityAndType<TComponent>(entity.ID);
|
||||
return ReadMessages<ComponentMessage<TComponent>>().Where((message) => message.entity == entity).Select((message) => (message.componentID, message.component));
|
||||
}
|
||||
|
||||
protected ValueTuple<Guid, TComponent> GetComponent<TComponent>(Entity entity) where TComponent : struct, IComponent
|
||||
|
@ -176,7 +176,7 @@ namespace Encompass
|
|||
throw new IllegalReadException("Engine {0} tried to read undeclared Component {1}", GetType().Name, typeof(TComponent).Name);
|
||||
}
|
||||
|
||||
return messageManager.GetMessagesByType<ComponentMessage<TComponent>>().Where((message) => message.entity == entity).Any();
|
||||
return ReadMessages<ComponentMessage<TComponent>>().Where((message) => message.entity == entity).Any();
|
||||
}
|
||||
|
||||
internal void UpdateComponentInWorld<TComponent>(Guid componentID, TComponent newComponent) where TComponent : struct, IComponent
|
||||
|
@ -241,7 +241,7 @@ namespace Encompass
|
|||
throw new IllegalReadException("Engine {0} tried to read undeclared Message {1}", GetType().Name, typeof(TMessage).Name);
|
||||
}
|
||||
|
||||
return messageManager.GetMessagesByType<TMessage>().Any();
|
||||
return ReadMessages<TMessage>().Any();
|
||||
}
|
||||
|
||||
protected bool SomeComponent<TComponent>() where TComponent : struct, IComponent
|
||||
|
@ -251,7 +251,7 @@ namespace Encompass
|
|||
throw new IllegalReadException("Engine {0} tried to read undeclared Component {1}", GetType().Name, typeof(TComponent).Name);
|
||||
}
|
||||
|
||||
return componentManager.GetActiveComponentsByType<TComponent>().Any();
|
||||
return ReadMessages<ComponentMessage<TComponent>>().Any();
|
||||
}
|
||||
|
||||
protected void Destroy(Guid entityID)
|
||||
|
|
|
@ -24,20 +24,6 @@ namespace Tests
|
|||
static IEnumerable<(Guid, MockComponent)> gottenMockComponentIDPairs = Enumerable.Empty<(Guid, MockComponent)>();
|
||||
static (Guid, MockComponent) gottenMockComponentIDPair;
|
||||
|
||||
[Reads(typeof(EntityMessage), typeof(MockComponent))]
|
||||
class GetMockComponentsEngine : Engine
|
||||
{
|
||||
public override void Update(double dt)
|
||||
{
|
||||
gottenMockComponentIDPairs = Enumerable.Empty<(Guid, MockComponent)>();
|
||||
|
||||
foreach (var entityMessage in ReadMessages<EntityMessage>())
|
||||
{
|
||||
gottenMockComponentIDPairs = GetComponents<MockComponent>(entityMessage.entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Reads(typeof(EntityMessage), typeof(MockComponent))]
|
||||
class GetMockComponentEngine : Engine
|
||||
{
|
||||
|
@ -166,12 +152,51 @@ namespace Tests
|
|||
world.Update(0.01);
|
||||
}
|
||||
|
||||
[Reads(typeof(EntityMessage), typeof(MockComponent))]
|
||||
class GetMockComponentsEngine : Engine
|
||||
{
|
||||
private Entity entity;
|
||||
private Guid componentAID;
|
||||
private Guid componentBID;
|
||||
private Guid componentCID;
|
||||
private MockComponent componentA;
|
||||
private MockComponent componentB;
|
||||
private MockComponent componentC;
|
||||
|
||||
public GetMockComponentsEngine(
|
||||
Entity entity,
|
||||
Guid componentAID,
|
||||
MockComponent componentA,
|
||||
Guid componentBID,
|
||||
MockComponent componentB,
|
||||
Guid componentCID,
|
||||
MockComponent componentC
|
||||
) {
|
||||
this.entity = entity;
|
||||
this.componentAID = componentAID;
|
||||
this.componentA = componentA;
|
||||
this.componentBID = componentBID;
|
||||
this.componentB = componentB;
|
||||
this.componentCID = componentCID;
|
||||
this.componentC = componentC;
|
||||
}
|
||||
|
||||
public override void Update(double dt)
|
||||
{
|
||||
foreach (var entityMessage in ReadMessages<EntityMessage>())
|
||||
{
|
||||
var results = GetComponents<MockComponent>(entityMessage.entity);
|
||||
results.Should().Contain((componentAID, componentA));
|
||||
results.Should().Contain((componentBID, componentB));
|
||||
results.Should().Contain((componentCID, componentC));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetComponents()
|
||||
{
|
||||
var worldBuilder = new WorldBuilder();
|
||||
worldBuilder.AddEngine(new GetMockComponentsEngine());
|
||||
|
||||
var entity = worldBuilder.CreateEntity();
|
||||
|
||||
MockComponent mockComponentA;
|
||||
|
@ -190,6 +215,16 @@ namespace Tests
|
|||
var componentBID = worldBuilder.AddComponent(entity, mockComponentB);
|
||||
var componentCID = worldBuilder.AddComponent(entity, mockComponentC);
|
||||
|
||||
worldBuilder.AddEngine(new GetMockComponentsEngine(
|
||||
entity,
|
||||
componentAID,
|
||||
mockComponentA,
|
||||
componentBID,
|
||||
mockComponentB,
|
||||
componentCID,
|
||||
mockComponentC
|
||||
));
|
||||
|
||||
EntityMessage entityMessage;
|
||||
entityMessage.entity = entity;
|
||||
worldBuilder.EmitMessage(entityMessage);
|
||||
|
@ -197,10 +232,6 @@ namespace Tests
|
|||
var world = worldBuilder.Build();
|
||||
|
||||
world.Update(0.01);
|
||||
|
||||
gottenMockComponentIDPairs.Should().Contain((componentAID, mockComponentA));
|
||||
gottenMockComponentIDPairs.Should().Contain((componentBID, mockComponentB));
|
||||
gottenMockComponentIDPairs.Should().Contain((componentCID, mockComponentC));
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
@ -422,13 +453,6 @@ namespace Tests
|
|||
public override void Update(double dt)
|
||||
{
|
||||
if (SomeMessage<ActivateComponentMessage>())
|
||||
{
|
||||
CheckHasMockComponentMessage checkHasMockComponentMessage;
|
||||
checkHasMockComponentMessage.entity = entity;
|
||||
checkHasMockComponentMessage.shouldHaveComponent = false;
|
||||
EmitMessage(checkHasMockComponentMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckHasMockComponentMessage checkHasMockComponentMessage;
|
||||
checkHasMockComponentMessage.entity = entity;
|
||||
|
@ -444,20 +468,11 @@ namespace Tests
|
|||
public override void Update(double dt)
|
||||
{
|
||||
foreach (var checkHasMockComponentMessage in ReadMessages<CheckHasMockComponentMessage>())
|
||||
{
|
||||
if (checkHasMockComponentMessage.shouldHaveComponent)
|
||||
{
|
||||
Assert.IsTrue(HasComponent<MockComponent>(checkHasMockComponentMessage.entity));
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.IsFalse(HasComponent<MockComponent>(checkHasMockComponentMessage.entity));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: need to rethink this test because ActivateComponent is instant now
|
||||
|
||||
[Test]
|
||||
public void ActivateComponent()
|
||||
|
@ -485,7 +500,6 @@ namespace Tests
|
|||
var world = worldBuilder.Build();
|
||||
|
||||
world.Update(0.01);
|
||||
world.Update(0.01);
|
||||
}
|
||||
|
||||
struct DeactivateComponentMessage : IMessage
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
using NUnit.Framework;
|
||||
using FluentAssertions;
|
||||
|
||||
using Encompass;
|
||||
|
||||
namespace Tests
|
||||
{
|
||||
public class EntityTests
|
||||
{
|
||||
[Test]
|
||||
public void Equals()
|
||||
{
|
||||
var worldBuilder = new WorldBuilder();
|
||||
var entity = worldBuilder.CreateEntity();
|
||||
var entityTwo = worldBuilder.CreateEntity();
|
||||
|
||||
var copyEntity = entity;
|
||||
|
||||
Assert.AreNotEqual(entity, entityTwo);
|
||||
Assert.AreEqual(entity, entity);
|
||||
Assert.IsTrue(entity == copyEntity);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue