SphereColliderInspector.cs 2.8 KB

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