本文整理汇总了C++中JSONElement::key方法的典型用法代码示例。如果您正苦于以下问题:C++ JSONElement::key方法的具体用法?C++ JSONElement::key怎么用?C++ JSONElement::key使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JSONElement
的用法示例。
在下文中一共展示了JSONElement::key方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parse_frame
void parse_frame(JSONElement e, SpriteFrame& frame)
{
frame.name = e.key("name" ).to_string_id();
frame.region = e.key("region").to_vector4();
frame.offset = e.key("offset").to_vector2();
frame.scale = e.key("scale" ).to_vector2();
}
示例2: compile
void compile(const char* path, CompileOptions& opts)
{
static const uint32_t VERSION = 1;
Buffer buf = opts.read(path);
JSONParser json(array::begin(buf));
JSONElement root = json.root();
Array<LevelUnit> units(default_allocator());
Array<LevelSound> sounds(default_allocator());
{
JSONElement sounds_arr = root.key("sounds");
const uint32_t size = sounds_arr.size();
for (uint32_t i = 0; i < size; i++)
{
JSONElement e = sounds_arr[i];
LevelSound ls;
ls.name = e.key("name").to_resource_id("sound").name;
ls.position = e.key("position").to_vector3();
ls.volume = e.key("volume").to_float();
ls.range = e.key("range").to_float();
ls.loop = e.key("loop").to_bool();
array::push_back(sounds, ls);
}
}
{
JSONElement units_arr = root.key("units");
const uint32_t size = units_arr.size();
for (uint32_t i = 0; i < size; i++)
{
JSONElement e = units_arr[i];
LevelUnit lu;
lu.name = e.key("name").to_resource_id("unit").name;
lu.position = e.key("position").to_vector3();
lu.rotation = e.key("rotation").to_quaternion();
array::push_back(units, lu);
}
}
LevelResource lr;
lr.version = VERSION;
lr.num_units = array::size(units);
lr.num_sounds = array::size(sounds);
uint32_t offt = sizeof(LevelResource);
lr.units_offset = offt; offt += sizeof(LevelUnit) * lr.num_units;
lr.sounds_offset = offt;
opts._bw & lr
& units
& sounds;
}
示例3: process_command
//-----------------------------------------------------------------------------
void ConsoleServer::process_command(TCPSocket /*client*/, const char* msg)
{
JSONParser parser(msg);
JSONElement root = parser.root();
JSONElement command = root.key("command");
DynamicString cmd;
command.to_string(cmd);
if (cmd == "reload")
{
JSONElement type = root.key_or_nil("resource_type");
JSONElement name = root.key_or_nil("resource_name");
DynamicString resource_type;
DynamicString resource_name;
type.to_string(resource_type);
name.to_string(resource_name);
char t[256];
char n[256];
string::strncpy(t, resource_type.c_str(), 256);
string::strncpy(n, resource_name.c_str(), 256);
device()->reload(t, n);
}
else if (cmd == "pause")
{
device()->pause();
}
else if (cmd == "unpause")
{
device()->unpause();
}
}
示例4: process_script
//-----------------------------------------------------------------------------
void ConsoleServer::process_script(TCPSocket /*client*/, const char* msg)
{
JSONParser parser(msg);
JSONElement root = parser.root();
DynamicString script;
root.key("script").to_string(script);
device()->lua_environment()->execute_string(script.c_str());
}
示例5: compile
void compile(const char* path, CompileOptions& opts)
{
Buffer buf = opts.read(path);
JSONParser json(buf);
JSONElement root = json.root();
Array<TextureData> texdata(default_allocator());
Array<UniformData> unidata(default_allocator());
Array<char> names(default_allocator());
Array<char> dynblob(default_allocator());
ResourceId shader = root.key("shader").to_resource_id();
parse_textures(root, texdata, names, dynblob);
parse_uniforms(root, unidata, names, dynblob);
MaterialResource mr;
mr.version = MATERIAL_VERSION;
mr.shader = shader;
mr.num_textures = array::size(texdata);
mr.texture_data_offset = sizeof(mr);
mr.num_uniforms = array::size(unidata);
mr.uniform_data_offset = sizeof(mr) + sizeof(TextureData) * array::size(texdata);
mr.dynamic_data_size = array::size(dynblob);
mr.dynamic_data_offset = sizeof(mr) + sizeof(TextureData) * array::size(texdata) + sizeof(UniformData) * array::size(unidata);
// Write
opts.write(mr.version);
opts.write(mr._pad);
opts.write(mr.shader);
opts.write(mr.num_textures);
opts.write(mr.texture_data_offset);
opts.write(mr.num_uniforms);
opts.write(mr.uniform_data_offset);
opts.write(mr.dynamic_data_size);
opts.write(mr.dynamic_data_offset);
for (uint32_t i = 0; i < array::size(texdata); i++)
{
opts.write(texdata[i].sampler_name_offset);
opts.write(texdata[i]._pad);
opts.write(texdata[i].id);
opts.write(texdata[i].data_offset);
opts.write(texdata[i]._pad1);
}
for (uint32_t i = 0; i < array::size(unidata); i++)
{
opts.write(unidata[i].name_offset);
opts.write(unidata[i].type);
opts.write(unidata[i].data_offset);
}
opts.write(dynblob);
opts.write(names);
}
示例6: parse_textures
static void parse_textures(JSONElement root, Array<TextureData>& textures, Array<char>& names, Array<char>& dynamic)
{
using namespace vector;
Vector<DynamicString> keys(default_allocator());
root.key("textures").to_keys(keys);
for (uint32_t i = 0; i < size(keys); i++)
{
TextureHandle th;
th.sampler_handle = 0;
th.texture_handle = 0;
ResourceId texid = root.key("textures").key(keys[i].c_str()).to_resource_id();
TextureData td;
td.sampler_name_offset = array::size(names); array::push(names, keys[i].c_str(), keys[i].length()); array::push_back(names, '\0');
td.id = texid;
td.data_offset = reserve_dynamic_data(th, dynamic);
array::push_back(textures, td);
}
}
示例7: parse_animations
void parse_animations(JSONElement e, Array<SpriteAnimationName>& names, Array<SpriteAnimationData>& anim_data, Array<uint32_t>& frames)
{
const uint32_t num = e.key("animations").size();
for (uint32_t i = 0; i < num; i++)
{
JSONElement anim(e.key("animations")[i]);
SpriteAnimationName san;
san.id = anim.key("name").to_string_id();
const uint32_t num_frames = anim.key("frames").size();
SpriteAnimationData sad;
sad.num_frames = num_frames;
sad.first_frame = array::size(frames);
sad.time = anim.key("time").to_float();
// Read frames
for (uint32_t ff = 0; ff < num_frames; ff++)
array::push_back(frames, (uint32_t) anim.key("frames")[ff].to_int());
array::push_back(names, san);
array::push_back(anim_data, sad);
}
}
示例8: parse_uniforms
static void parse_uniforms(JSONElement root, Array<UniformData>& uniforms, Array<char>& names, Array<char>& dynamic)
{
using namespace vector;
Vector<DynamicString> keys(default_allocator());
root.key("uniforms").to_keys(keys);
for (uint32_t i = 0; i < size(keys); i++)
{
UniformHandle uh;
uh.uniform_handle = 0;
DynamicString type = root.key("uniforms").key(keys[i].c_str()).key("type").to_string();
UniformData ud;
ud.name_offset = array::size(names); array::push(names, keys[i].c_str(), keys[i].length()); array::push_back(names, '\0');
ud.type = string_to_uniform_type(type.c_str());
ud.data_offset = reserve_dynamic_data(uh, dynamic);
switch (ud.type)
{
case UniformType::FLOAT:
{
float data = root.key("uniforms").key(keys[i].c_str()).key("value").to_float();
reserve_dynamic_data(data, dynamic);
break;
}
case UniformType::VECTOR2:
{
Vector2 data = root.key("uniforms").key(keys[i].c_str()).key("value").to_vector2();
reserve_dynamic_data(data, dynamic);
break;
}
case UniformType::VECTOR3:
{
Vector3 data = root.key("uniforms").key(keys[i].c_str()).key("value").to_vector3();
reserve_dynamic_data(data, dynamic);
break;
}
case UniformType::VECTOR4:
{
Vector4 data = root.key("uniforms").key(keys[i].c_str()).key("value").to_vector4();
reserve_dynamic_data(data, dynamic);
break;
}
default: CE_FATAL("Oops"); break;
}
array::push_back(uniforms, ud);
}
}
示例9: size
size_t NetworkFile::size()
{
using namespace string_stream;
TempAllocator1024 alloc;
StringStream command(alloc);
// Request the file
command << "{\"type\":\"filesystem\",\"filesystem\":\"size\",";
command << "\"file\":\"" << _filename << "\"}";
network_filesystem::send(_socket, c_str(command));
// Wait for response
Array<char> response(default_allocator());
network_filesystem::read_response(_socket, response);
JSONParser parser(array::begin(response));
JSONElement root = parser.root();
return (size_t) root.key("size").to_int();
}
示例10: compile
void compile(const char* path, CompileOptions& opts)
{
Buffer buf = opts.read(path);
JSONParser json(buf);
JSONElement root = json.root();
// Read width/height
const float width = root.key("width" ).to_float();
const float height = root.key("height").to_float();
const uint32_t num_frames = root.key("frames").size();
Array<float> vertices(default_allocator());
Array<uint16_t> indices(default_allocator());
uint32_t num_idx = 0;
for (uint32_t i = 0; i < num_frames; i++)
{
JSONElement e(root.key("frames")[i]);
SpriteFrame frame;
parse_frame(e, frame);
const SpriteFrame& fd = frame;
// Compute uv coords
const float u0 = fd.region.x / width;
const float v0 = fd.region.y / height;
const float u1 = (fd.region.x + fd.region.z) / width;
const float v1 = (fd.region.y + fd.region.w) / height;
// Compute positions
const float w = fd.region.z / CROWN_DEFAULT_PIXELS_PER_METER;
const float h = fd.region.w / CROWN_DEFAULT_PIXELS_PER_METER;
const float x0 = fd.scale.x * (-w * 0.5f) + fd.offset.x;
const float y0 = fd.scale.y * (-h * 0.5f) + fd.offset.y;
const float x1 = fd.scale.x * ( w * 0.5f) + fd.offset.x;
const float y1 = fd.scale.y * ( h * 0.5f) + fd.offset.y;
array::push_back(vertices, x0); array::push_back(vertices, y0); // position
array::push_back(vertices, u0); array::push_back(vertices, v0); // uv
array::push_back(vertices, x1); array::push_back(vertices, y0); // position
array::push_back(vertices, u1); array::push_back(vertices, v0); // uv
array::push_back(vertices, x1); array::push_back(vertices, y1); // position
array::push_back(vertices, u1); array::push_back(vertices, v1); // uv
array::push_back(vertices, x0); array::push_back(vertices, y1); // position
array::push_back(vertices, u0); array::push_back(vertices, v1); // uv
array::push_back(indices, uint16_t(num_idx)); array::push_back(indices, uint16_t(num_idx + 1)); array::push_back(indices, uint16_t(num_idx + 2));
array::push_back(indices, uint16_t(num_idx)); array::push_back(indices, uint16_t(num_idx + 2)); array::push_back(indices, uint16_t(num_idx + 3));
num_idx += 4;
}
const uint32_t num_vertices = array::size(vertices) / 4; // 4 components per vertex
const uint32_t num_indices = array::size(indices);
// Write header
opts.write(SPRITE_VERSION);
opts.write(num_vertices);
for (uint32_t i = 0; i < array::size(vertices); i++)
{
opts.write(vertices[i]);
}
opts.write(num_indices);
for (uint32_t i = 0; i < array::size(indices); i++)
{
opts.write(indices[i]);
}
}
示例11: compile
//-----------------------------------------------------------------------------
void compile(const char* path, CompileOptions& opts)
{
Buffer buf = opts.read(path);
JSONParser json(array::begin(buf));
JSONElement root = json.root();
DynamicString vs_code;
DynamicString fs_code;
DynamicString varying_def;
root.key("vs_code").to_string(vs_code);
root.key("fs_code").to_string(fs_code);
root.key("varying_def").to_string(varying_def);
DynamicString vs_code_path;
DynamicString fs_code_path;
DynamicString varying_def_path;
DynamicString tmpvs_path;
DynamicString tmpfs_path;
opts.get_absolute_path(vs_code.c_str(), vs_code_path);
opts.get_absolute_path(fs_code.c_str(), fs_code_path);
opts.get_absolute_path(varying_def.c_str(), varying_def_path);
opts.get_absolute_path("tmpvs", tmpvs_path);
opts.get_absolute_path("tmpfs", tmpfs_path);
const char* compile_vs[] =
{
"shaderc",
"-f", vs_code_path.c_str(),
"-o", tmpvs_path.c_str(),
"--varyingdef", varying_def_path.c_str(),
"--type", "vertex",
"--platform", opts.platform(),
#if CROWN_PLATFORM_WINDOWS
"--profile", "vs_3_0",
#endif
NULL
};
os::execute_process(compile_vs);
const char* compile_fs[] =
{
"shaderc",
"-f", fs_code_path.c_str(),
"-o", tmpfs_path.c_str(),
"--varyingdef", varying_def_path.c_str(),
"--type", "fragment",
"--platform", opts.platform(),
#if CROWN_PLATFORM_WINDOWS
"--profile", "ps_3_0",
#endif
NULL
};
os::execute_process(compile_fs);
Buffer tmpvs = opts.read(tmpvs_path.c_str());
Buffer tmpfs = opts.read(tmpfs_path.c_str());
opts.write(uint32_t(1)); // version
opts.write(uint32_t(array::size(tmpvs)));
opts.write(array::begin(tmpvs), array::size(tmpvs));
opts.write(uint32_t(array::size(tmpfs)));
opts.write(array::begin(tmpfs), array::size(tmpfs));
opts.delete_file(tmpvs_path.c_str());
opts.delete_file(tmpfs_path.c_str());
}