/// <summary>
        /// This function will draw every tile on a texture that has the size of the current window size (viewport)
        /// then it will sort all these big textures to draw the full map on the screen.
        /// </summary>
        void CreateTextures()
        {
            Vector2 NumberOfMapTextures = map.Size / new Vector2(Graphics.PreferredBackBufferWidth, Graphics.PreferredBackBufferHeight);
            Vector2 MapTextureArraySize = new Vector2((float)Math.Ceiling(NumberOfMapTextures.X), (float)Math.Ceiling(NumberOfMapTextures.Y));

            for (int y = 0; y < MapTextureArraySize.Y; y++)
            {
                for (int x = 0; x < MapTextureArraySize.X; x++)
                {
                    CombineTextures.Begin(Graphics);
                    DrawTiles();
                    CombineTextures.End();

                    Texture2D MapTexture = CombineTextures.GetFinalTexture();

                    MapTextures.Add(new LayerTexture(MapTexture, new Vector2(x * Graphics.PreferredBackBufferWidth, y * Graphics.PreferredBackBufferHeight),
                                                     new Vector2(Graphics.PreferredBackBufferWidth, Graphics.PreferredBackBufferHeight)));
                }
            }
        }
示例#2
0
        internal void CreateTexture(SpriteBatch spriteBatch, Vector2 Position, Vector2 Size, Vector2 CornersSize, BorderThickness BorderThickness)
        {
            this.spriteBatch     = spriteBatch;
            this.Position        = Position;
            this.Size            = Size;
            this.CornersSize     = CornersSize;
            this.BorderThickness = BorderThickness;

            if (RendererMode == RenderMode.Scalable || RendererMode == RenderMode.ScalableRealTime)
            {
                SetCropRectangle();
                MoveAndResizeUI();
                CropTextures(Graphics);
            }

            if (RendererMode == RenderMode.Scalable)
            {
                CombineTextures.Begin(Graphics, Size);
                DrawUIParts();
                CombineTextures.End();

                ScaledTexture = CombineTextures.GetFinalTexture(new Rectangle((int)Position.X, (int)Position.Y, (int)Size.X, (int)Size.Y));
            }
        }
        private void CreateOneMeshBuildingObject(Building building, GameObject parent)
        {
            List <TexturedMesh> buildingparts = new List <TexturedMesh>();

            buildingparts = CreateOneMeshBuilding(building);
            List <TexturedMesh> textured   = new List <TexturedMesh>();
            List <TexturedMesh> untextured = new List <TexturedMesh>();

            foreach (TexturedMesh item in buildingparts)
            {
                if (item.TextureName != "" && useTextures == true)
                {
                    textured.Add(item);
                }
                else
                {
                    untextured.Add(item);
                }
            }
            GameObject go = new GameObject();

            Material mat = new Material(Defaultmaterial);

            go.AddComponent <ObjectProperties>().semantics = building.semantics;
            go.name = go.name = GetBuildingID(building);

            List <CombineInstance> ci = new List <CombineInstance>();

            if (untextured.Count > 0)
            {
                foreach (TexturedMesh item in untextured)
                {
                    CombineInstance cci = new CombineInstance();
                    cci.mesh = item.mesh;
                    ci.Add(cci);
                }
            }
            go.transform.parent = parent.transform;
            if (textured.Count > 0)
            {
                TexturedMesh tm = CombineTextures.CombineMeshes(textured);
                if (tm != null)
                {
                    CombineInstance cci = new CombineInstance();
                    cci.mesh = tm.mesh;
                    ci.Add(cci);
                    mat.color = new Color(1, 1, 1);
                    mat.SetTexture("_MainTex", tm.texture);
                }
            }
            Mesh mesh = new Mesh();

            mesh.CombineMeshes(ci.ToArray(), true, false);
            foreach (var meshHolder in ci)
            {
                GameObject.Destroy(meshHolder.mesh);
            }

            go.AddComponent <MeshFilter>().sharedMesh = mesh;
            var renderer = go.AddComponent <MeshRenderer>();

            renderer.material = mat;
            renderer.enabled  = enableRenderers;
        }
        private void CreateMultiBuildingMeshes(List <Building> buildings, GameObject parent)
        {
            List <TexturedMesh> Allbuildingparts = new List <TexturedMesh>();
            List <TexturedMesh> buildingparts    = new List <TexturedMesh>();

            TexturedMesh[] materialparts;

            foreach (Building building in buildings)
            {
                buildingparts = CreateOneMeshBuilding(building);
                foreach (TexturedMesh item in buildingparts)
                {
                    Allbuildingparts.Add(item);
                }
            }
            List <TexturedMesh> textured   = new List <TexturedMesh>();
            List <TexturedMesh> untextured = new List <TexturedMesh>();

            if (Materialmapping != null)
            {
                materialparts = new TexturedMesh[Materialmapping.Count];
            }
            foreach (TexturedMesh item in Allbuildingparts)
            {
                if (item.TextureName != "" && useTextures == true)
                {
                    textured.Add(item);
                }
                else
                {
                    untextured.Add(item);
                }
            }

            List <CombineInstance> ci = new List <CombineInstance>();

            if (untextured.Count > 0)
            {
                foreach (TexturedMesh item in untextured)
                {
                    CombineInstance cci = new CombineInstance();
                    cci.mesh = item.mesh;
                    ci.Add(cci);
                }
                GameObject go = new GameObject();
                go.transform.parent = parent.transform;
                Mesh mesh = new Mesh();
                mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
                mesh.CombineMeshes(ci.ToArray(), true, false);
                foreach (var meshHolder in ci)
                {
                    GameObject.Destroy(meshHolder.mesh);
                }
                go.AddComponent <MeshFilter>().mesh             = mesh;
                go.AddComponent <MeshRenderer>().sharedMaterial = Defaultmaterial;
            }

            if (textured.Count > 0)
            {
                List <TexturedMesh> tm = CombineTextures.MultiCombineTextures(textured);
                foreach (TexturedMesh item in tm)
                {
                    GameObject go = new GameObject();
                    go.transform.parent = parent.transform;
                    Material mat = new Material(Defaultmaterial);
                    mat.color = new Color(1, 1, 1);
                    mat.SetTexture("_MainTex", item.texture);
                    go.AddComponent <MeshFilter>().mesh             = item.mesh;
                    go.AddComponent <MeshRenderer>().sharedMaterial = mat;
                }
            }
        }