From ec3b0df585aabfe03da9579a861b06e6ddcfe1ec Mon Sep 17 00:00:00 2001 From: Evan Hemsley Date: Thu, 1 Aug 2019 15:06:19 -0700 Subject: [PATCH] rework EntityRenderer to OrderedRenderer --- encompass-cs/Attributes/Renders.cs | 18 ---- encompass-cs/ComponentManager.cs | 16 +--- encompass-cs/ComponentMessageManager.cs | 13 +++ encompass-cs/EntityManager.cs | 97 +------------------- encompass-cs/IEntityTracker.cs | 13 --- encompass-cs/RenderManager.cs | 22 ++--- encompass-cs/Renderers/EntityRenderer.cs | 54 ------------ encompass-cs/Renderers/OrderedRenderer.cs | 14 +++ encompass-cs/Utility/EntityChecker.cs | 14 --- encompass-cs/Utility/EntityTracker.cs | 31 ------- encompass-cs/World.cs | 3 - encompass-cs/WorldBuilder.cs | 17 +--- test/EntityRendererTest.cs | 102 ---------------------- test/OrderedRendererTest.cs | 68 +++++++++++++++ test/WorldTest.cs | 19 ++-- 15 files changed, 116 insertions(+), 385 deletions(-) delete mode 100644 encompass-cs/Attributes/Renders.cs create mode 100644 encompass-cs/ComponentMessageManager.cs delete mode 100644 encompass-cs/IEntityTracker.cs delete mode 100644 encompass-cs/Renderers/EntityRenderer.cs create mode 100644 encompass-cs/Renderers/OrderedRenderer.cs delete mode 100644 encompass-cs/Utility/EntityChecker.cs delete mode 100644 encompass-cs/Utility/EntityTracker.cs delete mode 100644 test/EntityRendererTest.cs create mode 100644 test/OrderedRendererTest.cs diff --git a/encompass-cs/Attributes/Renders.cs b/encompass-cs/Attributes/Renders.cs deleted file mode 100644 index 9c4e627..0000000 --- a/encompass-cs/Attributes/Renders.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Encompass -{ - [AttributeUsage(AttributeTargets.Class)] - public class Renders : Attribute - { - public Type drawComponentType; - public readonly List componentTypes; - - public Renders(Type drawComponentType, params Type[] componentTypes) - { - this.drawComponentType = drawComponentType; - this.componentTypes = new List(componentTypes); - } - } -} diff --git a/encompass-cs/ComponentManager.cs b/encompass-cs/ComponentManager.cs index 360712b..efd4b63 100644 --- a/encompass-cs/ComponentManager.cs +++ b/encompass-cs/ComponentManager.cs @@ -22,19 +22,9 @@ namespace Encompass private readonly Dictionary pendingUpdates = new Dictionary(); - //shared references with EntityManager - private readonly HashSet entitiesWithAddedComponents; - private readonly HashSet entitiesWithRemovedComponents; - - public ComponentManager( - DrawLayerManager drawLayerManager, - HashSet entitiesWithAddedComponents, - HashSet entitiesWithRemovedComponents - ) + public ComponentManager(DrawLayerManager drawLayerManager) { this.drawLayerManager = drawLayerManager; - this.entitiesWithAddedComponents = entitiesWithAddedComponents; - this.entitiesWithRemovedComponents = entitiesWithRemovedComponents; } internal void RegisterEntity(Guid entityID) @@ -68,8 +58,6 @@ namespace Encompass componentIDToEntityID[componentID] = entity.ID; - entitiesWithAddedComponents.Add(entity.ID); - return componentID; } @@ -210,8 +198,6 @@ namespace Encompass typeToComponentIDs[type].Remove(componentID); drawLayerManager.UnRegisterComponentWithLayer(componentID); - - entitiesWithRemovedComponents.Add(entityID); } public void RegisterDestroyedEntity(Guid entityID) diff --git a/encompass-cs/ComponentMessageManager.cs b/encompass-cs/ComponentMessageManager.cs new file mode 100644 index 0000000..60a9bf3 --- /dev/null +++ b/encompass-cs/ComponentMessageManager.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Encompass +{ + class ComponentMessageManager + { + private readonly Dictionary> componentMessageTypeToComponentMessages = new Dictionary>(); + + + } +} diff --git a/encompass-cs/EntityManager.cs b/encompass-cs/EntityManager.cs index f319b13..0af09b4 100644 --- a/encompass-cs/EntityManager.cs +++ b/encompass-cs/EntityManager.cs @@ -9,23 +9,11 @@ namespace Encompass private readonly HashSet entitiesMarkedForDestroy = new HashSet(); - private readonly Dictionary> componentTypeToEntityTrackers = new Dictionary>(); - private readonly Dictionary> entityToEntityTrackers = new Dictionary>(); - - private readonly HashSet entitiesWithAddedComponents; - private readonly HashSet entitiesWithRemovedComponents; - private readonly ComponentManager componentManager; - public EntityManager( - ComponentManager componentManager, - HashSet entitiesWithAddedComponents, - HashSet entitiesWithRemovedComponents - ) + public EntityManager(ComponentManager componentManager) { this.componentManager = componentManager; - this.entitiesWithAddedComponents = entitiesWithAddedComponents; - this.entitiesWithRemovedComponents = entitiesWithRemovedComponents; } public Entity CreateEntity() @@ -58,7 +46,6 @@ namespace Encompass { componentManager.MarkAllComponentsOnEntityForRemoval(entityID); IDToEntity.Remove(entityID); - entityToEntityTrackers.Remove(entityID); componentManager.RegisterDestroyedEntity(entityID); } @@ -69,87 +56,5 @@ namespace Encompass { return Guid.NewGuid(); } - - public void RegisterEntityTracker(IEntityTracker entityTracker) - { - foreach (var componentType in entityTracker.ComponentTypes) - { - if (!componentTypeToEntityTrackers.ContainsKey(componentType)) - { - componentTypeToEntityTrackers.Add(componentType, new HashSet()); - } - - componentTypeToEntityTrackers[componentType].Add(entityTracker); - } - - if (entityTracker is EntityRenderer) - { - var entityRenderer = entityTracker as EntityRenderer; - if (!componentTypeToEntityTrackers.ContainsKey(entityRenderer.DrawComponentType)) - { - componentTypeToEntityTrackers.Add(entityRenderer.DrawComponentType, new HashSet()); - } - - componentTypeToEntityTrackers[entityRenderer.DrawComponentType].Add(entityRenderer); - } - } - - public void RegisterDirtyEntityWithAddedComponents(Guid entityID) - { - entitiesWithAddedComponents.Add(entityID); - } - - public void RegisterDirtyEntityWithRemovedComponents(Guid entityID) - { - entitiesWithRemovedComponents.Add(entityID); - } - - public void CheckEntitiesWithAddedComponents() - { - foreach (var entityID in entitiesWithAddedComponents) - { - CheckAndRegisterEntity(entityID); - } - - entitiesWithAddedComponents.Clear(); - } - - public void CheckEntitiesWithRemovedComponents() - { - foreach (var entityID in entitiesWithRemovedComponents) - { - if (entityToEntityTrackers.ContainsKey(entityID)) - { - foreach (var engine in entityToEntityTrackers[entityID]) - { - engine.CheckAndUntrackEntity(entityID); - } - } - } - - entitiesWithRemovedComponents.Clear(); - } - - private void CheckAndRegisterEntity(Guid entityID) - { - var componentTypes = componentManager.GetAllComponentTypesOfEntity(entityID); - foreach (var componentType in componentTypes) - { - if (componentTypeToEntityTrackers.ContainsKey(componentType)) - { - foreach (var entityTracker in componentTypeToEntityTrackers[componentType]) - { - if (entityTracker.CheckAndTrackEntity(entityID)) - { - if (!entityToEntityTrackers.ContainsKey(entityID)) - { - entityToEntityTrackers.Add(entityID, new HashSet()); - } - entityToEntityTrackers[entityID].Add(entityTracker); - } - } - } - } - } } } diff --git a/encompass-cs/IEntityTracker.cs b/encompass-cs/IEntityTracker.cs deleted file mode 100644 index b96e54c..0000000 --- a/encompass-cs/IEntityTracker.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Encompass -{ - internal interface IEntityTracker - { - IEnumerable ComponentTypes { get; } - - bool CheckAndTrackEntity(Guid entityID); - bool CheckAndUntrackEntity(Guid entityID); - } -} diff --git a/encompass-cs/RenderManager.cs b/encompass-cs/RenderManager.cs index 6d0e9a8..179e6e8 100644 --- a/encompass-cs/RenderManager.cs +++ b/encompass-cs/RenderManager.cs @@ -10,7 +10,7 @@ namespace Encompass private readonly ComponentManager componentManager; private readonly DrawLayerManager drawLayerManager; - private readonly Dictionary drawComponentTypeToEntityRenderer = new Dictionary(); + private readonly Dictionary> drawComponentTypeToOrderedRenderer = new Dictionary>(); public RenderManager( EntityManager entityManager, @@ -23,13 +23,9 @@ namespace Encompass this.drawLayerManager = drawLayerManager; } - public void RegisterEntityRenderer(EntityRenderer renderer) + public void RegisterOrderedRenderer(Action renderAction) where TComponent : struct, IComponent { - var rendersAttribute = renderer.GetType().GetCustomAttribute(false); - if (rendersAttribute != null) - { - drawComponentTypeToEntityRenderer.Add(rendersAttribute.drawComponentType, renderer); - } + drawComponentTypeToOrderedRenderer.Add(typeof(TComponent), renderAction); } public void RegisterGeneralRendererWithLayer(GeneralRenderer renderer, int layer) @@ -49,16 +45,10 @@ namespace Encompass var component = componentManager.GetComponentByID(componentID); var componentType = componentManager.GetComponentTypeByID(componentID); - if (drawComponentTypeToEntityRenderer.ContainsKey(componentType)) + if (drawComponentTypeToOrderedRenderer.ContainsKey(componentType)) { - var renderer = drawComponentTypeToEntityRenderer[componentType]; - var entityID = componentManager.GetEntityIDByComponentID(componentID); - - if (renderer.IsTracking(entityID) && entityManager.EntityExists(entityID)) - { - var entity = entityManager.GetEntity(entityID); - renderer.Render(entity); - } + var internalRenderAction = drawComponentTypeToOrderedRenderer[componentType]; + internalRenderAction(componentID, component); } } diff --git a/encompass-cs/Renderers/EntityRenderer.cs b/encompass-cs/Renderers/EntityRenderer.cs deleted file mode 100644 index b384a8b..0000000 --- a/encompass-cs/Renderers/EntityRenderer.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Reflection; -using System.Collections.Generic; - -namespace Encompass -{ - public abstract class EntityRenderer : Renderer, IEntityTracker - { - private readonly List componentTypes = new List(); - private readonly EntityTracker entityTracker = new EntityTracker(); - - public IEnumerable ComponentTypes { get { return componentTypes; } } - public Type DrawComponentType { get; } - - public abstract void Render(Entity entity); - - protected EntityRenderer() - { - var rendersAttribute = GetType().GetCustomAttribute(false); - if (rendersAttribute != null) - { - componentTypes = rendersAttribute.componentTypes; - DrawComponentType = rendersAttribute.drawComponentType; - } - } - - bool IEntityTracker.CheckAndTrackEntity(Guid entityID) - { - var entity = GetEntity(entityID); - var shouldTrack = CheckEntity(entity); - if (shouldTrack) { entityTracker.TrackEntity(entityID); } - return shouldTrack; - } - - bool IEntityTracker.CheckAndUntrackEntity(Guid entityID) - { - var entity = GetEntity(entityID); - var shouldUntrack = !CheckEntity(entity); - if (shouldUntrack) { entityTracker.UntrackEntity(entityID); } - return shouldUntrack; - } - - public bool IsTracking(Guid entityID) - { - return entityTracker.IsTracking(entityID); - } - - private bool CheckEntity(Entity entity) - { - return EntityChecker.CheckEntity(componentManager, entity, componentTypes) - && componentManager.EntityHasComponentOfType(entity.ID, DrawComponentType); - } - } -} diff --git a/encompass-cs/Renderers/OrderedRenderer.cs b/encompass-cs/Renderers/OrderedRenderer.cs new file mode 100644 index 0000000..e470d4b --- /dev/null +++ b/encompass-cs/Renderers/OrderedRenderer.cs @@ -0,0 +1,14 @@ +using System; + +namespace Encompass +{ + public abstract class OrderedRenderer : Renderer where TComponent : struct, IComponent + { + public abstract void Render(Guid drawComponentID, TComponent drawComponent); + + internal void InternalRender(Guid drawComponentId, IComponent component) + { + Render(drawComponentId, (TComponent)component); + } + } +} diff --git a/encompass-cs/Utility/EntityChecker.cs b/encompass-cs/Utility/EntityChecker.cs deleted file mode 100644 index 75483e1..0000000 --- a/encompass-cs/Utility/EntityChecker.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Encompass -{ - internal static class EntityChecker - { - public static bool CheckEntity(ComponentManager componentManager, Entity entity, IEnumerable componentTypes) - { - return componentTypes.All((componentType) => componentManager.EntityHasComponentOfType(entity.ID, componentType)); - } - } -} diff --git a/encompass-cs/Utility/EntityTracker.cs b/encompass-cs/Utility/EntityTracker.cs deleted file mode 100644 index 827393a..0000000 --- a/encompass-cs/Utility/EntityTracker.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Encompass -{ - internal class EntityTracker - { - private readonly HashSet trackedEntityIDs = new HashSet(); - - public IEnumerable TrackedEntityIDs - { - get { return trackedEntityIDs; } - } - - public void TrackEntity(Guid entityID) - { - trackedEntityIDs.Add(entityID); - } - - public void UntrackEntity(Guid entityID) - { - trackedEntityIDs.Remove(entityID); - } - - public bool IsTracking(Guid entityID) - { - return trackedEntityIDs.Contains(entityID); - } - } -} diff --git a/encompass-cs/World.cs b/encompass-cs/World.cs index 6357968..481dd0d 100644 --- a/encompass-cs/World.cs +++ b/encompass-cs/World.cs @@ -37,9 +37,6 @@ namespace Encompass componentManager.PerformComponentUpdates(); componentManager.RemoveMarkedComponents(); - - entityManager.CheckEntitiesWithAddedComponents(); - entityManager.CheckEntitiesWithRemovedComponents(); } public void Draw() diff --git a/encompass-cs/WorldBuilder.cs b/encompass-cs/WorldBuilder.cs index 49c5ff7..46bdf52 100644 --- a/encompass-cs/WorldBuilder.cs +++ b/encompass-cs/WorldBuilder.cs @@ -30,8 +30,8 @@ namespace Encompass var entitiesWithAddedComponents = new HashSet(); var entitiesWithRemovedComponents = new HashSet(); drawLayerManager = new DrawLayerManager(); - componentManager = new ComponentManager(drawLayerManager, entitiesWithAddedComponents, entitiesWithRemovedComponents); - entityManager = new EntityManager(componentManager, entitiesWithAddedComponents, entitiesWithRemovedComponents); + componentManager = new ComponentManager(drawLayerManager); + entityManager = new EntityManager(componentManager); messageManager = new MessageManager(); renderManager = new RenderManager(entityManager, componentManager, drawLayerManager); } @@ -141,17 +141,11 @@ namespace Encompass return engine; } - public TRenderer AddEntityRenderer(TRenderer renderer) where TRenderer : Renderer + public OrderedRenderer AddOrderedRenderer(OrderedRenderer renderer) where TComponent : struct, IComponent { renderer.AssignEntityManager(entityManager); renderer.AssignComponentManager(componentManager); - - if (renderer is EntityRenderer) - { - entityManager.RegisterEntityTracker(renderer as IEntityTracker); - renderManager.RegisterEntityRenderer(renderer as EntityRenderer); - } - + renderManager.RegisterOrderedRenderer(renderer.InternalRender); return renderer; } @@ -262,9 +256,6 @@ namespace Encompass componentManager.PerformComponentUpdates(); componentManager.RemoveMarkedComponents(); - entityManager.CheckEntitiesWithAddedComponents(); - entityManager.CheckEntitiesWithRemovedComponents(); - return world; } } diff --git a/test/EntityRendererTest.cs b/test/EntityRendererTest.cs deleted file mode 100644 index 66835b5..0000000 --- a/test/EntityRendererTest.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; - -using NUnit.Framework; -using FluentAssertions; -using Encompass; -using System.Collections.Generic; - -namespace Tests -{ - public class EntityRendererTest - { - struct AComponent : IComponent { } - struct BComponent : IComponent { } - struct CComponent : IComponent { } - - struct TestDrawComponent : IComponent { } - - [Renders(typeof(TestDrawComponent), typeof(AComponent), typeof(BComponent))] - class TestRenderer : EntityRenderer - { - public override void Render(Entity entity) { } - } - - [Test] - public void CheckAndTrackEntities() - { - var worldBuilder = new WorldBuilder(); - var renderer = worldBuilder.AddEntityRenderer(new TestRenderer()); - - AComponent aComponent; - BComponent bComponent; - TestDrawComponent testDrawComponent = default(TestDrawComponent); - - var entityToTrack = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entityToTrack, aComponent); - worldBuilder.AddComponent(entityToTrack, bComponent); - worldBuilder.AddComponent(entityToTrack, testDrawComponent); - - var entityNotToTrack = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entityNotToTrack, aComponent); - worldBuilder.AddComponent(entityNotToTrack, testDrawComponent); - - var entityWithoutDrawComponent = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entityWithoutDrawComponent, aComponent); - worldBuilder.AddComponent(entityWithoutDrawComponent, bComponent); - - var world = worldBuilder.Build(); - - world.Update(0.01f); - - Assert.IsTrue(renderer.IsTracking(entityToTrack.ID)); - Assert.IsFalse(renderer.IsTracking(entityNotToTrack.ID)); - Assert.IsFalse(renderer.IsTracking(entityWithoutDrawComponent.ID)); - } - - static bool called = false; - class DeactivatedRenderer : TestRenderer - { - public override void Render(Entity entity) - { - called = true; - } - } - - static bool calledOnDraw = false; - static IEnumerable> resultComponents; - [Renders(typeof(TestDrawComponent), typeof(AComponent), typeof(CComponent))] - class CalledRenderer : EntityRenderer - { - public override void Render(Entity entity) - { - resultComponents = GetComponents(entity); - calledOnDraw = true; - } - } - - [Test] - public void RenderMethodCalledOnWorldDraw() - { - var worldBuilder = new WorldBuilder(); - var renderer = worldBuilder.AddEntityRenderer(new CalledRenderer()); - - AComponent aComponent; - CComponent cComponent; - TestDrawComponent testDrawComponent; - - var entity = worldBuilder.CreateEntity(); - worldBuilder.AddComponent(entity, aComponent); - worldBuilder.AddComponent(entity, cComponent); - var testDrawComponentID = worldBuilder.AddDrawComponent(entity, testDrawComponent, 2); - - var world = worldBuilder.Build(); - - world.Update(0.01f); - world.Draw(); - - Assert.IsTrue(renderer.IsTracking(entity.ID)); - Assert.IsTrue(calledOnDraw); - resultComponents.Should().Contain(new ValueTuple(testDrawComponentID, testDrawComponent)); - } - } -} diff --git a/test/OrderedRendererTest.cs b/test/OrderedRendererTest.cs new file mode 100644 index 0000000..e5ec692 --- /dev/null +++ b/test/OrderedRendererTest.cs @@ -0,0 +1,68 @@ +using System; + +using NUnit.Framework; +using FluentAssertions; +using Encompass; +using System.Collections.Generic; + +namespace Tests +{ + public class OrderedRendererTest + { + struct AComponent : IComponent { } + struct BComponent : IComponent { } + struct CComponent : IComponent { } + + struct TestDrawComponent : IComponent { } + + class TestRenderer : OrderedRenderer + { + public override void Render(Guid drawComponentID, TestDrawComponent testDrawComponent) { } + } + + static bool called = false; + class DeactivatedRenderer : TestRenderer + { + public override void Render(Guid drawComponentID, TestDrawComponent testDrawComponent) + { + called = true; + } + } + + static bool calledOnDraw = false; + static ValueTuple resultComponent; + + class CalledRenderer : OrderedRenderer + { + public override void Render(Guid drawComponentID, TestDrawComponent testDrawComponent) + { + resultComponent = (drawComponentID, testDrawComponent); + calledOnDraw = true; + } + } + + [Test] + public void RenderMethodCalledOnWorldDraw() + { + var worldBuilder = new WorldBuilder(); + var renderer = worldBuilder.AddOrderedRenderer(new CalledRenderer()); + + AComponent aComponent; + CComponent cComponent; + TestDrawComponent testDrawComponent; + + var entity = worldBuilder.CreateEntity(); + worldBuilder.AddComponent(entity, aComponent); + worldBuilder.AddComponent(entity, cComponent); + var testDrawComponentID = worldBuilder.AddDrawComponent(entity, testDrawComponent, 2); + + var world = worldBuilder.Build(); + + world.Update(0.01f); + world.Draw(); + + Assert.IsTrue(calledOnDraw); + resultComponent.Should().BeEquivalentTo((testDrawComponentID, testDrawComponent)); + } + } +} diff --git a/test/WorldTest.cs b/test/WorldTest.cs index fc1b8ff..9864f5a 100644 --- a/test/WorldTest.cs +++ b/test/WorldTest.cs @@ -16,12 +16,11 @@ namespace Tests static List drawOrder = new List(); - [Renders(typeof(TestDrawComponent), typeof(TestComponent))] - class TestEntityRenderer : EntityRenderer + class TestEntityRenderer : OrderedRenderer { - public override void Render(Entity entity) + public override void Render(Guid drawComponentID, TestDrawComponent testDrawComponent) { - drawOrder.Add(entity); + drawOrder.Add(drawComponentID); } } @@ -37,7 +36,7 @@ namespace Tests public void DrawOrder() { var worldBuilder = new WorldBuilder(); - worldBuilder.AddEntityRenderer(new TestEntityRenderer()); + worldBuilder.AddOrderedRenderer(new TestEntityRenderer()); var testGeneralRenderer = worldBuilder.AddGeneralRenderer(new TestGeneralRenderer(), 7); TestComponent testComponent; @@ -45,32 +44,32 @@ namespace Tests var entity = worldBuilder.CreateEntity(); worldBuilder.AddComponent(entity, testComponent); - worldBuilder.AddDrawComponent(entity, testDrawComponent, 3); + var testDrawComponentOneID = worldBuilder.AddDrawComponent(entity, testDrawComponent, 3); TestDrawComponent testDrawComponentTwo = default(TestDrawComponent); var entityTwo = worldBuilder.CreateEntity(); worldBuilder.AddComponent(entityTwo, testComponent); - worldBuilder.AddDrawComponent(entityTwo, testDrawComponentTwo, 1); + var testDrawComponentTwoID = worldBuilder.AddDrawComponent(entityTwo, testDrawComponentTwo, 1); TestDrawComponent testDrawComponentThree = default(TestDrawComponent); var entityThree = worldBuilder.CreateEntity(); worldBuilder.AddComponent(entityThree, testComponent); - worldBuilder.AddDrawComponent(entityThree, testDrawComponentThree, 5); + var testDrawComponentThreeID = worldBuilder.AddDrawComponent(entityThree, testDrawComponentThree, 5); TestDrawComponent testDrawComponentFour = default(TestDrawComponent); var entityFour = worldBuilder.CreateEntity(); worldBuilder.AddComponent(entityFour, testComponent); - worldBuilder.AddDrawComponent(entityFour, testDrawComponentFour, -5); + var testDrawComponentFourID = worldBuilder.AddDrawComponent(entityFour, testDrawComponentFour, -5); var world = worldBuilder.Build(); world.Update(0.01f); world.Draw(); - drawOrder.Should().BeEquivalentTo(entityFour, entityTwo, entity, entityThree, testGeneralRenderer); + drawOrder.Should().BeEquivalentTo(testDrawComponentFourID, testDrawComponentTwoID, testDrawComponentOneID, testDrawComponentThreeID, testGeneralRenderer); } } }