123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #if UNITY_EDITOR
- using UnityEngine;
- using System;
- using System.Collections.Generic;
- namespace O3DWB
- {
- [Serializable]
- public class PathObjectPlacement
- {
- #region Private Variables
- [SerializeField]
- private ObjectPlacementPath _objectPlacementPath = new ObjectPlacementPath();
- #endregion
- #region Public Properties
- public List<OrientedBox> AllOrientedBoxesInPath { get { return _objectPlacementPath.GetAllOrientedBoxes(); } }
- public ObjectPlacementPathSettings PathSettings { get { return _objectPlacementPath.Settings; } }
- public ObjectPlacementPathRenderSettings PathRenderSettings { get { return _objectPlacementPath.RenderSettings; } }
- public ObjectPlacementExtensionPlaneRenderSettings PathExtensionPlaneRenderSettings { get { return _objectPlacementPath.ExtensionPlaneRenderSettings; } }
- public bool IsPathUnderManualConstruction { get { return _objectPlacementPath.IsUnderManualConstruction; } }
- #endregion
- #region Public Static Functions
- public static PathObjectPlacement Get()
- {
- return ObjectPlacement.Get().PathObjectPlacement;
- }
- #endregion
- #region Public Methods
- public void RenderGizmos()
- {
- _objectPlacementPath.RenderGizmos();
- }
- public void CancelManualPathConstruction()
- {
- ObjectPlacementGuide.Active = true;
- _objectPlacementPath.CancelManualConstruction();
- }
- public void HandleMouseMoveEvent(Event e)
- {
- if (!_objectPlacementPath.IsUnderManualConstruction && ObjectPlacementGuide.ExistsInSceneAndIsActive)
- {
- ObjectPlacementGuide.Instance.Snap();
- AxisAlignment.AlignObjectAxis(ObjectPlacementGuide.SceneObject, PathObjectPlacementSettings.Get().PlacementGuideSurfaceAlignmentSettings, ObjectSnapping.Get().ObjectSnapSurfacePlane.normal);
- // Note: This is necessary just in case the placement guide has changed.
- _objectPlacementPath.SetStartObject(ObjectPlacementGuide.SceneObject);
- }
- else if(ObjectPlacementGuide.ExistsInScene) _objectPlacementPath.UpdateForMouseMoveEvent();
- }
- public void HandleMouseButtonDownEvent(Event e)
- {
- if (ObjectPlacementGuide.ExistsInScene && _objectPlacementPath.IsUnderManualConstruction && AllShortcutCombos.Instance.PlacePathOnClick.IsActive())
- {
- e.DisableInSceneView();
- List<GameObject> placedHierarchyRoots = Octave3DScene.Get().InstantiateObjectHirarchiesFromPlacementDataCollection(_objectPlacementPath.EndManualConstruction());
- ObjectHierarchyRootsWerePlacedInSceneMessage.SendToInterestedListeners(placedHierarchyRoots, ObjectHierarchyRootsWerePlacedInSceneMessage.PlacementType.ObjectPlacement);
- if (ObjectPlacementGuide.ExistsInScene) ObjectPlacementGuide.Active = true;
- return;
- }
- if (_objectPlacementPath.IsUnderManualConstruction && AllShortcutCombos.Instance.ManualAttach2NewSegmentsToPath.IsActive())
- {
- e.DisableInSceneView();
- _objectPlacementPath.Attach2NewSegmentsIfUnderManualConstruction();
- }
- if (!_objectPlacementPath.IsUnderManualConstruction && AllShortcutCombos.Instance.BeginManualPathConstruction.IsActive() && e.InvolvesLeftMouseButton())
- {
- e.DisableInSceneView();
- if(ObjectPlacementGuide.ExistsInScene)
- {
- _objectPlacementPath.SetStartObject(ObjectPlacementGuide.SceneObject);
- _objectPlacementPath.BeginManualConstruction();
- if (_objectPlacementPath.IsUnderManualConstruction) ObjectPlacementGuide.Active = false;
- }
- 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.");
- }
- }
- public void HandleKeyboardButtonDownEvent(Event e)
- {
- if(AllShortcutCombos.Instance.CancelManualPathConstruction.IsActive())
- {
- e.DisableInSceneView();
- CancelManualPathConstruction();
- }
- else
- if(AllShortcutCombos.Instance.ManualRaisePath.IsActive())
- {
- e.DisableInSceneView();
- _objectPlacementPath.ManualRaise();
- }
- else
- if(AllShortcutCombos.Instance.ManualLowerPath.IsActive())
- {
- e.DisableInSceneView();
- _objectPlacementPath.ManualLower();
- }
- else
- if(AllShortcutCombos.Instance.ManualRemoveLast2SegmentsInPath.IsActive())
- {
- e.DisableInSceneView();
- _objectPlacementPath.RemoveLast2SegmentsIfUnderManualConstruction();
- }
- else
- if(AllShortcutCombos.Instance.NextPathExtensionPlane.IsActive())
- {
- e.DisableInSceneView();
- _objectPlacementPath.NextExtensionPlane();
- }
- }
- #endregion
- }
- }
- #endif
|