diff --git a/src/Engine.cs b/src/Engine.cs index 9c1de66..dcf6925 100644 --- a/src/Engine.cs +++ b/src/Engine.cs @@ -1,6 +1,7 @@ using System; using System.Reflection; using System.Collections.Generic; +using System.Linq; namespace Encompass { @@ -116,5 +117,17 @@ namespace Encompass throw new IllegalMessageReadException("Engine {0} tried to read undeclared Message {1}", this.GetType().Name, typeof(TMessage).Name); } } + + protected bool Some() where TMessage : struct, IMessage + { + if (readMessageTypes.Contains(typeof(TMessage))) + { + return messageManager.GetMessagesByType().Count() > 0; + } + else + { + throw new IllegalMessageReadException("Engine {0} tried to read undeclared Message {1}", this.GetType().Name, typeof(TMessage).Name); + } + } } } diff --git a/test/EngineTest.cs b/test/EngineTest.cs index b094af9..0f47d14 100644 --- a/test/EngineTest.cs +++ b/test/EngineTest.cs @@ -237,5 +237,42 @@ namespace Tests var ex = Assert.Throws(() => world.Update(0.01f)); Assert.That(ex.Message, Is.EqualTo("Engine UndeclaredMessageEmitEngine tried to emit undeclared Message MockMessage")); } + + static bool someTest; + + [Emits(typeof(MockMessage))] + class EmitMockMessageEngine : Engine + { + public override void Update(float dt) + { + MockMessage message; + message.myString = "howdy"; + + this.EmitMessage(message); + } + } + + [Reads(typeof(MockMessage))] + class SomeTestEngine : Engine + { + public override void Update(float dt) + { + someTest = this.Some(); + } + } + + [Test] + public void Some() + { + var worldBuilder = new WorldBuilder(); + worldBuilder.AddEngine(); + worldBuilder.AddEngine(); + + var world = worldBuilder.Build(); + + world.Update(0.01f); + + Assert.That(someTest, Is.True); + } } }