Пример #1
0
        private bool loadFrom(BinStore s)
        {
            bool ok = true;

            s.prepare();
            ok &= s.read(out Version);
            ok &= s.read(out Scenefile);
            ok &= s.prepare_nested(); // will update the file size left
            Debug.Assert(ok);
            if (s.end_encountered())
            {
                return(ok);
            }
            string _name;

            while (s.nesting_name(out _name))
            {
                s.nest_in();
                if ("Def" == _name || "RootMod" == _name)
                {
                    var entry = new SceneGraphNode_Data();
                    ok &= entry.loadFrom(s);
                    Def.Add(entry);
                }
                else if ("Ref" == _name)
                {
                    var entry = new SceneRootNode_Data();
                    ok &= entry.loadFrom(s);
                    Ref.Add(entry);
                }
                else
                {
                    Debug.Assert(false, "unknown field referenced.");
                }

                s.nest_out();
            }

            return(ok);
        }
Пример #2
0
        public void addChildNodes(SceneGraphNode_Data inp_data, LoadingContext ctx, PrefabStore store)
        {
            if (inp_data.p_Grp == null || inp_data.p_Grp.Count == 0)
            {
                return;
            }

            foreach (GroupLoc_Data dat in inp_data.p_Grp)
            {
                string new_name = ctx.groupRename(dat.name, false);
                SceneNodeChildTransform child = new SceneNodeChildTransform();
                child.node = ctx.m_target.getNodeByName(new_name);
                if (null == child.node)
                {
                    bool loaded = store.loadNamedPrefab(new_name, ctx);
                    if (!loaded)
                    {
                        Debug.LogError("Cannot load named prefab " + new_name + " result is " + loaded);
                    }
                    child.node = ctx.m_target.getNodeByName(new_name);
                }

                // construct from euler angles
                Quaternion qPitch  = UnityEngine.Quaternion.AngleAxis(Mathf.Rad2Deg * dat.rot.x, new Vector3(-1, 0, 0));
                Quaternion qYaw    = UnityEngine.Quaternion.AngleAxis(Mathf.Rad2Deg * dat.rot.y, new Vector3(0, 1, 0));
                Quaternion qRoll   = UnityEngine.Quaternion.AngleAxis(Mathf.Rad2Deg * dat.rot.z, new Vector3(0, 0, -1));
                Quaternion rotQuat = qYaw * qPitch * qRoll;
                child.m_matrix2 = Matrix4x4.TRS(dat.pos, rotQuat, new Vector3(1, 1, 1));
                if (null != child.node)
                {
                    m_children.Add(child);
                }
                else
                {
                    Debug.LogError("Node " + m_name + "\ncan't find member " + dat.name);
                }
            }
        }