using UnityEditor;
using UnityEngine;
#if GAIA_2_PRESENT
using Gaia;
using ProceduralWorlds.WaterSystem;
#endif
namespace GeNa.Core
{
[InitializeOnLoad]
public class GeNaGaiaUtility
{
static GeNaGaiaUtility()
{
// If GeNa Present && Gaia Present
#if GAIA_2_PRESENT
GeNaUtility.Gaia2Present = true;
GeNaEvents.SetSeaLevel = SetSeaLevel;
GeNaUtility.GaiaSeaLevelValue = GetRuntimeSeaLevel();
GeNaEvents.GetSeaLevel = GetRuntimeSeaLevel;
#if GAIA_PRO_PRESENT
GeNaEvents.HasTerrainsAsScenes = GetRuntimeHasTerrainsAsScenes;
#endif
#else
GeNaUtility.Gaia2Present = false;
#endif
GeNaEvents.SetupRiverWeatherSync = SetupRiverWeatherController;
}
///
/// Sets the sea level on the spawner (Min Height)
///
///
public static float SetSeaLevel(GeNaSpawnerData spawner)
{
if (spawner == null)
{
return 0f;
}
float seaLevel = 0f;
#if GAIA_2_PRESENT
seaLevel = GetGaiaSeaLevel();
spawner.SpawnCriteria.SeaLevel = seaLevel;
#endif
return seaLevel;
}
///
/// Gets the gaia sea level value
///
///
private static float GetGaiaSeaLevel()
{
float seaLevel = 0f;
#if GAIA_2_PRESENT
GaiaSessionManager manager = Object.FindObjectOfType();
if (manager != null)
{
seaLevel = manager.GetSeaLevel();
}
else
{
PWS_WaterSystem waterSystem = PWS_WaterSystem.Instance;
if (waterSystem != null)
{
seaLevel = waterSystem.SeaLevel;
}
}
#endif
return seaLevel;
}
///
/// Gets the sea level from the water system
///
///
public static float GetRuntimeSeaLevel(float defaultValue = 0f)
{
float seaLevel = defaultValue;
#if GAIA_2_PRESENT
PWS_WaterSystem waterSystem = PWS_WaterSystem.Instance;
if (waterSystem != null)
{
seaLevel = waterSystem.SeaLevel;
}
#endif
return seaLevel;
}
public static bool GetRuntimeHasTerrainsAsScenes()
{
bool hasTerrainScenes = false;
#if GAIA_PRO_PRESENT
hasTerrainScenes = GaiaUtils.HasDynamicLoadedTerrains();
#endif
return hasTerrainScenes;
}
public static bool SetupRiverWeatherController(GameObject go, GeNaRiverProfile profile, float seaLevel, bool isEnabled)
{
GeNaRiverWeatherController controller = go.GetComponent();
if (isEnabled)
{
if (controller == null)
{
controller = go.AddComponent();
}
controller.m_riverProfile = profile;
controller.SeaLevel = seaLevel;
return true;
}
else
{
if (controller != null)
{
GeNaEvents.Destroy(controller);
}
return false;
}
}
}
}