Changeset 5113 in orxonox.OLD for trunk/src/util
- Timestamp:
- Aug 23, 2005, 11:18:39 PM (19 years ago)
- Location:
- trunk/src/util
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/util/loading/load_param.cc
r5111 r5113 17 17 18 18 #include "list.h" 19 #include "array.h"20 19 #include "base_object.h" 21 20 … … 386 385 * searches for classes, which beginn with classNameBegin 387 386 * @param classNameBegin the beginning string of a Class 388 * @return a NEW char-array with ClassNames. The ARRAYshould be deleted afterwards,387 * @return a NEW char-array with ClassNames. The LIST should be deleted afterwards, 389 388 * !! The strings MUST NOT be deleted !! 390 389 */ 391 Array<char*>* LoadClassDescription::searchClassWithShort(const char* classNameBegin)390 tList<const char>* LoadClassDescription::searchClassWithShort(const char* classNameBegin) 392 391 { 393 392 unsigned int searchLength = strlen(classNameBegin); 394 Array<char*>* retVal = new Array<char*>;393 tList<const char>* retVal = new tList<const char>; 395 394 396 395 tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator(); … … 401 400 !strncasecmp(enumClassDesc->className, classNameBegin, searchLength)) 402 401 { 403 retVal->add Entry(enumClassDesc->className);402 retVal->add(enumClassDesc->className); 404 403 } 405 404 enumClassDesc = iterator->nextElement(); … … 407 406 delete iterator; 408 407 409 retVal->finalizeArray();410 408 return retVal; 411 409 } -
trunk/src/util/loading/load_param.h
r5111 r5113 31 31 // Forward Declaration // 32 32 template<class T> class tList; 33 template<class T> class Array;34 33 35 34 //! macro that makes it even more easy to load a Parameter … … 312 311 313 312 static void printAll(const char* fileName = NULL); 314 static Array<char*>* searchClassWithShort(const char* classNameBegin);313 static tList<const char>* searchClassWithShort(const char* classNameBegin); 315 314 // static const LoadParamDescription* getClass(const char* className); 316 315 -
trunk/src/util/resource_manager.cc
r5111 r5113 99 99 this->dataDir = new char[strlen(realDir)+1]; 100 100 strcpy(this->dataDir, realDir); 101 delete realDir;101 delete[] realDir; 102 102 return true; 103 103 } 104 104 else 105 105 { 106 PRINTF(1)("%s is not a Directory, and can not be the Data Directory, leaving as %s \n", dataDir, this->dataDir);107 delete realDir;106 PRINTF(1)("%s is not a Directory, and can not be the Data Directory, leaving as %s \n", realDir, this->dataDir); 107 delete[] realDir; 108 108 return false; 109 109 } … … 631 631 632 632 // checking for the termination of the string given. If there is a "/" at the end cut it away 633 if (directoryName[strlen(directoryName)-1] == '/') 633 if (directoryName[strlen(directoryName)-1] == '/' || 634 directoryName[strlen(directoryName)-1] == '\\') 634 635 { 635 636 tmpDirName = new char[strlen(directoryName)+1]; … … 651 652 )) 652 653 { 653 delete tmpDirName;654 delete[] tmpDirName; 654 655 return true; 655 656 } -
trunk/src/util/shell.cc
r5111 r5113 20 20 #include "text_engine.h" 21 21 #include "list.h" 22 #include "array.h"23 22 #include "graphics_engine.h" 24 23 #include "event_handler.h" 25 24 26 25 #include "load_param.h" 26 #include "class_list.h" 27 28 #include "key_names.h" 27 29 #include "debug.h" 28 30 #include <stdarg.h> … … 40 42 this->setName("Shell"); 41 43 44 this->shellHeight = 400; 45 this->bActive = false; 42 46 this->buffer = new tList<char>; 43 47 44 this->textSize = 10; 48 this->textSize = 15; 49 this->lineSpacing = 5; 45 50 46 51 //this->bufferSize = 0; 47 52 this->bufferText = NULL; 48 53 this->setBufferSize(100); 54 this->bufferDisplaySize = 10; 49 55 this->setBufferDisplaySize(10); 50 this->setAbsCoor2D(3, GraphicsEngine::getInstance()->getResolutionY());56 this->setAbsCoor2D(3, -400); 51 57 this->delayed = 0; 52 58 this->setRepeatDelay(.3, .05); 53 59 this->pressedKey = SDLK_FIRST; 54 60 55 this->inputLineText = TextEngine::getInstance()->createText("fonts/earth.ttf", 10, TEXT_DYNAMIC, 255, 0, 0); 56 this->inputLineText->setAlignment(TEXT_ALIGN_LEFT); 57 this->inputLineText->setText(NULL); 61 this->inputLineText = NULL; 58 62 this->inputLine = new char[1]; 59 63 this->inputLine[0] = '\0'; 60 this->inputLineText->setParent2D(this); 61 62 64 65 this->rebuildText(); 66 this->completionList = NULL; 67 68 // EVENT-Handler subscription of '`' to all States, and all other keyboard commands to ES_SEHLL 63 69 EventHandler* evh = EventHandler::getInstance(); 64 70 evh->subscribe(this, ES_ALL, SDLK_BACKQUOTE); … … 77 83 for (int i = 0; i < this->bufferDisplaySize; i++) 78 84 delete this->bufferText[i]; 79 delete this->bufferText;85 delete[] this->bufferText; 80 86 81 87 // delete the inputLine … … 93 99 delete charIterator; 94 100 101 // if (this->completionList != NULL) 102 //delete this->completionList; 103 95 104 Shell::singletonRef = NULL; 96 105 } 106 107 108 void Shell::activate() 109 { 110 if (this->bActive == true) 111 PRINTF(3)("The shell is already active\n"); 112 this->bActive = true; 113 114 EventHandler::getInstance()->setState(ES_SHELL); 115 this->setRelCoorSoft2D(0, 0, 1, 5); 116 } 117 118 void Shell::deactivate() 119 { 120 if (this->bActive == false) 121 PRINTF(3)("The shell is already inactive\n"); 122 this->bActive = false; 123 124 EventHandler::getInstance()->setState(ES_GAME); 125 this->setRelCoorSoft2D(0, -400, 1, 5); 126 } 127 128 void Shell::setTextSize(unsigned int textSize, unsigned int lineSpacing) 129 { 130 this->textSize = textSize; 131 this->lineSpacing = lineSpacing; 132 133 this->rebuildText(); 134 } 135 136 void Shell::rebuildText() 137 { 138 if (this->inputLineText == NULL) 139 delete this->inputLineText; 140 this->inputLineText = TextEngine::getInstance()->createText("fonts/Aniron_Bold.ttf", this->textSize, TEXT_DYNAMIC, 255, 0, 0); 141 this->inputLineText->setAlignment(TEXT_ALIGN_LEFT); 142 this->inputLineText->setText(NULL); 143 this->inputLineText->setParent2D(this); 144 this->inputLineText->setRelCoor2D(5, (this->textSize + this->lineSpacing)*this->bufferDisplaySize); 145 146 this->setBufferDisplaySize(this->bufferDisplaySize); 147 } 148 149 97 150 98 151 /** … … 106 159 for (unsigned int i = 0; i < this->bufferDisplaySize; i++) 107 160 delete this->bufferText[i]; 108 delete this->bufferText;161 delete[] this->bufferText; 109 162 } 110 163 … … 112 165 for (unsigned int i = 0; i < bufferDisplaySize; i++) 113 166 { 114 this->bufferText[i] = TextEngine::getInstance()->createText("fonts/ earth.ttf", this->textSize, TEXT_DYNAMIC, 255, 0, 0);167 this->bufferText[i] = TextEngine::getInstance()->createText("fonts/Aniron_Bold.ttf", this->textSize, TEXT_DYNAMIC, 255, 0, 0); 115 168 this->bufferText[i]->setAlignment(TEXT_ALIGN_LEFT); 116 this->bufferText[i]->setRelCoor2D(5, 12+12*i);169 this->bufferText[i]->setRelCoor2D(5, (this->textSize + this->lineSpacing)*(bufferDisplaySize - i -1)); 117 170 this->bufferText[i]->setText(NULL); 118 171 this->bufferText[i]->setParent2D(this); 119 172 } 120 121 122 173 this->bufferDisplaySize = bufferDisplaySize; 174 175 this->shellHeight = (this->textSize + this->lineSpacing) * (bufferDisplaySize+1); 123 176 } 124 177 … … 153 206 * @param line the Line as in the first argument in printf 154 207 * @param args the arguments as a va_list 155 *156 * @todo optimize157 208 */ 158 209 bool Shell::addBufferLineStatic(const char* line, ...) … … 174 225 return true; 175 226 } 176 int curr = 0;177 227 178 228 /** … … 199 249 } 200 250 201 if ( likely(bufferText != NULL))251 if (this->bActive && likely(bufferText != NULL)) 202 252 { 203 Text* moveText = this->bufferText[this->bufferDisplaySize-1]; 204 for (int i = this->bufferDisplaySize-1; i > 0; i--) 253 Text* lastText = this->bufferText[this->bufferDisplaySize-1]; 254 Vector firstCoord = this->bufferText[0]->getRelCoorSoft2D(); 255 256 Text* swapText; 257 Text* moveText = this->bufferText[0]; 258 this->bufferText[0]->setRelCoorSoft2D(this->bufferText[1]->getRelCoorSoft2D(), 5); 259 for (unsigned int i = 1; i < this->bufferDisplaySize; i++) 205 260 { 206 this->bufferText[i] = this->bufferText[i-1]; 261 if ( i < this->bufferDisplaySize-1) 262 this->bufferText[i]->setRelCoorSoft2D(this->bufferText[i+1]->getRelCoorSoft2D(),5); 263 swapText = this->bufferText[i]; 264 this->bufferText[i] = moveText; 265 moveText = swapText; 207 266 } 208 this->bufferText[0] = moveText; 267 lastText->setRelCoor2D(firstCoord); 268 this->bufferText[0] = lastText; 269 270 this->bufferText[0]->setText(newLine); 209 271 } 210 this->bufferText[0]->setText(newLine);211 // this->bufferText->212 // this->inputLineText->setText(newLine);213 272 } 214 273 … … 246 305 } 247 306 248 249 307 /** 250 308 * deletes the InputLine … … 258 316 this->inputLine = new char[1]; 259 317 *this->inputLine = '\0'; 260 261 318 } 262 319 … … 316 373 bool Shell::executeCommand() 317 374 { 318 319 375 this->addBufferLineStatic("Execute Command: %s\n", this->inputLine); 320 376 delete this->inputLine; … … 337 393 } 338 394 339 340 #include "key_names.h"341 395 /** 342 396 * listens for some event … … 352 406 if (EventHandler::getInstance()->getState() == ES_GAME) 353 407 { 354 EventHandler::getInstance()->setState(ES_SHELL); 355 this->setRelCoorSoft2D(0, GraphicsEngine::getInstance()->getResolutionY()-150, 1, 5); 408 this->activate(); 356 409 } 357 410 358 411 else 359 412 { 360 EventHandler::getInstance()->setState(ES_GAME); 361 this->setRelCoorSoft2D(0, GraphicsEngine::getInstance()->getResolutionY()+10, 1, 5); 413 this->deactivate(); 362 414 } 363 415 } … … 382 434 { 383 435 if (this->pressedKey == event.type) 436 { 384 437 this->pressedKey = SDLK_FIRST; 385 this->delayed = 0.0; 438 this->delayed = 0.0; 439 } 386 440 } 387 441 } … … 426 480 427 481 // glTexCoord2f(this->texCoord.maxU, this->texCoord.minV); 428 glVertex2f( this->getAbsCoor2D().x + 800, this->getAbsCoor2D().y );482 glVertex2f(GraphicsEngine::getInstance()->getResolutionX() - this->getAbsCoor2D().x, this->getAbsCoor2D().y ); 429 483 430 484 // glTexCoord2f(this->texCoord.maxU, this->texCoord.maxV); 431 glVertex2f( this->getAbsCoor2D().x + 800, this->getAbsCoor2D().y + 150);485 glVertex2f(GraphicsEngine::getInstance()->getResolutionX() - this->getAbsCoor2D().x, this->getAbsCoor2D().y + this->shellHeight); 432 486 433 487 // glTexCoord2f(this->texCoord.minU, this->texCoord.maxV); 434 glVertex2f(this->getAbsCoor2D().x, this->getAbsCoor2D().y + 150);488 glVertex2f(this->getAbsCoor2D().x, this->getAbsCoor2D().y + this->shellHeight); 435 489 436 490 glEnd(); … … 451 505 strcpy(completionLine, this->inputLine); 452 506 453 507 char* commandBegin = strrchr(completionLine, ' '); 454 508 if (commandBegin == NULL) 455 509 commandBegin = completionLine; … … 462 516 } 463 517 464 printf("%s\n",commandBegin); 465 Array<char*>* classArray = LoadClassDescription::searchClassWithShort(commandBegin); 466 if (classArray->getCount() == 0) 467 { 468 delete[] completionLine; 469 delete classArray; 470 //PRINTF(0)("no completion found for %s\n", commandBegin); 471 return false; 472 } 473 474 for (unsigned int i = 0; i < classArray->getCount(); i++) 475 { 476 PRINTF(0)("%s\n", classArray->getEntry(i)); 477 } 478 if (classArray->getCount() == 1) 479 { 480 this->removeCharacters(strlen(commandBegin)); 481 this->addCharacters(classArray->getEntry(0)); 482 this->addCharacter(' '); 483 } 484 485 delete[] completionLine; 486 delete classArray; 518 char* objectStart; 519 if (objectStart = strstr(commandBegin, "::")) 520 { 521 char* classIdentity = new char[objectStart - commandBegin +1]; 522 strncpy(classIdentity, commandBegin, objectStart - commandBegin); 523 classIdentity[objectStart - commandBegin] = '\0'; 524 this->objectComplete(objectStart+2, ClassList::StringToID(classIdentity)); 525 delete[] classIdentity; 526 } 527 else 528 this->classComplete(commandBegin); 529 530 delete[] completionLine; 531 } 532 533 /** 534 * autocompletes a className 535 * @param classBegin the Beginning of a String to autoComplete 536 * @return true on success, false otherwise 537 */ 538 bool Shell::classComplete(const char* classBegin) 539 { 540 if (unlikely(classBegin == NULL)) 541 return false; 542 const tList<const char>* clList = ClassList::getClassList(); 543 if (clList != NULL) 544 { 545 const tList<const char>* classList = this->createCompleteList(clList, classBegin); 546 if (classList != NULL) 547 this->generalComplete(classList, classBegin, "%s::", "::"); 548 else 549 return false; 550 } 551 else 552 return false; 553 return true; 554 } 555 556 /** 557 * autocompletes an ObjectName 558 * @param objectBegin the beginning string of a Object 559 * @param classID the ID of the Class to search for. 560 * @return true on success, false otherwise 561 */ 562 bool Shell::objectComplete(const char* objectBegin, long classID) 563 { 564 printf("%s\n", objectBegin); 565 566 if (unlikely(objectBegin == NULL)) 567 return false; 568 tList<BaseObject>* boList = ClassList::getList(classID); 569 if (boList != NULL) 570 { 571 printf("\n", boList->firstElement()->getName()); 572 const tList<const char>* objectList = this->createCompleteList(boList, objectBegin); 573 if (objectList != NULL) 574 this->generalComplete(objectList, objectBegin, "%s"); 575 else 576 return false; 577 } 578 else 579 return false; 580 return true; 581 } 582 583 bool Shell::functionComplete(const char* functionBegin) 584 { 585 } 586 587 /** 588 * completes the inputline on grounds of an inputList 589 * @param stringList the List to parse through 590 * @param begin the String to search in the inputList, and to extend with it. 591 * @param displayAs how to display the found value to the user, printf-style, !!with only one %s!! ex.: "::%s::" 592 * @param addBack what should be added at the end of the completion 593 * @param addFront what should be added to the front of one finished completion 594 * @return true if ok, false otherwise 595 */ 596 bool Shell::generalComplete(const tList<const char>* stringList, const char* begin, const char* displayAs, const char* addBack, const char* addFront) 597 { 598 if (stringList->getSize() == 0) 599 return false; 600 601 const char* addString = stringList->firstElement(); 602 unsigned int addLength = 0; 603 unsigned int inputLenght = strlen(begin); 604 605 if (addString != NULL) 606 addLength = strlen(addString); 607 tIterator<const char>* charIterator = stringList->getIterator(); 608 const char* charElem = charIterator->nextElement(); 609 while (charElem != NULL) 610 { 611 PRINTF(0)(displayAs, charElem); 612 for (unsigned int i = inputLenght; i < addLength; i++) 613 if (addString[i] != charElem[i]) 614 { 615 addLength = i; 616 break; 617 } 618 charElem = charIterator->nextElement(); 619 } 620 delete charIterator; 621 622 if (addLength >= inputLenght) 623 { 624 char* adder = new char[addLength+1]; 625 strncpy(adder, addString, addLength); 626 adder[addLength] = '\0'; 627 this->removeCharacters(inputLenght); 628 this->addCharacters(adder); 629 if (addBack != NULL && stringList->getSize() == 1) 630 this->addCharacters("::"); 631 delete[] adder; 632 } 633 return true; 634 } 635 636 637 638 /** 639 * searches for classes, which beginn with classNameBegin 640 * @param inputList the List to parse through 641 * @param classNameBegin the beginning string 642 * @return a NEW char-array with ClassNames. The LIST should be deleted afterwards, 643 * !! The strings MUST NOT be deleted !! 644 */ 645 const tList<const char>* Shell::createCompleteList(const tList<const char>* inputList, const char* classNameBegin) 646 { 647 if (inputList == NULL || classNameBegin == NULL) 648 return NULL; 649 unsigned int searchLength = strlen(classNameBegin); 650 if (this->completionList != NULL) 651 delete this->completionList; 652 this->completionList = new tList<const char>; 653 654 // tList<const char>* classList = ClassList::getClassList(); 655 656 tIterator<const char>* iterator = inputList->getIterator(); 657 const char* enumString = iterator->nextElement(); 658 while (enumString != NULL) 659 { 660 if (strlen(enumString)>searchLength+1 && 661 !strncasecmp(enumString, classNameBegin, searchLength)) 662 { 663 this->completionList->add(enumString); 664 } 665 enumString = iterator->nextElement(); 666 } 667 delete iterator; 668 669 return this->completionList; 670 } 671 672 /** 673 * searches for classes, which beginn with classNameBegin 674 * @param inputList the List to parse through 675 * @param classNameBegin the beginning string 676 * @return a NEW char-array with ClassNames. The LIST should be deleted afterwards, 677 * !! The strings MUST NOT be deleted !! 678 */ 679 const tList<const char>* Shell::createCompleteList(const tList<BaseObject>* inputList, const char* classNameBegin) 680 { 681 if (inputList == NULL || classNameBegin == NULL) 682 return NULL; 683 unsigned int searchLength = strlen(classNameBegin); 684 if (this->completionList != NULL) 685 delete this->completionList; 686 this->completionList = new tList<const char>; 687 688 tIterator<BaseObject>* iterator = inputList->getIterator(); 689 BaseObject* enumBO = iterator->nextElement(); 690 while (enumBO != NULL) 691 { 692 if (enumBO->getName() != NULL && 693 strlen(enumBO->getName())>searchLength+1 && 694 !strncasecmp(enumBO->getName(), classNameBegin, searchLength)) 695 { 696 this->completionList->add(enumBO->getName()); 697 } 698 enumBO = iterator->nextElement(); 699 } 700 delete iterator; 701 702 return this->completionList; 487 703 } 488 704 … … 494 710 if (this->pressedKey != SDLK_FIRST) 495 711 printf("%s::%f %f\n", SDLKToKeyname(this->pressedKey), this->delayed, this->repeatDelay); 496 497 } 712 } -
trunk/src/util/shell.h
r5111 r5113 36 36 37 37 38 void setBufferSize(unsigned int bufferSize) { this->bufferSize = bufferSize; }; 38 void activate(); 39 void deactivate(); 39 40 40 void setBufferDisplaySize(unsigned int bufferDisplaySize); 41 void setTextSize(unsigned int textSize, unsigned int lineSpacing = 1); 42 void rebuildText(); 41 43 42 44 // BUFFER // 45 void setBufferSize(unsigned int bufferSize) { this->bufferSize = bufferSize; }; 46 void setBufferDisplaySize(unsigned int bufferDisplaySize); 43 47 void flushBuffers(); 44 48 static bool addBufferLineStatic(const char* line, ...); … … 67 71 private: 68 72 bool autoComplete(); 73 bool classComplete(const char* classBegin); 74 bool objectComplete(const char* objectBegin, long classID); 75 bool functionComplete(const char* functionBegin); 76 77 bool generalComplete(const tList<const char>* stringList, const char* begin, const char* displayAs = "%s", const char* addBack = NULL, const char* addFront = NULL); 78 79 const tList<const char>* Shell::createCompleteList(const tList<const char>* inputList, const char* classNameBegin); 80 const tList<const char>* Shell::createCompleteList(const tList<BaseObject>* inputList, const char* classNameBegin); 69 81 70 82 … … 88 100 unsigned int textSize; //!< The size of the text. 89 101 unsigned int lineSpacing; //!< The Spacing between lines. 102 unsigned int shellHeight; //!< The hight of the Shell in Pixels 103 bool bActive; //!< if the shell is active; 90 104 91 105 char bufferArray[10000]; //!< a BUFFER for fast writing 106 107 // completion 108 tList<const char>* completionList; //!< A list of completions, that are io. 92 109 }; 93 110
Note: See TracChangeset
for help on using the changeset viewer.