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); } }
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>(); }
/// <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 }