ZeroVR/ZeroPacientVR/Assets/Octave3D World Builder/Scripts/Interaction/Shapes/3D/XZOrientedEllipseObjectInte...

114 lines
3.5 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using System;
using System.Collections.Generic;
namespace O3DWB
{
[Serializable]
public class XZOrientedEllipseObjectInteractionShape : ObjectInteraction3DShape
{
#region Private Constant Variables
private const int _numberOfEllipseSlices = 50;
#endregion
#region Private Variables
private XZOrientedEllipse3D _ellipse = new XZOrientedEllipse3D();
[SerializeField]
private XZOrientedEllipseShapeRenderSettings _renderSettings;
#endregion
#region Public Properties
public override Vector3 Normal
{
get { return _ellipse.Normal; }
set
{
if(_ellipse.Normal != value)
{
_ellipse.SetNormal(value);
_renderPointsMustBeCalculated = true;
}
}
}
public override Vector3 Center
{
get { return _ellipse.Center; }
set
{
if(_ellipse.Center != value)
{
_ellipse.Center = value;
_renderPointsMustBeCalculated = true;
}
}
}
public Vector2 ModelSpaceRadii
{
get { return _ellipse.ModelSpaceRadii; }
set
{
if (_ellipse.ModelSpaceRadii != value)
{
_ellipse.ModelSpaceRadii = value;
_renderPointsMustBeCalculated = true;
}
}
}
public float MaxModelSpaceRadius { get { return _ellipse.ModelSpaceRadiusX > _ellipse.ModelSpaceRadiusZ ? _ellipse.ModelSpaceRadiusX : _ellipse.ModelSpaceRadiusZ; } }
public XZOrientedEllipseShapeRenderSettings RenderSettings
{
get
{
if (_renderSettings == null) _renderSettings = Octave3DWorldBuilder.ActiveInstance.CreateScriptableObject<XZOrientedEllipseShapeRenderSettings>();
return _renderSettings;
}
}
#endregion
#region Public Methods
public override void RenderGizmos()
{
GizmosEx.RenderLinesBetweenPoints(GetRenderPoints(), RenderSettings.BorderLineColor, _ellipse.Normal * 0.03f);
}
public override bool OverlapsPolygon(Polygon3D polygon)
{
return _ellipse.OverlapsPolygon(polygon);
}
public override bool ContainsPoint(Vector3 point)
{
return _ellipse.ContainsPoint(point);
}
public override bool ContainsAllPoints(List<Vector3> points)
{
return _ellipse.ContainsAllPoints(points);
}
public override bool ContainsAnyPoint(List<Vector3> points)
{
return _ellipse.ContainsAnyPoint(points);
}
public Vector3 GetLocalAxis(CoordinateSystemAxis axis)
{
return _ellipse.GetLocalAxis(axis);
}
public Vector3 GetRandomPointInside()
{
return _ellipse.GetRandomPointInside();
}
#endregion
#region Protected Methods
protected override List<Vector3> GenerateRenderPoints()
{
return Vector3Extensions.Get3DEllipseCircumferencePoints(ModelSpaceRadii.x, ModelSpaceRadii.y, _ellipse.GetLocalAxis(CoordinateSystemAxis.PositiveRight), _ellipse.GetLocalAxis(CoordinateSystemAxis.PositiveLook), Center, _numberOfEllipseSlices);
}
#endregion
}
}
#endif