private static SGT_MultiMesh MultiMeshFieldWithLabel(Rect rect, string label, int labelWidth, SGT_MultiMesh field, bool required = false) { if (CanDraw == true && field != null) { if (required == true) { if (field.ContainsSomething == false) { var redRect = new Rect(rect); redRect = SGT_RectHelper.ExpandPx(redRect, 1.0f, 1.0f, 1.0f, 1.0f); GUI.DrawTexture(redRect, SGT_Helper.RedTexture); } } var labelRect = SGT_RectHelper.GetLeftPx(ref rect, labelWidth); EditorGUI.LabelField(labelRect, new GUIContent(label, string.Empty), EditorStyles.label); var curMesh = field.GetSharedMesh(0); var newMesh = (Mesh)EditorGUI.ObjectField(rect, curMesh, typeof(Mesh), false); if (curMesh != newMesh) { field.ReplaceAll(newMesh); } } return field; }
public void LateUpdate() { if (ringGameObject == null) ringGameObject = SGT_Helper.CreateGameObject("Ring Slices", gameObject); if (ringMesh == null) ringMesh = new SGT_MultiMesh(); if (lightSource == null) lightSource = SGT_LightSource.Find(); if (ringAutoRegen == true) { Regenerate(); } if (shadowAutoUpdate == true) { var fill = new SGT_FillFloat(); SendMessage("FillShadowRadius", fill, SendMessageOptions.DontRequireReceiver); shadowRadius = fill.Float; } UpdateMaterial(); UpdateShader(); ringMesh.GameObject = ringGameObject; ringMesh.HasMeshRenderers = true; ringMesh.MeshRenderersEnabled = true; ringMesh.SharedMaterial = ringMaterial; ringMesh.SharedMesh = generatedMesh; UpdateRingRotations(); #if UNITY_EDITOR == true ringMesh.HideInEditor(); #endif }
public void Update(int layer, string tag) { var surfaceCount = Count; if (multiMeshes == null || multiMeshes.Length != surfaceCount) { multiMeshes = new SGT_MultiMesh[surfaceCount]; } if (multiMeshGameObjects == null || multiMeshGameObjects.Length != surfaceCount) { multiMeshGameObjects = new GameObject[surfaceCount]; } // Update multi meshes for (var i = 0; i < multiMeshes.Length; i++) { var multiMesh = multiMeshes[i]; var multiMeshGameObject = multiMeshGameObjects[i]; if (multiMesh == null) { multiMesh = new SGT_MultiMesh(); multiMeshes[i] = multiMesh; } if (multiMeshGameObject == null) { multiMeshGameObject = SGT_Helper.CreateGameObject("Multi Mesh " + (i + 1), gameObject); multiMeshGameObjects[i] = multiMeshGameObject; } if (gameObject != null) { SGT_Helper.SetParent(multiMeshGameObject, gameObject); SGT_Helper.SetLayer(multiMeshGameObject, gameObject.layer); SGT_Helper.SetTag(multiMeshGameObject, gameObject.tag); } multiMesh.GameObject = multiMeshGameObject; multiMesh.HasMeshRenderers = hasMeshRenderers; multiMesh.MeshRenderersEnabled = meshRenderersEnabled; multiMesh.HasMeshColliders = hasMeshColliders; multiMesh.MeshCollidersEnabled = meshCollidersEnabled; multiMesh.SharedPhysicsMaterial = sharedPhysicsMaterial; multiMesh.Update(); } // Check integrity if (gameObject != null && gameObject.transform.childCount != surfaceCount) { SGT_Helper.DestroyGameObjects(multiMeshGameObjects); SGT_Helper.DestroyChildren(gameObject); } }
public void LateUpdate() { if (starfieldGameObject == null) { starfieldGameObject = SGT_Helper.CreateGameObject("Starfield", gameObject); } if (starfieldMultiMesh == null) { starfieldMultiMesh = new SGT_MultiMesh(); } if (starfieldObserver == null) { starfieldObserver = SGT_Helper.FindCamera(); } if (packer == null) { packer = new SGT_Packer(); } if (starVariants == null) { starVariants = new VariantList(); } SGT_Helper.SetParent(starfieldGameObject, gameObject); SGT_Helper.SetLayer(starfieldGameObject, gameObject.layer); SGT_Helper.SetTag(starfieldGameObject, gameObject.tag); packer.AtlasFormat = TextureFormat.RGB24; packer.AtlasMaxSize = SGT_SquareSize.Square2048; packer.AtlasFilterMode = FilterMode.Trilinear; packer.AtlasCountMax = 1; if (starfieldAutoRegen == true) { Regenerate(); } UpdateMaterial(); UpdateShader(); UpdateBackground(); starfieldMultiMesh.GameObject = starfieldGameObject; starfieldMultiMesh.HasMeshRenderers = true; starfieldMultiMesh.MeshRenderersEnabled = true; starfieldMultiMesh.SharedMaterial = starfieldMaterial; starfieldMultiMesh.ReplaceAll(meshes); starfieldMultiMesh.Update(); #if UNITY_EDITOR == true starfieldMultiMesh.HideInEditor(); #endif }
public void CopyMeshesInto(SGT_MultiMesh target) { if (target != null && meshes != null) { target.Resize(meshes.Count); for (var i = 0; i < meshes.Count; i++) { var mesh = meshes[i]; target.SetSharedMesh(mesh != null ? mesh.SharedMesh : null, i); } } }
public void LateUpdate() { if (ringGameObject == null) { ringGameObject = SGT_Helper.CreateGameObject("Ring", gameObject); } if (ringMultiMesh == null) { ringMultiMesh = new SGT_MultiMesh(); } if (ringLightSource == null) { ringLightSource = SGT_LightSource.Find(); } if (ringCamera == null) { RingCamera = SGT_Helper.FindCamera(); // NOTE: Assigning property } SGT_Helper.SetParent(ringGameObject, gameObject); SGT_Helper.SetLayer(ringGameObject, gameObject.layer); SGT_Helper.SetTag(ringGameObject, gameObject.tag); if (ringAutoRegen == true) { Regenerate(); } if (shadowAutoUpdate == true) { var fill = new SGT_FillFloat(); SendMessage("FillShadowRadius", fill, SendMessageOptions.DontRequireReceiver); shadowRadius = fill.Float; } UpdateTechnique(); UpdateShader(); ringMultiMesh.GameObject = ringGameObject; ringMultiMesh.HasMeshRenderers = true; ringMultiMesh.MeshRenderersEnabled = true; ringMultiMesh.SharedMaterial = ringMaterial; ringMultiMesh.ReplaceAll(generatedMeshes); ringMultiMesh.Update(); #if UNITY_EDITOR == true ringMultiMesh.HideInEditor(); #endif }
public static SGT_MultiMesh MultiMeshField(string handle, string tooltip, SGT_MultiMesh field, bool required = false, bool isField = true) { if (CanDraw == true && field != null) { var curMesh = field.GetSharedMesh(0); var newMesh = ObjectField(handle, tooltip, curMesh, required, isField); if (curMesh != newMesh) { field.ReplaceAll(newMesh); } } return field; }
public static SGT_MultiMesh MultiMeshField(string handle, string tooltip, SGT_MultiMesh field, bool required = false, bool isField = true) { if (CanDraw == true && field != null) { var curMesh = field.GetSharedMesh(0); var newMesh = ObjectField(handle, tooltip, curMesh, required, isField); if (curMesh != newMesh) { field.ReplaceAll(newMesh); } } return(field); }
public void LateUpdate() { if (ringGameObject == null) { ringGameObject = SGT_Helper.CreateGameObject("Ring Slices", gameObject); } if (ringMesh == null) { ringMesh = new SGT_MultiMesh(); } if (lightSource == null) { lightSource = SGT_LightSource.Find(); } SGT_Helper.SetParent(ringGameObject, gameObject); SGT_Helper.SetLayer(ringGameObject, gameObject.layer); SGT_Helper.SetTag(ringGameObject, gameObject.tag); if (ringAutoRegen == true) { Regenerate(); } if (shadowAutoUpdate == true) { var fill = new SGT_FillFloat(); SendMessage("FillShadowRadius", fill, SendMessageOptions.DontRequireReceiver); shadowRadius = fill.Float; } UpdateMaterial(); UpdateShader(); ringMesh.GameObject = ringGameObject; ringMesh.HasMeshRenderers = true; ringMesh.MeshRenderersEnabled = true; ringMesh.SharedMaterial = ringMaterial; ringMesh.SharedMesh = generatedMesh; UpdateRingRotations(); #if UNITY_EDITOR == true ringMesh.HideInEditor(); #endif }
public static bool MeshesIdentical(SGT_MultiMesh a, SGT_MultiMesh b) { if (a == null && b != null) { return(false); } if (a != null && b == null) { return(false); } if (a != null && b != null) { if (a.meshes == null && b.meshes != null) { return(false); } if (a.meshes != null && b.meshes == null) { return(false); } if (a.meshes != null && b.meshes != null) { if (a.meshes.Count != b.meshes.Count) { return(false); } for (var i = 0; i < a.meshes.Count; i++) { if (SGT_Mesh.MeshesIdentical(a.meshes[i], b.meshes[i]) == false) { return(false); } } } } return(true); }
public static bool MeshesIdentical(SGT_SurfaceMultiMesh a, SGT_SurfaceMultiMesh b) { if (a == null && b != null) { return(false); } if (a != null && b == null) { return(false); } if (a != null && b != null) { if (a.multiMeshes == null && b.multiMeshes != null) { return(false); } if (a.multiMeshes != null && b.multiMeshes == null) { return(false); } if (a.multiMeshes != null && b.multiMeshes != null) { if (a.multiMeshes.Length != b.multiMeshes.Length) { return(false); } for (var i = 0; i < a.multiMeshes.Length; i++) { if (SGT_MultiMesh.MeshesIdentical(a.multiMeshes[i], b.multiMeshes[i]) == false) { return(false); } } } } return(true); }
public void LateUpdate() { if (ringGameObject == null) ringGameObject = SGT_Helper.CreateGameObject("Ring", gameObject); if (ringMultiMesh == null) ringMultiMesh = new SGT_MultiMesh(); if (ringLightSource == null) ringLightSource = SGT_LightSource.Find(); if (ringCamera == null) RingCamera = SGT_Helper.FindCamera(); // NOTE: Assigning property SGT_Helper.SetParent(ringGameObject, gameObject); SGT_Helper.SetLayer(ringGameObject, gameObject.layer); SGT_Helper.SetTag(ringGameObject, gameObject.tag); if (ringAutoRegen == true) { Regenerate(); } if (shadowAutoUpdate == true) { var fill = new SGT_FillFloat(); SendMessage("FillShadowRadius", fill, SendMessageOptions.DontRequireReceiver); shadowRadius = fill.Float; } UpdateTechnique(); UpdateShader(); ringMultiMesh.GameObject = ringGameObject; ringMultiMesh.HasMeshRenderers = true; ringMultiMesh.MeshRenderersEnabled = true; ringMultiMesh.SharedMaterial = ringMaterial; ringMultiMesh.ReplaceAll(generatedMeshes); ringMultiMesh.Update(); #if UNITY_EDITOR == true ringMultiMesh.HideInEditor(); #endif }
public void LateUpdate() { if (starfieldGameObject == null) { starfieldGameObject = SGT_Helper.CreateGameObject("Starfield", gameObject); } if (starfieldMultiMesh == null) { starfieldMultiMesh = new SGT_MultiMesh(); } if (starfieldCamera == null) { StarfieldCamera = SGT_Helper.FindCamera(); // NOTE: Assigning property } SGT_Helper.SetParent(starfieldGameObject, gameObject); SGT_Helper.SetLayer(starfieldGameObject, gameObject.layer); SGT_Helper.SetTag(starfieldGameObject, gameObject.tag); if (starfieldAutoRegen == true) { Regenerate(); } UpdateMaterial(); UpdateShader(); UpdateBackground(); starfieldMultiMesh.GameObject = starfieldGameObject; starfieldMultiMesh.HasMeshRenderers = true; starfieldMultiMesh.MeshRenderersEnabled = true; starfieldMultiMesh.SharedMaterial = starfieldMaterial; starfieldMultiMesh.ReplaceAll(meshes); starfieldMultiMesh.Update(); #if UNITY_EDITOR == true starfieldMultiMesh.HideInEditor(); #endif }
public void LateUpdate() { if (starfieldGameObject == null) starfieldGameObject = SGT_Helper.CreateGameObject("Starfield", gameObject); if (starfieldMultiMesh == null) starfieldMultiMesh = new SGT_MultiMesh(); if (starfieldObserver == null) starfieldObserver = SGT_Helper.FindCamera(); if (packer == null) packer = new SGT_Packer(); if (starVariants == null) starVariants = new VariantList(); SGT_Helper.SetParent(starfieldGameObject, gameObject); SGT_Helper.SetLayer(starfieldGameObject, gameObject.layer); SGT_Helper.SetTag(starfieldGameObject, gameObject.tag); packer.AtlasFormat = TextureFormat.RGB24; packer.AtlasMaxSize = SGT_SquareSize.Square2048; packer.AtlasFilterMode = FilterMode.Trilinear; packer.AtlasCountMax = 1; if (starfieldAutoRegen == true) { Regenerate(); } UpdateMaterial(); UpdateShader(); UpdateBackground(); starfieldMultiMesh.GameObject = starfieldGameObject; starfieldMultiMesh.HasMeshRenderers = true; starfieldMultiMesh.MeshRenderersEnabled = true; starfieldMultiMesh.SharedMaterial = starfieldMaterial; starfieldMultiMesh.ReplaceAll(meshes); starfieldMultiMesh.Update(); #if UNITY_EDITOR == true starfieldMultiMesh.HideInEditor(); #endif }
public SGT_MultiMesh GetMultiMesh(int faceIndex) { var surfaceCount = Count; if (multiMeshes == null || multiMeshes.Length != surfaceCount) { multiMeshes = new SGT_MultiMesh[surfaceCount]; } if (faceIndex >= 0 && faceIndex < surfaceCount) { var multiMesh = multiMeshes[faceIndex]; if (multiMesh == null) { multiMesh = new SGT_MultiMesh(); multiMeshes[faceIndex] = multiMesh; } return(multiMesh); } return(null); }
private static SGT_MultiMesh MultiMeshFieldWithLabel(Rect rect, string label, int labelWidth, SGT_MultiMesh field, bool required = false) { if (CanDraw == true && field != null) { if (required == true) { if (field.ContainsSomething == false) { var redRect = new Rect(rect); redRect = SGT_RectHelper.ExpandPx(redRect, 1.0f, 1.0f, 1.0f, 1.0f); GUI.DrawTexture(redRect, SGT_Helper.RedTexture); } } var labelRect = SGT_RectHelper.GetLeftPx(ref rect, labelWidth); EditorGUI.LabelField(labelRect, new GUIContent(label, string.Empty), EditorStyles.label); var curMesh = field.GetSharedMesh(0); var newMesh = (Mesh)EditorGUI.ObjectField(rect, curMesh, typeof(Mesh), false); if (curMesh != newMesh) { field.ReplaceAll(newMesh); } } return(field); }
private System.Collections.IEnumerator Update_Coroutine() { for (;;) { // Swap currentVertices = nextVertices; nextVertices = null; if (currentVertices != null) { nextGameObject = SGT_Helper.CreateGameObject("Collider (Currently Building)", gameObject); nextGameObject.layer = gameObject.layer; nextGameObject.tag = gameObject.tag; nextCollider = new SGT_MultiMesh(); nextCollider.GameObject = nextGameObject; nextCollider.HasMeshColliders = true; nextCollider.MeshCollidersEnabled = true; nextCollider.SharedPhysicsMaterial = physicsMaterial; var vertexCount = currentVertices.Length; var copyFrom = 0; while (copyFrom < vertexCount) { var copyTo = Mathf.Min(copyFrom + verticesPerMesh, vertexCount); var copyCount = copyTo - copyFrom; var vertices = new Vector3[copyCount]; var triangles = new int[copyCount]; for (var i = 0; i < copyCount; i++) { vertices[i] = currentVertices[copyFrom + i]; triangles[i] = i; } var mesh = new Mesh(); mesh.name = "Tessellator Collider Generated"; mesh.vertices = vertices; mesh.triangles = triangles; mesh.RecalculateBounds(); nextCollider.Add(mesh); nextCollider.Update(); copyFrom += verticesPerMesh; yield return(new WaitForEndOfFrame()); } // Remove current ones if (activeCollider != null) { activeCollider.DestroyAllMeshes(); } SGT_Helper.DestroyGameObject(activeGameObject); // Swap activeCollider = nextCollider; activeGameObject = nextGameObject; activeGameObject.name = "Collider (Active)"; // Remove old nextGameObject = null; nextCollider = null; } yield return(new WaitForEndOfFrame()); } }