MCPcopy Create free account
hub / github.com/DavidColson/Polybox / ParseJsonNodeRecursively

Function ParseJsonNodeRecursively

source/asset_importer.cpp:41–134  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

39// ***********************************************************************
40
41void ParseJsonNodeRecursively(lua_State* L, JsonValue& gltf, i32 nodeId) {
42 JsonValue& nodeToParse = gltf["nodes"][nodeId];
43
44 // construct the nodename
45 String nodeName;
46 if (nodeToParse.HasKey("name")) {
47 nodeName = nodeToParse["name"].ToString();
48 }
49 else {
50 nodeName = TempPrint("node%d", nodeId);
51 }
52 lua_pushlstring(L, nodeName.pData, nodeName.length);
53
54 // table for the node itself
55 lua_newtable(L);
56
57 // position
58 if (nodeToParse.HasKey("translation")) {
59 UserData* pUserData = AllocUserData(L, Type::Float32, 3, 1);
60 f32* pFloats = (f32*)pUserData->pData;
61 pFloats[0] = (f32)nodeToParse["translation"][0].ToFloat();
62 pFloats[1] = (f32)nodeToParse["translation"][1].ToFloat();
63 pFloats[2] = (f32)nodeToParse["translation"][2].ToFloat();
64 }
65 else {
66 UserData* pUserData = AllocUserData(L, Type::Float32, 3, 1);
67 }
68 lua_setfield(L, -2, "position");
69
70 // rotation
71 if (nodeToParse.HasKey("rotation")) {
72 UserData* pUserData = AllocUserData(L, Type::Float32, 4, 1);
73 f32* pFloats = (f32*)pUserData->pData;
74 pFloats[0] = (f32)nodeToParse["rotation"][0].ToFloat();
75 pFloats[1] = (f32)nodeToParse["rotation"][1].ToFloat();
76 pFloats[2] = (f32)nodeToParse["rotation"][2].ToFloat();
77 pFloats[3] = (f32)nodeToParse["rotation"][3].ToFloat();
78 }
79 else {
80 UserData* pUserData = AllocUserData(L, Type::Float32, 4, 1);
81 f32* pFloats = (f32*)pUserData->pData;
82 pFloats[0] = 0.0f;
83 pFloats[1] = 0.0f;
84 pFloats[2] = 0.0f;
85 pFloats[3] = 1.0f;
86 }
87 lua_setfield(L, -2, "rotation");
88
89 // scale
90 if (nodeToParse.HasKey("scale")) {
91 UserData* pUserData = AllocUserData(L, Type::Float32, 3, 1);
92 f32* pFloats = (f32*)pUserData->pData;
93 pFloats[0] = (f32)nodeToParse["scale"][0].ToFloat();
94 pFloats[1] = (f32)nodeToParse["scale"][1].ToFloat();
95 pFloats[2] = (f32)nodeToParse["scale"][2].ToFloat();
96 }
97 else {
98 UserData* pUserData = AllocUserData(L, Type::Float32, 3, 1);

Callers 1

ImportGltfFunction · 0.85

Calls 1

AllocUserDataFunction · 0.85

Tested by

no test coverage detected