Beispiel #1
0
        private void AddSystemTo(ref SystemLayer[] layers, EntitySystem system, int layerIndex, SystemExecutionType executionType)
        {
            Debug.Assert(layers != null);

            _dummyLayer.LayerIndex = layerIndex;
            var         index = Array.BinarySearch(layers, _dummyLayer);
            SystemLayer layer;

            if (index >= 0)
            {
                layer = layers[index];
            }
            else
            {
                layer = new SystemLayer(layerIndex);
                Array.Resize(ref layers, layers.Length + 1);
                layers[layers.Length - 1] = layer;
                Array.Sort(layers);
            }

            switch (executionType)
            {
            case SystemExecutionType.Synchronous:
                layer.SynchronousSystems.Add(system);
                break;

            //case SystemExecutionType.Asynchronous:
            //    layer.AsynchronousSystems.Attach(system);
            //    break;
            default:
                throw new ArgumentOutOfRangeException(nameof(executionType), executionType, null);
            }
        }
Beispiel #2
0
 internal SystemManager(EntityComponentSystem manager)
 {
     _manager          = manager;
     _updateLayers     = new SystemLayer[0];
     _drawLayers       = new SystemLayer[0];
     _dummyLayer       = new SystemLayer();
     Systems           = new List <EntitySystem>();
     ProcessingSystems = new List <EntityProcessingSystem>();
 }
Beispiel #3
0
        /// <summary>Sets the system.</summary>
        /// <param name="layers">The layers.</param>
        /// <param name="system">The system.</param>
        /// <param name="layer">The layer.</param>
        /// <param name="executionType">Type of the execution.</param>
        private static void SetSystem(ref IDictionary <int, SystemLayer> layers, EntitySystem system, int layer, ExecutionType executionType)
        {
            if (!layers.ContainsKey(layer))
            {
                layers[layer] = new SystemLayer();
            }

            Bag <EntitySystem> updateBag = layers[layer][executionType];

            if (!updateBag.Contains(system))
            {
                updateBag.Add(system);
            }
#if !FULLDOTNET
            layers = (from d in layers orderby d.Key ascending select d).ToDictionary(pair => pair.Key, pair => pair.Value);
#endif
        }