63 lines
2.0 KiB
C#
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
|
|
};
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|