public float3 GetNodePoseFromBarycentrics(float2 offset, int2 root) { float3 coords = 0; int goldenTri = -1; int triCount = parentGridTris.Length / 3; for (int i = 0; i < triCount; i++) { float2 a = parentGridCoords[parentGridTris[i * 3]]; float2 b = parentGridCoords[parentGridTris[i * 3 + 1]]; float2 c = parentGridCoords[parentGridTris[i * 3 + 2]]; coords = ShiftPlane2ElectricBoogaloo.Barycentric(offset, a, b, c); if (!(coords.x < 0 || coords.y < 0 || coords.z < 0)) { goldenTri = i; break; } } if (goldenTri == -1) { Debug.Log("could not triangulate. using default pos"); return(new float3(offset.x * m_GridSpacing + root.x * m_GridSpacing, offset.y * m_GridSpacing + root.y * m_GridSpacing, 0.0f)); } float3 aPose = parentGridPoses[parentGridTris[goldenTri * 3]]; float3 bPose = parentGridPoses[parentGridTris[goldenTri * 3 + 1]]; float3 cPose = parentGridPoses[parentGridTris[goldenTri * 3 + 2]]; float3 pose = aPose * coords.z + bPose * coords.x + cPose * coords.y; return(pose); }
public void UpdateAdjacentNodes(int2 root, NativeArray <float3> targetPositions, NativeArray <float3> returnPositions, NativeArray <bool> affected, NativeArray <bool> forceUpdatePos, NativeArray <float3> positions, NativeArray <float3> prevPositions, NativeArray <float3> accelerations, NativeArray <float2> childOffsets) { s_UpdateAdjacentNodes.Begin(); for (int index = 0; index < m_RootNodeCount; index++) { parentGridPoses[index] = colliderArray[index] != null ? colliderArray[index].GetNodeTransform() : parentGridPoses[index]; } var UpdateReturnPosesJob = new ShiftPlane2ElectricBoogaloo() { parentNodeOffsets = parentGridCoords, parentNodePoses = parentGridPoses, childNodeOffsets = childOffsets, triangles = parentGridTris, numTriangles = parentGridTris.Length / 3, targetPositions = targetPositions, returnPositions = returnPositions, affected = affected, forceUpdatePos = forceUpdatePos, positions = positions, prevPositions = prevPositions, accelerations = accelerations, parentGridDenoms = parentGridDenoms }; UpdateReturnPosesJob.Schedule(returnPositions.Length, 32).Complete(); s_UpdateAdjacentNodes.End(); }