using System.Collections;

using System.Collections.Generic;

using UnityEngine;

[ExecuteAlways]

public class WaterManager : MonoBehaviour

{

public Texture2D noiseTex;

public Material waterMaterial;

public float initialHeight;

public float waveSpeed = 0.796f;

public float waveAmount = 0.608f;

public float waveHeight = 0.2f;

public float SampleNoiseTexture(Vector2 uv) {

Color c = noiseTex.GetPixelBilinear(uv.x, uv.y);

//Debug.Log($"color={c.r}");

return c.r;

}

public float WaterHeightAt(float x, float z, float t) {

Vector2 uv = (new Vector2(x, z)) * -0.1f + Vector2.one * 0.5f;

float noiseSample = SampleNoiseTexture(uv * 0.4f); //

//REFERENCE: worldPosition.y += sin(_Time.y*2 * _Speed + (worldPosition.x * worldPosition.z * _Amount * Tex)) * _Height;//movement

float waterOffset = Mathf.Sin(t * 2f * waveSpeed + (x * z * waveAmount * noiseSample)) * waveHeight;

return initialHeight+waterOffset;

}

void UpdateShaderParams(){

float t = Time.time;

waterMaterial.SetFloat("_Time", t);

waterMaterial.SetFloat("_Height", waveHeight);

waterMaterial.SetFloat("_Speed", waveSpeed);

waterMaterial.SetFloat("_Amount", waveAmount);

}

// Start is called before the first frame update

void Start()

{

initialHeight = transform.position.y;

}

// Update is called once per frame

void Update()

{

UpdateShaderParams();

}

}