//********************************** 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(PlaneCollider))] internal class PlaneColliderInspector : ColliderInspector { private GUIVector3Field normalField = new GUIVector3Field(new LocEdString("Normal")); private GUIFloatField distanceField = new GUIFloatField(new LocEdString("Distance")); private Vector3 normal; /// protected internal override void Initialize() { PlaneCollider collider = InspectedObject as PlaneCollider; if (collider != null) BuildGUI(collider); } /// protected internal override InspectableState Refresh() { PlaneCollider collider = InspectedObject as PlaneCollider; 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 plane collider. /// protected void BuildGUI(PlaneCollider collider) { normalField.OnChanged += x => { normal = x; collider.Normal = x; MarkAsModified(); }; normalField.OnFocusLost += ConfirmModify; normalField.OnConfirmed += ConfirmModify; distanceField.OnChanged += x => { collider.Distance = x; MarkAsModified(); }; distanceField.OnFocusLost += ConfirmModify; distanceField.OnConfirmed += ConfirmModify; Layout.AddElement(normalField); Layout.AddElement(distanceField); normal = collider.Normal; base.BuildGUI(collider); } /// /// Updates all GUI elements from current values in the collider. /// /// Collider to update the GUI from. protected void Refresh(PlaneCollider collider) { if (!normalField.HasInputFocus) normalField.Value = normal; if (!distanceField.HasInputFocus) distanceField.Value = collider.Distance; base.Refresh(collider); } } /** @} */ }