PathObjectPlacement.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #if UNITY_EDITOR
  2. using UnityEngine;
  3. using System;
  4. using System.Collections.Generic;
  5. namespace O3DWB
  6. {
  7. [Serializable]
  8. public class PathObjectPlacement
  9. {
  10. #region Private Variables
  11. [SerializeField]
  12. private ObjectPlacementPath _objectPlacementPath = new ObjectPlacementPath();
  13. #endregion
  14. #region Public Properties
  15. public List<OrientedBox> AllOrientedBoxesInPath { get { return _objectPlacementPath.GetAllOrientedBoxes(); } }
  16. public ObjectPlacementPathSettings PathSettings { get { return _objectPlacementPath.Settings; } }
  17. public ObjectPlacementPathRenderSettings PathRenderSettings { get { return _objectPlacementPath.RenderSettings; } }
  18. public ObjectPlacementExtensionPlaneRenderSettings PathExtensionPlaneRenderSettings { get { return _objectPlacementPath.ExtensionPlaneRenderSettings; } }
  19. public bool IsPathUnderManualConstruction { get { return _objectPlacementPath.IsUnderManualConstruction; } }
  20. #endregion
  21. #region Public Static Functions
  22. public static PathObjectPlacement Get()
  23. {
  24. return ObjectPlacement.Get().PathObjectPlacement;
  25. }
  26. #endregion
  27. #region Public Methods
  28. public void RenderGizmos()
  29. {
  30. _objectPlacementPath.RenderGizmos();
  31. }
  32. public void CancelManualPathConstruction()
  33. {
  34. ObjectPlacementGuide.Active = true;
  35. _objectPlacementPath.CancelManualConstruction();
  36. }
  37. public void HandleMouseMoveEvent(Event e)
  38. {
  39. if (!_objectPlacementPath.IsUnderManualConstruction && ObjectPlacementGuide.ExistsInSceneAndIsActive)
  40. {
  41. ObjectPlacementGuide.Instance.Snap();
  42. AxisAlignment.AlignObjectAxis(ObjectPlacementGuide.SceneObject, PathObjectPlacementSettings.Get().PlacementGuideSurfaceAlignmentSettings, ObjectSnapping.Get().ObjectSnapSurfacePlane.normal);
  43. // Note: This is necessary just in case the placement guide has changed.
  44. _objectPlacementPath.SetStartObject(ObjectPlacementGuide.SceneObject);
  45. }
  46. else if(ObjectPlacementGuide.ExistsInScene) _objectPlacementPath.UpdateForMouseMoveEvent();
  47. }
  48. public void HandleMouseButtonDownEvent(Event e)
  49. {
  50. if (ObjectPlacementGuide.ExistsInScene && _objectPlacementPath.IsUnderManualConstruction && AllShortcutCombos.Instance.PlacePathOnClick.IsActive())
  51. {
  52. e.DisableInSceneView();
  53. List<GameObject> placedHierarchyRoots = Octave3DScene.Get().InstantiateObjectHirarchiesFromPlacementDataCollection(_objectPlacementPath.EndManualConstruction());
  54. ObjectHierarchyRootsWerePlacedInSceneMessage.SendToInterestedListeners(placedHierarchyRoots, ObjectHierarchyRootsWerePlacedInSceneMessage.PlacementType.ObjectPlacement);
  55. if (ObjectPlacementGuide.ExistsInScene) ObjectPlacementGuide.Active = true;
  56. return;
  57. }
  58. if (_objectPlacementPath.IsUnderManualConstruction && AllShortcutCombos.Instance.ManualAttach2NewSegmentsToPath.IsActive())
  59. {
  60. e.DisableInSceneView();
  61. _objectPlacementPath.Attach2NewSegmentsIfUnderManualConstruction();
  62. }
  63. if (!_objectPlacementPath.IsUnderManualConstruction && AllShortcutCombos.Instance.BeginManualPathConstruction.IsActive() && e.InvolvesLeftMouseButton())
  64. {
  65. e.DisableInSceneView();
  66. if(ObjectPlacementGuide.ExistsInScene)
  67. {
  68. _objectPlacementPath.SetStartObject(ObjectPlacementGuide.SceneObject);
  69. _objectPlacementPath.BeginManualConstruction();
  70. if (_objectPlacementPath.IsUnderManualConstruction) ObjectPlacementGuide.Active = false;
  71. }
  72. else Debug.LogWarning("Can not begin path construction because the placement guide does not exist in the scene. Please activate a prefab to start construction.");
  73. }
  74. }
  75. public void HandleKeyboardButtonDownEvent(Event e)
  76. {
  77. if(AllShortcutCombos.Instance.CancelManualPathConstruction.IsActive())
  78. {
  79. e.DisableInSceneView();
  80. CancelManualPathConstruction();
  81. }
  82. else
  83. if(AllShortcutCombos.Instance.ManualRaisePath.IsActive())
  84. {
  85. e.DisableInSceneView();
  86. _objectPlacementPath.ManualRaise();
  87. }
  88. else
  89. if(AllShortcutCombos.Instance.ManualLowerPath.IsActive())
  90. {
  91. e.DisableInSceneView();
  92. _objectPlacementPath.ManualLower();
  93. }
  94. else
  95. if(AllShortcutCombos.Instance.ManualRemoveLast2SegmentsInPath.IsActive())
  96. {
  97. e.DisableInSceneView();
  98. _objectPlacementPath.RemoveLast2SegmentsIfUnderManualConstruction();
  99. }
  100. else
  101. if(AllShortcutCombos.Instance.NextPathExtensionPlane.IsActive())
  102. {
  103. e.DisableInSceneView();
  104. _objectPlacementPath.NextExtensionPlane();
  105. }
  106. }
  107. #endregion
  108. }
  109. }
  110. #endif