/** Sorgt dafür, dass die vorhandenen Blüten bei Bedarf aus den Dateien geladen werden. Ausserdem beinhaltet sie Methoden zum Laden von Bildern. Zudem: Laden des Easter-egg-Konfigurationsfiles und Anbringen eines Eaestereggs bei Bedarf. Denkbar ist auch, dass man einen Satz an Blüten fest codiert und weitere Blüten optional dazulädt. Wo die Blüten sind, steht in CactusParameters.java. */ #include "../../global.h" #include "imagemanager.h" #include "cactustools.h" #include #include #include QString ImageManager::IMAGE_DIR="/opt/tuxcards/flowers/"; const QString ImageManager::CACTUS_EGG_CONFIGURATION_FILE="cactus.egg"; ImageManager::ImageManager(QWidget* component) : mpFlowerNames ( NULLPTR ) , mpComponent( NULLPTR ) { mpComponent = component; initFlowers(); // loadEasterEggConfiguration(); } ImageManager::~ImageManager(){ DELETE( mpFlowerNames ); } void ImageManager::setFlowerDirectory(QString dir){ IMAGE_DIR=dir; initFlowers(); } // not needed anymore -> constructor does this //void ImageManager::setDisplayComponent(QWidget* component){ // mpComponent=component; //} //int ImageManager::getWidth(Image image){ // return image.getWidth(mpComponent); //} // //int ImageManager::getHeight(Image image){ // return image.getHeight(mpComponent); //} /** * Lädt alle das File "cactus.egg", welches die Beschreibung aller Easter-eggs * beinhaltet. */ //void ImageManager::loadEasterEggConfiguration(){ // easterEggs=new Vector(10); // // try{ // File file=new File(CactusParameters.IMAGE_DIR+CactusParameters.CACTUS_EGG_CONFIGURATION_FILE); // BufferedReader br=new BufferedReader(new FileReader(file)); // // String s=br.readLine().trim(); // // while(s!=null){ // while(s!=null && !s.startsWith("egg ")) // s=br.readLine(); // // if (s==null) // break; // // //Wir sind jetzt in der ersten Zeile einer Egg-Beschreibung // //Name holen (wird derzeit eigentlich nicht benötigt, aber kann nie schaden... // String name=s.substring(4,s.indexOf('{',4)); // // //Name des GIF-Files holen // s=br.readLine().trim(); // int index1=s.indexOf('"'); // int index2=s.indexOf('"',index1+1); // String imageName=s.substring(index1+1,index2); // // //Erster Parameter: propability factor // s=br.readLine(); // int i1=s.indexOf('#'); // if (i1!=-1) // s=s.substring(0,i1); // s=s.trim(); // int propabilityFactor=Integer.parseInt(s); // // //Zweiter Parameter: min/max depth // s=br.readLine(); // i1=s.indexOf('#'); // if (i1!=-1) // s=s.substring(0,i1); // s=s.trim(); // // i1=s.indexOf(','); // // int minDepth=Integer.parseInt(s.substring(0,i1)); // int maxDepth=Integer.parseInt(s.substring(i1+1).trim()); // // //3. Parameter: min/max height // s=br.readLine(); // i1=s.indexOf('#'); // if (i1!=-1) // s=s.substring(0,i1); // s=s.trim(); // // i1=s.indexOf(','); // // int minHeight=Integer.parseInt(s.substring(0,i1)); // int maxHeight=Integer.parseInt(s.substring(i1+1).trim()); // // //4. Parameter: min/max translation in x-direction // s=br.readLine(); // i1=s.indexOf('#'); // if (i1!=-1) // s=s.substring(0,i1); // s=s.trim(); // // i1=s.indexOf(','); // // int minXTranslation=Integer.parseInt(s.substring(0,i1)); // int maxXTranslation=Integer.parseInt(s.substring(i1+1).trim()); // // //5. Parameter: 1/0 für frontMost // s=br.readLine(); // i1=s.indexOf('#'); // if (i1!=-1) // s=s.substring(0,i1); // s=s.trim(); // // boolean frontMost=true; // int f=Integer.parseInt(s); // if (f==0) // frontMost=false; // // //Neues Easteregg generieren // EasterEgg egg=new EasterEgg(name, imageName, propabilityFactor, // minDepth, maxDepth, // minHeight, maxHeight, // minXTranslation, maxXTranslation, // frontMost); // // //und gemäß der Wahrscheinlichkeitsangabe entsprechend // //oft in dem Vector mit allen Eggs referenzieren // for (int i=0;i; mpFlowerNames->setAutoDelete(true); //Gesamtes Verzeichnis nach Blüten durchsuchen dir.setFilter(QDir::Files | QDir::NoSymLinks); const QFileInfoList* files=dir.entryInfoList(); if(files){ QFileInfoListIterator it(*files); // create iterator QFileInfo* f; // for all files/components while( (f=it.current())!=0 ){ ++it; if(f->isFile() && (f->extension()=="gif") && (f->baseName().right(2)=="_0") ){ QString name=f->baseName(); name=name.left(name.length()-2); //cout<append(new QString(name)); } }//while }//if(files) } /** * setzt einen Index, der die erste(kleinste) Blüte enthält; dabei * wird zufällig eine Blütenart herausgesucht */ void ImageManager::applyFlower(CactusShoot* c){ if (mpFlowerNames==0) return; // delete the previous flowers c->flowers.setAutoDelete(TRUE); c->flowers.clear(); //Zufällig einen Blütennamen heraussuchen //um die Bilder für die Blüten kümmern; alle Blüten einlesen QString flowerName=*(mpFlowerNames->at( CactusTools::ran(0,mpFlowerNames->count()-1) )); for (int i=0; i<5; i++){ c->flowers.insert(i, new QImage(IMAGE_DIR+flowerName+"_"+QString::number(i)+".gif")); } }