update component uses a callback now
parent
cb872b7c42
commit
d9756e0c3d
|
@ -38,11 +38,22 @@ namespace Encompass {
|
||||||
return this.componentManager.GetActiveComponentByType<TComponent>();
|
return this.componentManager.GetActiveComponentByType<TComponent>();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void UpdateComponent<TComponent>(TComponent originalComponent, TComponent newComponent) where TComponent : struct, IComponent {
|
internal void UpdateComponentInWorld<TComponent>(TComponent originalComponent, TComponent newComponent) where TComponent : struct, IComponent {
|
||||||
if (mutateComponentTypes.Contains(typeof(TComponent))) {
|
if (mutateComponentTypes.Contains(typeof(TComponent))) {
|
||||||
this.componentManager.UpdateComponent(originalComponent, newComponent);
|
this.componentManager.UpdateComponent(originalComponent, newComponent);
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalComponentMutationException("Engine {0} tried to mutate undeclared Component {1}", this.GetType().ToString(), typeof(TComponent).ToString());
|
throw new IllegalComponentMutationException("Engine {0} tried to mutate undeclared Component {1}", this.GetType().Name, typeof(TComponent).Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void UpdateComponent<TComponent>(TComponent component, Func<TComponent, TComponent> updateFunction) where TComponent : struct, IComponent {
|
||||||
|
var updatedComponent = updateFunction(component);
|
||||||
|
this.UpdateComponentInWorld(component, updatedComponent);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void UpdateComponents<TComponent>(IEnumerable<TComponent> components, Func<TComponent, TComponent> updateFunction) where TComponent : struct, IComponent {
|
||||||
|
foreach (var component in components) {
|
||||||
|
this.UpdateComponent(component, updateFunction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,14 +8,14 @@ using System;
|
||||||
namespace Tests {
|
namespace Tests {
|
||||||
public class EngineTest
|
public class EngineTest
|
||||||
{
|
{
|
||||||
static IEnumerable<MockComponent> components;
|
static IEnumerable<MockComponent> resultComponents;
|
||||||
static MockComponent component;
|
static MockComponent resultComponent;
|
||||||
|
|
||||||
public class ReadComponentsTestEngine : Engine
|
public class ReadComponentsTestEngine : Engine
|
||||||
{
|
{
|
||||||
public override void Update(float dt)
|
public override void Update(float dt)
|
||||||
{
|
{
|
||||||
components = this.ReadComponents<MockComponent>();
|
resultComponents = this.ReadComponents<MockComponent>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ namespace Tests {
|
||||||
{
|
{
|
||||||
public override void Update(float dt)
|
public override void Update(float dt)
|
||||||
{
|
{
|
||||||
component = this.ReadComponent<MockComponent>();
|
resultComponent = this.ReadComponent<MockComponent>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@ namespace Tests {
|
||||||
|
|
||||||
world.Update(0.01f);
|
world.Update(0.01f);
|
||||||
|
|
||||||
Assert.Contains(mockComponent, components.ToList());
|
Assert.Contains(mockComponent, resultComponents.ToList());
|
||||||
Assert.Contains(mockComponentB, components.ToList());
|
Assert.Contains(mockComponentB, resultComponents.ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -72,7 +72,7 @@ namespace Tests {
|
||||||
|
|
||||||
world.Update(0.01f);
|
world.Update(0.01f);
|
||||||
|
|
||||||
Assert.AreEqual(mockComponent, component);
|
Assert.AreEqual(mockComponent, resultComponent);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -104,12 +104,13 @@ namespace Tests {
|
||||||
{
|
{
|
||||||
public override void Update(float dt)
|
public override void Update(float dt)
|
||||||
{
|
{
|
||||||
var originalComponent = this.ReadComponent<MockComponent>();
|
var component = this.ReadComponent<MockComponent>();
|
||||||
var newComponent = this.ReadComponent<MockComponent>();
|
this.UpdateComponent(component, (MockComponent comp) => {
|
||||||
newComponent.myInt = 420;
|
comp.myInt = 420;
|
||||||
newComponent.myString = "blaze it";
|
comp.myString = "blaze it";
|
||||||
this.UpdateComponent(originalComponent, newComponent);
|
return comp;
|
||||||
component = this.ReadComponent<MockComponent>();
|
});
|
||||||
|
resultComponent = this.ReadComponent<MockComponent>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,19 +132,20 @@ namespace Tests {
|
||||||
|
|
||||||
world.Update(0.01f);
|
world.Update(0.01f);
|
||||||
|
|
||||||
Assert.AreEqual(420, component.myInt);
|
Assert.AreEqual(420, resultComponent.myInt);
|
||||||
Assert.AreEqual("blaze it", component.myString);
|
Assert.AreEqual("blaze it", resultComponent.myString);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UndeclaredUpdateComponentTestEngine : Engine
|
public class UndeclaredUpdateComponentTestEngine : Engine
|
||||||
{
|
{
|
||||||
public override void Update(float dt)
|
public override void Update(float dt)
|
||||||
{
|
{
|
||||||
var originalComponent = this.ReadComponent<MockComponent>();
|
var component = this.ReadComponent<MockComponent>();
|
||||||
var newComponent = this.ReadComponent<MockComponent>();
|
this.UpdateComponent(component, (MockComponent comp) => {
|
||||||
newComponent.myInt = 420;
|
comp.myInt = 420;
|
||||||
newComponent.myString = "blaze it";
|
comp.myString = "blaze it";
|
||||||
this.UpdateComponent(originalComponent, newComponent);
|
return comp;
|
||||||
|
});
|
||||||
component = this.ReadComponent<MockComponent>();
|
component = this.ReadComponent<MockComponent>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -164,7 +166,8 @@ namespace Tests {
|
||||||
|
|
||||||
var world = worldBuilder.Build();
|
var world = worldBuilder.Build();
|
||||||
|
|
||||||
Assert.Throws<IllegalComponentMutationException>(() => world.Update(0.01f));
|
var ex =Assert.Throws<IllegalComponentMutationException>(() => world.Update(0.01f));
|
||||||
|
Assert.That(ex.Message, Is.EqualTo("Engine UndeclaredUpdateComponentTestEngine tried to mutate undeclared Component MockComponent"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue