PlaneColliderInspector.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. /// <summary>
  7. /// Renders an inspector for the <see cref="PlaneCollider"/> component.
  8. /// </summary>
  9. [CustomInspector(typeof(PlaneCollider))]
  10. public class PlaneColliderInspector : ColliderInspector
  11. {
  12. private GUIVector3Field normalField = new GUIVector3Field(new LocEdString("Normal"));
  13. private GUIFloatField distanceField = new GUIFloatField(new LocEdString("Distance"));
  14. private Vector3 normal;
  15. /// <inheritdoc/>
  16. protected internal override void Initialize()
  17. {
  18. PlaneCollider collider = InspectedObject as PlaneCollider;
  19. if (collider != null)
  20. BuildGUI(collider);
  21. }
  22. /// <inheritdoc/>
  23. protected internal override InspectableState Refresh()
  24. {
  25. PlaneCollider collider = InspectedObject as PlaneCollider;
  26. if (collider == null)
  27. return InspectableState.NotModified;
  28. Refresh(collider);
  29. InspectableState oldState = modifyState;
  30. if (modifyState.HasFlag(InspectableState.Modified))
  31. modifyState = InspectableState.NotModified;
  32. return oldState;
  33. }
  34. /// <summary>
  35. /// Creates GUI elements for fields specific to the plane collider.
  36. /// </summary>
  37. protected void BuildGUI(PlaneCollider collider)
  38. {
  39. normalField.OnChanged += x =>
  40. {
  41. normal = x;
  42. collider.Normal = x;
  43. MarkAsModified();
  44. };
  45. normalField.OnFocusLost += ConfirmModify;
  46. normalField.OnConfirmed += ConfirmModify;
  47. distanceField.OnChanged += x => { collider.Distance = x; MarkAsModified(); };
  48. distanceField.OnFocusLost += ConfirmModify;
  49. distanceField.OnConfirmed += ConfirmModify;
  50. Layout.AddElement(normalField);
  51. Layout.AddElement(distanceField);
  52. normal = collider.Normal;
  53. base.BuildGUI(collider);
  54. }
  55. /// <summary>
  56. /// Updates all GUI elements from current values in the collider.
  57. /// </summary>
  58. /// <param name="collider">Collider to update the GUI from.</param>
  59. protected void Refresh(PlaneCollider collider)
  60. {
  61. if (!normalField.HasInputFocus)
  62. normalField.Value = normal;
  63. if (!distanceField.HasInputFocus)
  64. distanceField.Value = collider.Distance;
  65. base.Refresh(collider);
  66. }
  67. }
  68. }