PhysicsMaterialInspector.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. BuildGUI();
  23. }
  24. /// <inheritdoc/>
  25. protected internal override InspectableState Refresh()
  26. {
  27. PhysicsMaterial material = InspectedObject as PhysicsMaterial;
  28. if (material == null)
  29. return InspectableState.NotModified;
  30. staticFrictionField.Value = material.StaticFriction;
  31. dynamicFrictionField.Value = material.DynamicFriction;
  32. restitutionField.Value = material.Restitution;
  33. return InspectableState.NotModified;
  34. }
  35. /// <summary>
  36. /// Recreates all the GUI elements used by this inspector.
  37. /// </summary>
  38. private void BuildGUI()
  39. {
  40. Layout.Clear();
  41. PhysicsMaterial material = InspectedObject as PhysicsMaterial;
  42. if (material == null)
  43. return;
  44. staticFrictionField = new GUIFloatField(new LocEdString("Static friction"));
  45. dynamicFrictionField = new GUIFloatField(new LocEdString("Dynamic friction"));
  46. restitutionField = new GUISliderField(0.0f, 1.0f, new LocEdString("Restitution"));
  47. staticFrictionField.OnChanged += x =>
  48. {
  49. material.StaticFriction = x;
  50. EditorApplication.SetDirty(material);
  51. };
  52. dynamicFrictionField.OnChanged += x =>
  53. {
  54. material.DynamicFriction = x;
  55. EditorApplication.SetDirty(material);
  56. };
  57. restitutionField.OnChanged += x =>
  58. {
  59. material.Restitution = x;
  60. EditorApplication.SetDirty(material);
  61. };
  62. Layout.AddElement(staticFrictionField);
  63. Layout.AddElement(dynamicFrictionField);
  64. Layout.AddElement(restitutionField);
  65. }
  66. }
  67. /** @} */
  68. }