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;
    }
Exemple #2
0
    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
    }
Exemple #3
0
    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
    }
Exemple #5
0
    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);
            }
        }
    }
Exemple #6
0
    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;
    }
Exemple #8
0
    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
    }
Exemple #10
0
    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);
    }
Exemple #11
0
    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
    }
Exemple #15
0
    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);
    }
Exemple #16
0
    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());
        }
    }