Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
illuna-minetest
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Illuna-Minetest
illuna-minetest
Commits
20a09d5e
Commit
20a09d5e
authored
14 years ago
by
Perttu Ahola
Browse files
Options
Downloads
Patches
Plain Diff
new hotbar, more minecraft-like
parent
467f43d4
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/guiInventoryMenu.cpp
+35
-19
35 additions, 19 deletions
src/guiInventoryMenu.cpp
src/guiInventoryMenu.h
+3
-2
3 additions, 2 deletions
src/guiInventoryMenu.h
src/main.cpp
+99
-30
99 additions, 30 deletions
src/main.cpp
with
137 additions
and
51 deletions
src/guiInventoryMenu.cpp
+
35
−
19
View file @
20a09d5e
...
...
@@ -21,21 +21,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include
"guiInventoryMenu.h"
#include
"constants.h"
void
drawInventoryItem
(
gui
::
IGUIEnvironment
*
env
,
void
drawInventoryItem
(
video
::
IVideoDriver
*
driver
,
gui
::
IGUIFont
*
font
,
InventoryItem
*
item
,
core
::
rect
<
s32
>
rect
,
const
core
::
rect
<
s32
>
*
clip
)
{
gui
::
IGUISkin
*
skin
=
env
->
getSkin
();
if
(
!
skin
)
if
(
item
==
NULL
)
return
;
video
::
IVideoDriver
*
driver
=
env
->
getVideoDriver
();
video
::
ITexture
*
texture
=
NULL
;
if
(
item
!=
NULL
)
{
texture
=
item
->
getImage
();
}
texture
=
item
->
getImage
();
if
(
texture
!=
NULL
)
{
...
...
@@ -48,22 +43,28 @@ void drawInventoryItem(gui::IGUIEnvironment* env,
}
else
{
video
::
SColor
bgcolor
(
128
,
128
,
128
,
128
);
video
::
SColor
bgcolor
(
255
,
50
,
50
,
128
);
driver
->
draw2DRectangle
(
bgcolor
,
rect
,
clip
);
}
if
(
item
!=
NULL
)
if
(
font
!=
NULL
)
{
gui
::
IGUIFont
*
font
=
skin
->
getFont
();
std
::
string
text
=
item
->
getText
();
if
(
font
&&
text
!=
""
)
{
core
::
rect
<
s32
>
rect2
(
rect
.
UpperLeftCorner
,
(
core
::
dimension2d
<
u32
>
(
rect
.
getWidth
(),
15
)));
v2u32
dim
=
font
->
getDimension
(
narrow_to_wide
(
text
).
c_str
());
v2s32
sdim
(
dim
.
X
,
dim
.
Y
);
core
::
rect
<
s32
>
rect2
(
/*rect.UpperLeftCorner,
core::dimension2d<u32>(rect.getWidth(), 15)*/
rect
.
LowerRightCorner
-
sdim
,
sdim
);
video
::
SColor
bgcolor
(
128
,
0
,
0
,
0
);
driver
->
draw2DRectangle
(
bgcolor
,
rect2
,
clip
);
font
->
draw
(
text
.
c_str
(),
rect2
,
video
::
SColor
(
255
,
255
,
255
,
255
),
false
,
false
,
clip
);
...
...
@@ -184,10 +185,16 @@ void GUIInventoryMenu::drawList(const ListDrawSpec &s)
{
video
::
IVideoDriver
*
driver
=
Environment
->
getVideoDriver
();
// Get font
gui
::
IGUIFont
*
font
=
NULL
;
gui
::
IGUISkin
*
skin
=
Environment
->
getSkin
();
if
(
skin
)
font
=
skin
->
getFont
();
InventoryList
*
ilist
=
m_inventory
->
getList
(
s
.
listname
);
core
::
rect
<
s32
>
imgrect
(
0
,
0
,
imgsize
.
X
,
imgsize
.
Y
);
for
(
s32
i
=
0
;
i
<
s
.
geom
.
X
*
s
.
geom
.
Y
;
i
++
)
{
s32
x
=
(
i
%
s
.
geom
.
X
)
*
spacing
.
X
;
...
...
@@ -204,10 +211,19 @@ void GUIInventoryMenu::drawList(const ListDrawSpec &s)
driver
->
draw2DRectangle
(
video
::
SColor
(
255
,
255
,
0
,
0
),
core
::
rect
<
s32
>
(
rect
.
UpperLeftCorner
-
v2s32
(
2
,
2
),
rect
.
LowerRightCorner
+
v2s32
(
2
,
2
)),
&
AbsoluteClippingRect
);
&
AbsoluteClippingRect
);
}
if
(
item
)
{
drawInventoryItem
(
driver
,
font
,
item
,
rect
,
&
AbsoluteClippingRect
);
}
else
{
video
::
SColor
bgcolor
(
255
,
128
,
128
,
128
);
driver
->
draw2DRectangle
(
bgcolor
,
rect
,
&
AbsoluteClippingRect
);
}
drawInventoryItem
(
Environment
,
item
,
rect
,
&
AbsoluteClippingRect
);
}
}
...
...
This diff is collapsed.
Click to expand it.
src/guiInventoryMenu.h
+
3
−
2
View file @
20a09d5e
...
...
@@ -26,9 +26,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include
"utility.h"
#include
"modalMenu.h"
void
drawInventoryItem
(
gui
::
IGUIEnvironment
*
env
,
void
drawInventoryItem
(
video
::
IVideoDriver
*
driver
,
gui
::
IGUIFont
*
font
,
InventoryItem
*
item
,
core
::
rect
<
s32
>
rect
,
const
core
::
rect
<
s32
>
*
clip
=
0
);
const
core
::
rect
<
s32
>
*
clip
);
class
GUIInventoryMenu
:
public
GUIModalMenu
{
...
...
This diff is collapsed.
Click to expand it.
src/main.cpp
+
99
−
30
View file @
20a09d5e
...
...
@@ -399,11 +399,14 @@ extern void set_default_settings();
IrrlichtDevice
*
g_device
=
NULL
;
Client
*
g_client
=
NULL
;
//const s16 quickinv_size = 48;
//const s16 quickinv_spacing = 64;
const
s16
quickinv_size
=
32
;
const
s16
quickinv_spacing
=
40
;
const
s16
quickinv_itemcount
=
8
;
/*const s16 quickinv_size = 40;
const s16 quickinv_padding = 8;
const s16 quickinv_spacing = quickinv_size + quickinv_padding;
const s16 quickinv_outer_padding = 4;
const s16 quickinv_itemcount = 8;*/
const
s32
hotbar_itemcount
=
8
;
const
s32
hotbar_imagesize
=
36
;
/*
GUI Stuff
...
...
@@ -629,24 +632,14 @@ class MyEventReceiver : public IEventReceiver
}
}
// Material selection
/*if(event.KeyInput.Key == irr::KEY_KEY_F)
{
if(g_selected_item < PLAYER_INVENTORY_SIZE-1)
g_selected_item++;
else
g_selected_item = 0;
dstream<<DTIME<<"Selected item: "
<<g_selected_item<<std::endl;
}*/
// Item selection
if
(
event
.
KeyInput
.
Key
>=
irr
::
KEY_KEY_0
&&
event
.
KeyInput
.
Key
<=
irr
::
KEY_KEY_9
)
{
u16
s1
=
event
.
KeyInput
.
Key
-
irr
::
KEY_KEY_0
;
if
(
event
.
KeyInput
.
Key
==
irr
::
KEY_KEY_0
)
s1
=
10
;
if
(
s1
<
PLAYER_INVENTORY_SIZE
)
if
(
s1
<
PLAYER_INVENTORY_SIZE
&&
s1
<
hotbar_itemcount
)
g_selected_item
=
s1
-
1
;
dstream
<<
DTIME
<<
"Selected item: "
<<
g_selected_item
<<
std
::
endl
;
...
...
@@ -715,9 +708,12 @@ class MyEventReceiver : public IEventReceiver
{
/*dstream<<"event.MouseInput.Wheel="
<<event.MouseInput.Wheel<<std::endl;*/
u16
max_item
=
MYMIN
(
PLAYER_INVENTORY_SIZE
-
1
,
hotbar_itemcount
-
1
);
if
(
event
.
MouseInput
.
Wheel
<
0
)
{
if
(
g_selected_item
<
PLAYER_INVENTORY_SIZE
-
1
)
if
(
g_selected_item
<
max_item
)
g_selected_item
++
;
else
g_selected_item
=
0
;
...
...
@@ -727,7 +723,7 @@ class MyEventReceiver : public IEventReceiver
if
(
g_selected_item
>
0
)
g_selected_item
--
;
else
g_selected_item
=
PLAYER_INVENTORY_SIZE
-
1
;
g_selected_item
=
max_item
;
}
}
}
...
...
@@ -1179,6 +1175,8 @@ void updateViewingRange(f32 frametime_in, Client *client)
frametime_old
=
frametime
;
}
#if 0
// TODO: Remove
class GUIQuickInventory
{
public:
...
...
@@ -1193,6 +1191,9 @@ class GUIQuickInventory
{
core::rect<s32> imgsize(0,0,quickinv_size,quickinv_size);
core::rect<s32> textsize(0,0,quickinv_size,quickinv_size);
bgtext = env->addStaticText(L"", core::rect<s32>(0,0,1,1), false, false);
bgtext->setBackgroundColor(
video::SColor(128,0,0,0));
for(s32 i=0; i<m_itemcount; i++)
{
m_images.push_back(env->addImage(
...
...
@@ -1224,6 +1225,7 @@ class GUIQuickInventory
{
m_images[i]->remove();
}
bgtext->remove();
}
void updatePosition(v2s32 pos)
...
...
@@ -1234,6 +1236,10 @@ class GUIQuickInventory
m_images[i]->setRelativePosition(pos + spacing*i);
m_texts[i]->setRelativePosition(pos + spacing*i);
}
core::rect<s32> bgrect(-quickinv_outer_padding,-quickinv_outer_padding,
(quickinv_itemcount-1)*quickinv_spacing+quickinv_size+quickinv_outer_padding,
quickinv_size+quickinv_outer_padding);
bgtext->setRelativePosition(bgrect+pos);
}
void setSelection(s32 i)
...
...
@@ -1265,7 +1271,7 @@ class GUIQuickInventory
m_images[i]->setImage(NULL);
if(m_selection == j)
m_texts
[
i
]
->
setText
(
L"
<
-"
);
m_texts[i]->setText(L"-
>
");
else
m_texts[i]->setText(L"");
...
...
@@ -1277,9 +1283,9 @@ class GUIQuickInventory
m_images[i]->setImage(item->getImage());
std::ostringstream os;
os
<<
item
->
getText
();
if(m_selection == j)
os
<<
" <-"
;
os<<"-> ";
os<<item->getText();
m_texts[i]->setText(narrow_to_wide(os.str()).c_str());
/*wchar_t t[10];
...
...
@@ -1293,11 +1299,66 @@ class GUIQuickInventory
private:
s32 m_itemcount;
gui::IGUIStaticText *bgtext;
core::array<gui::IGUIStaticText*> m_texts;
core::array<gui::IGUIImage*> m_images;
Inventory *m_inventory;
s32 m_selection;
};
#endif
void
draw_hotbar
(
video
::
IVideoDriver
*
driver
,
gui
::
IGUIFont
*
font
,
v2s32
centerlowerpos
,
s32
imgsize
,
s32
itemcount
,
Inventory
*
inventory
)
{
InventoryList
*
mainlist
=
inventory
->
getList
(
"main"
);
if
(
mainlist
==
NULL
)
{
dstream
<<
"WARNING: draw_hotbar(): mainlist == NULL"
<<
std
::
endl
;
return
;
}
s32
padding
=
imgsize
/
12
;
//s32 height = imgsize + padding*2;
s32
width
=
itemcount
*
(
imgsize
+
padding
*
2
);
// Position of upper left corner of bar
v2s32
pos
=
centerlowerpos
-
v2s32
(
width
/
2
,
imgsize
+
padding
*
2
);
// Draw background color
/*core::rect<s32> barrect(0,0,width,height);
barrect += pos;
video::SColor bgcolor(255,128,128,128);
driver->draw2DRectangle(bgcolor, barrect, NULL);*/
core
::
rect
<
s32
>
imgrect
(
0
,
0
,
imgsize
,
imgsize
);
for
(
s32
i
=
0
;
i
<
itemcount
;
i
++
)
{
InventoryItem
*
item
=
mainlist
->
getItem
(
i
);
core
::
rect
<
s32
>
rect
=
imgrect
+
pos
+
v2s32
(
padding
+
i
*
(
imgsize
+
padding
*
2
),
padding
);
if
(
g_selected_item
==
i
)
{
driver
->
draw2DRectangle
(
video
::
SColor
(
255
,
255
,
0
,
0
),
core
::
rect
<
s32
>
(
rect
.
UpperLeftCorner
-
v2s32
(
1
,
1
)
*
padding
,
rect
.
LowerRightCorner
+
v2s32
(
1
,
1
)
*
padding
),
NULL
);
}
else
{
video
::
SColor
bgcolor2
(
128
,
0
,
0
,
0
);
driver
->
draw2DRectangle
(
bgcolor2
,
rect
,
NULL
);
}
if
(
item
!=
NULL
)
{
drawInventoryItem
(
driver
,
font
,
item
,
rect
,
NULL
);
}
}
}
// Chat data
struct
ChatLine
...
...
@@ -2047,8 +2108,8 @@ int main(int argc, char *argv[])
/*GUIQuickInventory *quick_inventory = new GUIQuickInventory
(guienv, NULL, v2s32(10, 70), 5, &local_inventory);*/
GUIQuickInventory
*
quick_inventory
=
new
GUIQuickInventory
(
guienv
,
NULL
,
v2s32
(
0
,
0
),
quickinv_itemcount
,
&
local_inventory
);
/*
GUIQuickInventory *quick_inventory = new GUIQuickInventory
(guienv, NULL, v2s32(0, 0), quickinv_itemcount, &local_inventory);
*/
// Test the text input system
/*(new GUITextInputMenu(guienv, guiroot, -1, &g_menumgr,
...
...
@@ -2121,7 +2182,7 @@ int main(int argc, char *argv[])
last_screensize
=
screensize
;
screensize
=
driver
->
getScreenSize
();
v2s32
displaycenter
(
screensize
.
X
/
2
,
screensize
.
Y
/
2
);
bool
screensize_changed
=
screensize
!=
last_screensize
;
//
bool screensize_changed = screensize != last_screensize;
// Hilight boxes collected during the loop and displayed
core
::
list
<
core
::
aabbox3d
<
f32
>
>
hilightboxes
;
...
...
@@ -2130,11 +2191,11 @@ int main(int argc, char *argv[])
std
::
wstring
infotext
;
// When screen size changes, update positions and sizes of stuff
if
(
screensize_changed
)
/*
if(screensize_changed)
{
v2s32 pos(displaycenter.X-((quickinv_itemcount-1)*quickinv_spacing+quickinv_size)/2, screensize.Y-quickinv_spacing);
quick_inventory->updatePosition(pos);
}
}
*/
//TimeTaker //timer1("//timer1");
...
...
@@ -2985,8 +3046,8 @@ int main(int argc, char *argv[])
old_selected_item
=
g_selected_item
;
//std::cout<<"Updating local inventory"<<std::endl;
client
.
getLocalInventory
(
local_inventory
);
quick_inventory
->
setSelection
(
g_selected_item
);
quick_inventory
->
update
();
/*
quick_inventory->setSelection(g_selected_item);
quick_inventory->update();
*/
}
/*
...
...
@@ -3089,6 +3150,14 @@ int main(int argc, char *argv[])
*/
// 0-1ms
guienv
->
drawAll
();
/*
Draw hotbar
*/
{
draw_hotbar
(
driver
,
font
,
v2s32
(
displaycenter
.
X
,
screensize
.
Y
),
hotbar_imagesize
,
hotbar_itemcount
,
&
local_inventory
);
}
// End drawing
{
...
...
@@ -3123,7 +3192,7 @@ int main(int argc, char *argv[])
device->yield();*/
}
delete
quick_inventory
;
//
delete quick_inventory;
/*
Disable texture fetches and other stuff that is queued
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment