Exemplo n.º 1
0
            private ErrorCode LoadAnimations(HelixInternalScene scene)
            {
                var dict = new Dictionary <string, HxScene.SceneNode>(SceneNodes.Count);

                foreach (var node in SceneNodes)
                {
                    if (node is HxScene.GroupNode && !dict.ContainsKey(node.Name))
                    {
                        dict.Add(node.Name, node);
                    }
                }

                foreach (var node in SceneNodes.Where(x => x is Animations.IBoneMatricesNode)
                         .Select(x => x as Animations.IBoneMatricesNode))
                {
                    if (node.Bones != null)
                    {
                        for (var i = 0; i < node.Bones.Length; ++i)
                        {
                            if (dict.TryGetValue(node.Bones[i].Name, out var s))
                            {
                                ref var b = ref node.Bones[i];
                                b.ParentNode      = s.Parent;
                                b.Node            = s;
                                s.IsAnimationNode = true; // Make sure to set this to true
                            }
                        }
                    }
                }
            private ErrorCode LoadAnimations(HelixInternalScene scene)
            {
                var dict = new Dictionary <string, HxScene.SceneNode>(SceneNodes.Count);

                foreach (var node in SceneNodes)
                {
                    if (node is HxScene.GroupNode && !dict.ContainsKey(node.Name))
                    {
                        dict.Add(node.Name, node);
                    }
                }

                var nodeIdxDict = new Dictionary <string, int>();

                foreach (var node in SceneNodes.Where(x => x is Animations.IBoneMatricesNode)
                         .Select(x => x as Animations.IBoneMatricesNode))
                {
                    if (node.Bones != null)
                    {
                        nodeIdxDict.Clear();
                        for (var i = 0; i < node.Bones.Length; ++i)
                        {
                            nodeIdxDict.Add(node.Bones[i].Name, i);
                        }
                        for (var i = 0; i < node.Bones.Length; ++i)
                        {
                            if (dict.TryGetValue(node.Bones[i].Name, out var s))
                            {
                                ref var b = ref node.Bones[i];
                                b.ParentNode         = s.Parent;
                                b.Node               = s;
                                b.BoneLocalTransform = s.ModelMatrix;
                                if (s.Parent != null && nodeIdxDict.TryGetValue(s.Parent.Name, out var idx))
                                {
                                    b.ParentIndex = idx;
                                }
                                s.IsAnimationNode = true; // Make sure to set this to true
                            }
                        }

                        if (Configuration.CreateSkeletonForBoneSkinningMesh &&
                            node is HxScene.BoneSkinMeshNode sk &&
                            sk.Parent is HxScene.GroupNodeBase group)
                        {
                            var skeleton = sk.CreateSkeletonNode(Configuration.SkeletonMaterial,
                                                                 Configuration.SkeletonEffects, Configuration.SkeletonSizeScale);
                            skeleton.Name = "HxSK_" + sk.Name;
                            group.AddChildNode(skeleton);
                        }

                        //Setup bone matrices initially if it's morphable (unable to render w/o bones)
                        if (node is HxScene.BoneSkinMeshNode sn &&
                            sn.MorphTargetWeights.Length > 0 &&
                            sn.BoneMatrices?.Length == 0)
                        {
                            sn.UpdateBoneMatrices();
                        }
                    }
                }
Exemplo n.º 3
0
 /// <summary>
 /// Clears this instance.
 /// </summary>
 protected virtual void Clear()
 {
     textureDict.Clear();
     SceneNodes.Clear();
     Animations.Clear();
     MeshIndexForNoName     = 0;
     MaterialIndexForNoName = 0;
 }
        private void InitializeDefaults()
        {
            SceneManagerAssetPath = AssetDatabase.GetAssetPath(SerializedManager.targetObject);

            bool wasCreated = false;

            AssetFilter assetFilter = AssetDatabaseExtensions.
                                      FindOrCreateSubScriptableObject <AssetFilter>(SceneManagerAssetPath, "SceneFilter", out wasCreated);

            if (wasCreated)
            {
                assetFilter.IncludeIfNoMatch = true;
            }

            SerializedSceneFilter = new SerializedObject(assetFilter);

            SceneHunter sceneHunter = AssetDatabaseExtensions.
                                      GetFirstSubAssetOf <SceneHunter>(SceneManagerAssetPath);

            if (sceneHunter == null)
            {
                sceneHunter = AssetDatabaseExtensions.
                              CreateSubScriptableObject <UnitySceneHunter>(SceneManagerAssetPath, "SceneHunter");
            }

            ScenePopulator = new SerializedObject(sceneHunter);

            SceneNodes = AssetDatabaseExtensions.
                         FindOrCreateSubScriptableObject <SceneNodeCollection>(SceneManagerAssetPath, "SceneNodes", out wasCreated);

            if (wasCreated)
            {
                SceneNodes.SceneManager = TargetManager;
            }

            SceneNodes.PopulateSceneInfos();

            SceneNodesObject = new SerializedObject(SceneNodes);
            SceneNodesProp   = SceneNodesObject.FindProperty("sceneNodes");

            if (AssetDatabaseExtensions.GetSubAssetsOfType <SceneVariableContainer>(TargetManager).Count() == 0)
            {
                TargetManager.SceneVariables.name = "ManagerVariables";
                AssetDatabase.AddObjectToAsset(TargetManager.SceneVariables, TargetManager);
                AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(TargetManager));
            }
            SerializedManager.ApplyModifiedProperties();

            ScenesProp       = SerializedManager.FindProperty("scenes");
            EntrySceneIdProp = SerializedManager.FindProperty("entrySceneId");
            AnyScenesProp    = SerializedManager.FindProperty("anyScene");

            UseOnPlayProp = SerializedManager.FindProperty("useOnPlay");
            GoToOnPlay    = SerializedManager.FindProperty("goToOnPlay");

            SerializedVariables = new SerializedSceneVariableCollection(TargetManager.SceneVariables);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Processes the scene nodes.
 /// </summary>
 /// <param name="root">The root.</param>
 /// <returns></returns>
 protected virtual ErrorCode ProcessSceneNodes(HxScene.SceneNode root)
 {
     if (root == null)
     {
         return(ErrorCode.Failed);
     }
     SceneNodes.Add(root);
     SceneNodes.AddRange(root.Items.PreorderDFT(n => { return(true); }));
     return(ErrorCode.Succeed);
 }
Exemplo n.º 6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BackupRecord"/> class.
 /// </summary>
 /// <param name="backupType">Type of the backup.</param>
 /// <param name="world">The world.</param>
 /// <param name="citizen">The citizen.</param>
 /// <param name="label">The label.</param>
 /// <param name="description">The description.</param>
 /// <param name="sceneNodes">The scene nodes.</param>
 public BackupRecord(BackupType backupType, string world, int citizen, string label, string description, SceneNodes sceneNodes)
 {
     _world       = world;
     _id          = Guid.NewGuid();
     _citizen     = citizen;
     _label       = label;
     _description = description;
     _date        = DateTime.Now;
     SceneNodes   = sceneNodes;
     _backupType  = backupType;
 }
        public void Set(SceneNode referenceNode, IList <SceneNode> nodes, RenderContext context)
        {
            Reset();
            ReferenceNode = referenceNode;

            int numberOfNodes = nodes.Count;

            for (int i = 0; i < numberOfNodes; i++)
            {
                var node = nodes[i];
                if ((WboitFlags)node.UserFlags == WboitFlags.Transparent)
                {
                    TransparentNodes.Add(node);
                }
                else
                {
                    SceneNodes.Add(node);
                }
            }
        }
 public void Reset()
 {
     ReferenceNode = null;
     SceneNodes.Clear();
     TransparentNodes.Clear();
 }