blob: 11a78b3fef6a86091e37dd63a9d4586feb9086c6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#pragma once
#include "StarItemBag.hpp"
#include "StarWidget.hpp"
#include "StarItemSlotWidget.hpp"
#include "StarItem.hpp"
namespace Star {
STAR_CLASS(ItemGridWidget);
class ItemGridWidget : public Widget {
public:
ItemGridWidget(ItemBagConstPtr bag, Vec2I const& dimensions, Vec2I const& spacing, String const& backingImage, unsigned bagOffset);
ItemGridWidget(ItemBagConstPtr bag, Vec2I const& dimensions, Vec2I const& rowSpacing, Vec2I const& columnSpacing, String const& backingImage, unsigned bagOffset);
ItemBagConstPtr bag() const;
ItemPtr itemAt(Vec2I const& position) const;
ItemPtr itemAt(size_t index) const;
ItemPtr selectedItem() const;
ItemSlotWidgetPtr itemWidgetAt(Vec2I const& position) const;
ItemSlotWidgetPtr itemWidgetAt(size_t index) const;
// Returns the dimensions of the item grid
Vec2I dimensions() const;
// Returns the number of item slots in the grid (dimensions.x() * dimensions.y())
size_t itemSlots() const;
// Returns the size of the underlying bag.
size_t bagSize() const;
// Returns the min of bagSize() and itemSlots()
size_t effectiveSize() const;
size_t bagLocationAt(Vec2I const& position) const;
Vec2I positionOfSlot(size_t slotNumber);
bool sendEvent(InputEvent const& event) override;
void setCallback(WidgetCallbackFunc callback);
void setRightClickCallback(WidgetCallbackFunc callback);
void setMiddleClickCallback(WidgetCallbackFunc callback);
void setItemBag(ItemBagConstPtr bag);
void setProgress(float progress);
size_t selectedIndex() const;
void updateAllItemSlots();
// Item states, keeping track of new items
void updateItemState();
void clearChangedSlots();
bool slotsChanged();
void indicateChangedSlots();
void setHighlightEmpty(bool highlight);
void setBackingImageAffinity(bool full, bool empty);
void showDurability(bool show);
virtual RectI getScissorRect() const override;
protected:
void renderImpl() override;
HashSet<ItemDescriptor> uniqueItemState();
List<String> slotItemNames();
private:
Vec2I locOfItemSlot(unsigned slot) const;
ItemBagConstPtr m_bag;
List<ItemSlotWidgetPtr> m_slots;
unsigned m_bagOffset;
Vec2I m_dimensions;
Vec2I m_rowSpacing;
Vec2I m_columnSpacing;
List<String> m_itemNames;
Set<size_t> m_changedSlots;
RectI m_itemDraggableArea;
String m_backingImage;
bool m_drawBackingImageWhenFull;
bool m_drawBackingImageWhenEmpty;
bool m_showDurability;
float m_progress;
bool m_highlightEmpty;
unsigned m_selectedIndex;
WidgetCallbackFunc m_callback;
WidgetCallbackFunc m_rightClickCallback;
WidgetCallbackFunc m_middleClickCallback;
};
}
|