bool AssetPack::loadGame(vector<Entity *> &entities, const string &saveFile) { int id = 1; Json::Reader reader; Value saveRoot; ifstream file(saveFile, ios::in); if (!file) { cout << "Could not open entity file: " << saveFile << endl; return false; } if (!reader.parse(file, saveRoot)) { cout << "Could not parse entity file: " << saveFile << endl; file.close(); return false; } if (!saveRoot.isObject()) return false; Value ents = saveRoot["Entities"]; if (!ents.isArray()) return false; for (Value ent : ents) { Value assetVal = ent["Asset"]; Value position = ent["Position"]; Value rotation = ent["Rotation"]; if (!assetVal.isString()) return false; Asset *asset = getAsset(assetVal.asString()); if (asset == NULL) { //ignore invalid asset cout << "Invalid asset: " << assetVal.asString() << endl; continue; } btVector3 pos; btQuaternion rot; if (!parseQuaternion(rotation, rot)) continue; if (!parseVector3(position, pos)) continue; entities.push_back(asset->createEntity(btTransform(rot, pos), id++)); } return true; }