//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
//**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************//
using BansheeEngine;
namespace BansheeEditor
{
/** @addtogroup Inspectors
* @{
*/
///
/// Renders an inspector for the component.
///
[CustomInspector(typeof(SphereCollider))]
internal class SphereColliderInspector : ColliderInspector
{
private GUIVector3Field centerField = new GUIVector3Field(new LocEdString("Center"));
private GUIFloatField radiusField = new GUIFloatField(new LocEdString("Radius"));
///
protected internal override void Initialize()
{
SphereCollider collider = InspectedObject as SphereCollider;
if (collider != null)
BuildGUI(collider);
}
///
protected internal override InspectableState Refresh()
{
SphereCollider collider = InspectedObject as SphereCollider;
if (collider == null)
return InspectableState.NotModified;
Refresh(collider);
InspectableState oldState = modifyState;
if (modifyState.HasFlag(InspectableState.Modified))
modifyState = InspectableState.NotModified;
return oldState;
}
///
/// Creates GUI elements for fields specific to the sphere collider.
///
protected void BuildGUI(SphereCollider collider)
{
centerField.OnChanged += x => { collider.Center = x; MarkAsModified(); };
centerField.OnFocusLost += ConfirmModify;
centerField.OnConfirmed += ConfirmModify;
radiusField.OnChanged += x => { collider.Radius = x; MarkAsModified(); };
radiusField.OnFocusLost += ConfirmModify;
radiusField.OnConfirmed += ConfirmModify;
Layout.AddElement(centerField);
Layout.AddElement(radiusField);
base.BuildGUI(collider);
}
///
/// Updates all GUI elements from current values in the collider.
///
/// Collider to update the GUI from.
protected void Refresh(SphereCollider collider)
{
if (!centerField.HasInputFocus)
centerField.Value = collider.Center;
if (!radiusField.HasInputFocus)
radiusField.Value = collider.Radius;
base.Refresh(collider);
}
}
/** @} */
}