Upload project files
This commit is contained in:
78
Runtime/Cloner/Jobs/PointsGenerationJob.cs
Normal file
78
Runtime/Cloner/Jobs/PointsGenerationJob.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
using Unity.Collections;
|
||||
using Unity.Jobs;
|
||||
using Unity.Mathematics;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Misaki.ArtTool
|
||||
{
|
||||
[ExecuteInEditMode]
|
||||
public struct PointsGenerationJob : IJobParallelForBatch
|
||||
{
|
||||
public float4x4 worldMatrix;
|
||||
|
||||
public DistributionMode distributionMode;
|
||||
|
||||
public GridDistributionSetting gridDistributionSetting;
|
||||
|
||||
[WriteOnly]
|
||||
public NativeArray<float4x4> points;
|
||||
|
||||
public void Execute(int startIndex, int count)
|
||||
{
|
||||
switch (distributionMode)
|
||||
{
|
||||
case DistributionMode.Object:
|
||||
break;
|
||||
case DistributionMode.Linear:
|
||||
break;
|
||||
case DistributionMode.Grid:
|
||||
GridDistribution(startIndex, count);
|
||||
break;
|
||||
case DistributionMode.Radial:
|
||||
break;
|
||||
case DistributionMode.Honeycomb:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void GridDistribution(int startIndex, int count)
|
||||
{
|
||||
var xIndex = 0;
|
||||
var yIndex = 0;
|
||||
var zIndex = 0;
|
||||
|
||||
switch (gridDistributionSetting.shape)
|
||||
{
|
||||
case GridShape.Cube:
|
||||
|
||||
for (var i = startIndex; i < startIndex + count; i++)
|
||||
{
|
||||
yIndex = i / (gridDistributionSetting.count.x * gridDistributionSetting.count.z);
|
||||
var remain = i % (gridDistributionSetting.count.x * gridDistributionSetting.count.z);
|
||||
zIndex = remain / gridDistributionSetting.count.x;
|
||||
xIndex = remain % gridDistributionSetting.count.x;
|
||||
|
||||
var localPosition = new float3(xIndex * gridDistributionSetting.spacing.x, yIndex * gridDistributionSetting.spacing.y, zIndex * gridDistributionSetting.spacing.z);
|
||||
|
||||
localPosition.x -= (gridDistributionSetting.count.x - 1) * gridDistributionSetting.spacing.x / 2.0f;
|
||||
localPosition.y -= (gridDistributionSetting.count.y - 1) * gridDistributionSetting.spacing.y / 2.0f;
|
||||
localPosition.z -= (gridDistributionSetting.count.z - 1) * gridDistributionSetting.spacing.z / 2.0f;
|
||||
|
||||
var localMatrix = float4x4.TRS(localPosition, quaternion.identity, new float3(1.0f));
|
||||
|
||||
points[i] = math.mul(worldMatrix, localMatrix);
|
||||
}
|
||||
|
||||
break;
|
||||
case GridShape.Sphere:
|
||||
break;
|
||||
case GridShape.Cylinder:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Runtime/Cloner/Jobs/PointsGenerationJob.cs.meta
Normal file
2
Runtime/Cloner/Jobs/PointsGenerationJob.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a3b40b764e1a7ee4cb60606f02dce34b
|
||||
24
Runtime/Cloner/Jobs/TransformAccessJob.cs
Normal file
24
Runtime/Cloner/Jobs/TransformAccessJob.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using Unity.Collections;
|
||||
using Unity.Mathematics;
|
||||
using UnityEngine.Jobs;
|
||||
|
||||
namespace Misaki.ArtTool
|
||||
{
|
||||
public struct TransformAccessJob : IJobParallelForTransform
|
||||
{
|
||||
public NativeArray<float4x4> points;
|
||||
|
||||
public void Execute(int index, TransformAccess transform)
|
||||
{
|
||||
if (index > points.Length || !transform.isValid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
MatrixHelper.DecomposeMatrix(points[index], out var position, out var rotation, out var scale);
|
||||
|
||||
transform.SetPositionAndRotation(position, rotation);
|
||||
transform.localScale = scale;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Runtime/Cloner/Jobs/TransformAccessJob.cs.meta
Normal file
2
Runtime/Cloner/Jobs/TransformAccessJob.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 56503ea812e8e9042aa36b3b6af0a9f7
|
||||
Reference in New Issue
Block a user