public void Update(bool forceUpdate) { _cursor = _gameState.Cursor; if (forceUpdate) { onEverythingChanged(); } bool isDirty = _isDirty; _isDirty = false; _matrixUpdater.ClearCache(); foreach (var viewport in _viewportSubscribers.Keys) { ViewportDisplayList list; if (isDirty) { list = _cache.GetOrAdd(viewport, initDisplayList); updateDisplayList(viewport, list); _cache[viewport] = list; } else { list = _cache.GetOrAdd(viewport, initAndUpdateDisplayList); } foreach (var item in list.DisplayList) { _matrixUpdater.RefreshMatrix(item); } } }
public void Update() { _cursor = _input.Cursor; _alreadyPrepared.Clear(); bool isDirty = _isDirty || _roomTransitions.State == RoomTransitionState.PreparingNewRoomRendering; _isDirty = false; _matrixUpdater.ClearCache(); foreach (var viewport in _viewportSubscribers.Keys) { ViewportDisplayList list; if (isDirty) { list = _cache.GetOrAdd(viewport, initDisplayList); updateDisplayList(viewport, list); _cache[viewport] = list; } else { list = _cache.GetOrAdd(viewport, initAndUpdateDisplayList); } foreach (var item in list.DisplayList) { if (_alreadyPrepared.Add(item.ID)) { _matrixUpdater.RefreshMatrix(item); } } } }
private void renderAllViewports() { _matrixUpdater.ClearCache(); var instructionSet = _pipeline.InstructionSet; if (instructionSet == null) { return; } foreach (var(viewport, instructions) in instructionSet) { renderViewport(viewport, instructions); } }
private void renderAllViewports() { _matrixUpdater.ClearCache(); renderViewport(_gameState.Viewport); try { foreach (var viewport in _gameState.SecondaryViewports) { if (viewport == null) { continue; } renderViewport(viewport); } } catch (InvalidOperationException) {} //can be triggered if a viewport was added/removed while enumerating- this should be resolved on next tick renderCursor(); }