示例#1
0
        /// <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);
                    }
                }
            }
        }
示例#2
0
        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);
                    }
                }
            }
        }