/// <summary> /// Checks all "Colliding" collisions to see if they are still colliding. /// If not, they are removed from the "Colliding" collision list and added to the "Stop" collision list. /// </summary> public void Process() { var collisions = ECSCore.collisionPool.collisions; Entity e; Collision collision; List <Collision> collidingCollisions; List <Collision> stopCollisions; foreach (var collisionMap in collisions) { e = collisionMap.Key; collidingCollisions = collisionMap.Value[CollisionState.Colliding]; stopCollisions = collisionMap.Value[CollisionState.Stop]; for (int i = collidingCollisions.Count - 1; i >= 0; --i) { collision = collidingCollisions[i]; if (!Collisions.EntitiesCollide(e, collision.entity)) { collidingCollisions.RemoveAt(i); stopCollisions.Add(collision); } } } }
public static void Setup() { // Setup pools. EntityPool.Init(); ActionPool.Init(); pool = new EntityPool(); systemPool = new SystemPool(); eventPool = new EventPool(); actionPool = new ActionPool(); collisionPool = new CollisionPool(); // Setup event handlers var allEventTypes = (from domainAssembly in AppDomain.CurrentDomain.GetAssemblies() from assemblyType in domainAssembly.GetTypes() where typeof(DeftEvent).IsAssignableFrom(assemblyType) select assemblyType).ToList(); foreach (var eventType in allEventTypes) { eventPool.AddEvent(eventType); } Collisions.Setup(); // Setup systems. systemPool.Add <System_Process_ClearMovedComponents>(); systemPool.Add <System_Process_TriggerInputEvents>(); systemPool.Add <System_Action_SetVelocity>(); systemPool.Add <System_Process_VelocityMovement>(); systemPool.Add <System_Process_RegisterCollisions>(); systemPool.Add <System_Process_CleanupStopCollisions>(); systemPool.Add <System_Process_RegisterNewStopCollisions>(); systemPool.Add <System_Process_KillMe>(); systemPool.Add <System_Process_UpdateGadgets>(); systemPool.Add <System_Event_SelectUIFocus>(); systemPool.Add <System_Event_UpdateUIFocusState>(); systemPool.Add <System_Event_DragAndResizeFocusGadget>(); systemPool.Add <System_Event_UITextEntry>(); systemPool.Add <System_Display_Texture>(); systemPool.Add <System_Display_Box>(); systemPool.Add <System_Display_Circle>(); systemPool.Add <System_UIDisplay_DisplayGadgets>(); systemPool.Add <System_UIDisplay_FocusGadgetOverlay>(); }
public void Process() { var entities = ECSCore.pool.GetEntities(); var collisionPool = ECSCore.collisionPool; // TODO: Simple optimisation with more efficient FOR-FOR loop. foreach (var e1 in entities) { foreach (var e2 in entities) { if (e1 == e2) { continue; } if (Collisions.EntitiesCollide(e1, e2)) { collisionPool.RegisterCollision(e1, e2); } } } }