/// <inheritdoc/> public override void Update(GameTime gameTime) { int currentlyToRemoveCount; lock (_toRemove) { currentlyToRemoveCount = Math.Min(_toRemove.Count, INITIAL_ARRAY_SIZE); _toRemove.CopyTo(0, _currentlyToRemove, 0, currentlyToRemoveCount); _toRemove.RemoveRange(0, currentlyToRemoveCount); } // ReSharper disable once InconsistentlySynchronizedField for (int i = 0; i < currentlyToRemoveCount; i++) { // ReSharper disable once InconsistentlySynchronizedField Entity entity = _currentlyToRemove[i]; for (int si = _entitySystemsCount - 1; si >= 0; si--) { EntitySystemBase system = _entitySystems[si]; if (entity.SystemFlags == 0 || (entity.SystemFlags & system.SystemMask) == system.SystemMask) { system.Remove(entity); } } } int currentlyToChangedCount; lock (_toChanged) { currentlyToChangedCount = Math.Min(_toChanged.Count, INITIAL_ARRAY_SIZE); _toChanged.CopyTo(0, _currentlyToChanged, 0, currentlyToChangedCount); _toChanged.RemoveRange(0, currentlyToChangedCount); } // ReSharper disable once InconsistentlySynchronizedField for (int i = 0; i < currentlyToChangedCount; i++) { // ReSharper disable once InconsistentlySynchronizedField Entity entity = _currentlyToChanged[i]; for (int si = _entitySystemsCount - 1; si >= 0; si--) { EntitySystemBase system = _entitySystems[si]; if (entity.SystemFlags == 0 || (entity.SystemFlags & system.SystemMask) == system.SystemMask) { system.Changed(entity); } } } for (int i = 0; i < _entityUpdateableSystemsCount; i++) { IUpdateableSystem system = _entityUpdateableSystems[i]; if (system.Enabled) { system.Update(gameTime); } } }