Esempio n. 1
0
        /// <summary>
        /// Spawns a region in the world
        /// </summary>
        void RenderRegion(Region region)
        {
            if (region.gameObject == null)
            {
                GameObject parent = region.planet.gameObject;
                region.gameObject = new GameObject("region");
                region.gameObject.transform.parent        = parent.transform;
                region.gameObject.transform.localPosition = Vector3.zero;
                Mesh mesh = region.gameObject.AddComponent <MeshFilter>().mesh;
                region.gameObject.AddComponent <MeshRenderer>().sharedMaterial = materialController.GetMaterialForDynamicPlanet(region);
                region.gameObject.transform.localScale = Vector3.one;

                mesh.vertices  = region.meshData.vertices;
                mesh.triangles = region.meshData.triangles;
                mesh.normals   = region.meshData.normals;
                mesh.uv        = region.meshData.uv;
                mesh.colors    = region.meshData.colors;

                if (region.LOD <= 1)
                {
                    var meshCollider = region.gameObject.AddComponent <MeshCollider>();
                    var pm           = new PhysicMaterial
                    {
                        dynamicFriction = 1f,
                        staticFriction  = 1f,
                        bounciness      = 0f,
                        frictionCombine = PhysicMaterialCombine.Minimum,
                        bounceCombine   = PhysicMaterialCombine.Minimum
                    };
                    meshCollider.sharedMesh     = mesh;
                    meshCollider.sharedMaterial = pm;
                }

                if (region.planet.type.hasLava || region.planet.type.hasWater || region.planet.type.hasIce)
                {
                    string   name = "";
                    Material material;

                    if (region.planet.type.hasLava)
                    {
                        name     = "lava";
                        material = materialController.lavaMaterial;
                    }
                    else if (region.planet.type.hasWater)
                    {
                        name     = "water";
                        material = materialController.waterMaterial;
                    }
                    else
                    {
                        name     = "ice";
                        material = materialController.iceMaterial;
                    }

                    GameObject unit = new GameObject(name);
                    unit.transform.parent = region.gameObject.transform;
                    unit.AddComponent <MeshRenderer>().material = material;
                    Mesh unitMesh = new Mesh
                    {
                        vertices  = region.meshData.unitVertices,
                        triangles = region.meshData.triangles,
                        normals   = region.meshData.unitNormals,
                        uv        = region.meshData.uv
                    };
                    unit.AddComponent <MeshFilter>().mesh = unitMesh;
                    unit.transform.localScale             = Vector3.one;
                    unit.transform.localPosition          = Vector3.zero;
                }
            }
        }