Esempio n. 1
0
        GameObject InstantiateSiPrimitive(SiPrimitive primitive, bool visual, bool collidable)
        {
            Assert(visual || collidable);
            var width  = Math.Max(primitive.Width, 1F);
            var height = Math.Max(primitive.Height, 0.01F);
            var obj    = GameObject.CreatePrimitive(primitive.Type);

            obj.name = primitive.Name;
            obj.transform.position   = new Vector3(0, height / 2, 0);
            obj.transform.localScale = primitive.Scale * new Vector3(width, height, 1);
            //    obj.transform.Rotate(0.5F, 0, 0);
            if (visual)
            {
                var materialProps = SiAVObjectPropertiesToMaterialProperties(primitive);
                var meshRenderer  = obj.GetComponent <MeshRenderer>();
                meshRenderer.material = _materialManager.BuildMaterialFromProperties(materialProps);
                if (Utils.ContainsBitFlags(primitive.Flags, (int)SiAVObject.SiFlags.Hidden))
                {
                    meshRenderer.enabled = false;
                }
                obj.isStatic = true;
            }
            if (collidable)
            {
                if (KinematicRigidbodies)
                {
                    obj.AddComponent <Rigidbody>().isKinematic = true;
                }
            }
            //ApplySiAVObject(primitive, obj);
            return(obj);
        }
Esempio n. 2
0
        GameObject InstantiateNiTriShape(NiTriShape triShape, bool visual, bool collidable)
        {
            Assert(visual || collidable);
            var mesh = NiTriShapeDataToMesh((NiTriShapeData)_obj.Blocks[triShape.Data.Value]);
            var obj  = new GameObject(triShape.Name);

            if (visual)
            {
                obj.AddComponent <MeshFilter>().mesh = mesh;
                var materialProps = NiAVObjectPropertiesToMaterialProperties(triShape);
                var meshRenderer  = obj.AddComponent <MeshRenderer>();
                meshRenderer.material = _materialManager.BuildMaterialFromProperties(materialProps);
                if (Utils.ContainsBitFlags(triShape.Flags, (int)NiAVObject.NiFlags.Hidden))
                {
                    meshRenderer.enabled = false;
                }
                obj.isStatic = true;
            }
            if (collidable)
            {
                obj.AddComponent <MeshCollider>().sharedMesh = mesh;
                if (KinematicRigidbodies)
                {
                    obj.AddComponent <Rigidbody>().isKinematic = true;
                }
            }
            ApplyNiAVObject(triShape, obj);
            return(obj);
        }
Esempio n. 3
0
        static void MakeTexture(string path)
        {
            var textureManager  = new TextureManager(Asset);
            var materialManager = new MaterialManager(textureManager);
            var obj             = GameObject.Find("Cube"); // CreatePrimitive(PrimitiveType.Cube);
            var meshRenderer    = obj.GetComponent <MeshRenderer>();
            var materialProps   = new MaterialProps
            {
                Textures = new MaterialTextures {
                    MainFilePath = path
                },
            };

            meshRenderer.material = materialManager.BuildMaterialFromProperties(materialProps);
        }
Esempio n. 4
0
        static GameObject MakeTexture(string path, int idx)
        {
            var textureManager  = new TextureManager(AssetPack);
            var materialManager = new MaterialManager(textureManager);
            var obj             = GameObject.CreatePrimitive(PrimitiveType.Plane);

            obj.name = path.Replace("/", "");
            obj.transform.localPosition += new Vector3(10 * (idx % 10), 0, 10 * (idx / 10));
            var meshRenderer  = obj.GetComponent <MeshRenderer>();
            var materialProps = new MaterialProps
            {
                Textures = new MaterialTextures {
                    MainFilePath = path
                },
            };

            meshRenderer.material = materialManager.BuildMaterialFromProperties(materialProps);
            return(obj);
        }
Esempio n. 5
0
        GameObject InstantiateNiTriShape(SiMesh data, bool visual, bool collidable)
        {
            Assert(visual || collidable);
            var mesh = MeshLodDataToMesh(data.Lod);
            var obj  = new GameObject();

            if (visual)
            {
                obj.AddComponent <MeshFilter>().mesh = mesh;
                var materialProps = MeshLodDataToMaterialProperties(data.Lod);
                var meshRenderer  = obj.AddComponent <MeshRenderer>();
                meshRenderer.material = _materialManager.BuildMaterialFromProperties(materialProps);
                obj.isStatic          = true;
            }
            if (collidable)
            {
                obj.AddComponent <MeshCollider>().sharedMesh = mesh;
                if (KinematicRigidbodies)
                {
                    obj.AddComponent <Rigidbody>().isKinematic = true;
                }
            }
            return(obj);
        }
