1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #if UNITY_EDITOR
- using UnityEngine;
- using System;
- namespace O3DWB
- {
- [Serializable]
- public class ObjectPlacementExtensionPlane
- {
- #region Private Variables
- private XZOrientedQuad3D _planeQuad = new XZOrientedQuad3D();
- [SerializeField]
- private ObjectPlacementExtensionPlaneRenderSettings _renderSettings;
- private ObjectPlacementExtensionPlaneRenderer _renderer = new ObjectPlacementExtensionPlaneRenderer();
- #endregion
- #region Public Properties
- public ObjectPlacementExtensionPlaneRenderSettings RenderSettings
- {
- get
- {
- if (_renderSettings == null) _renderSettings = Octave3DWorldBuilder.ActiveInstance.CreateScriptableObject<ObjectPlacementExtensionPlaneRenderSettings>();
- return _renderSettings;
- }
- }
- public XZOrientedQuad3D PlaneQuad { get { return new XZOrientedQuad3D(_planeQuad); } }
- public Plane Plane { get { return _planeQuad.Plane; } }
- public Vector3 RightAxis { get { return _planeQuad.GetLocalAxis(CoordinateSystemAxis.PositiveRight); } }
- public Vector3 UpAxis { get { return Plane.normal; } }
- public Vector3 LookAxis { get { return _planeQuad.GetLocalAxis(CoordinateSystemAxis.PositiveLook); } }
- #endregion
- #region Public Methods
- public void RenderGizmos()
- {
- _renderer.RenderGizmos(this);
- }
- public void FromOrientedBoxFace(OrientedBox orientedBox, BoxFace boxFace)
- {
- CalculateQuadCoordinateSystem(orientedBox, boxFace);
- CalculateQuadXZSize(orientedBox, boxFace);
- }
- #endregion
- #region Private Methods
- private void CalculateQuadCoordinateSystem(OrientedBox orientedBox, BoxFace boxFace)
- {
- _planeQuad.InheritCoordinateSystem(orientedBox.GetBoxFaceCoordinateSystem(boxFace));
- _planeQuad.FaceInOppositeDirection();
- }
- private void CalculateQuadXZSize(OrientedBox orientedBox, BoxFace boxFace)
- {
- Vector2 boxFaceSize = orientedBox.GetBoxFaceSizeAlongFaceLocalXZAxes(boxFace);
- float quadSize = boxFaceSize.x;
- if (quadSize < boxFaceSize.y) quadSize = boxFaceSize.y;
- _planeQuad.SizeOnBothXZAxes = quadSize;
- }
- #endregion
- }
- }
- #endif
|