MeshColliderInspector.cs 2.4 KB

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