public void Add(GameObject go) { // containers VisitToCreateLightmap(); VisitToCreateMesh_r(go); VisitToCreateMaterial_r(go); VisitToCreateTexture(containerTable.GetEnumerable <MaterialContainer>()); // game object VisitToCreateGameObjectNode_r(go); // nodes - for component VisitToCreateNode_r <Camera, CameraNode>(go); VisitToCreateNode_r <Light, LightNode>(go); VisitToCreateRenderNode_r(go); VisitToCreateScriptNode_r(go); // script variable에서 참조하는 객체 foreach (var node in graphNodeTable.GetEnumerable <ScriptNode>()) { foreach (var val in node.VariableEnumerable) { Material mtl = val.GetMaterial(); if (mtl && !containerTable.Contains <MaterialContainer>(mtl.GetInstanceID().ToString())) { var c = new MaterialContainer(mtl); containerTable.Add(c.InstanceId, c); } Texture tex = val.GetTexture(); if (tex && !containerTable.Contains <TextureContainer>(tex.GetInstanceID().ToString())) { var c = new TextureContainer(tex); containerTable.Add(c.InstanceId, c); } } } // 새로운 material이 추가되면 연관된 texture가 생겼을지 모른다 VisitToCreateTexture(containerTable.GetEnumerable <MaterialContainer>()); }
public void BuildHierarchy(INodeTable <string> table) { // TODO 부모 없는 모다 찾아서 붙이기 var parentlist = new List <GameObjectNode>(); foreach (var n in table.GetEnumerable <GameObjectNode>()) { if (n.ParentObject == null) { parentlist.Add(n); } } Children = parentlist.ToArray(); }