public void SetSettings () { MapMagic magic = MapMagic.instance; terrain.heightmapPixelError = magic.pixelError; terrain.basemapDistance = magic.baseMapDist; terrain.castShadows = magic.castShadows; if (terrainCollider==null) terrainCollider = terrain.GetComponent<TerrainCollider>(); terrainCollider.enabled = MapMagic.instance.applyColliders; //material if (MapMagic.instance.previewGenerator==null) { terrain.materialType = MapMagic.ToUnityTerrMatType(MapMagic.instance.terrainMaterialType); if (MapMagic.instance.terrainMaterialType == MapMagic.TerrainMaterialType.Custom) { terrain.materialTemplate = MapMagic.instance.customTerrainMaterial; } else if (MapMagic.instance.terrainMaterialType == MapMagic.TerrainMaterialType.RTP) { if (terrain.materialTemplate == null || terrain.materialTemplate.shader.name != "Relief Pack/ReliefTerrain-FirstPass") { Shader shader = Shader.Find("Relief Pack/ReliefTerrain-FirstPass"); if (shader != null) terrain.materialTemplate = new Material(shader); else Debug.Log ("MapMagic: Could not find Relief Pack/ReliefTerrain-FirstPass shader. Make sure RTP is installed or switch material type to Standard."); } } } terrain.drawTreesAndFoliage = magic.detailDraw; terrain.detailObjectDistance = magic.detailDistance; terrain.detailObjectDensity = magic.detailDensity; terrain.treeDistance = magic.treeDistance; terrain.treeBillboardDistance = magic.treeBillboardStart; terrain.treeCrossFadeLength = magic.treeFadeLength; terrain.treeMaximumFullLODCount = magic.treeFullLod; terrain.terrainData.wavingGrassSpeed = magic.windSpeed; terrain.terrainData.wavingGrassAmount = magic.windSize; terrain.terrainData.wavingGrassStrength = magic.windBending; terrain.terrainData.wavingGrassTint = magic.grassTint; }
public void Preview () { #if UNITY_EDITOR if (Event.current == null || Event.current.type != EventType.Repaint) return; //clearing preview if prevew generator is off (or non-map) if (MapMagic.instance.previewOutput==null || MapMagic.instance.previewOutput.type!=Generator.InoutType.Map) { if (terrain.materialTemplate != null && terrain.materialTemplate.shader.name == "MapMagic/TerrainPreviewFirstPass") { terrain.materialType = MapMagic.ToUnityTerrMatType(MapMagic.instance.terrainMaterialType); terrain.materialTemplate = previewBackupMaterial; previewBackupMaterial = null; lastPreviewedMatrix = null; UnityEditor.SceneView.RepaintAll(); } } if (MapMagic.instance.previewOutput!=null && MapMagic.instance.previewOutput.type == Generator.InoutType.Map) { //loading preview material from terrain (or creating new) Material previewMat = null; if (terrain.materialTemplate!=null && terrain.materialTemplate.shader.name=="MapMagic/TerrainPreviewFirstPass") previewMat = terrain.materialTemplate; if (previewMat == null) { Shader previewShader = Shader.Find("MapMagic/TerrainPreviewFirstPass"); previewMat = new Material(previewShader); previewBackupMaterial = terrain.materialTemplate; terrain.materialTemplate = previewMat; terrain.materialType = Terrain.MaterialType.Custom; UnityEditor.SceneView.RepaintAll(); } //loading matrix Matrix matrix = MapMagic.instance.previewOutput.GetObject<Matrix>(this); //refreshing preview texture if (matrix != lastPreviewedMatrix) { Texture2D tex = null; //populate if (matrix != null) { tex = new Texture2D(matrix.rect.size.x, matrix.rect.size.z); Color[] line = new Color[matrix.rect.size.z]; for (int x=0; x<matrix.rect.size.x; x++) { for (int z=0; z<matrix.rect.size.z; z++) { float val = matrix[x+matrix.rect.offset.x, z+matrix.rect.offset.z]; line[z] = new Color(val, val, val); } tex.SetPixels(x,0,1,line.Length,line); } } else //in case the output is not generated { tex = Extensions.ColorTexture(2,2,Color.gray); } //apply tex.Apply(); previewMat.SetTexture("_Preview", tex); if (MapMagic.instance.guiDebug) Debug.Log("Preview Applied"); lastPreviewedMatrix = matrix; UnityEditor.SceneView.RepaintAll(); } } //spatial hash if (MapMagic.instance.previewOutput!=null && MapMagic.instance.previewOutput.type == Generator.InoutType.Objects) { float pixelSize = 1f * MapMagic.instance.terrainSize / MapMagic.instance.resolution; SpatialHash objs = MapMagic.instance.previewOutput.GetObject<SpatialHash>(this); if (objs != null) { int objsCount = objs.Count; foreach (SpatialObject obj in objs) { float terrainHeight = 0; if (heights != null) terrainHeight = heights.GetInterpolated(obj.pos.x, obj.pos.y); Vector3 pos = new Vector3(obj.pos.x*pixelSize, (obj.height+terrainHeight)*MapMagic.instance.terrainHeight, obj.pos.y*pixelSize); pos += MapMagic.instance.transform.position; UnityEditor.Handles.color = new Color(1,1,1,1); UnityEditor.Handles.DrawLine(pos+new Vector3(obj.size/2f,0,0), pos-new Vector3(obj.size/2f,0,0)); UnityEditor.Handles.DrawLine(pos+new Vector3(0,0,obj.size/2f), pos-new Vector3(0,0,obj.size/2f)); if (objsCount < 100) { Vector3 oldPoint = pos; foreach (Vector3 point in pos.CircleAround(obj.size/2f, 12, true)) { UnityEditor.Handles.DrawLine(oldPoint,point); oldPoint = point; } } UnityEditor.Handles.color = new Color(1,1,1,0.15f); UnityEditor.Handles.DrawLine(new Vector3(pos.x, 0, pos.z), new Vector3(pos.x, MapMagic.instance.terrainHeight, pos.z)); } } } #endif }