MCPcopy Create free account
hub / github.com/crownengine/crown / parse

Method parse

src/resource/state_machine_resource.cpp:344–399  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

342 }
343
344 s32 parse(Buffer &buf)
345 {
346 TempAllocator4096 ta;
347 JsonObject obj(ta);
348 JsonArray states(ta);
349 JsonArray variables(ta);
350
351 RETURN_IF_ERROR(sjson::parse(obj, buf));
352 RETURN_IF_ERROR(sjson::parse_array(states, obj["states"]));
353 RETURN_IF_ERROR(sjson::parse_array(variables, obj["variables"]));
354
355 // Parse animation type.
356 if (json_object::has(obj, "animation_type")) {
357 RETURN_IF_ERROR(sjson::parse_string(_animation_type, obj["animation_type"]));
358 } else {
359 _animation_type = "sprite_animation"; // For backwards compatibility.
360 }
361 RETURN_IF_FALSE(STATE_MACHINE_RESOURCE, StringId64(_animation_type.c_str()) == RESOURCE_TYPE_SPRITE_ANIMATION
362 || StringId64(_animation_type.c_str()) == RESOURCE_TYPE_MESH_ANIMATION
363 , _opts
364 , "Unknown animation type '%s'"
365 , _animation_type.c_str()
366 );
367
368 s32 err = 0;
369 err = parse_states(states);
370 ENSURE_OR_RETURN(STATE_MACHINE_RESOURCE, err == 0, _opts);
371 RETURN_IF_FALSE(STATE_MACHINE_RESOURCE, hash_map::size(_states) > 0
372 , _opts
373 , "States cannot be empty"
374 );
375
376 _initial_state = RETURN_IF_ERROR(sjson::parse_guid(obj["initial_state"]));
377 RETURN_IF_FALSE(STATE_MACHINE_RESOURCE, hash_map::has(_states, _initial_state)
378 , _opts
379 , "Initial state references non-existing state"
380 );
381
382 // Parse skeleton, if any.
383 if (json_object::has(obj, "skeleton_name")
384 && sjson::type(obj["skeleton_name"]) == JsonValueType::STRING) {
385 DynamicString skeleton_name(ta);
386 RETURN_IF_ERROR(sjson::parse_string(skeleton_name, obj["skeleton_name"]));
387 WARN_IF_MISSING(STATE_MACHINE_RESOURCE, "mesh_skeleton", skeleton_name.c_str(), _opts);
388 _opts.add_requirement("mesh_skeleton", skeleton_name.c_str());
389 _skeleton_name = StringId64(skeleton_name.c_str());
390 }
391
392 err = parse_variables(variables);
393 ENSURE_OR_RETURN(STATE_MACHINE_RESOURCE, err == 0, _opts);
394
395 err = compute_state_offsets();
396 ENSURE_OR_RETURN(STATE_MACHINE_RESOURCE, err == 0, _opts);
397
398 return 0;
399 }
400
401 s32 write()

Callers 1

compileFunction · 0.45

Calls 10

parse_guidFunction · 0.85
add_requirementMethod · 0.80
parseFunction · 0.70
parse_arrayFunction · 0.50
hasFunction · 0.50
parse_stringFunction · 0.50
StringId64Class · 0.50
sizeFunction · 0.50
typeFunction · 0.50
c_strMethod · 0.45

Tested by

no test coverage detected