rabidus-test/Assets/Dreamteck/Splines/Core/Primitives/Capsule.cs

36 lines
1.8 KiB
C#
Raw Permalink Normal View History

2023-07-24 16:38:13 +03:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Dreamteck.Splines.Primitives
{
public class Capsule : SplinePrimitive
{
public float radius = 1f;
public float height = 2f;
public override Spline.Type GetSplineType()
{
return Spline.Type.Bezier;
}
protected override void Generate()
{
base.Generate();
closed = true;
CreatePoints(6, SplinePoint.Type.SmoothMirrored);
points[0].position = Vector3.right / 2f * radius + Vector3.up * height * 0.5f;
points[0].SetTangentPosition(points[0].position + Vector3.down * 2 * (Mathf.Sqrt(2f) - 1f) / 3f * radius);
points[1].position = Vector3.up / 2f * radius + Vector3.up * height * 0.5f;
points[1].SetTangentPosition(points[1].position + Vector3.right * 2 * (Mathf.Sqrt(2f) - 1f) / 3f * radius);
points[2].position = Vector3.left / 2f * radius + Vector3.up * height * 0.5f;
points[2].SetTangentPosition(points[2].position + Vector3.up * 2 * (Mathf.Sqrt(2f) - 1f) / 3f * radius);
points[3].position = Vector3.left / 2f * radius + Vector3.down * height * 0.5f;
points[3].SetTangentPosition(points[3].position + Vector3.up * 2 * (Mathf.Sqrt(2f) - 1f) / 3f * radius);
points[4].position = Vector3.down / 2f * radius + Vector3.down * height * 0.5f;
points[4].SetTangentPosition(points[4].position + Vector3.left * 2 * (Mathf.Sqrt(2f) - 1f) / 3f * radius);
points[5].position = Vector3.right / 2f * radius + Vector3.down * height * 0.5f;
points[5].SetTangentPosition(points[5].position + Vector3.down * 2 * (Mathf.Sqrt(2f) - 1f) / 3f * radius);
}
}
}