PhysicsMaterialInspector.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using System.Collections.Generic;
  4. using BansheeEngine;
  5. namespace BansheeEditor
  6. {
  7. /** @addtogroup Inspectors
  8. * @{
  9. */
  10. /// <summary>
  11. /// Renders an inspector for the <see cref="PhysicsMaterial"/> resource.
  12. /// </summary>
  13. [CustomInspector(typeof(PhysicsMaterial))]
  14. internal class PhysicsMaterialInspector : Inspector
  15. {
  16. private GUIFloatField staticFrictionField;
  17. private GUIFloatField dynamicFrictionField;
  18. private GUISliderField restitutionField;
  19. /// <inheritdoc/>
  20. protected internal override void Initialize()
  21. {
  22. LoadResource();
  23. BuildGUI();
  24. }
  25. /// <inheritdoc/>
  26. protected internal override InspectableState Refresh()
  27. {
  28. PhysicsMaterial material = InspectedObject as PhysicsMaterial;
  29. if (material == null)
  30. return InspectableState.NotModified;
  31. staticFrictionField.Value = material.StaticFriction;
  32. dynamicFrictionField.Value = material.DynamicFriction;
  33. restitutionField.Value = material.Restitution;
  34. return InspectableState.NotModified;
  35. }
  36. /// <summary>
  37. /// Recreates all the GUI elements used by this inspector.
  38. /// </summary>
  39. private void BuildGUI()
  40. {
  41. Layout.Clear();
  42. PhysicsMaterial material = InspectedObject as PhysicsMaterial;
  43. if (material == null)
  44. return;
  45. staticFrictionField = new GUIFloatField(new LocEdString("Static friction"));
  46. dynamicFrictionField = new GUIFloatField(new LocEdString("Dynamic friction"));
  47. restitutionField = new GUISliderField(0.0f, 1.0f, new LocEdString("Restitution"));
  48. staticFrictionField.OnChanged += x =>
  49. {
  50. material.StaticFriction = x;
  51. EditorApplication.SetDirty(material);
  52. };
  53. dynamicFrictionField.OnChanged += x =>
  54. {
  55. material.DynamicFriction = x;
  56. EditorApplication.SetDirty(material);
  57. };
  58. restitutionField.OnChanged += x =>
  59. {
  60. material.Restitution = x;
  61. EditorApplication.SetDirty(material);
  62. };
  63. Layout.AddElement(staticFrictionField);
  64. Layout.AddElement(dynamicFrictionField);
  65. Layout.AddElement(restitutionField);
  66. }
  67. }
  68. /** @} */
  69. }