Kasper Karlgren c84494a697 new files
2025-01-21 13:54:40 +01:00

137 lines
3.8 KiB
C#

// Distant Lands 2024
// COZY: Stylized Weather 3
// All code included in this file is protected under the Unity Asset Store Eula
using UnityEngine;
#if THE_VISUAL_ENGINE
using TheVisualEngine;
#elif THE_VEGETATION_ENGINE
using TheVegetationEngine;
#endif
namespace DistantLands.Cozy
{
[ExecuteAlways]
public class CozyTVEModule : CozyModule
{
public enum UpdateFrequency { everyFrame, onAwake, viaScripting }
public UpdateFrequency updateFrequency;
#if THE_VISUAL_ENGINE
public TVEManager visualManager;
#elif THE_VEGETATION_ENGINE
public TVEGlobalControl globalControl;
public TVEGlobalMotion globalMotion;
#endif
// Start is called before the first frame update
void Awake()
{
InitializeModule();
#if THE_VEGETATION_ENGINE || THE_VISUAL_ENGINE
if (updateFrequency == UpdateFrequency.onAwake)
UpdateTVE();
#endif
}
public override void InitializeModule()
{
if (!enabled)
return;
base.InitializeModule();
if (!weatherSphere)
{
enabled = false;
return;
}
#if THE_VISUAL_ENGINE
if (!visualManager)
visualManager = FindObjectOfType<TVEManager>();
if (!visualManager)
{
enabled = false;
return;
}
visualManager.mainLight = weatherSphere.sunLight;
#elif THE_VEGETATION_ENGINE
if (!globalControl)
globalControl = FindObjectOfType<TVEGlobalControl>();
if (!globalControl)
{
enabled = false;
return;
}
if (!globalMotion)
globalMotion = FindObjectOfType<TVEGlobalMotion>();
if (!globalMotion)
{
enabled = false;
return;
}
globalControl.mainLight = weatherSphere.sunLight;
#endif
}
// Update is called once per frame
void Update()
{
if (CozyWeather.FreezeUpdateInEditMode && !Application.isPlaying)
return;
if (updateFrequency == UpdateFrequency.everyFrame)
UpdateTVE();
}
public void UpdateTVE()
{
#if THE_VEGETATION_ENGINE
if (weatherSphere.climateModule)
{
globalControl.globalWetness = weatherSphere.climateModule.groundwaterAmount;
globalControl.globalOverlay = weatherSphere.climateModule.snowAmount;
}
globalControl.seasonControl = weatherSphere.timeModule.yearPercentage * 4;
if (weatherSphere.windModule)
{
globalMotion.windPower = weatherSphere.windModule.windAmount;
globalMotion.transform.LookAt(globalMotion.transform.position + weatherSphere.windModule.WindDirection, Vector3.up);
}
#elif THE_VISUAL_ENGINE
if (weatherSphere.climateModule)
{
visualManager.globalAtmoData.wetnessIntensity = weatherSphere.climateModule.groundwaterAmount;
visualManager.globalAtmoData.overlayIntensity = weatherSphere.climateModule.snowAmount;
}
visualManager.seasonControl = weatherSphere.timeModule.yearPercentage * 4;
if (weatherSphere.windModule)
{
visualManager.motionControl = weatherSphere.windModule.windAmount;
visualManager.transform.LookAt(visualManager.transform.position + weatherSphere.windModule.WindDirection, Vector3.up);
}
#endif
}
}
}