Beispiel #1
0
//ONLY USED IF USING DESCRIPTORS
SpriteSheetDescription Resources::loadDescription(std::string fileName) {
    std::string filePath = TEXTURETPATH + fileName + TEXTUREDESCRIPTIONEXTENSION;
    SpriteSheetDescription ret;
    // leer el fichero
    std::ifstream file(filePath);
    if (!file.is_open()) {
        std::cout << "Error opening file on resources loadDescription " << filePath << std::endl;
        exit(EXIT_FAILURE);
    }
    std::vector<std::pair<int, std::string> > v;
    int lineNum = 0;
    std::string line;
    while (getline(file,line)) {
        ++lineNum;
        for (int i = 0; i < int(line.size()-1); ++i) {
            if (line[i] == '/' && line[i+1] == '/') {
                line = line.substr(0,i);
                break;
            }
        }
        std::istringstream aux(line);
        std::string s;
        while(aux >> s) 
            v.push_back(std::make_pair(lineNum,s));
    }
    SpriteSheetDescription ssd;
    std::map<std::string, int> positions;
    for (int  i = 0; i < int(v.size()); ++i) {
        lineNum = v[i].first;
        std::string key = v[i].second;
        int descriptorPosition;
        if (positions.find(key) == positions.end()) {
            descriptorPosition = positions.size();
            positions.insert(std::make_pair(key,descriptorPosition));
            ssd.push_back(std::vector<sf::IntRect>());
        }
        else {
            descriptorPosition = positions[key];
        }
        //std::cout << "insertando la key " << key << " en la posicion " << descriptorPosition << std::endl;

        if (i+4 >= int(v.size()) || 
            !isInt(v[i+1].second) || 
            !isInt(v[i+2].second) || 
            !isInt(v[i+3].second) || 
            !isInt(v[i+4].second)) {
            std::cout << "Error in line " << lineNum << ": four integers are needed" << std::endl;
            exit(EXIT_FAILURE);
        }
        sf::IntRect intRect(myStoi(v[i+1].second),
            myStoi(v[i+2].second),
            myStoi(v[i+3].second),
            myStoi(v[i+4].second));
        ssd[descriptorPosition].push_back(intRect);
        i += 4;
    }

    return ssd;
}
Beispiel #2
0
void DataManager::load() {
    std::ifstream file(DATAPATH+std::string("savefile"));
    if (!file.is_open()) return;

    std::vector<std::pair<int, std::string> > v;
    int lineNum = 0;
    std::string line;
    while (getline(file,line)) {
        ++lineNum;
        for (int i = 0; i < int(line.size()-1); ++i) {
            if (line[i] == '/' && line[i+1] == '/') {
                line = line.substr(0,i);
                break;
            }
        }
        std::istringstream aux(line);
        std::string s;
        while(aux >> s) 
            v.push_back(std::make_pair(lineNum,s));
    }
    int dataType = -1; // 0-> bool, 1 -> float, 2 -> string, 3->Vector2f
    int numberOfelements = 0;
    for (int  i = 0; i < int(v.size()); ++i) {
        if (numberOfelements == 0) {
            numberOfelements = myStoi(v[i].second);
            ++dataType;
            continue;
        }
        --numberOfelements;
        // std::cout << v[i].second << std::endl;
        switch(dataType){
            case 0:
                bMap.insert(std::make_pair(v[i].second,myStob(v[i+1].second)));
                i += 1;
                break;
            case 1:
                fMap.insert(std::make_pair(v[i].second,std::stof(v[i+1].second)));
                i += 1;
                break;
            case 2:
                sMap.insert(std::make_pair(v[i].second,v[i+1].second));
                i += 1;
                break;
            case 3:
                f2Map.insert(std::make_pair(v[i].second,sf::Vector2f(std::stof(v[i+1].second),std::stof(v[i+2].second))));
                i += 2;
                break;
            default:
                exit(EXIT_FAILURE);
        }
    }
}