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; }