ObjectPlacementExtensionPlane.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #if UNITY_EDITOR
  2. using UnityEngine;
  3. using System;
  4. namespace O3DWB
  5. {
  6. [Serializable]
  7. public class ObjectPlacementExtensionPlane
  8. {
  9. #region Private Variables
  10. private XZOrientedQuad3D _planeQuad = new XZOrientedQuad3D();
  11. [SerializeField]
  12. private ObjectPlacementExtensionPlaneRenderSettings _renderSettings;
  13. private ObjectPlacementExtensionPlaneRenderer _renderer = new ObjectPlacementExtensionPlaneRenderer();
  14. #endregion
  15. #region Public Properties
  16. public ObjectPlacementExtensionPlaneRenderSettings RenderSettings
  17. {
  18. get
  19. {
  20. if (_renderSettings == null) _renderSettings = Octave3DWorldBuilder.ActiveInstance.CreateScriptableObject<ObjectPlacementExtensionPlaneRenderSettings>();
  21. return _renderSettings;
  22. }
  23. }
  24. public XZOrientedQuad3D PlaneQuad { get { return new XZOrientedQuad3D(_planeQuad); } }
  25. public Plane Plane { get { return _planeQuad.Plane; } }
  26. public Vector3 RightAxis { get { return _planeQuad.GetLocalAxis(CoordinateSystemAxis.PositiveRight); } }
  27. public Vector3 UpAxis { get { return Plane.normal; } }
  28. public Vector3 LookAxis { get { return _planeQuad.GetLocalAxis(CoordinateSystemAxis.PositiveLook); } }
  29. #endregion
  30. #region Public Methods
  31. public void RenderGizmos()
  32. {
  33. _renderer.RenderGizmos(this);
  34. }
  35. public void FromOrientedBoxFace(OrientedBox orientedBox, BoxFace boxFace)
  36. {
  37. CalculateQuadCoordinateSystem(orientedBox, boxFace);
  38. CalculateQuadXZSize(orientedBox, boxFace);
  39. }
  40. #endregion
  41. #region Private Methods
  42. private void CalculateQuadCoordinateSystem(OrientedBox orientedBox, BoxFace boxFace)
  43. {
  44. _planeQuad.InheritCoordinateSystem(orientedBox.GetBoxFaceCoordinateSystem(boxFace));
  45. _planeQuad.FaceInOppositeDirection();
  46. }
  47. private void CalculateQuadXZSize(OrientedBox orientedBox, BoxFace boxFace)
  48. {
  49. Vector2 boxFaceSize = orientedBox.GetBoxFaceSizeAlongFaceLocalXZAxes(boxFace);
  50. float quadSize = boxFaceSize.x;
  51. if (quadSize < boxFaceSize.y) quadSize = boxFaceSize.y;
  52. _planeQuad.SizeOnBothXZAxes = quadSize;
  53. }
  54. #endregion
  55. }
  56. }
  57. #endif