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