From 17eb4407d7d2762cda1c849c4b511ab97e4352aa Mon Sep 17 00:00:00 2001 From: Nickito12 Date: Sat, 4 Feb 2017 22:29:54 -0300 Subject: [PATCH] Fix online prev msg crashes. Fix mouse wheel movement when song was already started --- .../BGAnimations/_mousewheelscroll.lua | 8 ++++--- src/ScreenNetSelectBase.cpp | 21 ++++++++++++++----- src/ScreenSelectMusic.cpp | 10 +++++++++ src/ScreenSelectMusic.h | 2 ++ 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/Themes/Til Death/BGAnimations/_mousewheelscroll.lua b/Themes/Til Death/BGAnimations/_mousewheelscroll.lua index a2758433c9..8d422e9132 100644 --- a/Themes/Til Death/BGAnimations/_mousewheelscroll.lua +++ b/Themes/Til Death/BGAnimations/_mousewheelscroll.lua @@ -2,6 +2,7 @@ local moving = false local whee local pressingtab = false +local top local function scrollInput(event) if event.DeviceInput.button == "DeviceButton_tab" then @@ -10,14 +11,14 @@ local function scrollInput(event) elseif event.type == "InputEventType_Release" then pressingtab = false end - elseif event.DeviceInput.button == "DeviceButton_mousewheel up" and event.type == "InputEventType_FirstPress" then + elseif event.DeviceInput.button == "DeviceButton_mousewheel up" and event.type == "InputEventType_FirstPress" and top:GetSelectionState() ~= 2 then moving = true if pressingtab == true then whee:Move(-2) else whee:Move(-1) end - elseif event.DeviceInput.button == "DeviceButton_mousewheel down" and event.type == "InputEventType_FirstPress" then + elseif event.DeviceInput.button == "DeviceButton_mousewheel down" and event.type == "InputEventType_FirstPress" and top:GetSelectionState() ~= 2 then moving = true if pressingtab == true then whee:Move(2) @@ -33,7 +34,8 @@ end local t = Def.ActorFrame{ BeginCommand=function(self) whee = SCREENMAN:GetTopScreen():GetMusicWheel() - SCREENMAN:GetTopScreen():AddInputCallback(scrollInput) + top = SCREENMAN:GetTopScreen() + top:AddInputCallback(scrollInput) self:visible(false) end, } diff --git a/src/ScreenNetSelectBase.cpp b/src/ScreenNetSelectBase.cpp index 2c287f202d..ce90ae22dd 100644 --- a/src/ScreenNetSelectBase.cpp +++ b/src/ScreenNetSelectBase.cpp @@ -248,13 +248,13 @@ RString ScreenNetSelectBase::GetPreviousMsg() if (m_sTextLastestInputsIndex <= m_sTextLastestInputs.size() && m_sTextLastestInputsIndex > 0) return m_sTextLastestInputs[m_sTextLastestInputs.size() - m_sTextLastestInputsIndex]; m_sTextLastestInputsIndex = m_sTextLastestInputs.size(); - return m_sTextLastestInputs[m_sTextLastestInputs.size() - m_sTextLastestInputsIndex]; + return m_sTextLastestInputsIndex == 0 ? "" : m_sTextLastestInputs[m_sTextLastestInputs.size() - m_sTextLastestInputsIndex]; } RString ScreenNetSelectBase::GetNextMsg() { m_sTextLastestInputsIndex -= 1; - if (m_sTextLastestInputsIndex < m_sTextLastestInputs.size() && m_sTextLastestInputsIndex > 0) + if (m_sTextLastestInputsIndex <= m_sTextLastestInputs.size() && m_sTextLastestInputsIndex > 0) return m_sTextLastestInputs[m_sTextLastestInputs.size() - m_sTextLastestInputsIndex]; m_sTextLastestInputsIndex = 0; return ""; @@ -724,17 +724,20 @@ class LunaScreenNetSelectBase : public Luna { static int ChatboxInput(T* p, lua_State *L) { - p->enableChatboxInput = BArg(1); + if (!lua_isnil(L, 1)) + p->enableChatboxInput = BArg(1); return 1; } static int UsersVisible(T* p, lua_State *L) { - p->SetUsersVisible(BArg(1)); + if (!lua_isnil(L, 1)) + p->SetUsersVisible(BArg(1)); return 1; } static int ChatboxVisible(T* p, lua_State *L) { - p->SetChatboxVisible(BArg(1)); + if (!lua_isnil(L, 1)) + p->SetChatboxVisible(BArg(1)); return 1; } static int GetUserQty(T* p, lua_State *L) @@ -744,6 +747,8 @@ class LunaScreenNetSelectBase : public Luna } static int GetUser(T* p, lua_State *L) { + if (lua_isnil(L, 1)) + return 0; if (IArg(1) <= p->ToUsers()->size() && IArg(1) >= 1) lua_pushstring(L, (*(p->ToUsers()))[IArg(1) - 1].GetText()); else @@ -752,6 +757,8 @@ class LunaScreenNetSelectBase : public Luna } static int GetUserState(T* p, lua_State *L) { + if (lua_isnil(L, 1)) + return 0; if (IArg(1) <= p->ToUsers()->size() && IArg(1) >= 1) lua_pushnumber(L, NSMAN->m_PlayerStatus[NSMAN->m_ActivePlayer[IArg(1) - 1]]); else @@ -765,6 +772,8 @@ class LunaScreenNetSelectBase : public Luna } static int GetFriendName(T* p, lua_State *L) { + if (lua_isnil(L, 1)) + return 0; if (IArg(1) <= NSMAN->fl_PlayerNames.size() && IArg(1) >= 1) lua_pushstring(L, (NSMAN->fl_PlayerNames[IArg(1) - 1]).c_str()); else @@ -773,6 +782,8 @@ class LunaScreenNetSelectBase : public Luna } static int GetFriendState(T* p, lua_State *L) { + if (lua_isnil(L, 1)) + return 0; if (IArg(1) <= NSMAN->fl_PlayerStates.size() && IArg(1) >= 1) lua_pushnumber(L, NSMAN->fl_PlayerStates[IArg(1) - 1]); else diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index 46880ec7bf..bde87288b6 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -2068,6 +2068,11 @@ bool ScreenSelectMusic::can_open_options_list(PlayerNumber pn) return true; } +int ScreenSelectMusic::GetSelectionState() +{ + return static_cast(m_SelectionState); +} + // lua start #include "LuaBinding.h" @@ -2102,6 +2107,10 @@ class LunaScreenSelectMusic: public Luna return 1; } + static int GetSelectionState(T* p, lua_State *L) { + lua_pushnumber(L, p->GetSelectionState()); + return 1; + } LunaScreenSelectMusic() { ADD_METHOD( GetGoToOptions ); @@ -2109,6 +2118,7 @@ class LunaScreenSelectMusic: public Luna ADD_METHOD( OpenOptionsList ); ADD_METHOD( CanOpenOptionsList ); ADD_METHOD( SelectCurrent ); + ADD_METHOD( GetSelectionState ); } }; diff --git a/src/ScreenSelectMusic.h b/src/ScreenSelectMusic.h index 442a2d4139..8614e669d0 100644 --- a/src/ScreenSelectMusic.h +++ b/src/ScreenSelectMusic.h @@ -53,6 +53,8 @@ class ScreenSelectMusic : public ScreenWithMenuElements bool can_open_options_list(PlayerNumber pn); + int GetSelectionState(); + // Lua virtual void PushSelf( lua_State *L );