-
Notifications
You must be signed in to change notification settings - Fork 0
/
Actionbar.cpp
113 lines (84 loc) · 2.37 KB
/
Actionbar.cpp
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
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "Actionbar.h"
#include <typeinfo>
#include "main.h"
#include "SDL_TTF.h"
Actionbar::Actionbar(void)
{
barObjects = NULL;
objectsStartOffsetX = 120;
objectsStartOffsetY = 100;
objectSize = 64;
actionbarSize = 8;
SCREEN_HEIGHT_old = 0;
SCREEN_WIDTH_old = 0;
setScreenSize();
}
Actionbar::~Actionbar(void)
{
}
void Actionbar::setScreenSize()
{
if (SCREEN_WIDTH_old != SCREEN_WIDTH || SCREEN_WIDTH_old != SCREEN_WIDTH)
{
SCREEN_WIDTH_old = SCREEN_WIDTH;
SCREEN_WIDTH_old = SCREEN_WIDTH;
actionbarX = SCREEN_WIDTH/2-372;
actionbarY = SCREEN_HEIGHT-160;
delete[] barObjects;
barObjects = new InventoryObject*[actionbarSize];
for (int32_t i = 0; i<actionbarSize; i++)
{
barObjects[i] = NULL;
}
}
}
void Actionbar::add(InventoryObject* inventoryObject, int index)
{
barObjects[index] = inventoryObject;
}
void Actionbar::remove(int index)
{
barObjects[index] = NULL;
}
void Actionbar::draw()
{
setScreenSize();
SDL_Surface* inventoryToolbar = NULL;
inventoryToolbar = load_image("GUI/InventoryToolbar.png");
apply_surface(actionbarX, actionbarY, inventoryToolbar, screen);
for (int32_t i = 0; i<actionbarSize; i++)
{
if (barObjects[i] != NULL)
{
barObjects[i]->draw(actionbarX+objectsStartOffsetX+i*objectSize, actionbarY+objectsStartOffsetY);
}
}
apply_surface(actionbarX+objectsStartOffsetX+world.player.activeAction*objectSize, actionbarY+objectsStartOffsetY, load_image("GUI/inventoryActive.png"), screen);
}
void Actionbar::onMouseDown()
{
int xRelativeToItems = mouseX - actionbarX - objectsStartOffsetX;
int yRelativeToItems = mouseY - actionbarY - objectsStartOffsetY;
if (xRelativeToItems < 0 || xRelativeToItems > actionbarSize*objectSize
|| yRelativeToItems<0 || yRelativeToItems > objectSize )
{
return;
}
int droppedIndex = xRelativeToItems/objectSize;
world.player.activeAction = droppedIndex;
}
void Actionbar::onMouseUp()
{
int xRelativeToItems = mouseX - actionbarX - objectsStartOffsetX;
int yRelativeToItems = mouseY - actionbarY - objectsStartOffsetY;
if (xRelativeToItems < 0 || xRelativeToItems > actionbarSize*objectSize
|| yRelativeToItems<0 || yRelativeToItems > objectSize )
{
return;
}
int droppedIndex = xRelativeToItems/objectSize;
if (world.player.inventory.draggingIndex != -1)
{
barObjects[droppedIndex] = world.player.inventory.objects[world.player.inventory.draggingIndex];
}
}