예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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);
                    }
                }
            }
        }
예제 #3
0
        private void renderAllViewports()
        {
            _matrixUpdater.ClearCache();
            var instructionSet = _pipeline.InstructionSet;

            if (instructionSet == null)
            {
                return;
            }
            foreach (var(viewport, instructions) in instructionSet)
            {
                renderViewport(viewport, instructions);
            }
        }
예제 #4
0
 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();
 }