PlaneColliderInspector.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using BansheeEngine;
  4. namespace BansheeEditor
  5. {
  6. /** @addtogroup Inspectors
  7. * @{
  8. */
  9. /// <summary>
  10. /// Renders an inspector for the <see cref="PlaneCollider"/> component.
  11. /// </summary>
  12. [CustomInspector(typeof(PlaneCollider))]
  13. internal class PlaneColliderInspector : ColliderInspector
  14. {
  15. private GUIVector3Field normalField = new GUIVector3Field(new LocEdString("Normal"));
  16. private GUIFloatField distanceField = new GUIFloatField(new LocEdString("Distance"));
  17. private Vector3 normal;
  18. /// <inheritdoc/>
  19. protected internal override void Initialize()
  20. {
  21. PlaneCollider collider = InspectedObject as PlaneCollider;
  22. if (collider != null)
  23. BuildGUI(collider);
  24. }
  25. /// <inheritdoc/>
  26. protected internal override InspectableState Refresh()
  27. {
  28. PlaneCollider collider = InspectedObject as PlaneCollider;
  29. if (collider == null)
  30. return InspectableState.NotModified;
  31. Refresh(collider);
  32. InspectableState oldState = modifyState;
  33. if (modifyState.HasFlag(InspectableState.Modified))
  34. modifyState = InspectableState.NotModified;
  35. return oldState;
  36. }
  37. /// <summary>
  38. /// Creates GUI elements for fields specific to the plane collider.
  39. /// </summary>
  40. protected void BuildGUI(PlaneCollider collider)
  41. {
  42. normalField.OnChanged += x =>
  43. {
  44. normal = x;
  45. collider.Normal = x;
  46. MarkAsModified();
  47. };
  48. normalField.OnFocusLost += ConfirmModify;
  49. normalField.OnConfirmed += ConfirmModify;
  50. distanceField.OnChanged += x => { collider.Distance = x; MarkAsModified(); };
  51. distanceField.OnFocusLost += ConfirmModify;
  52. distanceField.OnConfirmed += ConfirmModify;
  53. Layout.AddElement(normalField);
  54. Layout.AddElement(distanceField);
  55. normal = collider.Normal;
  56. base.BuildGUI(collider);
  57. }
  58. /// <summary>
  59. /// Updates all GUI elements from current values in the collider.
  60. /// </summary>
  61. /// <param name="collider">Collider to update the GUI from.</param>
  62. protected void Refresh(PlaneCollider collider)
  63. {
  64. if (!normalField.HasInputFocus)
  65. normalField.Value = normal;
  66. if (!distanceField.HasInputFocus)
  67. distanceField.Value = collider.Distance;
  68. base.Refresh(collider);
  69. }
  70. }
  71. /** @} */
  72. }