diff --git a/modules/core_widgets/uiitem.lua b/modules/core_widgets/uiitem.lua index ebb41d41..d6766d27 100644 --- a/modules/core_widgets/uiitem.lua +++ b/modules/core_widgets/uiitem.lua @@ -1,6 +1,8 @@ function UIItem:onDragEnter(mousePos) + if self:isVirtual() then return false end + local item = self:getItem() - if not item then return false end + if not item then return true end self:setBorderWidth(1) @@ -11,17 +13,21 @@ function UIItem:onDragEnter(mousePos) end function UIItem:onDragLeave(widget, mousePos) + if self:isVirtual() then return false end + if not self.parsed then self.currentDragThing = nil end - + restoreCursor() self:setBorderWidth(0) return true end function UIItem:onDrop(widget, mousePos) - if not widget or not widget.currentDragThing then return false end + if self:isVirtual() then return false end + + if not widget or not widget.currentDragThing then return true end local pos = self.position local data = widget.currentDragThing:getData() @@ -32,7 +38,7 @@ function UIItem:onDrop(widget, mousePos) spinbox:setMaximum(data) spinbox:setMinimum(1) spinbox:setCurrentIndex(data) - + local okButton = moveWindow:getChildById('buttonOk') okButton.onClick = function() Game.move(widget.currentDragThing, pos, spinbox:getCurrentIndex()) okButton:getParent():destroy() widget.currentDragThing = nil end moveWindow.onEnter = okButton.onClick @@ -45,6 +51,8 @@ function UIItem:onDrop(widget, mousePos) end function UIItem:onHoverChange(hovered) + if self:isVirtual() then return end + if g_ui.getDraggingWidget() and self ~= g_ui.getDraggingWidget() then if hovered then self:setBorderWidth(1) @@ -55,6 +63,8 @@ function UIItem:onHoverChange(hovered) end function UIItem:onMouseRelease(mousePosition, mouseButton) + if self:isVirtual() then return false end + local item = self:getItem() if not item or not self:containsPoint(mousePosition) then return false end return Game.processMouseAction(mousePosition, mouseButton, nil, item, item, nil, item) diff --git a/modules/game/game.lua b/modules/game/game.lua index 6574e10b..6c2c334a 100644 --- a/modules/game/game.lua +++ b/modules/game/game.lua @@ -26,7 +26,7 @@ local function onUseWithMouseRelease(self, mousePosition, mouseButton) if tile then Game.useWith(Game.selectedThing, tile:getTopMultiUseThing()) end - elseif clickedWidget.getItem then + elseif clickedWidget.getItem and not clickedWidget:isVirtual() then Game.useWith(Game.selectedThing, clickedWidget:getItem()) end end diff --git a/modules/game_shaders/item.frag b/modules/game_shaders/item.frag index 21b38039..6cb096d3 100644 --- a/modules/game_shaders/item.frag +++ b/modules/game_shaders/item.frag @@ -7,19 +7,5 @@ varying vec2 textureCoords; // map texture coords void main() { vec4 outColor = texture2D(texture, textureCoords) * opacity; - /* - float refinement = 0; - if(refinement > 0) { - vec4 sum = vec4(0.0, 0.0, 0.0, 0.0); - for(int i=-1;i<=1;++i) { - for(int j=-1;j<=1;++j) { - vec4 pixel = texture2D(texture, textureCoords + vec2(i,j)*(1.0/32.0)); - sum += pixel * (1.0/9.0) * pixel.a * (0.5 + (pixel.r + pixel.g + pixel.b)/3.0); - } - } - float factor = refinement*((1.0 + sin(time*2))/2.0); - outColor += sum * sum * factor; - } - */ gl_FragColor = outColor; } diff --git a/src/otclient/luafunctions.cpp b/src/otclient/luafunctions.cpp index db0e1e0a..e0201323 100644 --- a/src/otclient/luafunctions.cpp +++ b/src/otclient/luafunctions.cpp @@ -221,9 +221,16 @@ void OTClient::registerLuaFunctions() g_lua.bindClassStaticFunction("getProtocolGame", std::bind(&Game::getProtocolGame, &g_game)); g_lua.registerClass(); - g_lua.bindClassStaticFunction("create", []{ return UIItemPtr(new UIItem); } ); - g_lua.bindClassMemberFunction("getItem", &UIItem::getItem); + g_lua.bindClassStaticFunction("create", []{ return UIItemPtr(new UIItem); }); + g_lua.bindClassMemberFunction("setItemId", &UIItem::setItemId); + g_lua.bindClassMemberFunction("setItemCount", &UIItem::setItemCount); g_lua.bindClassMemberFunction("setItem", &UIItem::setItem); + g_lua.bindClassMemberFunction("setVirtual", &UIItem::setVirtual); + g_lua.bindClassMemberFunction("getItemId", &UIItem::getItemId); + g_lua.bindClassMemberFunction("getItemCount", &UIItem::getItemCount); + g_lua.bindClassMemberFunction("getItem", &UIItem::getItem); + g_lua.bindClassMemberFunction("isVirtual", &UIItem::isVirtual); + g_lua.registerClass(); g_lua.bindClassStaticFunction("create", []{ return UICreaturePtr(new UICreature); } ); diff --git a/src/otclient/ui/uiitem.cpp b/src/otclient/ui/uiitem.cpp index bc3cbe64..d0e51b5f 100644 --- a/src/otclient/ui/uiitem.cpp +++ b/src/otclient/ui/uiitem.cpp @@ -51,3 +51,31 @@ void UIItem::draw() drawChildren(); } + +void UIItem::setItemId(int id) +{ + if(!m_item) + m_item = Item::create(id); + else + m_item->setId(id); +} + +void UIItem::setItemCount(int count) +{ + if(m_item) + m_item->setData(count); +} + +void UIItem::onStyleApply(const std::string& styleName, const OTMLNodePtr& styleNode) +{ + UIWidget::onStyleApply(styleName, styleNode); + + for(const OTMLNodePtr& node : styleNode->children()) { + if(node->tag() == "item-id") + setItemId(node->value()); + else if(node->tag() == "item-count") + setItemCount(node->value()); + else if(node->tag() == "virtual") + setVirtual(node->value()); + } +} diff --git a/src/otclient/ui/uiitem.h b/src/otclient/ui/uiitem.h index c16cc0fd..78ff6002 100644 --- a/src/otclient/ui/uiitem.h +++ b/src/otclient/ui/uiitem.h @@ -33,12 +33,21 @@ public: UIItem(); void draw(); + void setItemId(int id); + void setItemCount(int count); void setItem(const ItemPtr& item) { m_item = item; } + void setVirtual(bool virt) { m_virtual = virt; } + int getItemId() { return m_item->getId(); } + int getItemCount() { return m_item->getData(); } ItemPtr getItem() { return m_item; } + bool isVirtual() { return m_virtual; } protected: + void onStyleApply(const std::string& styleName, const OTMLNodePtr& styleNode); + ItemPtr m_item; + Boolean m_virtual; }; #endif