bool HudItemButton::onInput(const InputEvent &event) { bool is_mouse_over = isMouseOver(event); if(event.isMouseOverEvent()) { setHighlighted(is_mouse_over); if(is_mouse_over && isVisible()) handleEvent(this, HudEvent::item_focused); } if(event.mouseButtonDown(InputButton::left) && is_mouse_over) handleEvent(this, isEnabled()? HudEvent::item_unequip : HudEvent::item_equip); if(event.mouseButtonDown(InputButton::right) && is_mouse_over) { if(isEnabled()) { handleEvent(this, HudEvent::item_unequip); } else { m_drop_count = 1.0; m_drop_start_pos = (float2)event.mousePos(); } } if(event.mouseButtonPressed(InputButton::right) && isDropping()) m_drop_diff = (event.mousePos().y - m_drop_start_pos.y) / 20.0f; if(event.mouseButtonUp(InputButton::right) && isDropping()) { if(dropCount() > 0) handleEvent(this, HudEvent::item_drop, dropCount()); m_drop_count = -1.0f; } return false; }
void dropCount(FPNode<T> * node, T v) { for (auto x : node->offspring) { if (x.first != v) { x.second->count = 0; } dropCount(x.second, v); } }
FPTree(FPTree &t, T v) { root = new FPNode<T>(0, NULL); current = root; copy1(t.root, root); dropCount(root, v); for (auto x : pointers[v].first) { FPNode<T> *temp = x; int leave_count = temp->count; while (temp->parent != NULL) { temp->parent->count += leave_count; temp = temp->parent; } x->count = 0; } rDelete0(root); pointers.clear(); rebuidPointers(root); }
void HudItemButton::onDraw(Renderer2D &out) const { HudButton::onDraw(out); FRect rect = this->rect(); if(!m_entry.item.isDummy()) { FRect uv_rect; auto texture = m_entry.item.guiImage(true, uv_rect); float2 size(texture->width() * uv_rect.width(), texture->height() * uv_rect.height()); float2 pos = (float2)(int2)(rect.center() - size / 2); out.addFilledRect(FRect(pos, pos + size), texture); if(m_entry.count > 1) m_font->draw(out, rect, {textColor(), textShadowColor(), HAlign::right}, format("%", m_entry.count)); if(isDropping()) m_font->draw(out, rect, {textColor(true), textShadowColor(), HAlign::left, VAlign::bottom}, format("-%", dropCount())); } }