Beispiel #1
0
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;
Beispiel #2
0
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);
         }
         } */
        
        
    }
    
    
    
}
Beispiel #3
0
#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);
}
Beispiel #4
0
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();
    
    
}