示例#1
0
	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;
	}
示例#2
0
	void dropCount(FPNode<T> * node, T v)
	{
		for (auto x : node->offspring)
		{
			if (x.first != v)
			{
				x.second->count = 0;
			}
			dropCount(x.second, v);
		}
	}
示例#3
0
	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);
	}
示例#4
0
	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()));
		}
	}