Esempio n. 1
0
        private void RefreshList()
        {
            List <SpriteInfo> sprites = new List <SpriteInfo>();

            for (int i = 0; i < (_isGameboyMode ? 40 : 128); i++)
            {
                SpriteInfo sprite;
                if (_isGameboyMode)
                {
                    sprite = SpriteInfo.GetGbSpriteInfo(_oamRam, i, _state.Gameboy.Ppu.LargeSprites, _state.Gameboy.Ppu.CgbEnabled);
                }
                else
                {
                    sprite = SpriteInfo.GetSpriteInfo(_oamRam, _state.Ppu.OamMode, i);
                }

                if (!chkHideOffscreenSprites.Checked || sprite.IsVisible())
                {
                    sprites.Add(sprite);
                }
            }

            sprites.Sort((SpriteInfo a, SpriteInfo b) => {
                int column = Math.Abs(_sortOrder);
                int order  = _sortOrder >= 0 ? 1 : -1;

                int value = 0;
                if (column == 1)
                {
                    value = (a.Index - b.Index) * order;
                }
                else if (column == 2)
                {
                    value = (a.X - b.X) * order;
                }
                else if (column == 3)
                {
                    value = (a.Y - b.Y) * order;
                }
                else if (column == 4)
                {
                    value = ((a.LargeSprite ? 1 : 0) - (b.LargeSprite ? 1 : 0)) * order;
                }
                else if (column == 5)
                {
                    value = (a.TileIndex - b.TileIndex) * order;
                }
                else if (column == 6)
                {
                    value = (a.Priority - b.Priority) * order;
                }
                else if (column == 7)
                {
                    value = (a.Palette - b.Palette) * order;
                }
                else if (column == 8)
                {
                    value = (a.Flags - b.Flags) * order;
                }

                if (value == 0)
                {
                    value = (a.Index - b.Index);
                }

                return(value);
            });

            lstSprites.BeginUpdate();
            _sprites = sprites;
            lstSprites.VirtualListSize = _sprites.Count;
            lstSprites.EndUpdate();
            SetSelectedIndex(_selectedIndex, false);

            _lastRefresh = DateTime.Now;
        }