| 137 | } |
| 138 | |
| 139 | s32 parse(MeshAnimation &ma, Buffer &buf, CompileOptions &opts) |
| 140 | { |
| 141 | TempAllocator4096 ta; |
| 142 | JsonObject obj(ta); |
| 143 | RETURN_IF_ERROR(sjson::parse(obj, buf)); |
| 144 | |
| 145 | // Parse skeleton. |
| 146 | DynamicString target_skeleton(ta); |
| 147 | RETURN_IF_ERROR(sjson::parse_string(target_skeleton, obj["target_skeleton"])); |
| 148 | WARN_IF_MISSING(MESH_ANIMATION, "mesh_skeleton", target_skeleton.c_str(), opts); |
| 149 | opts.add_requirement("mesh_skeleton", target_skeleton.c_str()); |
| 150 | ma.target_skeleton = RETURN_IF_ERROR(sjson::parse_resource_name(obj["target_skeleton"])); |
| 151 | |
| 152 | // Parse animations. |
| 153 | RETURN_IF_ERROR(sjson::parse_string(ma.stack_name, obj["stack_name"])); |
| 154 | |
| 155 | DynamicString source(ta); |
| 156 | if (json_object::has(obj, "source")) { |
| 157 | RETURN_IF_ERROR(sjson::parse_string(source, obj["source"])); |
| 158 | |
| 159 | RETURN_IF_FILE_MISSING(MESH_ANIMATION, source.c_str(), opts); |
| 160 | Buffer fbx_buf = opts.read(source.c_str()); |
| 161 | s32 err = fbx::parse(ma, fbx_buf, opts); |
| 162 | ENSURE_OR_RETURN(MESH_ANIMATION, err == 0, opts); |
| 163 | } else { |
| 164 | RETURN_IF_FALSE(MESH_ANIMATION, false |
| 165 | , opts |
| 166 | , "Unknown source mesh '%s'" |
| 167 | , source.c_str() |
| 168 | ); |
| 169 | } |
| 170 | |
| 171 | return generate_sorted_keys(ma); |
| 172 | } |
| 173 | |
| 174 | } // namespace mesh_animation |
| 175 |
nothing calls this directly
no test coverage detected