NScumm.Sword1.ControlButton.Draw C# (CSharp) Method

Draw() public method

public Draw ( ) : void
return void
        public void Draw()
        {
            FrameHeader fHead = new FrameHeader(_resMan.FetchFrame(_resMan.FetchRes(_resId), (uint)_frameIdx));
            ByteAccess src = new ByteAccess(fHead.Data.Data, fHead.Data.Offset + FrameHeader.Size);
            var dst = new ByteAccess(_dstBuf);

            if (SystemVars.Platform == Platform.PSX && _resId != 0)
            {
                var HIFbuf = new byte[_resMan.ReadUInt16(fHead.height) * _resMan.ReadUInt16(fHead.width)];
                Screen.DecompressHIF(src.Data, src.Offset, HIFbuf);
                src = new ByteAccess(HIFbuf);

                if (_resMan.ReadUInt16(fHead.width) < 300)
                    for (var cnt = 0; cnt < _resMan.ReadUInt16(fHead.height); cnt++)
                    {
                        for (var cntx = 0; cntx < _resMan.ReadUInt16(fHead.width); cntx++)
                            if (src[cntx] != 0)
                                dst[cntx] = src[cntx];

                        dst.Offset += Screen.SCREEN_WIDTH;
                        for (var cntx = 0; cntx < _resMan.ReadUInt16(fHead.width); cntx++)
                            if (src[cntx] != 0)
                                dst[cntx] = src[cntx];

                        dst.Offset += Screen.SCREEN_WIDTH;
                        src.Offset += _resMan.ReadUInt16(fHead.width);
                    }
                else if (_resId == SwordRes.SR_DEATHPANEL)
                { // Check for death panel psx version (which is 1/3 of original width)
                    for (var cnt = 0; cnt < _resMan.ReadUInt16(fHead.height) / 2; cnt++)
                    {
                        //Stretched panel is bigger than 640px, check we don't draw outside screen
                        for (var cntx = 0; (cntx < (_resMan.ReadUInt16(fHead.width)) / 3) && (cntx < (Screen.SCREEN_WIDTH - 3)); cntx++)
                            if (src[cntx] != 0)
                            {
                                dst[cntx * 3] = src[cntx];
                                dst[cntx * 3 + 1] = src[cntx];
                                dst[cntx * 3 + 2] = src[cntx];
                            }
                        dst.Offset += Screen.SCREEN_WIDTH;

                        for (var cntx = 0; cntx < (_resMan.ReadUInt16(fHead.width)) / 3; cntx++)
                            if (src[cntx] != 0)
                            {
                                dst[cntx * 3] = src[cntx];
                                dst[cntx * 3 + 1] = src[cntx];
                                dst[cntx * 3 + 2] = src[cntx];
                            }
                        dst.Offset += Screen.SCREEN_WIDTH;
                        src.Offset += _resMan.ReadUInt16(fHead.width) / 3;
                    }
                }
                else
                { //save slots needs to be multiplied by 2 in height
                    for (var cnt = 0; cnt < _resMan.ReadUInt16(fHead.height); cnt++)
                    {
                        for (var cntx = 0; cntx < _resMan.ReadUInt16(fHead.width) / 2; cntx++)
                            if (src[cntx] != 0)
                            {
                                dst[cntx * 2] = src[cntx];
                                dst[cntx * 2 + 1] = src[cntx];
                            }

                        dst.Offset += Screen.SCREEN_WIDTH;
                        for (var cntx = 0; cntx < _resMan.ReadUInt16(fHead.width) / 2; cntx++)
                            if (src[cntx] != 0)
                            {
                                dst[cntx * 2] = src[cntx];
                                dst[cntx * 2 + 1] = src[cntx];
                            }

                        dst.Offset += Screen.SCREEN_WIDTH;
                        src.Offset += _resMan.ReadUInt16(fHead.width) / 2;
                    }
                }
            }
            else
                for (var cnt = 0; cnt < _resMan.ReadUInt16(fHead.height); cnt++)
                {
                    for (var cntx = 0; cntx < _resMan.ReadUInt16(fHead.width); cntx++)
                        if (src[cntx] != 0)
                            dst[cntx] = src[cntx];

                    dst.Offset += Screen.SCREEN_WIDTH;
                    src.Offset += _resMan.ReadUInt16(fHead.width);
                }

            _system.GraphicsManager.CopyRectToScreen(_dstBuf.Data, _dstBuf.Offset, Screen.SCREEN_WIDTH, _x, _y, _width, _height);
        }

