Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 25, 2009, 1:18:03 PM (15 years ago)
Author:
dafrick
Message:

Merged presentation2 branch into pickup2 branch.

Location:
code/branches/pickup2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/branches/pickup2

  • code/branches/pickup2/src/orxonox/overlays/InGameConsole.cc

    r5929 r6412  
    4444#include "util/Convert.h"
    4545#include "util/Math.h"
    46 #include "util/UTFStringConversions.h"
     46#include "util/DisplayStringConversions.h"
    4747#include "core/CoreIncludes.h"
    4848#include "core/ConfigValueIncludes.h"
     
    6161    SetConsoleCommand(InGameConsole, closeConsole, true);
    6262
    63     InGameConsole* InGameConsole::singletonPtr_s = 0;
    6463    ManageScopedSingleton(InGameConsole, ScopeID::Graphics, false);
    6564
     
    6867    */
    6968    InGameConsole::InGameConsole()
    70         : consoleOverlay_(0)
     69        : shell_(new Shell("InGameConsole", true))
     70        , bShowCursor_(false)
     71        , consoleOverlay_(0)
    7172        , consoleOverlayContainer_(0)
    7273        , consoleOverlayNoise_(0)
     
    99100        // destroy the input state previously created (InputBuffer gets destroyed by the Shell)
    100101        InputManager::getInstance().destroyState("console");
     102
     103        // destroy the underlaying shell
     104        this->shell_->destroy();
    101105
    102106        Ogre::OverlayManager* ovMan = Ogre::OverlayManager::getSingletonPtr();
     
    174178        // create the corresponding input state
    175179        inputState_ = InputManager::getInstance().createInputState("console", false, false, InputStatePriority::Console);
    176         inputState_->setKeyHandler(Shell::getInstance().getInputBuffer());
     180        inputState_->setKeyHandler(this->shell_->getInputBuffer());
    177181        bHidesAllInputChanged();
    178182
     
    214218        font->addCodePointRange(Ogre::Font::CodePointRange(161, 255));
    215219
     220        // create noise
     221        this->consoleOverlayNoise_ = static_cast<Ogre::PanelOverlayElement*>(ovMan->createOverlayElement("Panel", "InGameConsoleNoise"));
     222        this->consoleOverlayNoise_->setMetricsMode(Ogre::GMM_PIXELS);
     223        this->consoleOverlayNoise_->setPosition(5,0);
     224        this->consoleOverlayNoise_->setMaterialName("ConsoleNoiseSmall");
     225        // comment following line to disable noise
     226        this->consoleOverlayBorder_->addChild(this->consoleOverlayNoise_);
     227
    216228        // create the text lines
    217229        this->consoleOverlayTextAreas_ = new Ogre::TextAreaOverlayElement*[LINES];
     
    225237            this->consoleOverlayTextAreas_[i]->setLeft(8);
    226238            this->consoleOverlayTextAreas_[i]->setCaption("");
    227             this->consoleOverlayContainer_->addChild(this->consoleOverlayTextAreas_[i]);
     239            this->consoleOverlayNoise_->addChild(this->consoleOverlayTextAreas_[i]);
    228240        }
    229241
     
    236248        this->consoleOverlayCursor_->setLeft(7);
    237249        this->consoleOverlayCursor_->setCaption(std::string(this->cursorSymbol_, 1));
    238         this->consoleOverlayContainer_->addChild(this->consoleOverlayCursor_);
    239 
    240         // create noise
    241         this->consoleOverlayNoise_ = static_cast<Ogre::PanelOverlayElement*>(ovMan->createOverlayElement("Panel", "InGameConsoleNoise"));
    242         this->consoleOverlayNoise_->setMetricsMode(Ogre::GMM_PIXELS);
    243         this->consoleOverlayNoise_->setPosition(5,0);
    244         this->consoleOverlayNoise_->setMaterialName("ConsoleNoiseSmall");
    245         // comment following line to disable noise
    246         this->consoleOverlayContainer_->addChild(this->consoleOverlayNoise_);
     250        this->consoleOverlayNoise_->addChild(this->consoleOverlayCursor_);
    247251
    248252        this->windowResized(this->getWindowWidth(), this->getWindowWidth());
    249253
    250254        // move overlay "above" the top edge of the screen
    251         // we take -1.2 because the border makes the panel bigger
    252         this->consoleOverlayContainer_->setTop(-1.2 * this->relativeHeight);
    253 
    254         Shell::getInstance().addOutputLevel(true);
     255        // we take -1.3 because the border makes the panel bigger
     256        this->consoleOverlayContainer_->setTop(-1.3 * this->relativeHeight);
    255257
    256258        COUT(4) << "Info: InGameConsole initialized" << std::endl;
     
    266268    void InGameConsole::linesChanged()
    267269    {
    268         std::list<std::string>::const_iterator it = Shell::getInstance().getNewestLineIterator();
     270        Shell::LineList::const_iterator it = this->shell_->getNewestLineIterator();
    269271        int max = 0;
    270272        for (int i = 1; i < LINES; ++i)
    271273        {
    272             if (it != Shell::getInstance().getEndIterator())
     274            if (it != this->shell_->getEndIterator())
    273275            {
    274276                ++it;
     
    280282
    281283        for (int i = LINES - 1; i > max; --i)
    282             this->print("", i, true);
     284            this->print("", Shell::None, i, true);
    283285
    284286        for (int i = max; i >= 1; --i)
    285287        {
    286288            --it;
    287             this->print(*it, i, true);
     289            this->print(it->first, it->second, i, true);
    288290        }
    289291    }
     
    295297    {
    296298        if (LINES > 1)
    297             this->print(*Shell::getInstance().getNewestLineIterator(), 1);
     299            this->print(this->shell_->getNewestLineIterator()->first, this->shell_->getNewestLineIterator()->second, 1);
    298300    }
    299301
     
    314316    {
    315317        if (LINES > 0)
    316             this->print(Shell::getInstance().getInput(), 0);
    317 
    318         if (Shell::getInstance().getInput() == "" || Shell::getInstance().getInput().size() == 0)
     318            this->print(this->shell_->getInput(), Shell::Input, 0);
     319
     320        if (this->shell_->getInput().empty())
    319321            this->inputWindowStart_ = 0;
    320322    }
     
    325327    void InGameConsole::cursorChanged()
    326328    {
    327         unsigned int pos = Shell::getInstance().getCursorPosition() - inputWindowStart_;
     329        unsigned int pos = this->shell_->getCursorPosition() - inputWindowStart_;
    328330        if (pos > maxCharsPerLine_)
    329331            pos = maxCharsPerLine_;
     
    331333        this->consoleOverlayCursor_->setCaption(std::string(pos,' ') + cursorSymbol_);
    332334        this->consoleOverlayCursor_->setTop(static_cast<int>(this->windowH_ * this->relativeHeight) - 24);
     335    }
     336
     337    /**
     338        @brief Called if a command is about to be executed
     339    */
     340    void InGameConsole::executed()
     341    {
     342        this->shell_->addOutput(this->shell_->getInput() + '\n', Shell::Command);
    333343    }
    334344
     
    348358        @brief Used to control the actual scrolling and the cursor.
    349359    */
    350     void InGameConsole::update(const Clock& time)
     360    void InGameConsole::preUpdate(const Clock& time)
    351361    {
    352362        if (this->scroll_ != 0)
     
    374384                // scrolling up
    375385                // note: +0.01 for the same reason as when scrolling down
    376                 float deltaScroll = (1.2 * this->relativeHeight + 0.01 + oldTop) * time.getDeltaTime() * this->scrollSpeed_;
    377                 if (oldTop - deltaScroll <= -1.2 * this->relativeHeight)
     386                float deltaScroll = (1.3 * this->relativeHeight + 0.01 + oldTop) * time.getDeltaTime() * this->scrollSpeed_;
     387                if (oldTop - deltaScroll <= -1.3 * this->relativeHeight)
    378388                {
    379389                    // window has completely scrolled up
    380                     this->consoleOverlayContainer_->setTop(-1.2 * this->relativeHeight);
     390                    this->consoleOverlayContainer_->setTop(-1.3 * this->relativeHeight);
    381391                    this->scroll_ = 0;
    382392                    this->consoleOverlay_->hide();
     
    446456        @param s String to be printed
    447457    */
    448     void InGameConsole::print(const std::string& text, int index, bool alwaysShift)
    449     {
    450         char level = 0;
    451         if (text.size() > 0)
    452             level = text[0];
    453 
     458    void InGameConsole::print(const std::string& text, Shell::LineType type, int index, bool alwaysShift)
     459    {
    454460        std::string output = text;
    455 
    456         if (level >= -1 && level <= 5)
    457             output.erase(0, 1);
    458 
    459461        if (LINES > index)
    460462        {
    461             this->colourLine(level, index);
     463            this->colourLine(type, index);
    462464
    463465            if (index > 0)
     
    467469                {
    468470                    ++linesUsed;
    469                     this->consoleOverlayTextAreas_[index]->setCaption(multi_cast<Ogre::UTFString>(output.substr(0, this->maxCharsPerLine_)));
     471                    this->consoleOverlayTextAreas_[index]->setCaption(multi_cast<Ogre::DisplayString>(output.substr(0, this->maxCharsPerLine_)));
    470472                    output.erase(0, this->maxCharsPerLine_);
    471473                    output.insert(0, 1, ' ');
    472474                    if (linesUsed > numLinesShifted_ || alwaysShift)
    473475                        this->shiftLines();
    474                     this->colourLine(level, index);
     476                    this->colourLine(type, index);
    475477                }
    476                 this->consoleOverlayTextAreas_[index]->setCaption(multi_cast<Ogre::UTFString>(output));
     478                this->consoleOverlayTextAreas_[index]->setCaption(multi_cast<Ogre::DisplayString>(output));
    477479                this->displayedText_ = output;
    478480                this->numLinesShifted_ = linesUsed;
     
    482484                if (output.size() > this->maxCharsPerLine_)
    483485                {
    484                     if (Shell::getInstance().getInputBuffer()->getCursorPosition() < this->inputWindowStart_)
    485                         this->inputWindowStart_ = Shell::getInstance().getInputBuffer()->getCursorPosition();
    486                     else if (Shell::getInstance().getInputBuffer()->getCursorPosition() >= (this->inputWindowStart_ + this->maxCharsPerLine_ - 1))
    487                         this->inputWindowStart_ = Shell::getInstance().getInputBuffer()->getCursorPosition() - this->maxCharsPerLine_ + 1;
     486                    if (this->shell_->getInputBuffer()->getCursorPosition() < this->inputWindowStart_)
     487                        this->inputWindowStart_ = this->shell_->getInputBuffer()->getCursorPosition();
     488                    else if (this->shell_->getInputBuffer()->getCursorPosition() >= (this->inputWindowStart_ + this->maxCharsPerLine_ - 1))
     489                        this->inputWindowStart_ = this->shell_->getInputBuffer()->getCursorPosition() - this->maxCharsPerLine_ + 1;
    488490
    489491                    output = output.substr(this->inputWindowStart_, this->maxCharsPerLine_);
     
    492494                  this->inputWindowStart_ = 0;
    493495                this->displayedText_ = output;
    494                 this->consoleOverlayTextAreas_[index]->setCaption(multi_cast<Ogre::UTFString>(output));
     496                this->consoleOverlayTextAreas_[index]->setCaption(multi_cast<Ogre::DisplayString>(output));
    495497            }
    496498        }
     
    506508            this->bActive_ = true;
    507509            InputManager::getInstance().enterState("console");
    508             Shell::getInstance().registerListener(this);
     510            this->shell_->registerListener(this);
    509511
    510512            this->windowResized(this->windowW_, this->windowH_);
     
    528530            this->bActive_ = false;
    529531            InputManager::getInstance().leaveState("console");
    530             Shell::getInstance().unregisterListener(this);
     532            this->shell_->unregisterListener(this);
    531533
    532534            // scroll up
     
    549551    }
    550552
    551     void InGameConsole::colourLine(int colourcode, int index)
    552     {
    553         if (colourcode == -1)
    554         {
    555             this->consoleOverlayTextAreas_[index]->setColourTop   (ColourValue(0.90, 0.90, 0.90, 1.00));
    556             this->consoleOverlayTextAreas_[index]->setColourBottom(ColourValue(1.00, 1.00, 1.00, 1.00));
    557         }
    558         else if (colourcode == 1)
    559         {
    560             this->consoleOverlayTextAreas_[index]->setColourTop   (ColourValue(0.95, 0.25, 0.25, 1.00));
    561             this->consoleOverlayTextAreas_[index]->setColourBottom(ColourValue(1.00, 0.50, 0.50, 1.00));
    562         }
    563         else if (colourcode == 2)
    564         {
    565             this->consoleOverlayTextAreas_[index]->setColourTop   (ColourValue(0.95, 0.50, 0.20, 1.00));
    566             this->consoleOverlayTextAreas_[index]->setColourBottom(ColourValue(1.00, 0.70, 0.50, 1.00));
    567         }
    568         else if (colourcode == 3)
    569         {
    570             this->consoleOverlayTextAreas_[index]->setColourTop   (ColourValue(0.50, 0.50, 0.95, 1.00));
    571             this->consoleOverlayTextAreas_[index]->setColourBottom(ColourValue(0.80, 0.80, 1.00, 1.00));
    572         }
    573         else if (colourcode == 4)
    574         {
    575             this->consoleOverlayTextAreas_[index]->setColourTop   (ColourValue(0.65, 0.48, 0.44, 1.00));
    576             this->consoleOverlayTextAreas_[index]->setColourBottom(ColourValue(1.00, 0.90, 0.90, 1.00));
    577         }
    578         else if (colourcode == 5)
    579         {
    580             this->consoleOverlayTextAreas_[index]->setColourTop   (ColourValue(0.40, 0.20, 0.40, 1.00));
    581             this->consoleOverlayTextAreas_[index]->setColourBottom(ColourValue(0.80, 0.60, 0.80, 1.00));
    582         }
    583         else
    584         {
    585             this->consoleOverlayTextAreas_[index]->setColourTop   (ColourValue(0.21, 0.69, 0.21, 1.00));
    586             this->consoleOverlayTextAreas_[index]->setColourBottom(ColourValue(0.80, 1.00, 0.80, 1.00));
    587         }
    588     }
    589 
    590     // ###############################
    591     // ###      satic methods      ###
    592     // ###############################
     553    void InGameConsole::colourLine(Shell::LineType type, int index)
     554    {
     555        ColourValue colourTop, colourBottom;
     556        switch (type)
     557        {
     558        case Shell::Error:   colourTop = ColourValue(0.95, 0.25, 0.25, 1.00);
     559                          colourBottom = ColourValue(1.00, 0.50, 0.50, 1.00); break;
     560
     561        case Shell::Warning: colourTop = ColourValue(0.95, 0.50, 0.20, 1.00);
     562                          colourBottom = ColourValue(1.00, 0.70, 0.50, 1.00); break;
     563
     564        case Shell::Info:    colourTop = ColourValue(0.50, 0.50, 0.95, 1.00);
     565                          colourBottom = ColourValue(0.80, 0.80, 1.00, 1.00); break;
     566
     567        case Shell::Debug:   colourTop = ColourValue(0.65, 0.48, 0.44, 1.00);
     568                          colourBottom = ColourValue(1.00, 0.90, 0.90, 1.00); break;
     569
     570        case Shell::Verbose: colourTop = ColourValue(0.40, 0.20, 0.40, 1.00);
     571                          colourBottom = ColourValue(0.80, 0.60, 0.80, 1.00); break;
     572
     573        case Shell::Ultra:   colourTop = ColourValue(0.21, 0.69, 0.21, 1.00);
     574                          colourBottom = ColourValue(0.80, 1.00, 0.80, 1.00); break;
     575
     576        case Shell::Command: colourTop = ColourValue(0.80, 0.80, 0.80, 1.00);
     577                          colourBottom = ColourValue(0.90, 0.90, 0.90, 0.90); break;
     578
     579        case Shell::Hint:    colourTop = ColourValue(0.80, 0.80, 0.80, 1.00);
     580                          colourBottom = ColourValue(0.90, 0.90, 0.90, 1.00); break;
     581
     582        default:             colourTop = ColourValue(0.90, 0.90, 0.90, 1.00);
     583                          colourBottom = ColourValue(1.00, 1.00, 1.00, 1.00); break;
     584        }
     585
     586        this->consoleOverlayTextAreas_[index]->setColourTop   (colourTop);
     587        this->consoleOverlayTextAreas_[index]->setColourBottom(colourBottom);
     588    }
     589
     590    // ################################
     591    // ###      static methods      ###
     592    // ################################
    593593
    594594    /**
Note: See TracChangeset for help on using the changeset viewer.