diff options
| -rw-r--r-- | data/gui_buttons.png | bin | 13232 -> 2106 bytes | |||
| -rw-r--r-- | data/gui_icons.png | bin | 0 -> 7545 bytes | |||
| -rw-r--r-- | datasrc/content.py | 15 | ||||
| -rw-r--r-- | src/game/client/components/menus.cpp | 38 | ||||
| -rw-r--r-- | src/game/client/components/menus.h | 3 | ||||
| -rw-r--r-- | src/game/client/components/menus_ingame.cpp | 74 |
6 files changed, 96 insertions, 34 deletions
diff --git a/data/gui_buttons.png b/data/gui_buttons.png index 3593569f..ea9a701d 100644 --- a/data/gui_buttons.png +++ b/data/gui_buttons.png Binary files differdiff --git a/data/gui_icons.png b/data/gui_icons.png new file mode 100644 index 00000000..61f33841 --- /dev/null +++ b/data/gui_icons.png Binary files differdiff --git a/datasrc/content.py b/datasrc/content.py index 712bba70..31f5092f 100644 --- a/datasrc/content.py +++ b/datasrc/content.py @@ -229,6 +229,7 @@ image_emoticons = Image("emoticons", "emoticons.png") image_demobuttons = Image("demobuttons", "demo_buttons.png") image_fileicons = Image("fileicons", "file_icons.png") image_guibuttons = Image("guibuttons", "gui_buttons.png") +image_guiicons = Image("guiicons", "gui_icons.png") container.images.Add(image_null) container.images.Add(image_game) @@ -242,6 +243,7 @@ container.images.Add(Image("console_bar", "console_bar.png")) container.images.Add(image_demobuttons) container.images.Add(image_fileicons) container.images.Add(image_guibuttons) +container.images.Add(image_guiicons) container.pickups.Add(Pickup("health")) container.pickups.Add(Pickup("armor")) @@ -255,7 +257,8 @@ set_browseicons = SpriteSet("browseicons", image_browseicons, 4, 1) set_emoticons = SpriteSet("emoticons", image_emoticons, 4, 4) set_demobuttons = SpriteSet("demobuttons", image_demobuttons, 5, 1) set_fileicons = SpriteSet("fileicons", image_fileicons, 8, 1) -set_guibuttons = SpriteSet("guibuttons", image_guibuttons, 16, 2) +set_guibuttons = SpriteSet("guibuttons", image_guibuttons, 6, 2) +set_guiicons = SpriteSet("guiicons", image_guiicons, 8, 2) container.spritesets.Add(set_particles) container.spritesets.Add(set_game) @@ -265,6 +268,7 @@ container.spritesets.Add(set_emoticons) container.spritesets.Add(set_demobuttons) container.spritesets.Add(set_fileicons) container.spritesets.Add(set_guibuttons) +container.spritesets.Add(set_guiicons) container.sprites.Add(Sprite("part_slice", set_particles, 0,0,1,1)) container.sprites.Add(Sprite("part_ball", set_particles, 1,0,1,1)) @@ -387,11 +391,12 @@ container.sprites.Add(Sprite("file_folder", set_fileicons, 2,0,1,1)) container.sprites.Add(Sprite("file_map1", set_fileicons, 5,0,1,1)) container.sprites.Add(Sprite("file_map2", set_fileicons, 6,0,1,1)) -container.sprites.Add(Sprite("guibutton_chatoff", set_guibuttons, 0,0,4,2)) -container.sprites.Add(Sprite("guibutton_chaton", set_guibuttons, 4,0,4,2)) -container.sprites.Add(Sprite("guibutton_friendadd", set_guibuttons, 8,0,4,2)) -container.sprites.Add(Sprite("guibutton_friendrem", set_guibuttons, 12,0,4,2)) +container.sprites.Add(Sprite("guibutton_off", set_guibuttons, 0,0,2,2)) +container.sprites.Add(Sprite("guibutton_on", set_guibuttons, 2,0,2,2)) +container.sprites.Add(Sprite("guibutton_hover", set_guibuttons, 4,0,2,2)) +container.sprites.Add(Sprite("guiicon_mute", set_guiicons, 0,0,4,2)) +container.sprites.Add(Sprite("guiicon_friend", set_guiicons, 4,0,4,2)) anim = Animation("base") anim.body.frames.Add(AnimKeyframe(0, 0, -4, 0)) diff --git a/src/game/client/components/menus.cpp b/src/game/client/components/menus.cpp index d8ddb276..568b3a6e 100644 --- a/src/game/client/components/menus.cpp +++ b/src/game/client/components/menus.cpp @@ -92,6 +92,23 @@ int CMenus::DoButton_Icon(int ImageId, int SpriteId, const CUIRect *pRect) return 0; } +int CMenus::DoButton_Toggle(const void *pID, int Checked, const CUIRect *pRect) +{ + Graphics()->TextureSet(g_pData->m_aImages[IMAGE_GUIBUTTONS].m_Id); + Graphics()->QuadsBegin(); + RenderTools()->SelectSprite(Checked?SPRITE_GUIBUTTON_ON:SPRITE_GUIBUTTON_OFF); + IGraphics::CQuadItem QuadItem(pRect->x, pRect->y, pRect->w, pRect->h); + Graphics()->QuadsDrawTL(&QuadItem, 1); + if((UI()->HotItem() == pID)) + { + RenderTools()->SelectSprite(SPRITE_GUIBUTTON_HOVER); + IGraphics::CQuadItem QuadItem(pRect->x, pRect->y, pRect->w, pRect->h); + Graphics()->QuadsDrawTL(&QuadItem, 1); + } + Graphics()->QuadsEnd(); + + return UI()->DoButtonLogic(pID, "", Checked, pRect); +} int CMenus::DoButton_Menu(const void *pID, const char *pText, int Checked, const CUIRect *pRect) { @@ -555,22 +572,23 @@ int CMenus::RenderMenubar(CUIRect r) // online menus Box.VSplitLeft(90.0f, &Button, &Box); static int s_GameButton=0; - if(DoButton_MenuTab(&s_GameButton, Localize("Game"), m_ActivePage==PAGE_GAME, &Button, CUI::CORNER_T)) + if(DoButton_MenuTab(&s_GameButton, Localize("Game"), m_ActivePage==PAGE_GAME, &Button, CUI::CORNER_TL)) NewPage = PAGE_GAME; - Box.VSplitLeft(4.0f, 0, &Box); - Box.VSplitLeft(140.0f, &Button, &Box); + Box.VSplitLeft(90.0f, &Button, &Box); + static int s_PlayersButton=0; + if(DoButton_MenuTab(&s_PlayersButton, Localize("Players"), m_ActivePage==PAGE_PLAYERS, &Button, 0)) + NewPage = PAGE_PLAYERS; + + Box.VSplitLeft(130.0f, &Button, &Box); static int s_ServerInfoButton=0; - if(DoButton_MenuTab(&s_ServerInfoButton, Localize("Server info"), m_ActivePage==PAGE_SERVER_INFO, &Button, CUI::CORNER_T)) + if(DoButton_MenuTab(&s_ServerInfoButton, Localize("Server info"), m_ActivePage==PAGE_SERVER_INFO, &Button, 0)) NewPage = PAGE_SERVER_INFO; - Box.VSplitLeft(4.0f, 0, &Box); - Box.VSplitLeft(140.0f, &Button, &Box); + Box.VSplitLeft(130.0f, &Button, &Box); static int s_CallVoteButton=0; - if(DoButton_MenuTab(&s_CallVoteButton, Localize("Call vote"), m_ActivePage==PAGE_CALLVOTE, &Button, CUI::CORNER_T)) + if(DoButton_MenuTab(&s_CallVoteButton, Localize("Call vote"), m_ActivePage==PAGE_CALLVOTE, &Button, CUI::CORNER_TR)) NewPage = PAGE_CALLVOTE; - - Box.VSplitLeft(30.0f, 0, &Box); } /* @@ -799,6 +817,8 @@ int CMenus::Render() { if(m_GamePage == PAGE_GAME) RenderGame(MainView); + else if(m_GamePage == PAGE_PLAYERS) + RenderPlayers(MainView); else if(m_GamePage == PAGE_SERVER_INFO) RenderServerInfo(MainView); else if(m_GamePage == PAGE_CALLVOTE) diff --git a/src/game/client/components/menus.h b/src/game/client/components/menus.h index 758bcd3d..11047a0b 100644 --- a/src/game/client/components/menus.h +++ b/src/game/client/components/menus.h @@ -39,6 +39,7 @@ class CMenus : public CComponent int DoButton_DemoPlayer(const void *pID, const char *pText, int Checked, const CUIRect *pRect); int DoButton_Sprite(const void *pID, int ImageID, int SpriteID, int Checked, const CUIRect *pRect, int Corners); + int DoButton_Toggle(const void *pID, int Checked, const CUIRect *pRect); int DoButton_Menu(const void *pID, const char *pText, int Checked, const CUIRect *pRect); int DoButton_MenuTab(const void *pID, const char *pText, int Checked, const CUIRect *pRect, int Corners); @@ -111,6 +112,7 @@ class CMenus : public CComponent { PAGE_NEWS=1, PAGE_GAME, + PAGE_PLAYERS, PAGE_SERVER_INFO, PAGE_CALLVOTE, PAGE_INTERNET, @@ -215,6 +217,7 @@ class CMenus : public CComponent // found in menus_ingame.cpp void RenderGame(CUIRect MainView); + void RenderPlayers(CUIRect MainView); void RenderServerInfo(CUIRect MainView); void RenderServerControl(CUIRect MainView); void RenderServerControlKick(CUIRect MainView, bool FilterSpectators); diff --git a/src/game/client/components/menus_ingame.cpp b/src/game/client/components/menus_ingame.cpp index d3e9933f..254faade 100644 --- a/src/game/client/components/menus_ingame.cpp +++ b/src/game/client/components/menus_ingame.cpp @@ -5,6 +5,7 @@ #include <engine/config.h> #include <engine/demo.h> #include <engine/friends.h> +#include <engine/graphics.h> #include <engine/serverbrowser.h> #include <engine/textrender.h> #include <engine/shared/config.h> @@ -24,11 +25,11 @@ void CMenus::RenderGame(CUIRect MainView) { - CUIRect Button, ButtonBar, Options; - RenderTools()->DrawUIRect(&MainView, ms_ColorTabbarActive, CUI::CORNER_ALL, 10.0f); + CUIRect Button, ButtonBar; + MainView.HSplitTop(45.0f, &ButtonBar, &MainView); + RenderTools()->DrawUIRect(&ButtonBar, ms_ColorTabbarActive, CUI::CORNER_ALL, 10.0f); // button bar - MainView.HSplitTop(45.0f, &ButtonBar, &MainView); ButtonBar.HSplitTop(10.0f, 0, &ButtonBar); ButtonBar.HSplitTop(25.0f, &ButtonBar, 0); ButtonBar.VMargin(10.0f, &ButtonBar); @@ -106,6 +107,12 @@ void CMenus::RenderGame(CUIRect MainView) else Client()->DemoRecorder_Stop(); } +} + +void CMenus::RenderPlayers(CUIRect MainView) +{ + CUIRect Button, ButtonBar, Options, Player; + RenderTools()->DrawUIRect(&MainView, ms_ColorTabbarActive, CUI::CORNER_ALL, 10.0f); // player options MainView.Margin(10.0f, &Options); @@ -114,14 +121,40 @@ void CMenus::RenderGame(CUIRect MainView) Options.HSplitTop(50.0f, &Button, &Options); UI()->DoLabelScaled(&Button, Localize("Player options"), 34.0f, -1); - CUIRect Player; - static int s_aPlayerIDs[MAX_CLIENTS][4] = {{0}}; - for(int i = 0; i < MAX_CLIENTS; ++i) + // headline + Options.HSplitTop(34.0f, &ButtonBar, &Options); + ButtonBar.VSplitRight(220.0f, &Player, &ButtonBar); + UI()->DoLabelScaled(&Player, Localize("Player"), 24.0f, -1); + + ButtonBar.HMargin(1.0f, &ButtonBar); + float Width = ButtonBar.h*2.0f; + ButtonBar.VSplitLeft(Width, &Button, &ButtonBar); + Graphics()->TextureSet(g_pData->m_aImages[IMAGE_GUIICONS].m_Id); + Graphics()->QuadsBegin(); + RenderTools()->SelectSprite(SPRITE_GUIICON_MUTE); + IGraphics::CQuadItem QuadItem(Button.x, Button.y, Button.w, Button.h); + Graphics()->QuadsDrawTL(&QuadItem, 1); + Graphics()->QuadsEnd(); + + ButtonBar.VSplitLeft(20.0f, 0, &ButtonBar); + ButtonBar.VSplitLeft(Width, &Button, &ButtonBar); + Graphics()->TextureSet(g_pData->m_aImages[IMAGE_GUIICONS].m_Id); + Graphics()->QuadsBegin(); + RenderTools()->SelectSprite(SPRITE_GUIICON_FRIEND); + QuadItem = IGraphics::CQuadItem(Button.x, Button.y, Button.w, Button.h); + Graphics()->QuadsDrawTL(&QuadItem, 1); + Graphics()->QuadsEnd(); + + // options + static int s_aPlayerIDs[MAX_CLIENTS][2] = {{0}}; + for(int i = 0, Count = 0; i < MAX_CLIENTS; ++i) { if(!m_pClient->m_Snap.m_paPlayerInfos[i] || i == m_pClient->m_Snap.m_LocalClientID) continue; Options.HSplitTop(28.0f, &ButtonBar, &Options); + if(Count++%2 == 0) + RenderTools()->DrawUIRect(&ButtonBar, vec4(1.0f, 1.0f, 1.0f, 0.25f), CUI::CORNER_ALL, 10.0f); ButtonBar.VSplitRight(220.0f, &Player, &ButtonBar); // player info @@ -142,22 +175,23 @@ void CMenus::RenderGame(CUIRect MainView) TextRender()->TextEx(&Cursor, m_pClient->m_aClients[i].m_aClan, -1); // ignore button - ButtonBar.HMargin(1.0f, &ButtonBar); - ButtonBar.VSplitLeft(ButtonBar.h*2.0f, &Button, &ButtonBar); - if(DoButton_Sprite(&s_aPlayerIDs[i][0], IMAGE_GUIBUTTONS, SPRITE_GUIBUTTON_CHATON, !m_pClient->m_aClients[i].m_ChatIgnore, &Button, CUI::CORNER_L)) - m_pClient->m_aClients[i].m_ChatIgnore = 0; - ButtonBar.VSplitLeft(ButtonBar.h*2.0f, &Button, &ButtonBar); - if(DoButton_Sprite(&s_aPlayerIDs[i][1], IMAGE_GUIBUTTONS, SPRITE_GUIBUTTON_CHATOFF, m_pClient->m_aClients[i].m_ChatIgnore, &Button, CUI::CORNER_R)) - m_pClient->m_aClients[i].m_ChatIgnore = 1; + ButtonBar.HMargin(2.0f, &ButtonBar); + ButtonBar.VSplitLeft(Width, &Button, &ButtonBar); + Button.VSplitLeft((Width-Button.h)/4.0f, 0, &Button); + Button.VSplitLeft(Button.h, &Button, 0); + if(DoButton_Toggle(&s_aPlayerIDs[i][0], m_pClient->m_aClients[i].m_ChatIgnore, &Button)) + m_pClient->m_aClients[i].m_ChatIgnore ^= 1; // friend button - ButtonBar.VSplitLeft(10.0f, 0, &ButtonBar); - ButtonBar.VSplitLeft(ButtonBar.h*2.0f, &Button, &ButtonBar); - if(DoButton_Sprite(&s_aPlayerIDs[i][2], IMAGE_GUIBUTTONS, SPRITE_GUIBUTTON_FRIENDREM, !m_pClient->m_aClients[i].m_Friend, &Button, CUI::CORNER_L)) - m_pClient->Friends()->RemoveFriend(m_pClient->m_aClients[i].m_aName, m_pClient->m_aClients[i].m_aClan); - ButtonBar.VSplitLeft(ButtonBar.h*2.0f, &Button, &ButtonBar); - if(DoButton_Sprite(&s_aPlayerIDs[i][3], IMAGE_GUIBUTTONS, SPRITE_GUIBUTTON_FRIENDADD, m_pClient->m_aClients[i].m_Friend, &Button, CUI::CORNER_R)) - m_pClient->Friends()->AddFriend(m_pClient->m_aClients[i].m_aName, m_pClient->m_aClients[i].m_aClan); + ButtonBar.VSplitLeft(20.0f, &Button, &ButtonBar); + ButtonBar.VSplitLeft(Width, &Button, &ButtonBar); + Button.VSplitLeft((Width-Button.h)/4.0f, 0, &Button); + Button.VSplitLeft(Button.h, &Button, 0); + if(DoButton_Toggle(&s_aPlayerIDs[i][1], m_pClient->m_aClients[i].m_Friend, &Button)) + if(m_pClient->m_aClients[i].m_Friend) + m_pClient->Friends()->RemoveFriend(m_pClient->m_aClients[i].m_aName, m_pClient->m_aClients[i].m_aClan); + else + m_pClient->Friends()->AddFriend(m_pClient->m_aClients[i].m_aName, m_pClient->m_aClients[i].m_aClan); } /* |