Usage Example

コード例 #1
0
ファイル: Control.cs プロジェクト: scemino/nscumm
        private void SetupMainPanel()
        {
            uint panelId;

            if (SystemVars.ControlPanelMode == ControlPanelMode.CP_DEATHSCREEN)
                panelId = SwordRes.SR_DEATHPANEL;
            else
            {
                if (SystemVars.RealLanguage.TwoLetterISOLanguageName == "en-US")
                    panelId = SwordRes.SR_PANEL_AMERICAN;
                else if (SystemVars.Language <= Language.BS1_SPANISH)
                    panelId = (uint)(SwordRes.SR_PANEL_ENGLISH + SystemVars.Language);
                else
                    panelId = SwordRes.SR_PANEL_ENGLISH;
            }

            ControlButton panel = new ControlButton(0, 0, panelId, 0, 0, _resMan, _screenBuf, _system);
            panel.Draw();

            if (SystemVars.ControlPanelMode != ControlPanelMode.CP_NORMAL)
                CreateButtons(_deathButtons, 3);
            else
            {
                CreateButtons(_panelButtons, 7);
                _buttons[5].SetSelected(SystemVars.ShowText);
            }

            if (SystemVars.ControlPanelMode == ControlPanelMode.CP_THEEND) // end of game
                RenderText(_lStrings[(int)LangStrings.STR_THE_END], 480, 188 + 40, TextModes.TEXT_RIGHT_ALIGN);

            if (SystemVars.ControlPanelMode == ControlPanelMode.CP_NORMAL)
            { // normal panel
                RenderText(_lStrings[(int)LangStrings.STR_SAVE], 180, 188 + 40, TextModes.TEXT_LEFT_ALIGN);
                RenderText(_lStrings[(int)LangStrings.STR_DONE], 460, 332 + 40, TextModes.TEXT_RIGHT_ALIGN);
                RenderText(_lStrings[(int)LangStrings.STR_RESTORE], 180, 224 + 40, TextModes.TEXT_LEFT_ALIGN);
                RenderText(_lStrings[(int)LangStrings.STR_RESTART], 180, 260 + 40, TextModes.TEXT_LEFT_ALIGN);
                RenderText(_lStrings[(int)LangStrings.STR_QUIT], 180, 296 + 40, TextModes.TEXT_LEFT_ALIGN);

                RenderText(_lStrings[(int)LangStrings.STR_VOLUME], 460, 188 + 40, TextModes.TEXT_RIGHT_ALIGN);
                RenderText(_lStrings[(int)LangStrings.STR_TEXT], 460, 224 + 40, TextModes.TEXT_RIGHT_ALIGN);
            }
            else
            {
                RenderText(_lStrings[(int)LangStrings.STR_RESTORE], 285, 224 + 40, TextModes.TEXT_LEFT_ALIGN);
                if (SystemVars.ControlPanelMode == ControlPanelMode.CP_NEWGAME) // just started game
                    RenderText(_lStrings[(int)LangStrings.STR_START], 285, 260 + 40, TextModes.TEXT_LEFT_ALIGN);
                else
                    RenderText(_lStrings[(int)LangStrings.STR_RESTART], 285, 260 + 40, TextModes.TEXT_LEFT_ALIGN);
                RenderText(_lStrings[(int)LangStrings.STR_QUIT], 285, 296 + 40, TextModes.TEXT_LEFT_ALIGN);
            }
        }
All Usage Examples Of NScumm.Sword1.ControlButton::Draw