NScumm.Sword1.Menu.CheckMenuClick C# (CSharp) Method

CheckMenuClick() private method

private CheckMenuClick ( int menuType ) : byte
menuType int
return byte
        private byte CheckMenuClick(int menuType)
        {
            ushort mouseEvent = _mouse.TestEvent();
            if (mouseEvent == 0)
                return 0;
            ushort x, y;
            _mouse.GiveCoords(out x, out y);
            if (_subjectBarStatus == MenuState.MENU_OPEN)
            {
                // Conversation mode. Icons are highlighted on mouse-down, but
                // the actual response is made on mouse-up.
                if (menuType == MENU_BOT)
                {
                    if (Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD] != 0 && ((mouseEvent & Mouse.BS1L_BUTTON_UP) != 0))
                    {
                        for (var cnt = 0; cnt < Logic.ScriptVars[(int)ScriptVariableNames.IN_SUBJECT]; cnt++)
                        {
                            if (_subjectBar[cnt] == Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD])
                                return (byte)(cnt + 1);
                        }
                    }
                    else if ((mouseEvent & Mouse.BS1L_BUTTON_DOWN) != 0)
                    {
                        for (var cnt = 0; cnt < Logic.ScriptVars[(int)ScriptVariableNames.IN_SUBJECT]; cnt++)
                        {
                            if (_subjects[cnt].WasClicked(x, y))
                            {
                                Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD] = _subjectBar[cnt];
                                RefreshMenus();
                                break;
                            }
                        }
                    }
                }
                else
                {
                    if (Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD] != 0 && ((mouseEvent & Mouse.BS1L_BUTTON_UP) != 0))
                    {
                        for (var cnt = 0; cnt < _inMenu; cnt++)
                        {
                            if (_menuList[cnt] == Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD])
                                return (byte)(cnt + 1);
                        }
                    }
                    else if ((mouseEvent & Mouse.BS1L_BUTTON_DOWN) != 0)
                    {
                        for (var cnt = 0; cnt < _inMenu; cnt++)
                        {
                            if (_objects[cnt].WasClicked(x, y))
                            {
                                Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD] = _menuList[cnt];
                                RefreshMenus();
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                // Normal use, i.e. inventory. Things happen on mouse-down.
                if (menuType == MENU_TOP)
                {
                    for (var cnt = 0; cnt < _inMenu; cnt++)
                    {
                        if (_objects[cnt].WasClicked(x, y))
                        {
                            if ((mouseEvent & Mouse.BS1R_BUTTON_DOWN) != 0)
                            { // looking at item
                                Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD] = _menuList[cnt];
                                Logic.ScriptVars[(int)ScriptVariableNames.MENU_LOOKING] = 1;
                                Logic.ScriptVars[(int)ScriptVariableNames.DEFAULT_ICON_TEXT] = (uint)_objectDefs[_menuList[cnt], MenuObject.textDesc];
                            }
                            else if ((mouseEvent & Mouse.BS1L_BUTTON_DOWN) != 0)
                            {
                                if (Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD] != 0)
                                {
                                    if (Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD] == _menuList[cnt])
                                    {
                                        _mouse.SetLuggage(0, 0);
                                        Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD] = 0; // reselected => deselect it
                                    }
                                    else
                                    { // the player is clicking another item on this one.
                                      // run its use-script, if there is one
                                        Logic.ScriptVars[(int)ScriptVariableNames.SECOND_ITEM] = _menuList[cnt];
                                        _mouse.SetLuggage(0, 0);
                                    }
                                }
                                else
                                {
                                    Logic.ScriptVars[(int)ScriptVariableNames.OBJECT_HELD] = _menuList[cnt];
                                    _mouse.SetLuggage((uint) _objectDefs[_menuList[cnt], MenuObject.luggageIconRes], 0);
                                }
                            }
                            RefreshMenus();
                            break;
                        }
                    }
                }
            }
            return 0;
        }