Firstborn/Assets/AwesomeTechnologies/VegetationStudioPro/Runtime/VegetationSystemPro/VegetationSettings.cs

129 lines
4.1 KiB
C#
Raw Normal View History


using System;
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.Rendering;
namespace AwesomeTechnologies.VegetationSystem
{
[System.Serializable]
public class VegetationSettings
{
public float PlantDistance = 150;
public float AdditionalTreeMeshDistance = 100;
public float AdditionalBillboardDistance = 3000;
public int Seed = 0;
public float LODDistanceFactor = 1;
public bool GrassShadows = false;
public bool PlantShadows = false;
public bool TreeShadows = true;
public bool ObjectShadows = true;
public bool LargeObjectShadows = true;
public bool BillboardShadows = false;
public bool DisableRenderDistanceFactor = false;
public LayerMask GrassLayer = 0;
public LayerMask PlantLayer = 0;
public LayerMask TreeLayer = 0;
public LayerMask ObjectLayer = 0;
public LayerMask LargeObjectLayer = 0;
public LayerMask BillboardLayer = 0;
public float GrassDensity = 1;
public float PlantDensity = 1;
public float TreeDensity = 1;
public float ObjectDensity = 1;
public float LargeObjectDensity = 1;
public float VegetationScale = 1f;
public ShadowCastingMode GetBillboardShadowCastingMode()
{
#if UNITY_2018_3_OR_NEWER
return BillboardShadows ? ShadowCastingMode.TwoSided : ShadowCastingMode.Off;
#else
return BillboardShadows ? ShadowCastingMode.On : ShadowCastingMode.Off;
#endif
}
public ShadowCastingMode GetShadowCastingMode(VegetationType vegetationType)
{
switch (vegetationType)
{
case VegetationType.Grass:
return GrassShadows ? ShadowCastingMode.On : ShadowCastingMode.Off;
case VegetationType.Plant:
return PlantShadows ? ShadowCastingMode.On : ShadowCastingMode.Off;
case VegetationType.Tree:
return TreeShadows ? ShadowCastingMode.On : ShadowCastingMode.Off;
case VegetationType.Objects:
return ObjectShadows ? ShadowCastingMode.On : ShadowCastingMode.Off;
case VegetationType.LargeObjects:
return LargeObjectShadows ? ShadowCastingMode.On : ShadowCastingMode.Off;
}
return ShadowCastingMode.Off;
}
public LayerMask GetLayer(VegetationType vegetationType)
{
switch (vegetationType)
{
case VegetationType.Grass:
return GrassLayer;
case VegetationType.Plant:
return PlantLayer;
case VegetationType.Tree:
return TreeLayer;
case VegetationType.Objects:
return ObjectLayer;
case VegetationType.LargeObjects:
return LargeObjectLayer;
}
return 0;
}
public LayerMask GetBillboardLayer()
{
return BillboardLayer;
}
public float GetVegetationItemDensity(VegetationType vegetationType)
{
switch (vegetationType)
{
case VegetationType.Grass:
return GrassDensity;
case VegetationType.Plant:
return PlantDensity;
case VegetationType.Tree:
return TreeDensity;
case VegetationType.Objects:
return ObjectDensity;
case VegetationType.LargeObjects:
return LargeObjectDensity;
default:
return 1;
}
}
public float GetVegetationDistance()
{
return PlantDistance;
}
public float GetBillboardDistance()
{
return PlantDistance + AdditionalTreeMeshDistance + AdditionalBillboardDistance;
}
public float GetTreeDistance()
{
return PlantDistance + AdditionalTreeMeshDistance;
}
}
}