SphereColliderInspector.cs 2.7 KB

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