42 lines
1.4 KiB
C#
42 lines
1.4 KiB
C#
using Unity.Mathematics;
|
|
|
|
namespace Misaki.ArtTool
|
|
{
|
|
public static partial class Distribution
|
|
{
|
|
public static void GridDistribution(int index, GridDistributionSetting setting, out float4x4 localMatrix, out bool isValid)
|
|
{
|
|
var random = Random.CreateFromIndex((uint)index);
|
|
|
|
var localPosition = ShapeHelper.GetCubePosition(index, setting.count) * setting.spacing;
|
|
|
|
switch (setting.shape)
|
|
{
|
|
case GridShape.Cube:
|
|
isValid = true;
|
|
break;
|
|
|
|
case GridShape.Sphere:
|
|
var isInsideSphere = ShapeHelper.IsPointInsideSphere(localPosition, 0.0f, setting.count * setting.spacing);
|
|
|
|
isValid = isInsideSphere;
|
|
break;
|
|
|
|
case GridShape.Cylinder:
|
|
var isInsideCylinder = ShapeHelper.IsPointInsideCylinder(localPosition, 0.0f, setting.count * setting.spacing);
|
|
isValid = isInsideCylinder;
|
|
break;
|
|
default:
|
|
isValid = false;
|
|
break;
|
|
}
|
|
|
|
if (random.NextFloat() > setting.fill && isValid == true)
|
|
{
|
|
isValid = false;
|
|
}
|
|
|
|
localMatrix = float4x4.TRS(localPosition, quaternion.identity, new float3(1.0f));
|
|
}
|
|
}
|
|
} |