Firstborn/Assets/AwesomeTechnologies/VegetationStudioPro/Runtime/VegetationSystemPro/Wind/VSWindController.cs

83 lines
2.5 KiB
C#
Raw Permalink Normal View History

using UnityEngine;
namespace AwesomeTechnologies.VegetationSystem.Wind
{
// ReSharper disable once UnusedMember.Global
public class VSWindController : IWindController
{
public string WindControlerID { get; }
private WindControllerSettings _windControllerSettings;
public Texture2D WindWaveTexture;
public float WindWaveSize;
public float WindSpeed;
private readonly int _awDir;
private readonly int _awWavesTex;
public WindControllerSettings Settings
{
get { return _windControllerSettings; }
set
{
_windControllerSettings = value;
RefreshSettings();
}
}
public VSWindController()
{
WindControlerID = "VSWindController";
_awDir = Shader.PropertyToID("_AW_DIR");
_awWavesTex = Shader.PropertyToID("_AW_WavesTex");
}
public WindControllerSettings CreateDefaultSettings()
{
Settings = new WindControllerSettings
{
WindControlerID = WindControlerID,
Heading = "Vegetation Studio Grass Wind Settings"
};
Settings.AddTextureProperty("AW_WavesTex", "Wind Waves", "", Resources.Load("PerlinSeamless") as Texture2D);
Settings.AddFloatProperty("WindWaveSize", "Wind Wave Size", "", 10, 0, 30);
Settings.AddFloatProperty("WindSpeed", "Wind Speed", "", 1f, 0, 3);
RefreshSettings();
return Settings;
}
public void RefreshSettings()
{
WindSpeed = Settings.GetFloatPropertyValue("WindSpeed");
WindWaveSize = Settings.GetFloatPropertyValue("WindWaveSize");
WindWaveTexture = Settings.GetTexturePropertyValue("AW_WavesTex");
}
public void UpdateWind(WindZone windZone, float windSpeedFactor)
{
Vector3 dir = Vector3.forward;
Vector4 dir4;
if (windZone)
{
dir = windZone.transform.forward;
dir4 = new Vector4(dir.x, Mathf.Abs(windZone.windMain) * WindSpeed * windSpeedFactor, dir.z, WindWaveSize);
}
else
{
dir4 = new Vector4(dir.x, 1 * WindSpeed * windSpeedFactor, dir.z, WindWaveSize);
}
Shader.SetGlobalVector(_awDir, dir4);
if (WindWaveTexture)
{
Shader.SetGlobalTexture(_awWavesTex, WindWaveTexture);
}
}
}
}