#if GRIFFIN using System.Collections.Generic; using UnityEngine; namespace Pinwheel.Griffin.GroupTool { [System.Serializable] [ExecuteInEditMode] public class GTerrainGroup : MonoBehaviour { [SerializeField] private int groupId; public int GroupId { get { return groupId; } set { groupId = value; } } [SerializeField] private bool deferredUpdate; public bool DeferredUpdate { get { return deferredUpdate; } set { deferredUpdate = value; } } [SerializeField] private GGeometryOverride geometryOverride; public GGeometryOverride GeometryOverride { get { return geometryOverride; } set { geometryOverride = value; } } [SerializeField] private GShadingOverride shadingOverride; public GShadingOverride ShadingOverride { get { return shadingOverride; } set { shadingOverride = value; } } [SerializeField] private GRenderingOverride renderingOverride; public GRenderingOverride RenderingOverride { get { return renderingOverride; } set { renderingOverride = value; } } [SerializeField] private GFoliageOverride foliageOverride; public GFoliageOverride FoliageOverride { get { return foliageOverride; } set { foliageOverride = value; } } [SerializeField] private GMaskOverride maskOverride; public GMaskOverride MaskOverride { get { return maskOverride; } set { maskOverride = value; } } private void Reset() { geometryOverride.Reset(); shadingOverride.Reset(); renderingOverride.Reset(); foliageOverride.Reset(); maskOverride.Reset(); } public void ResetGeometry() { geometryOverride.Reset(); } public void ResetShading() { shadingOverride.Reset(); } public void ResetRendering() { renderingOverride.Reset(); } public void ResetFoliage() { foliageOverride.Reset(); } public void ResetMask() { maskOverride.Reset(); } public void OverrideGeometry() { IEnumerator terrains = GStylizedTerrain.ActiveTerrains.GetEnumerator(); while (terrains.MoveNext()) { if (terrains.Current.TerrainData != null && (terrains.Current.GroupId == GroupId || GroupId < 0)) { GeometryOverride.Override(terrains.Current.TerrainData.Geometry); terrains.Current.TerrainData.Geometry.SetRegionDirty(new Rect(0, 0, 1, 1)); terrains.Current.TerrainData.SetDirty(GTerrainData.DirtyFlags.GeometryTimeSliced); } } GStylizedTerrain.MatchEdges(GroupId); } public void OverrideShading() { IEnumerator terrains = GStylizedTerrain.ActiveTerrains.GetEnumerator(); while (terrains.MoveNext()) { if (terrains.Current.TerrainData != null && (terrains.Current.GroupId == GroupId || GroupId < 0)) { ShadingOverride.Override(terrains.Current.TerrainData.Shading); terrains.Current.TerrainData.SetDirty(GTerrainData.DirtyFlags.Shading); } } } public void OverrideRendering() { IEnumerator terrains = GStylizedTerrain.ActiveTerrains.GetEnumerator(); while (terrains.MoveNext()) { if (terrains.Current.TerrainData != null && (terrains.Current.GroupId == GroupId || GroupId < 0)) { RenderingOverride.Override(terrains.Current.TerrainData.Rendering); terrains.Current.TerrainData.SetDirty(GTerrainData.DirtyFlags.Rendering); } } } public void OverrideFoliage() { IEnumerator terrains = GStylizedTerrain.ActiveTerrains.GetEnumerator(); while (terrains.MoveNext()) { if (terrains.Current.TerrainData != null && (terrains.Current.GroupId == GroupId || GroupId < 0)) { FoliageOverride.Override(terrains.Current.TerrainData.Foliage); terrains.Current.TerrainData.SetDirty(GTerrainData.DirtyFlags.Foliage); } } } public void OverrideMask() { IEnumerator terrains = GStylizedTerrain.ActiveTerrains.GetEnumerator(); while (terrains.MoveNext()) { if (terrains.Current.TerrainData != null && (terrains.Current.GroupId == GroupId || GroupId < 0)) { MaskOverride.Override(terrains.Current.TerrainData.Mask); terrains.Current.TerrainData.SetDirty(GTerrainData.DirtyFlags.Mask); } } } public void ReArrange() { IEnumerator terrains = GStylizedTerrain.ActiveTerrains.GetEnumerator(); while (terrains.MoveNext()) { if (terrains.Current.TerrainData != null && (terrains.Current.GroupId == GroupId || GroupId < 0)) { GStylizedTerrain t = terrains.Current; if (t.TopNeighbor != null) { t.transform.rotation = Quaternion.identity; t.transform.localScale = Vector3.one; t.TopNeighbor.transform.position = t.transform.position + Vector3.forward * t.TerrainData.Geometry.Length; t.TopNeighbor.transform.rotation = Quaternion.identity; t.TopNeighbor.transform.localScale = Vector3.one; } if (t.BottomNeighbor != null) { t.transform.rotation = Quaternion.identity; t.transform.localScale = Vector3.one; t.BottomNeighbor.transform.position = t.transform.position + Vector3.back * t.TerrainData.Geometry.Length; t.BottomNeighbor.transform.rotation = Quaternion.identity; t.BottomNeighbor.transform.localScale = Vector3.one; } if (t.LeftNeighbor != null) { t.transform.rotation = Quaternion.identity; t.transform.localScale = Vector3.one; t.LeftNeighbor.transform.position = t.transform.position + Vector3.left * t.TerrainData.Geometry.Width; t.LeftNeighbor.transform.rotation = Quaternion.identity; t.LeftNeighbor.transform.localScale = Vector3.one; } if (t.RightNeighbor != null) { t.transform.rotation = Quaternion.identity; t.transform.localScale = Vector3.one; t.RightNeighbor.transform.position = t.transform.position + Vector3.right * t.TerrainData.Geometry.Width; t.RightNeighbor.transform.rotation = Quaternion.identity; t.RightNeighbor.transform.localScale = Vector3.one; } } } } } } #endif