SplineControlPoint.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. using UnityEngine;
  2. using System.Collections;
  3. namespace XftWeapon {
  4. public class SplineControlPoint
  5. {
  6. public Vector3 Position;
  7. public Vector3 Normal;
  8. public int ControlPointIndex = -1;
  9. public int SegmentIndex = -1;
  10. public float Dist;
  11. protected Spline mSpline;
  12. public SplineControlPoint NextControlPoint
  13. {
  14. get
  15. {
  16. return mSpline.NextControlPoint(this);
  17. }
  18. }
  19. public SplineControlPoint PreviousControlPoint
  20. {
  21. get
  22. {
  23. return mSpline.PreviousControlPoint(this);
  24. }
  25. }
  26. public Vector3 NextPosition
  27. {
  28. get
  29. {
  30. return mSpline.NextPosition(this);
  31. }
  32. }
  33. public Vector3 PreviousPosition
  34. {
  35. get
  36. {
  37. return mSpline.PreviousPosition(this);
  38. }
  39. }
  40. public Vector3 NextNormal
  41. {
  42. get
  43. {
  44. return mSpline.NextNormal(this);
  45. }
  46. }
  47. public Vector3 PreviousNormal
  48. {
  49. get { return mSpline.PreviousNormal(this); }
  50. }
  51. public bool IsValid
  52. {
  53. get
  54. {
  55. return (NextControlPoint != null);
  56. }
  57. }
  58. Vector3 GetNext2Position()
  59. {
  60. SplineControlPoint cp = NextControlPoint;
  61. if (cp != null)
  62. return cp.NextPosition;
  63. return NextPosition;
  64. }
  65. Vector3 GetNext2Normal()
  66. {
  67. SplineControlPoint cp = NextControlPoint;
  68. if (cp != null)
  69. return cp.NextNormal;
  70. return Normal;
  71. }
  72. public Vector3 Interpolate(float localF)
  73. {
  74. localF = Mathf.Clamp01(localF);
  75. return Spline.CatmulRom(PreviousPosition, Position, NextPosition, GetNext2Position(), localF);
  76. }
  77. public Vector3 InterpolateNormal(float localF)
  78. {
  79. localF = Mathf.Clamp01(localF);
  80. return Spline.CatmulRom(PreviousNormal, Normal, NextNormal, GetNext2Normal(), localF);
  81. }
  82. public void Init(Spline owner)
  83. {
  84. mSpline = owner;
  85. SegmentIndex = -1;
  86. }
  87. }
  88. }