AABox.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System.Runtime.InteropServices;
  2. namespace BansheeEngine
  3. {
  4. /// <summary>
  5. /// Axis aligned box represented by minimum and maximum point.
  6. /// </summary>
  7. [StructLayout(LayoutKind.Sequential), SerializeObject]
  8. public struct AABox // Note: Must match C++ class AABox
  9. {
  10. [SerializeField]
  11. private Vector3 _minimum;
  12. [SerializeField]
  13. private Vector3 _maximum;
  14. /// <summary>
  15. /// Corner of the box with minimum values (opposite to maximum corner).
  16. /// </summary>
  17. public Vector3 Minimum
  18. {
  19. get { return _minimum; }
  20. set { _minimum = value; }
  21. }
  22. /// <summary>
  23. /// Corner of the box with maximum values (opposite to minimum corner).
  24. /// </summary>
  25. public Vector3 Maximum
  26. {
  27. get { return _maximum; }
  28. set { _maximum = value; }
  29. }
  30. /// <summary>
  31. /// Returns the center of the box.
  32. /// </summary>
  33. public Vector3 Center
  34. {
  35. get
  36. {
  37. return new Vector3((_maximum.x + _minimum.x) * 0.5f,
  38. (_maximum.y + _minimum.y) * 0.5f,
  39. (_maximum.z + _minimum.z) * 0.5f);
  40. }
  41. }
  42. /// <summary>
  43. /// Returns the width, height and depth of the box.
  44. /// </summary>
  45. public Vector3 Size
  46. {
  47. get
  48. {
  49. return _maximum - _minimum;
  50. }
  51. }
  52. /// <summary>
  53. /// Creates a new axis aligned box.
  54. /// </summary>
  55. /// <param name="min">Corner of the box with minimum values.</param>
  56. /// <param name="max">Corner of the box with maximum values.</param>
  57. public AABox(Vector3 min, Vector3 max)
  58. {
  59. _minimum = min;
  60. _maximum = max;
  61. }
  62. /// <inheritdoc/>
  63. public override string ToString()
  64. {
  65. return "Min: " + _minimum + ". Max: " + _maximum;
  66. }
  67. };
  68. }