PhysicsMaterialInspector.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. /// <summary>
  8. /// Renders an inspector for the <see cref="PhysicsMaterial"/> resource.
  9. /// </summary>
  10. [CustomInspector(typeof(PhysicsMaterial))]
  11. internal class PhysicsMaterialInspector : Inspector
  12. {
  13. private GUIFloatField staticFrictionField;
  14. private GUIFloatField dynamicFrictionField;
  15. private GUISliderField restitutionField;
  16. /// <inheritdoc/>
  17. protected internal override void Initialize()
  18. {
  19. BuildGUI();
  20. }
  21. /// <inheritdoc/>
  22. protected internal override InspectableState Refresh()
  23. {
  24. PhysicsMaterial material = InspectedObject as PhysicsMaterial;
  25. if (material == null)
  26. return InspectableState.NotModified;
  27. staticFrictionField.Value = material.StaticFriction;
  28. dynamicFrictionField.Value = material.DynamicFriction;
  29. restitutionField.Value = material.Restitution;
  30. return InspectableState.NotModified;
  31. }
  32. /// <summary>
  33. /// Recreates all the GUI elements used by this inspector.
  34. /// </summary>
  35. private void BuildGUI()
  36. {
  37. Layout.Clear();
  38. PhysicsMaterial material = InspectedObject as PhysicsMaterial;
  39. if (material == null)
  40. return;
  41. staticFrictionField = new GUIFloatField(new LocEdString("Static friction"));
  42. dynamicFrictionField = new GUIFloatField(new LocEdString("Dynamic friction"));
  43. restitutionField = new GUISliderField(0.0f, 1.0f, new LocEdString("Restitution"));
  44. staticFrictionField.OnChanged += x =>
  45. {
  46. material.StaticFriction = x;
  47. EditorApplication.SetDirty(material);
  48. };
  49. dynamicFrictionField.OnChanged += x =>
  50. {
  51. material.DynamicFriction = x;
  52. EditorApplication.SetDirty(material);
  53. };
  54. restitutionField.OnChanged += x =>
  55. {
  56. material.Restitution = x;
  57. EditorApplication.SetDirty(material);
  58. };
  59. Layout.AddElement(staticFrictionField);
  60. Layout.AddElement(dynamicFrictionField);
  61. Layout.AddElement(restitutionField);
  62. }
  63. }
  64. }