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);
|
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
|
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);
|
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
|
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);
|
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
|
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);
|
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)
|
protected void Destroy(Guid entityID)
|
||||||
|
|
|
@ -24,20 +24,6 @@ namespace Tests
|
||||||
static IEnumerable<(Guid, MockComponent)> gottenMockComponentIDPairs = Enumerable.Empty<(Guid, MockComponent)>();
|
static IEnumerable<(Guid, MockComponent)> gottenMockComponentIDPairs = Enumerable.Empty<(Guid, MockComponent)>();
|
||||||
static (Guid, MockComponent) gottenMockComponentIDPair;
|
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))]
|
[Reads(typeof(EntityMessage), typeof(MockComponent))]
|
||||||
class GetMockComponentEngine : Engine
|
class GetMockComponentEngine : Engine
|
||||||
{
|
{
|
||||||
|
@ -166,12 +152,51 @@ namespace Tests
|
||||||
world.Update(0.01);
|
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]
|
[Test]
|
||||||
public void GetComponents()
|
public void GetComponents()
|
||||||
{
|
{
|
||||||
var worldBuilder = new WorldBuilder();
|
var worldBuilder = new WorldBuilder();
|
||||||
worldBuilder.AddEngine(new GetMockComponentsEngine());
|
|
||||||
|
|
||||||
var entity = worldBuilder.CreateEntity();
|
var entity = worldBuilder.CreateEntity();
|
||||||
|
|
||||||
MockComponent mockComponentA;
|
MockComponent mockComponentA;
|
||||||
|
@ -190,6 +215,16 @@ namespace Tests
|
||||||
var componentBID = worldBuilder.AddComponent(entity, mockComponentB);
|
var componentBID = worldBuilder.AddComponent(entity, mockComponentB);
|
||||||
var componentCID = worldBuilder.AddComponent(entity, mockComponentC);
|
var componentCID = worldBuilder.AddComponent(entity, mockComponentC);
|
||||||
|
|
||||||
|
worldBuilder.AddEngine(new GetMockComponentsEngine(
|
||||||
|
entity,
|
||||||
|
componentAID,
|
||||||
|
mockComponentA,
|
||||||
|
componentBID,
|
||||||
|
mockComponentB,
|
||||||
|
componentCID,
|
||||||
|
mockComponentC
|
||||||
|
));
|
||||||
|
|
||||||
EntityMessage entityMessage;
|
EntityMessage entityMessage;
|
||||||
entityMessage.entity = entity;
|
entityMessage.entity = entity;
|
||||||
worldBuilder.EmitMessage(entityMessage);
|
worldBuilder.EmitMessage(entityMessage);
|
||||||
|
@ -197,10 +232,6 @@ namespace Tests
|
||||||
var world = worldBuilder.Build();
|
var world = worldBuilder.Build();
|
||||||
|
|
||||||
world.Update(0.01);
|
world.Update(0.01);
|
||||||
|
|
||||||
gottenMockComponentIDPairs.Should().Contain((componentAID, mockComponentA));
|
|
||||||
gottenMockComponentIDPairs.Should().Contain((componentBID, mockComponentB));
|
|
||||||
gottenMockComponentIDPairs.Should().Contain((componentCID, mockComponentC));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -422,13 +453,6 @@ namespace Tests
|
||||||
public override void Update(double dt)
|
public override void Update(double dt)
|
||||||
{
|
{
|
||||||
if (SomeMessage<ActivateComponentMessage>())
|
if (SomeMessage<ActivateComponentMessage>())
|
||||||
{
|
|
||||||
CheckHasMockComponentMessage checkHasMockComponentMessage;
|
|
||||||
checkHasMockComponentMessage.entity = entity;
|
|
||||||
checkHasMockComponentMessage.shouldHaveComponent = false;
|
|
||||||
EmitMessage(checkHasMockComponentMessage);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
CheckHasMockComponentMessage checkHasMockComponentMessage;
|
CheckHasMockComponentMessage checkHasMockComponentMessage;
|
||||||
checkHasMockComponentMessage.entity = entity;
|
checkHasMockComponentMessage.entity = entity;
|
||||||
|
@ -444,20 +468,11 @@ namespace Tests
|
||||||
public override void Update(double dt)
|
public override void Update(double dt)
|
||||||
{
|
{
|
||||||
foreach (var checkHasMockComponentMessage in ReadMessages<CheckHasMockComponentMessage>())
|
foreach (var checkHasMockComponentMessage in ReadMessages<CheckHasMockComponentMessage>())
|
||||||
{
|
|
||||||
if (checkHasMockComponentMessage.shouldHaveComponent)
|
|
||||||
{
|
{
|
||||||
Assert.IsTrue(HasComponent<MockComponent>(checkHasMockComponentMessage.entity));
|
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]
|
[Test]
|
||||||
public void ActivateComponent()
|
public void ActivateComponent()
|
||||||
|
@ -485,7 +500,6 @@ namespace Tests
|
||||||
var world = worldBuilder.Build();
|
var world = worldBuilder.Build();
|
||||||
|
|
||||||
world.Update(0.01);
|
world.Update(0.01);
|
||||||
world.Update(0.01);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DeactivateComponentMessage : IMessage
|
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