本文整理汇总了C++中FileManager::Open方法的典型用法代码示例。如果您正苦于以下问题:C++ FileManager::Open方法的具体用法?C++ FileManager::Open怎么用?C++ FileManager::Open使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FileManager
的用法示例。
在下文中一共展示了FileManager::Open方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: texcoordsScale
std::shared_ptr<Resource> BillboardAnimationLoader::Load(
const ResourceKey& key,
const FileManager& fileManager) const
{
File file;
fileManager.Open(key.GetFilePath(), file);
auto animationJson = file.ReadAll();
auto deleter = [](json_value* p){ json_value_free(p); };
auto animationVal = std::unique_ptr<json_value, decltype(deleter)>(
json_parse(animationJson.c_str(),
animationJson.length() * sizeof(std::string::value_type)),
deleter);
assert(animationVal->type == json_object);
auto textureVal = (*animationVal)["texture"];
auto framesXVal = (*animationVal)["framesX"];
auto framesYVal = (*animationVal)["framesY"];
auto framesVal = (*animationVal)["frames"];
assert(textureVal.type == json_string);
std::string textureFilePath = MakeAbsolutePath(
key.GetFilePath(), std::string(textureVal));
auto texture = g_resourceManager->Acquire<TextureResource>(
ResourceKey(textureFilePath));
assert(framesXVal.type == json_integer);
assert(framesYVal.type == json_integer);
int numFramesX = json_int_t(framesXVal);
int numFramesY = json_int_t(framesYVal);
std::vector<Vec2f> texcoordsScales;
std::vector<Vec2f> texcoordsOffsets;
std::vector<int> times;
assert(framesVal.type == json_array);
const unsigned int numFrames = framesVal.u.array.length;
for (size_t i = 0; i < numFrames; ++i)
{
assert(framesVal[i].type == json_object);
auto frameXVal = framesVal[i]["x"];
auto frameYVal = framesVal[i]["y"];
auto timeVal = framesVal[i]["ms"];
assert(frameXVal.type == json_integer);
assert(frameYVal.type == json_integer);
assert(timeVal.type == json_integer);
int frameX = json_int_t(frameXVal);
int frameY = json_int_t(frameYVal);
int time = json_int_t(timeVal);
float frameWidth = 1.0f / numFramesX;
float frameHeight = 1.0f / numFramesY;
Vec2f texcoordsScale(frameWidth, frameHeight);
Vec2f texcoordsOffset(frameX * frameWidth, (1 - frameY) * frameHeight);
texcoordsScales.push_back(texcoordsScale);
texcoordsOffsets.push_back(texcoordsOffset);
times.push_back(time);
}
return std::make_shared<BillboardAnimationResource>(
texcoordsScales, texcoordsOffsets, times, texture);
}
示例2: texcoordsScale
std::shared_ptr<Resource> FontLoader::Load(
const ResourceKey& key,
const FileManager& fileManager) const
{
File file;
fileManager.Open(key.GetFilePath(), file);
auto fontJson = file.ReadAll();
auto deleter = [](json_value* p){ json_value_free(p); };
auto fontVal = std::unique_ptr<json_value, decltype(deleter)>(
json_parse(fontJson.c_str(),
fontJson.length() * sizeof(std::string::value_type)),
deleter);
assert(fontVal->type == json_object);
auto textureVal = (*fontVal)["texture"];
auto dimXVal = (*fontVal)["dimX"];
auto dimYVal = (*fontVal)["dimY"];
auto charHVal = (*fontVal)["charH"];
auto charactersVal = (*fontVal)["characters"];
assert(textureVal.type == json_string);
std::string textureFilePath = MakeAbsolutePath(
key.GetFilePath(), std::string(textureVal));
auto texture = g_resourceManager->Acquire<TextureResource>(
ResourceKey(textureFilePath));
assert(dimXVal.type == json_integer);
assert(dimYVal.type == json_integer);
assert(charHVal.type == json_integer);
int dimX = json_int_t(dimXVal);
int dimY = json_int_t(dimYVal);
int charH = json_int_t(charHVal);
float charTexW = 1.0f / dimX;
float charTexH = 1.0f / dimY;
float charScaleAspectRatio = 1.0f / (dimX * charH);
float charScaleY = 1.0f / dimY;
std::vector<Vec2f> texcoordsScales;
std::vector<Vec2f> texcoordsOffsets;
std::vector<float> aspectRatios;
std::unordered_map<char, size_t> charToIdxLookup;
assert(charactersVal.type == json_array);
const unsigned int numCharacters = charactersVal.u.array.length;
for (size_t i = 0; i < numCharacters; ++i)
{
assert(charactersVal[i].type == json_object);
auto charVal = charactersVal[i]["c"];
auto xVal = charactersVal[i]["x"];
auto yVal = charactersVal[i]["y"];
auto charWVal = charactersVal[i]["w"];
assert(charVal.type == json_string);
assert(xVal.type == json_integer);
assert(yVal.type == json_integer);
assert(charWVal.type == json_integer);
char character = std::string(charVal).at(0);
int charTexX = json_int_t(xVal);
int charTexY = json_int_t(yVal);
int charW = json_int_t(charWVal);
Vec2f texcoordsScale(charW * charScaleAspectRatio, charScaleY);
Vec2f texcoordsOffset(
charTexX * charTexW, 1 - charTexY * charTexH - charTexH);
texcoordsScales.push_back(texcoordsScale);
texcoordsOffsets.push_back(texcoordsOffset);
aspectRatios.push_back(charW / static_cast<float>(charH));
charToIdxLookup.insert(std::make_pair(character, i));
}
return std::make_shared<FontResource>(
texcoordsScales, texcoordsOffsets, aspectRatios, charToIdxLookup,
texture);
}