public CListBox(OBJScene _objScene, Game feel, int width, int height, int itemHeight, int xPos, int yPos, string fontName, int fontSize, System.Drawing.FontStyle fontStyle, Color fontColor, Color backColor, Color selFontColor, Color selFontBackColor, SortType sortType, TextAlign textAlign, bool disableStars) { _listBox = new List <RomDesc>(); _x = xPos; _y = yPos; _starLabelWidth = (int)Utils.LoadSpriteFont(feel, "wingdings", fontSize, System.Drawing.FontStyle.Regular).MeasureString("«««««").X + 8; _rect = new Rectangle(0, 0, width, height); _fontColor = fontColor; _backColor = backColor; _fontSize = fontSize; _selFontColor = selFontColor; _selFontBackColor = selFontBackColor; _selFontBackColorL = _selFontBackColor; _backColorL = _backColor; _disableStars = disableStars; _starsForeColor = _disableStars ? Color.TransparentBlack : new Color(255, 220, 66, 80); _starsBackColor = Color.TransparentBlack; _selStarsForeColor = _disableStars ? Color.TransparentBlack : new Color(255, 220, 66, _selFontColor.A); _selStarsBackColor = _disableStars ? Color.TransparentBlack : new Color(_selFontBackColorL, (byte)(_selFontBackColorL.A * .9)); _rowSize = itemHeight; _rowCount = height / _rowSize; _rect.Height = _rowCount * _rowSize; Labels = new List <CLabel>(); StarLabels = new List <CLabel>(); for (var i = 0; i < _rowCount; i++) { Labels.Add(_objScene.CreateLabel("RomListLabel_" + i, 0, 0, _rect.Width, _rowSize, "", fontName, fontSize, fontStyle, _fontColor, _backColor, textAlign, true, true)); StarLabels.Add(_objScene.CreateStarLabel("RomListStarLabel_" + i, 0, 0, _starLabelWidth, _rowSize, "", fontSize, fontStyle, _starsForeColor, _starsBackColor, true)); } _sortType = sortType; Sort(); UpdatePosition(); }
/* LED LAYOUT * // 28 29 30 31 * // * // 03 04 05 06 17 18 19 20 * // 11 25 * // 13 02 07 08 09 10 16 21 22 23 24 27 * // 12 26 * // 00 01 14 15 */ /* * HYBRID MODE * =========== * PLAYER 1 * d6 = start * d7 = joy * d8 = button 1 * d9 = button 2 * d10 = button 3 * d11 = button 4 * * PLAYER 2 * d18 = start * d19 = joy * d20 = button 1 * d21 = button 2 * d22 = button 3 * d23 = button 4 * * DEDICATED MODE * ============== * PLAYER 1 * e1a = start * e1b = coindoor * e2a = joy * e2b..d7 = button 1..8 * d8 = spinner * d9 = trackball * * PLAYER 2 * e3a = start * e3b = coindoor * e4a = joy * e4b..d19 = button 1..8 * d20 = spinner * d21 = trackball */ public static void Initialize(OBJScene scene, string name, bool debugMode, SmartAsdMode wiringMode) { _smartAsd = IntPtr.Zero; _scene = scene; _smartAsdName = name; _wiringMode = wiringMode; _debugMode = debugMode; var xOffset = scene.screenResX - 380; var yOffset = scene.screenResY - 90; var dedicatedMode = _wiringMode == SmartAsdMode.Dedicated || _wiringMode == SmartAsdMode.Dedicated6Buttons ? 1 : 0; _background = _scene.CreateImage(OBJScene.ImageType.Led, null, 400, 130, xOffset - 20, yOffset - 40, string.Empty, false, true, true, true); _background.StartTransition(CDrawable.Transition.Freeze); var ledIndex = 0; for (var iPlayers = 0; iPlayers < 2; iPlayers++) { // start [0] _ledImages[ledIndex] = _scene.CreateImage(OBJScene.ImageType.Led, "*start", 20, 20, xOffset + 50 + iPlayers * 180, yOffset + 60, string.Empty, false, true, false, true); _ledImages[ledIndex].StartTransition(CDrawable.Transition.Freeze); ledIndex++; // coindoor [1] _ledImages[ledIndex] = _scene.CreateImage(OBJScene.ImageType.Led, "*coindoor", 30 * dedicatedMode, 30 * dedicatedMode, xOffset + 90 + iPlayers * 180, yOffset + 55, string.Empty, false, true, false, true); _ledImages[ledIndex].StartTransition(CDrawable.Transition.Freeze); ledIndex++; // joy [2] _ledImages[ledIndex] = _scene.CreateImage(OBJScene.ImageType.Led, "*joy", 30, 30, xOffset + 15 + iPlayers * 180, yOffset + 15, string.Empty, false, true, false, true); _ledImages[ledIndex].StartTransition(CDrawable.Transition.Freeze); ledIndex++; // buttons 1..4 [3-6] for (var iLoop = 0; iLoop < 4; iLoop++) { var size = 20; if (iLoop == 3 && _wiringMode == SmartAsdMode.Dedicated6Buttons) { size = 0; } _ledImages[ledIndex] = _scene.CreateImage(OBJScene.ImageType.Led, "*button", size, size, xOffset + 50 + iLoop * 20 + iPlayers * 180, yOffset + 10, string.Empty, false, true, false, true); _ledImages[ledIndex].StartTransition(CDrawable.Transition.Freeze); ledIndex++; } // buttons 5..8 [7-10] for (var iLoop = 0; iLoop < 4; iLoop++) { var size = 20; if (iLoop == 3 && _wiringMode == SmartAsdMode.Dedicated6Buttons) { size = 0; } _ledImages[ledIndex] = _scene.CreateImage(OBJScene.ImageType.Led, "*button", size * dedicatedMode, size * dedicatedMode, xOffset + 50 + iLoop * 20 + iPlayers * 180, yOffset + 30, string.Empty, false, true, false, true); _ledImages[ledIndex].StartTransition(CDrawable.Transition.Freeze); ledIndex++; } // spinner [11] _ledImages[ledIndex] = _scene.CreateImage(OBJScene.ImageType.Led, "*spinner", 30 * dedicatedMode, 30 * dedicatedMode, xOffset + 135 + iPlayers * 180, yOffset + 0, string.Empty, false, true, false, true); _ledImages[ledIndex].StartTransition(CDrawable.Transition.Freeze); ledIndex++; // trackball [12] _ledImages[ledIndex] = _scene.CreateImage(OBJScene.ImageType.Led, "*trackball", 40 * dedicatedMode, 40 * dedicatedMode, xOffset + 130 + iPlayers * 180, yOffset + 30, string.Empty, false, true, false, true); _ledImages[ledIndex].StartTransition(CDrawable.Transition.Freeze); ledIndex++; // side button [13] _ledImages[ledIndex] = _scene.CreateImage(OBJScene.ImageType.Led, "*button", 20 * dedicatedMode, 20 * dedicatedMode, xOffset - 10 + iPlayers * 360, yOffset + 20, string.Empty, false, true, false, true); _ledImages[ledIndex].StartTransition(CDrawable.Transition.Freeze); ledIndex++; } // extra buttons 1..4 [28-31] for (var iLoop = 0; iLoop < 4; iLoop++) { _ledImages[ledIndex] = _scene.CreateImage(OBJScene.ImageType.Led, "*button", 20 * dedicatedMode, 20 * dedicatedMode, xOffset + 120 + iLoop * 30, yOffset - 30, string.Empty, false, true, false, true); _ledImages[ledIndex].StartTransition(CDrawable.Transition.Freeze); ledIndex++; } // initialize "none" transition frames noneFrames[0] = 0xffffffff; // initialize "wake-up" and "reverse-wake-up" transition frames for (var frame = 0; frame < 14; frame++) { for (var led = 0; led < 14; led++) { wakeUpFrames[frame] |= led <= frame ? 1u << led : 0u; wakeUpFrames[frame] |= led <= frame ? 1u << led + 14 : 0u; } reverseWakeUpFrames[frame] = ReverseWord(wakeUpFrames[frame] & 0xFFFF); reverseWakeUpFrames[frame] |= ReverseWord(wakeUpFrames[frame] >> 16) << 16; } for (var frame = 14; frame < 17; frame++) { for (var led = 0; led < 32; led++) { wakeUpFrames[frame] |= led <= frame + 14 ? 1u << led : 0u; } reverseWakeUpFrames[frame] = ReverseWord(wakeUpFrames[frame] & 0xFFFF); reverseWakeUpFrames[frame] |= ReverseWord(wakeUpFrames[frame] >> 16) << 16; } // initialize "chase" transition frames for (var frame = 0; frame < 14; frame++) { for (var led = 0; led < 14; led++) { chaseFrames[frame] |= led == frame ? 1u << led - 1: 0u; //chaseFrames[frame] |= led == frame ? 1u << led + 14 : 0u; chaseFrames[frame] |= led == 14 - frame ? 1u << led + 13 : 0u; } } for (var frame = 14; frame < 26; frame++) { for (var led = 0; led < 14; led++) { chaseFrames[frame] |= led == 14 - (frame - 14) ? 1u << led - 1 : 0u; //chaseFrames[frame] |= led == 14 - (frame - 14) ? 1u << led + 14: 0u; chaseFrames[frame] |= led == frame - 14 ? 1u << led + 13 : 0u; } } // initialize "curtain" transition frames if (_wiringMode == SmartAsdMode.Dedicated6Buttons) { curtainFrames = new uint[] { 0xFEEFFBBF, 0xFEEFFBBF, 0xFEEFFBBF, 0xFEEFFBBF, 0x9EEEE3BF, 0x9EEEE3BF, 0x0ECCA19D, 0x0ECCA19D, 0x0E88208C, 0x0E88208C, 0x0E002004, 0x0E002004, 0x08002000, 0x08002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08002000, 0x08002000, 0x0E002004, 0x0E002004, 0x0E88208C, 0x0E88208C, 0x0ECCA19D, 0x0ECCA19D, 0x9EEEE3BF, 0x9EEEE3BF, 0xFEEFFBBF, 0xFEEFFBBF, 0xFEEFFBBF, 0xFEEFFBBF, } } ; // dungeonmaster's version //curtainFrames = new uint[] { // 0x00000000, 0x00000000, // 0x00000000, 0x00000000, // 0x00884089, 0x00884089, // 0x90440110, 0x90440110, // 0x60220220, 0x60220220, // 0x08012004, 0x08012004, // 0x60220220, 0x60220220, // 0x90440110, 0x90440110, // 0x00884089, 0x00884089 //}; else { curtainFrames = new uint[] { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08002000, 0x08002000, 0x0E002004, 0x0E002004, 0x0F10208C, 0x0F10208C, 0x0F98A19D, 0x0F98A19D, 0x0FDCE3BF, 0x0FDCE3BF, 0x9FFEE7FF, 0x9FFEE7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; curtainFrames = new uint[] { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x9FFFFFFF, 0x9FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF, 0x0FFEE7FF, 0x0FFEE7FF, 0x0FDCE3BF, 0x0FDCE3BF, 0x0F98A19D, 0x0F98A19D, 0x0F10208C, 0x0F10208C, 0x0E002004, 0x0E002004, 0x08002000, 0x08002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08002000, 0x08002000, 0x0E002004, 0x0E002004, 0x0F10208C, 0x0F10208C, 0x0F98A19D, 0x0F98A19D, 0x0FDCE3BF, 0x0FDCE3BF, 0x9FFEE7FF, 0x9FFEE7FF, 0xFFFFFFFF, 0xFFFFFFFF }; } _curFETransition = FETransition.None; _curTransitionFrames = noneFrames; ResetLed(false); }