Example #1
0
        public bool UpcastInSceneThreeObject3D(Object3DElem child)
        {
            bool isSimpleGroup = (child.Parent.Type == "Group") && (child.Parent.ChildCount == 1);

            if (isSimpleGroup)
            {
                var parent      = child.Parent;
                var grandparent = parent.Parent;

                parent.RemoveChild(child);
                child.CopyAttributes(parent);

                grandparent.ReplaceChild(parent, child);
            }
            return(isSimpleGroup);
        }
        void WriteCommonAFrameNode(Object3DElem el, AFrameNode node)
        {
            // http://math.stackexchange.com/questions/237369/given-this-transformation-matrix-how-do-i-decompose-it-into-translation-rotati
            var m   = el.Matrix;
            var pos = Vector3Property.MakePosition(new Vector3(m[12], m[13], m[14]));

            node.AddAttribute("position", pos);

            var sx    = new Vector3(m[0], m[1], m[2]).magnitude;
            var sy    = new Vector3(m[4], m[5], m[6]).magnitude;
            var sz    = new Vector3(m[8], m[9], m[10]).magnitude;
            var scale = Vector3Property.MakeScale(new Vector3(sx, sy, sz));

            node.AddAttribute("scale", scale);

            var forward = el.UnityMatrix.MultiplyVector(Vector3.forward);
            var upward  = el.UnityMatrix.MultiplyVector(Vector3.up);
            var q       = Quaternion.LookRotation(forward, upward);
            var rot     = Vector3Property.MakeRotation(q);

            node.AddAttribute("rotation", rot);

            node.AddAttribute("id", el.Name);
            if (el.HasTag)
            {
                node.AddAttribute("tag", el.Tag);
            }
            if (el.HasLayer)
            {
                node.AddAttribute("layer", el.Layer);
            }


            var visitor = new AFrameExportVisitor(sharedNodeTable);

            foreach (var child in el.Children)
            {
                child.Accept(visitor);
                node.AddChild(visitor.Node);
            }
        }
Example #3
0
        void RegisterScriptVariables(UnitySceneRoot unityscene, Object3DElem obj, ScriptNode script)
        {
            foreach (var v in script.VariableEnumerable)
            {
                var val = v;

                Texture tex = val.GetTexture();
                if (tex)
                {
                    var elem = root.SharedNodeTable.Get <TextureElem>(tex.GetInstanceID().ToString());
                    val.value = elem.Uuid;
                }

                Material mtl = val.GetMaterial();
                if (mtl)
                {
                    var elem = root.SharedNodeTable.Get <MaterialElem>(mtl.GetInstanceID().ToString());
                    val.value = elem.Uuid;
                }

                Transform tr = val.GetTransform();
                if (tr)
                {
                    var elem = objNodeTable[tr.gameObject.GetInstanceID().ToString()];
                    val.value = elem.Uuid;
                }

                GameObject go = val.GetGameObject();
                if (go)
                {
                    var elem = objNodeTable[go.GetInstanceID().ToString()];
                    val.value = elem.Uuid;
                }

                obj.AddScriptVariable(script.BehaviourName, val);
            }
        }
Example #4
0
        Object3DElem VisitGameObjectNode_r(IGameObjectNode n)
        {
            Debug.Assert(n != null);

            Object3DElem elem = null;

            if (n.SuperRoot)
            {
                elem      = new SceneElem();
                elem.Name = "KanauScene";
                elem.Uuid = n.Guid;
            }
            else
            {
                elem      = new GroupElem(n);
                elem.Uuid = n.Guid;
            }

            if (n.HasTag)
            {
                elem.Tag = n.Tag;
            }
            if (n.HasLayer)
            {
                elem.Layer = n.Layer;
            }
            elem.IsStatic = n.IsStatic;

            objNodeTable[n.InstanceId] = elem;

            foreach (var child in n.Children)
            {
                var childelem = VisitGameObjectNode_r(child);
                elem.AddChild(childelem);
            }
            return(elem);
        }
Example #5
0
        Object3DElem VisitGameObjectNode_r(IGameObjectNode n)
        {
            Debug.Assert(n != null);

            Object3DElem elem = null;

            if (n.SuperRoot)
            {
                elem      = new SceneElem();
                elem.Name = "KanauScene";
            }
            else
            {
                elem = new GroupElem(n);
            }
            objNodeTable[n.InstanceId] = elem;

            foreach (var child in n.Children)
            {
                var childelem = VisitGameObjectNode_r(child);
                elem.AddChild(childelem);
            }
            return(elem);
        }