using KdTree.Math;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Pulse : MonoBehaviour
{
private static Vector3[] randomSpherePoints = null;
private static KdTree.KdTree<float, int> randomSphereKd = new KdTree.KdTree<float, int>(3, new FloatMath());
private static int randomSpherePointsCount = 300;
private static void GenerateRandomPoints()
{
randomSpherePoints = new Vector3[randomSpherePointsCount];
for (int i = 0; i < randomSpherePointsCount; i++)
{
bool ok = false;
while (!ok)
{
Vector3 r = UnityEngine.Random.insideUnitSphere;
if (r.sqrMagnitude > 0.000001f)
{
randomSpherePoints[i] = r.normalized;
ok = true;
}
}
}
}
public float Lobes = 10;
public float TimeScale = 1;
public float Amount = 0.6f;
private Mesh mesh;
private Vector3[] originalPoints;
private Vector3[] originalNormals;
private Vector3[] points;
// Start is called before the first frame update
void Start()
{
MeshFilter mf = GetComponent<MeshFilter>();
//mesh = GameObject.Instantiate(mf.mesh);
//mf.mesh = mesh;
mesh = mf.mesh;
mesh.RecalculateNormals();
originalPoints = mesh.vertices;
originalNormals = mesh.normals;
points = new Vector3[originalPoints.Length];
}
// Update is called once per frame
void Update()
{
for (int i = 0; i < originalPoints.Length; i++)
{
Vector3 o = originalPoints[i];
Vector3 n = originalNormals[i];
float angleUp = Mathf.Atan2(new Vector2(o.x, o.z).magnitude, o.y);
float expand = Mathf.Sin(Mathf.Atan2(o.x, o.z) * Mathf.Round(Lobes * angleUp) * Mathf.Sin(angleUp * Lobes) + Time.realtimeSinceStartup * Mathf.PI * TimeScale) * Amount;
points[i] = o + n * expand;
}
mesh.vertices = points;
mesh.RecalculateNormals();
mesh.RecalculateBounds();
}
}