diff --git a/src/graphics/core/Font.cpp b/src/graphics/core/Font.cpp
index 68cba17c..19abb9f0 100644
--- a/src/graphics/core/Font.cpp
+++ b/src/graphics/core/Font.cpp
@@ -57,6 +57,14 @@ static inline void draw_glyph(
const FontStyle& style
) {
for (int i = 0; i <= style.bold; i++) {
+ glm::vec4 color;
+
+ if (style.color == glm::vec4(1, 1, 1, 1)) {
+ color = batch.getColor();
+ } else {
+ color = style.color;
+ }
+
batch.sprite(
pos.x + (offset.x + i / (right.x/glyphInterval/2.0f)) * right.x,
pos.y + offset.y * right.y,
@@ -65,7 +73,7 @@ static inline void draw_glyph(
-0.15f * style.italic,
16,
c,
- batch.getColor() * style.color
+ color
);
}
}
@@ -81,6 +89,15 @@ static inline void draw_glyph(
const FontStyle& style
) {
for (int i = 0; i <= style.bold; i++) {
+ glm::vec4 color;
+
+ if (style.color == glm::vec4(1, 1, 1, 1)) {
+ color = batch.getColor();
+ } else {
+ color = style.color;
+ }
+
+
batch.sprite(
pos + right * (offset.x + i) + up * offset.y,
up, right / glyphInterval,
@@ -88,7 +105,7 @@ static inline void draw_glyph(
0.5f,
16,
c,
- batch.getColor() * style.color
+ color
);
}
}
diff --git a/src/graphics/ui/GUI.cpp b/src/graphics/ui/GUI.cpp
index 0cea8a66..ceb2f4a0 100644
--- a/src/graphics/ui/GUI.cpp
+++ b/src/graphics/ui/GUI.cpp
@@ -50,7 +50,7 @@ GUI::GUI(Engine& engine)
tooltip = guiutil::create(
*this,
""
- ""
+ ""
""
);
store("tooltip", tooltip);
diff --git a/src/graphics/ui/elements/InventoryView.cpp b/src/graphics/ui/elements/InventoryView.cpp
index b41dce98..cbb1dde6 100644
--- a/src/graphics/ui/elements/InventoryView.cpp
+++ b/src/graphics/ui/elements/InventoryView.cpp
@@ -1,10 +1,21 @@
#include "InventoryView.hpp"
+#include
+#include
+
#include "assets/Assets.hpp"
#include "assets/assets_util.hpp"
#include "content/Content.hpp"
#include "frontend/LevelFrontend.hpp"
#include "frontend/locale.hpp"
+#include "graphics/core/Atlas.hpp"
+#include "graphics/core/Batch2D.hpp"
+#include "graphics/core/DrawContext.hpp"
+#include "graphics/core/Font.hpp"
+#include "graphics/core/Shader.hpp"
+#include "graphics/core/Texture.hpp"
+#include "graphics/render/BlocksPreview.hpp"
+#include "graphics/ui/GUI.hpp"
#include "items/Inventories.hpp"
#include "items/Inventory.hpp"
#include "items/ItemDef.hpp"
@@ -15,17 +26,6 @@
#include "voxels/Block.hpp"
#include "window/input.hpp"
#include "world/Level.hpp"
-#include "graphics/core/Atlas.hpp"
-#include "graphics/core/Batch2D.hpp"
-#include "graphics/core/Font.hpp"
-#include "graphics/core/DrawContext.hpp"
-#include "graphics/core/Shader.hpp"
-#include "graphics/core/Texture.hpp"
-#include "graphics/render/BlocksPreview.hpp"
-#include "graphics/ui/GUI.hpp"
-
-#include
-#include
using namespace gui;
@@ -37,21 +37,24 @@ SlotLayout::SlotLayout(
slotcallback updateFunc,
slotcallback shareFunc,
slotcallback rightClick
-) : index(index),
- position(position),
- background(background),
- itemSource(itemSource),
- updateFunc(std::move(updateFunc)),
- shareFunc(std::move(shareFunc)),
- rightClick(std::move(rightClick)) {}
+)
+ : index(index),
+ position(position),
+ background(background),
+ itemSource(itemSource),
+ updateFunc(std::move(updateFunc)),
+ shareFunc(std::move(shareFunc)),
+ rightClick(std::move(rightClick)) {
+}
InventoryBuilder::InventoryBuilder(GUI& gui) : gui(gui) {
view = std::make_shared(gui);
}
void InventoryBuilder::addGrid(
- int cols, int count,
- glm::vec2 pos,
+ int cols,
+ int count,
+ glm::vec2 pos,
glm::vec4 padding,
bool addpanel,
const SlotLayout& slotLayout
@@ -61,9 +64,11 @@ void InventoryBuilder::addGrid(
int rows = ceildiv(count, cols);
- uint width = cols * (slotSize + interval) - interval + padding.x + padding.z;
- uint height = rows * (slotSize + interval) - interval + padding.y + padding.w;
-
+ uint width =
+ cols * (slotSize + interval) - interval + padding.x + padding.z;
+ uint height =
+ rows * (slotSize + interval) - interval + padding.y + padding.w;
+
glm::vec2 vsize = view->getSize();
if (pos.x + width > vsize.x) {
vsize.x = pos.x + width;
@@ -85,7 +90,7 @@ void InventoryBuilder::addGrid(
if (row * cols + col >= count) {
break;
}
- glm::vec2 position (
+ glm::vec2 position(
col * (slotSize + interval) + padding.x,
row * (slotSize + interval) + padding.y
);
@@ -105,11 +110,9 @@ std::shared_ptr InventoryBuilder::build() {
return view;
}
-SlotView::SlotView(
- GUI& gui, SlotLayout layout
-) : UINode(gui, glm::vec2(InventoryView::SLOT_SIZE)),
- layout(std::move(layout))
-{
+SlotView::SlotView(GUI& gui, SlotLayout layout)
+ : UINode(gui, glm::vec2(InventoryView::SLOT_SIZE)),
+ layout(std::move(layout)) {
setColor(glm::vec4(0, 0, 0, 0.2f));
setTooltipDelay(0.0f);
}
@@ -120,9 +123,16 @@ void SlotView::refreshTooltip(const ItemStack& stack, const ItemDef& item) {
return;
}
if (itemid) {
- tooltip = util::pascal_case(
- langs::get(util::str2wstr_utf8(item.caption))
- );
+ dv::value* caption = stack.getField("caption");
+ if (caption != nullptr) {
+ tooltip = util::pascal_case(
+ langs::get(util::str2wstr_utf8(caption->asString()))
+ );
+ } else {
+ tooltip = util::pascal_case(
+ langs::get(util::str2wstr_utf8(item.caption))
+ );
+ }
} else {
tooltip.clear();
}
@@ -148,19 +158,37 @@ void SlotView::drawItemIcon(
UVRegion region = previews.get(block.name);
batch.rect(
- pos.x, pos.y, SLOT_SIZE, SLOT_SIZE,
- 0, 0, 0, region, false, true, tint
+ pos.x,
+ pos.y,
+ SLOT_SIZE,
+ SLOT_SIZE,
+ 0,
+ 0,
+ 0,
+ region,
+ false,
+ true,
+ tint
);
break;
}
case ItemIconType::SPRITE: {
auto textureRegion =
util::get_texture_region(assets, item.icon, "blocks:notfound");
-
+
batch.texture(textureRegion.texture);
batch.rect(
- pos.x, pos.y, SLOT_SIZE, SLOT_SIZE,
- 0, 0, 0, textureRegion.region, false, true, tint
+ pos.x,
+ pos.y,
+ SLOT_SIZE,
+ SLOT_SIZE,
+ 0,
+ 0,
+ 0,
+ textureRegion.region,
+ false,
+ true,
+ tint
);
break;
}
@@ -184,7 +212,7 @@ void SlotView::draw(const DrawContext& pctx, const Assets& assets) {
glm::vec4 tint(1, 1, 1, isEnabled() ? 1 : 0.5f);
glm::vec2 pos = calcPos();
glm::vec4 color = getColor();
-
+
if (hover || highlighted) {
tint *= 1.333f;
color = glm::vec4(1, 1, 1, 0.2f);
@@ -262,7 +290,7 @@ void SlotView::drawItemInfo(
batch.setColor({0, 0, 0, 0.75f});
batch.rect(pos.x - 2, pos.y - 2, 6, SLOT_SIZE + 4);
float t = static_cast(uses) / item.uses;
-
+
int height = SLOT_SIZE * t;
batch.setColor({(1.0f - t * 0.8f), 0.4f, t * 0.8f + 0.2f, 1.0f});
batch.rect(pos.x, pos.y + SLOT_SIZE - height, 2, height);
@@ -317,8 +345,7 @@ void SlotView::performRightClick(ItemStack& stack, ItemStack& grabbed) {
}
return;
}
- if (layout.itemSource)
- return;
+ if (layout.itemSource) return;
if (grabbed.isEmpty()) {
if (!stack.isEmpty() && layout.taking) {
grabbed.set(std::move(stack));
@@ -342,15 +369,15 @@ void SlotView::performRightClick(ItemStack& stack, ItemStack& grabbed) {
} else {
grabbed = ItemStack(stack.getItemId(), count - 1);
}
- } else if (stack.accepts(grabbed) && stack.getCount() < stackDef.stackSize) {
+ } else if (stack.accepts(grabbed) &&
+ stack.getCount() < stackDef.stackSize) {
stack.setCount(stack.getCount() + 1);
grabbed.setCount(grabbed.getCount() - 1);
}
}
void SlotView::clicked(Mousecode button) {
- if (bound == nullptr)
- return;
+ if (bound == nullptr) return;
auto exchangeSlot =
std::dynamic_pointer_cast(gui.get(EXCHANGE_SLOT_NAME));
if (exchangeSlot == nullptr) {
@@ -358,7 +385,7 @@ void SlotView::clicked(Mousecode button) {
}
ItemStack& grabbed = exchangeSlot->getStack();
ItemStack& stack = *bound;
-
+
if (button == Mousecode::BUTTON_1) {
performLeftClick(stack, grabbed);
} else if (button == Mousecode::BUTTON_2) {
@@ -382,9 +409,7 @@ const std::wstring& SlotView::getTooltip() const {
}
void SlotView::bind(
- int64_t inventoryid,
- ItemStack& stack,
- const Content* content
+ int64_t inventoryid, ItemStack& stack, const Content* content
) {
this->inventoryid = inventoryid;
bound = &stack;
@@ -403,11 +428,11 @@ InventoryView::InventoryView(GUI& gui) : Container(gui, glm::vec2()) {
setColor(glm::vec4(0, 0, 0, 0.0f));
}
-InventoryView::~InventoryView() {}
-
+InventoryView::~InventoryView() {
+}
std::shared_ptr InventoryView::addSlot(const SlotLayout& layout) {
- uint width = InventoryView::SLOT_SIZE + layout.padding;
+ uint width = InventoryView::SLOT_SIZE + layout.padding;
uint height = InventoryView::SLOT_SIZE + layout.padding;
auto pos = layout.position;
@@ -432,14 +457,12 @@ std::shared_ptr InventoryView::getInventory() const {
return inventory;
}
-
size_t InventoryView::getSlotsCount() const {
return slots.size();
}
void InventoryView::bind(
- const std::shared_ptr& inventory,
- const Content* content
+ const std::shared_ptr& inventory, const Content* content
) {
this->inventory = inventory;
this->content = content;