From 20a09d5edee690f86e7d0bae343086f6a46ffed4 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Mon, 14 Feb 2011 17:41:49 +0200 Subject: new hotbar, more minecraft-like --- src/main.cpp | 129 +++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 99 insertions(+), 30 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 1f8091a7f..bcc8dc446 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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 @@ public: } } - // 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<= 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<(0,0,1,1), false, false); + bgtext->setBackgroundColor( + video::SColor(128,0,0,0)); for(s32 i=0; iaddImage( @@ -1224,6 +1225,7 @@ public: { m_images[i]->remove(); } + bgtext->remove(); } void updatePosition(v2s32 pos) @@ -1234,6 +1236,10 @@ public: m_images[i]->setRelativePosition(pos + spacing*i); m_texts[i]->setRelativePosition(pos + spacing*i); } + core::rect 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 @@ public: 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 @@ public: m_images[i]->setImage(item->getImage()); std::ostringstream os; - os<getText(); if(m_selection == j) - os<<" <-"; + os<<"-> "; + os<getText(); m_texts[i]->setText(narrow_to_wide(os.str()).c_str()); /*wchar_t t[10]; @@ -1293,11 +1299,66 @@ public: private: s32 m_itemcount; + gui::IGUIStaticText *bgtext; core::array m_texts; core::array 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"< barrect(0,0,width,height); + barrect += pos; + video::SColor bgcolor(255,128,128,128); + driver->draw2DRectangle(bgcolor, barrect, NULL);*/ + + core::rect imgrect(0,0,imgsize,imgsize); + + for(s32 i=0; igetItem(i); + + core::rect 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(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 > 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"<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 -- cgit v1.2.3