Files
com.misaki.art-tools/Runtime/Cloner/Jobs/PointsGenerationJob.cs
2024-09-16 22:17:03 +09:00

63 lines
2.0 KiB
C#

using Unity.Collections;
using Unity.Jobs;
using Unity.Mathematics;
using UnityEngine;
namespace Misaki.ArtTool
{
[ExecuteInEditMode]
public struct PointsGenerationJob : IJobParallelForBatch
{
public float4x4 worldMatrix;
public int pointSize;
public DistributionMode distributionMode;
public SplineDistributionSetting splineDistributionSetting;
public LinearDistributionSetting linearDistributionSetting;
public GridDistributionSetting gridDistributionSetting;
[WriteOnly]
public NativeArray<PointData> points;
public void Execute(int startIndex, int count)
{
for (var i = startIndex; i < startIndex + count; i++)
{
var pointMatrix = float4x4.identity;
var isValid = true;
switch (distributionMode)
{
case DistributionMode.Object:
break;
case DistributionMode.Spline:
Distribution.SplineDistribution(i, pointSize, splineDistributionSetting, out pointMatrix, out isValid);
break;
case DistributionMode.Linear:
Distribution.LinearDistribution(i, linearDistributionSetting, out pointMatrix, out isValid);
break;
case DistributionMode.Grid:
Distribution.GridDistribution(i, gridDistributionSetting, out pointMatrix, out isValid);
break;
case DistributionMode.Radial:
break;
case DistributionMode.Honeycomb:
break;
default:
break;
}
pointMatrix = math.mul(worldMatrix, pointMatrix);
points[i] = new PointData()
{
matrix = pointMatrix,
isValid = isValid
};
}
}
}
}