Esempio n. 6
0
        IEnumerable <GameObject> InstantiateNodeMesh(ChunkNode chunkNode, ChunkMesh meshData, bool visual, bool collidable)
        {
            if (meshData.MeshSubsets == 0)   // This is probably wrong.  These may be parents with no geometry, but still have an offset
            {
                Log($"*******Found a Mesh chunk with no Submesh ID (ID: {meshData.ID:X}, Name: {chunkNode.Name}).  Skipping...");
                // data.WriteChunk();
                // Log($"Node Chunk: {chunkNode.Name}");
                // transform = cgfData.GetTransform(chunkNode, transform);
                yield break;
            }
            if (meshData.VerticesData == 0 && meshData.VertsUVsData == 0)  // This is probably wrong.  These may be parents with no geometry, but still have an offset
            {
                Log($"*******Found a Mesh chunk with no Vertex info (ID: {meshData.ID:X}, Name: {chunkNode.Name}).  Skipping...");
                //data.WriteChunk();
                //Log($"Node Chunk: {chunkNode.Name}");
                //transform = cgfData.GetTransform(chunkNode, transform);
                yield break;
            }

            // Going to assume that there is only one VerticesData datastream for now.  Need to watch for this.
            // Some 801 types have vertices and not VertsUVs.
            var chunkMap       = chunkNode._model.ChunkMap;
            var tmpMtlName     = chunkMap.GetValue(chunkNode.MatID, null) as ChunkMtlName;
            var tmpMeshSubsets = chunkMap.GetValue(meshData.MeshSubsets, null) as ChunkMeshSubsets; // Listed as Object ID for the Node
            var tmpIndices     = chunkMap.GetValue(meshData.IndicesData, null) as ChunkDataStream;
            var tmpVertices    = chunkMap.GetValue(meshData.VerticesData, null) as ChunkDataStream;
            var tmpNormals     = chunkMap.GetValue(meshData.NormalsData, null) as ChunkDataStream;
            var tmpUVs         = chunkMap.GetValue(meshData.UVsData, null) as ChunkDataStream;
            var tmpVertsUVs    = chunkMap.GetValue(meshData.VertsUVsData, null) as ChunkDataStream;

            foreach (var meshSubset in tmpMeshSubsets.MeshSubsets)
            {
                var mesh = DataToMesh(chunkNode, meshData, tmpIndices, tmpVertices, tmpNormals, tmpUVs, tmpVertsUVs, meshSubset);
                var obj  = new GameObject(chunkNode.Name);
                if (visual)
                {
                    obj.AddComponent <MeshFilter>().mesh = mesh;

                    // MATERIAL
                    MaterialProps materialProps;
                    if (_file.Materials.Length > meshSubset.MatID)
                    {
                        materialProps = MeshPropertiesToMaterialProperties(_file.Materials[meshSubset.MatID]);
                    }
                    else
                    {
                        if (_file.Materials.Length > 0)
                        {
                            Log($"Missing Material {meshSubset.MatID}");
                        }
                        // The material file doesn't have any elements with the Name of the material.  Use the object name.
                        var mtl = _file.Materials.First(x => x.Name == $"{_file.RootNode.Name}_{meshSubset.MatID}");
                        materialProps = MeshPropertiesToMaterialProperties(mtl);
                    }
                    var meshRenderer = obj.AddComponent <MeshRenderer>();
                    meshRenderer.material = _materialManager.BuildMaterialFromProperties(materialProps);
                    //if (Utils.ContainsBitFlags(triShape.Flags, (int)NiAVObject.NiFlags.Hidden))
                    //    meshRenderer.enabled = false;
                    obj.isStatic = true;
                }
                if (collidable)
                {
                    obj.AddComponent <MeshCollider>().sharedMesh = mesh;
                    if (KinematicRigidbodies)
                    {
                        obj.AddComponent <Rigidbody>().isKinematic = true;
                    }
                }
                yield return(obj);
            }
        }