const TCODColor TCODColor::desaturatedGreen(TCOD_DESATURATED_GREEN); const TCODColor TCODColor::desaturatedSea(TCOD_DESATURATED_SEA); const TCODColor TCODColor::desaturatedCyan(TCOD_DESATURATED_CYAN); const TCODColor TCODColor::desaturatedSky(TCOD_DESATURATED_SKY); const TCODColor TCODColor::desaturatedBlue(TCOD_DESATURATED_BLUE); const TCODColor TCODColor::desaturatedViolet(TCOD_DESATURATED_VIOLET); const TCODColor TCODColor::desaturatedMagenta(TCOD_DESATURATED_MAGENTA); const TCODColor TCODColor::desaturatedPink(TCOD_DESATURATED_PINK); //special const TCODColor TCODColor::silver(TCOD_SILVER); const TCODColor TCODColor::gold(TCOD_GOLD); // color array const TCODColor TCODColor::colors[TCOD_COLOR_NB][TCOD_COLOR_LEVELS] = { {TCODColor(TCOD_DESATURATED_RED),TCODColor(TCOD_LIGHT_RED),TCODColor(TCOD_RED),TCODColor(TCOD_DARK_RED),TCODColor(TCOD_DARKER_RED)}, {TCODColor(TCOD_DESATURATED_ORANGE),TCODColor(TCOD_LIGHT_ORANGE),TCODColor(TCOD_ORANGE),TCODColor(TCOD_DARK_ORANGE),TCODColor(TCOD_DARKER_ORANGE)}, {TCODColor(TCOD_DESATURATED_YELLOW),TCODColor(TCOD_LIGHT_YELLOW),TCODColor(TCOD_YELLOW),TCODColor(TCOD_DARK_YELLOW),TCODColor(TCOD_DARKER_YELLOW)}, {TCODColor(TCOD_DESATURATED_CHARTREUSE),TCODColor(TCOD_LIGHT_CHARTREUSE),TCODColor(TCOD_CHARTREUSE),TCODColor(TCOD_DARK_CHARTREUSE),TCODColor(TCOD_DARKER_CHARTREUSE)}, {TCODColor(TCOD_DESATURATED_GREEN),TCODColor(TCOD_LIGHT_GREEN),TCODColor(TCOD_GREEN),TCODColor(TCOD_DARK_GREEN),TCODColor(TCOD_DARKER_GREEN)}, {TCODColor(TCOD_DESATURATED_SEA),TCODColor(TCOD_LIGHT_SEA),TCODColor(TCOD_SEA),TCODColor(TCOD_DARK_SEA),TCODColor(TCOD_DARKER_SEA)}, {TCODColor(TCOD_DESATURATED_CYAN),TCODColor(TCOD_LIGHT_CYAN),TCODColor(TCOD_CYAN),TCODColor(TCOD_DARK_CYAN),TCODColor(TCOD_DARKER_CYAN)}, {TCODColor(TCOD_DESATURATED_SKY),TCODColor(TCOD_LIGHT_SKY),TCODColor(TCOD_SKY),TCODColor(TCOD_DARK_SKY),TCODColor(TCOD_DARKER_SKY)}, {TCODColor(TCOD_DESATURATED_BLUE),TCODColor(TCOD_LIGHT_BLUE),TCODColor(TCOD_BLUE),TCODColor(TCOD_DARK_BLUE),TCODColor(TCOD_DARKER_BLUE)}, {TCODColor(TCOD_DESATURATED_VIOLET),TCODColor(TCOD_LIGHT_VIOLET),TCODColor(TCOD_VIOLET),TCODColor(TCOD_DARK_VIOLET),TCODColor(TCOD_DARKER_VIOLET)}, {TCODColor(TCOD_DESATURATED_MAGENTA),TCODColor(TCOD_LIGHT_MAGENTA),TCODColor(TCOD_MAGENTA),TCODColor(TCOD_DARK_MAGENTA),TCODColor(TCOD_DARKER_MAGENTA)}, {TCODColor(TCOD_DESATURATED_PINK),TCODColor(TCOD_LIGHT_PINK),TCODColor(TCOD_PINK),TCODColor(TCOD_DARK_PINK),TCODColor(TCOD_DARKER_PINK)}, }; void TCODColor::setHSV(float h, float s, float v) { TCOD_color_t c;
void GraphicsTCOD::drawMainInterface() { Widget::setConsole(output); HBox *hMenu=new HBox(12,-1,0); ToolBar *menuToolbar = new ToolBar(0,0,6,NULL,NULL); menuToolbar->addWidget(new Button("Menu",NULL,menuCbk,NULL)); hMenu->addWidget(menuToolbar); ToolBar *playerToolbar = new ToolBar(0,0,6, NULL, NULL); playerToolbar->addWidget(new Button("Player", NULL, NULL, NULL)); hMenu->addWidget(playerToolbar); ToolBar *socialToolbar = new ToolBar(0,0,6, NULL, NULL); socialToolbar->addWidget(new Button("Social", NULL, NULL, NULL)); hMenu->addWidget(socialToolbar); ToolBar *worldToolbar = new ToolBar(0,0,6, NULL, NULL); worldToolbar->addWidget(new Button("World", NULL, NULL, NULL)); hMenu->addWidget(worldToolbar); ToolBar *toolsToolbar = new ToolBar(0,0,6, NULL, NULL); toolsToolbar->addWidget(new Button("Tools", NULL, NULL, NULL)); hMenu->addWidget(toolsToolbar); ToolBar *helpToolbar = new ToolBar(0,0,6, NULL, NULL); helpToolbar->addWidget(new Button("Help", NULL, NULL, NULL)); hMenu->addWidget(helpToolbar); hMenu->setBackgroundColor(TCODColor(0,0,0), TCODColor(128,128,128)); chatBox = new ScrollBox(0, 0, textOutputConsole->getWidth(), textOutputConsole->getHeight(), 512, textOutputConsole, cMap, this); serverBox = new ScrollBox(0, 0, serverConsole->getWidth(), serverConsole->getHeight()-2, 512, serverConsole, cMap, this); //serverBox->setConsole(serverConsole); chatBox->setRealPosition(0, 32); chatBox->takeCommands(true); commandConsole = chatBox; serverBox->setRealPosition(MAIN_WIDTH/2, 32); serverBox->takeCommands(true); serverBox->insertText("Welcome to The ASCII Project"); serverBox->insertText(" Version 0.0.0o "); serverBox->insertText(" "); serverBox->insertText("Tip: all server input begins with "); serverBox->insertText("The / character."); serverBox->insertText(" "); serverBox->insertText(" "); serverBox->insertText(" "); serverBox->insertText("Please /connect to continue..."); sConsole = chatBox; inputText = new TCODText(1, serverConsole->getHeight()-2, serverConsole->getWidth()-2, 1, serverConsole->getWidth()-2); inputText->setProperties(32, 1000, "$>", 1); inputText->setColors(TCODColor(0,255,0), TCODColor(0,0,0), 1.0f); inputText->render(serverConsole); //offscreenConsole->print(0,0, "Welcome To The ASCII Project"); serverConsole->hline(0,serverConsole->getHeight()-1, serverConsole->getWidth()); serverConsole->hline(0,serverConsole->getHeight()-3, serverConsole->getWidth()); serverConsole->vline(0,0, serverConsole->getHeight()); serverConsole->vline(serverConsole->getWidth()-1,0, serverConsole->getHeight()); bool textInput = false; bool popupOpen = false; //bool placeActionMode = false; unpacking = true; connected = false; loggedIn = false; commandMode = false; APIinQueue = false; chatMessageInQueue = false; actionMode = "placeFloor"; chatText = ""; boost::asio::io_service pri_io_service; tcp::resolver pri_resolver(pri_io_service); if(DEBUG_MODE) { tcp::resolver::query pri_query("localhost", "5250"); tcp::resolver::iterator iterator = pri_resolver.resolve(pri_query); cnet = new ClientSession(pri_io_service, iterator, cMap, this); } else { tcp::resolver::query pri_query("pub.theasciiproject.com", "5250"); tcp::resolver::iterator iterator = pri_resolver.resolve(pri_query); cnet = new ClientSession(pri_io_service, iterator, cMap, this); } boost::thread netThread(&GraphicsTCOD::requestMap, this); //TCODConsole::disableKeyboardRepeat(); while( !TCODConsole::isWindowClosed() ) { TCOD_key_t key; TCOD_mouse_t mouse; TCODSystem::checkForEvent(TCOD_EVENT_KEY_PRESS|TCOD_EVENT_MOUSE,&key,&mouse); Widget::updateWidgets(key,mouse); if(!popupOpen) { if(textInput) inputText->update(key); chatBox->update(mouse); serverBox->update(mouse); } if(drawMenuCheck) { menuPopup=new VBox(35,10,0); ToolBar *menuPopupOptions = new ToolBar(0,0,6,NULL,NULL); menuPopupOptions->addWidget(new Button("Return",NULL,closeMenuCbk,NULL)); menuPopupOptions->addWidget(new Button("Quit",NULL,quitCbk,NULL)); menuPopup->addWidget(menuPopupOptions); popupOpen = true; drawMenuCheck = false; } if(closeMenuCheck) { menuPopup->clear(); delete menuPopup; output->clear(); fixBottom(); popupOpen = false; closeMenuCheck = false; } if(!textInput && loggedIn) { if(key.vk == TCODK_SPACE) { if(commandMode) commandMode = false; else commandMode = true; } if(key.vk == TCODK_UP) { apiCall = "/8"; APIinQueue = true; } else if(key.vk == TCODK_DOWN) { apiCall = "/2"; APIinQueue = true; } else if(key.vk == TCODK_RIGHT) { apiCall = "/6"; APIinQueue = true; } else if(key.vk == TCODK_LEFT) { apiCall = "/4"; APIinQueue = true; } else if(key.c == 'w' && !commandMode) { apiCall = "/8"; APIinQueue = true; } else if(key.c == 'a' && !commandMode) { apiCall = "/4"; APIinQueue = true; } else if(key.c == 's' && !commandMode) { apiCall = "/2"; APIinQueue = true; } else if(key.c == 'd' && !commandMode) { apiCall = "/6"; APIinQueue = true; } else if(key.c == '5' && commandMode) { apiCall = "/mapReset"; APIinQueue = true; } else if(key.c == '<' && !commandMode) { apiCall = "/5"; APIinQueue = true; } else if(key.c == '>' && !commandMode) { apiCall = "/15"; APIinQueue = true; } else if(key.c == 'i' && !commandMode) { if(actionMode == "removeTile") apiCall = "/18"; else if(actionMode == "placeWall") apiCall = "/28"; else if(actionMode == "placeFloor") apiCall = "/38"; else if(actionMode == "digHole") apiCall = "/48"; APIinQueue = true; } else if(key.c == 'j' && !commandMode) { if(actionMode == "removeTile") apiCall = "/14"; else if(actionMode == "placeWall") apiCall = "/24"; else if(actionMode == "placeFloor") apiCall = "/34"; else if(actionMode == "digHole") apiCall = "/44"; APIinQueue = true; } else if(key.c == 'k' && !commandMode) { if(actionMode == "removeTile") apiCall = "/12"; else if(actionMode == "placeWall") apiCall = "/22"; else if(actionMode == "placeFloor") apiCall = "/32"; else if(actionMode == "digHole") apiCall = "/42"; APIinQueue = true; } else if(key.c == 'l' && !commandMode) { if(actionMode == "removeTile") apiCall = "/16"; else if(actionMode == "placeWall") apiCall = "/26"; else if(actionMode == "placeFloor") apiCall = "/36"; else if(actionMode == "digHole") apiCall = "/46"; APIinQueue = true; } else if(key.c == 'u' && !commandMode) { if(actionMode == "digHole") { apiCall = "/25"; APIinQueue = true; } } else if(key.c == 'o' && !commandMode) { if(actionMode == "digHole") { apiCall = "/35"; APIinQueue = true; } } else if((key.c == 'd' || key.c == 'r') && commandMode) { actionMode = "removeTile"; } else if(key.c == 'w' && commandMode) { actionMode = "placeWall"; } else if(key.c == 'D' && commandMode) { actionMode = "digHole"; } else if(key.c == 'f' && commandMode) { actionMode = "placeFloor"; } } if(key.vk == TCODK_ESCAPE) { if(!textInput && !popupOpen) { drawMenuCheck = true; } inputText->reset(); textInput = false; if(popupOpen) { closeMenuCheck = true; } } if(key.vk == TCODK_ENTER && textInput == true) { std::string tmpText = inputText->getText(); if(tmpText != "" && tmpText.at(0) != '/') { if(!connected) { chatText = tmpText; serverBox->insertText(chatText); chatText = ""; } else { //chatText.clear(); chatText = tmpText; chatMessageInQueue = true; } } if(tmpText != "" && tmpText.at(0) == '/') { if(tmpText == "/connect" && !connected) { // Begin Networking if(cnet->Connect()) { chatBox->insertText("Connected Successfully"); chatBox->insertText(" "); cnet->getLoginScreen(); chatBox->insertText(" "); chatBox->insertText(" "); connected = true; } else { chatBox->insertText("Failed to Connect, please retry"); connected = false; } } else if(tmpText == "/connect" && connected) { chatBox->insertText("Already Connected"); } else if(tmpText == "/quit" && connected) { serverCommandInQueue = true; serverCall = "/quit"; } else if (tmpText == "/quit" && !connected) { exit(0); } else { if(!connected) { chatBox->insertText("Not Connected, please /connect first"); } else if(connected && !loggedIn) { cnet->sendCommand(tmpText); cnet->getResponse(); } else if(connected && loggedIn) { serverCommandInQueue = true; serverCall = tmpText; } } } inputText->reset(); delete inputText; inputText = new TCODText(1, serverConsole->getHeight()-2, serverConsole->getWidth()-2, 1, serverConsole->getWidth()-2); inputText->setProperties(32, 1000, "$>", 1); inputText->setColors(TCODColor(0,255,0), TCODColor(0,0,0), 1.0f); textInput = false; } else if(key.vk == TCODK_ENTER && textInput == false) { textInput = true; } mapOutput->clear(); if(connected && loggedIn && !commandMode) { mapOutput->setDefaultForeground(TCODColor(255,255,255)); mapOutput->printEx(mapOutput->getWidth()/2, mapOutput->getHeight()-1, TCOD_BKGND_NONE, TCOD_CENTER, "Action Mode", TCODColor(255,255,255)); } else if(connected && loggedIn && commandMode) { mapOutput->setDefaultForeground(TCODColor(255,255,255)); mapOutput->printEx(mapOutput->getWidth()/2, mapOutput->getHeight()-1, TCOD_BKGND_NONE, TCOD_CENTER, "Select Mode", TCODColor(255,255,255)); } requestMap(); // if(!unpacking) // drawAll(); drawAll(); TCODConsole::blit(mapOutput, 0, 0, 0, 0, output, 0, 2); inputText->render(serverConsole); chatBox->render(); serverBox->render(); Widget::renderWidgets(); fixBottom(); TCODConsole::blit(serverConsole,0,0,0,0,output,MAIN_WIDTH/2,32, 1.0f, 1.0f); TCODConsole::blit(textOutputConsole,0,0,0,0,output,0,32, 1.0f, 1.0f); render(); //mapOutput->clear(); /* if((key.c == 'a' || key.c == 's' || key.c == 'w' || key.c == 'd') && connected && loggedIn && !textInput) { while(key.vk != TCODK_NONE) { TCODSystem::checkForEvent(TCOD_EVENT_KEY_PRESS|TCOD_EVENT_MOUSE,&key,&mouse); } } */ } }
#include "libtcod.hpp" #include "gui.hpp" TCODColor Widget::back=TCODColor(40,40,120); TCODColor Widget::fore=TCODColor(220,220,180); TCODColor Widget::backFocus=TCODColor(70,70,130); TCODColor Widget::foreFocus=TCODColor(255,255,255); TCODConsole *Widget::con=NULL; TCODList<Widget *> Widget::widgets; TCOD_mouse_t Widget::mouse; float Widget::elapsed; Widget *Widget::focus=NULL; Widget *Widget::keyboardFocus=NULL; Widget::Widget() : x(0),y(0),w(0),h(0),tip(NULL),mouseIn(false),mouseL(false),visible(true) { widgets.push(this); } Widget::Widget(int x,int y) : x(x),y(y),w(0),h(0),tip(NULL),mouseIn(false),mouseL(false),visible(true) { widgets.push(this); } Widget::Widget(int x,int y, int w, int h) : x(x),y(y),w(w),h(h),tip(NULL),mouseIn(false),mouseL(false),visible(true) { widgets.push(this); } Widget::~Widget() { if ( tip ) free(tip); widgets.remove(this); }
void GraphicsTCOD::drawMenu() { Widget::setConsole(output); //new StatusBar(0,0,MAP_WINDOW_WIDTH,1); VBox *vbox=new VBox(MAIN_WIDTH/2 - 7,MAIN_HEIGHT/2 + 10,0); ToolBar *mainMenu = new ToolBar(MAIN_WIDTH/2 - 7,MAIN_HEIGHT/2 + 10,15,NULL,NULL); //stats->addWidget(new Label(MAP_WINDOW_WIDTH/2 - 7,MAP_WINDOW_HEIGHT/2 - 6,"Login","Login")); mainMenu->addWidget(new Button("Connect",NULL,loginCbk,NULL)); //stats->addWidget(new Label(MAP_WINDOW_WIDTH/2 - 7,MAP_WINDOW_HEIGHT/2 - 5,"New Account","New Account")); //stats->addWidget(new Button("New Account",NULL,newAccountCbk,NULL)); //stats->addWidget(new Label(MAP_WINDOW_WIDTH/2 - 7,MAP_WINDOW_HEIGHT/2 - 4,"Options","Options")); mainMenu->addWidget(new Button("Options",NULL,NULL,NULL)); //stats->addWidget(new Label(MAP_WINDOW_WIDTH/2 - 7,MAP_WINDOW_HEIGHT/2 - 3,"Quit","Quit")); mainMenu->addWidget(new Button("Quit",NULL,quitCbk,NULL)); vbox->addWidget(mainMenu); Widget::setBackgroundColor(TCODColor(0,0,0), TCODColor(128,128,128)); Widget::setForegroundColor(TCODColor(255,255,255), TCODColor(255,255,255)); Widget::renderWidgets(); TCODMouse::showCursor(true); TCODImage *image = new TCODImage("data/images/MenuBackground.png"); // bool quit = false; while(!TCODConsole::isWindowClosed()) { TCOD_key_t key; TCOD_mouse_t mouse; TCODSystem::checkForEvent(TCOD_EVENT_KEY_PRESS|TCOD_EVENT_MOUSE,&key,&mouse); Widget::updateWidgets(key,mouse); Widget::renderWidgets(); render(); image->blitRect(output, 2, 0); output->setDefaultForeground(TCODColor(255, 255, 255)); output->print(MAIN_WIDTH-26, MAIN_HEIGHT-3, (const char*)"The ASCII Project 0.0.0o", TCOD_LEFT); output->print(MAIN_WIDTH-29, MAIN_HEIGHT-2, (const char*)"TheASCIIProject.com (c)2012", TCOD_LEFT); output->rect(0, 0, 20, 1, true); if(drawLogin || key.vk == TCODK_ENTER) { break; } else if( key.vk == TCODK_ESCAPE) { exit(0); } } vbox->removeWidget(mainMenu); delete vbox; output->setDefaultBackground(TCODColor(0, 0, 0)); output->clear(); render(); }