void Chipset::parsFile(std::string &file, int nb, bool verbose) { bool flagEx; CPU::Comm exec; Line oneLine; size_t pos; Memory::Mem mem; while (file.size() > 0) { pos = file.find("\n"); if (pos != std::string::npos) { oneLine = file.substr(0, pos); file.erase(0, pos + 1); } parsLine(oneLine); if (oneLine.getInstr().size() != 0) { if (verbose) std::cout << "instr = " << oneLine.getInstr() << "\t" << "operand = " << oneLine.getOperand() << "\t" << "value = " << oneLine.getValue() << std::endl; exec.setLine(oneLine); flagEx = exec.execLine(mem); if (flagEx == false) break; } } if (nb == 1) throw Error(EXIT); }
bool Sprite::loadAnims(const string& name) { if(name.length()<2) return 0; //printf("> \"%s\"\n", name); map<string, int> animNamesTmp; Parser parsLine("", "\n\r"); Parser parsSpace("", " \t"); anims.clear(); animNames.clear(); unsigned int size=0; char *tmp=NULL; fstream in; in.open(name.c_str(), ios::binary|ios::in); in.seekg(0, ios::end); size=in.tellg(); in.seekg(0, ios::beg); try { if(!in.is_open() || size<=0) throw bad_alloc(); tmp=new char[size+1]; } catch(bad_alloc&) { printf("Sprite2D.loadAnims: Nie udalo sie wczytac informacji o animacjach, uzywanie calego obrazka"); anims.push_back(Anim(0.0f, 0.0f)); anims.back().addFrame(0, 0, w, h, 0, 0, 0, 0); return 1; } in.read(tmp, size); tmp[size]='\0'; in.close(); parsLine=tmp; delete [] tmp; for(int i=0; i<parsLine.count(); i++) { parsSpace=parsLine[i]; //printf("> %s\n", parsSpace.getText().c_str()); if(parsSpace.count()<1) continue; else if(parsSpace[0]=="--") continue; else if(parsSpace[0]=="anim") { if(parsSpace.count()<2) // Wstawianie poklatkowe { printf("Sprite2D.loadAnim: Brak wymaganych informacji (\"%s\")", parsSpace.getText().c_str()); break; } anims.push_back(Anim(parsSpace.valFloat(1), 0)); if(parsSpace.count()>2) { anims.back().setFret(parsSpace.val(2)); if(parsSpace.count()>3) animNamesTmp[parsSpace[3]]=i; } } else if(parsSpace[0]=="frame") { Anim& a=anims.back(); int count=parsSpace.val(1); if(count<=0) a.addFrame(0, 0, 0, 0); //printf("> Klatek: %d\n", count); for(int i=0; i<count; i++) { if(parsSpace.count()<4) a.addFrame(0, 0, 0, 0); else if(parsSpace.count()<8) a.addFrame(parsSpace.val(2)+parsSpace.val(4)*i, parsSpace.val(3), parsSpace.val(4), parsSpace.val(5)); else if(parsSpace.count()<10) a.addFrame(parsSpace.val(2)+parsSpace.val(4)*i, parsSpace.val(3), parsSpace.val(4), parsSpace.val(5), parsSpace.val(6), parsSpace.val(7)); else if(parsSpace.count()<14) a.addFrame(parsSpace.val(2)+parsSpace.val(4)*i, parsSpace.val(3), parsSpace.val(4), parsSpace.val(5), parsSpace.val(6), parsSpace.val(7), parsSpace.val(8), parsSpace.val(9)); else a.addFrame(parsSpace.val(2)+parsSpace.val(4)*i, parsSpace.val(3), parsSpace.val(4), parsSpace.val(5), parsSpace.val(6), parsSpace.val(7), parsSpace.val(8), parsSpace.val(9), parsSpace.val(10), parsSpace.val(11), parsSpace.val(12), parsSpace.val(13)); } } //else if(parsSpace[0]=="anim") else if(parsSpace.isVal(0) && parsSpace.count()>6) // Animacje 'na szybko' // Proste zalozenie, jesli pierwsza wartosc jest liczba to dodawana jest animacja { // 5 0 24 12 24 7 24 if(parsSpace.count()<7) { printf("Sprite2D.loadAnims: Brak wymaganych informacji (\"%s\")\n", parsSpace.getText().c_str()); break; } anims.push_back(Anim(0.0f, 0)); Anim& a=anims.back(); int count=parsSpace.val(0); for(int i=0; i<count; ++i) a.addFrame(parsSpace.val(1)+parsSpace.val(3)*i, parsSpace.val(2), parsSpace.val(3), parsSpace.val(4), parsSpace.val(5), parsSpace.val(6)); if(parsSpace.count()>7) { a.setAspd(parsSpace.valFloat(7)); if(parsSpace.count()>8) a.setFret(parsSpace.val(8)); } } } // Dodawanie nazw do mapy //int i=0; for(map<string, int>::iterator it=animNamesTmp.begin(); it!=animNamesTmp.end(); ++it) { animNames[it->first]=&anims[it->second]; //printf("Sprite2d.loadAnims: Dodawanie nazwy, animacja %d, nazwa %s", i++, it->first.c_str()); } // Sprawdz czy wczytala sie przynajmniej jedna animacja if(anims.size()<1) return 0; // Sprawdzanie czy wszystkie animacje maja conajmniej jedna klatke for(unsigned int i=0; i<anims.size(); i++) if(anims[i].getFrameCount()<1) anims[i].addFrame(0, 0, 0, 0); //printf("INFO: Sprite.loadAnim: Ilosc animacji: %d\n", anims.size()); return 1; }