/// <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))); } } }
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; } } }