MeshColliderInspector.cs 2.3 KB

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