using UnityEngine; namespace Artngame.GIPROXY { public class ProceduralNoiseGIPROXY : MonoBehaviour { public float scale = 1f; public float speed = 1f; public bool recalculateNormals; private Vector3[] baseVertices; private PerlinGIPROXY noise; public bool Colorize; public float Color_cycle_speed = 0.1f; private MeshFilter meshFilter; public float CHANGE_FACTOR; private float register_time; public bool Deactivate_after; public float seconds = 1f; private void Start() { meshFilter = GetComponent("MeshFilter") as MeshFilter; noise = new PerlinGIPROXY(); register_time = Time.fixedTime; } private void Update() { if (!(!Deactivate_after | (Deactivate_after & (Time.fixedTime - register_time < seconds)))) { return; } if (scale != 0f) { Mesh mesh = meshFilter.mesh; if (baseVertices == null) { baseVertices = mesh.vertices; } Vector3[] array = new Vector3[baseVertices.Length]; float num = Time.time * speed + 0.1365143f * CHANGE_FACTOR; float num2 = Time.time * speed + 1.21688f * CHANGE_FACTOR; float num3 = Time.time * speed + 2.5564f * CHANGE_FACTOR; for (int i = 0; i < array.Length; i++) { Vector3 vector = baseVertices[i]; vector.x += noise.Noise(num + vector.x, num + vector.y, num + vector.z) * scale; vector.y += noise.Noise(num2 + vector.x, num2 + vector.y, num2 + vector.z) * scale; vector.z += noise.Noise(num3 + vector.x, num3 + vector.y, num3 + vector.z) * scale; array[i] = vector; } mesh.vertices = array; if (recalculateNormals) { mesh.RecalculateNormals(); } mesh.RecalculateBounds(); } if (Colorize) { switch (Random.Range(0, 3)) { case 0: base.gameObject.GetComponent().material.color = Color.Lerp(base.gameObject.GetComponent().material.color, Color.blue, Color_cycle_speed); break; case 1: base.gameObject.GetComponent().material.color = Color.Lerp(base.gameObject.GetComponent().material.color, Color.red, Color_cycle_speed); break; case 2: base.gameObject.GetComponent().material.color = Color.Lerp(base.gameObject.GetComponent().material.color, Color.magenta, Color_cycle_speed); break; } } } } }