ObjectPlacementPathAutomaticPatternHeightAdjuster.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #if UNITY_EDITOR
  2. using UnityEngine;
  3. using System.Collections.Generic;
  4. namespace O3DWB
  5. {
  6. public class ObjectPlacementPathAutomaticPatternHeightAdjuster
  7. {
  8. #region Public Methods
  9. public void AdjustSegmentHeight(ObjectPlacementBoxStackSegment segment, List<ObjectPlacementBoxStackSegment> allPathSegments,
  10. ObjectPlacementPathAutomaticPatternHeightAdjustmentSettings automaticPatternHeightAdjustmentSettings, ObjectPlacementPathHeightPattern heightPattern)
  11. {
  12. int initialHeightValueIndex = 0;
  13. if(automaticPatternHeightAdjustmentSettings.ApplyPatternsContinuously)
  14. {
  15. int indexOfSegmentToAdjust = allPathSegments.FindIndex(0, item => item == segment);
  16. if (indexOfSegmentToAdjust >= 0) initialHeightValueIndex = ObjectPlacementBoxStackSegmentQueries.GetTotalNumberOfStacksInSegments(allPathSegments, indexOfSegmentToAdjust - 1);
  17. }
  18. bool wrapPattern = automaticPatternHeightAdjustmentSettings.WrapPatterns;
  19. for(int stackIndex = 0; stackIndex < segment.NumberOfStacks; ++stackIndex)
  20. {
  21. segment.GetStackByIndex(stackIndex).SetHeight(heightPattern.GetHeightValue(initialHeightValueIndex + stackIndex, wrapPattern));
  22. }
  23. }
  24. public void AdjustHeightForAllSegmentsInPath(List<ObjectPlacementBoxStackSegment> allPathSegments, ObjectPlacementPathAutomaticPatternHeightAdjustmentSettings automaticPatternHeightAdjustmentSettings, ObjectPlacementPathHeightPattern heightPattern)
  25. {
  26. bool wrapPattern = automaticPatternHeightAdjustmentSettings.WrapPatterns;
  27. if(automaticPatternHeightAdjustmentSettings.ApplyPatternsContinuously)
  28. {
  29. int numberOfTraversedStacks = 0;
  30. foreach (ObjectPlacementBoxStackSegment segment in allPathSegments)
  31. {
  32. for (int stackIndex = 0; stackIndex < segment.NumberOfStacks; ++stackIndex)
  33. {
  34. segment.GetStackByIndex(stackIndex).SetHeight(heightPattern.GetHeightValue(numberOfTraversedStacks + stackIndex, wrapPattern));
  35. }
  36. numberOfTraversedStacks += segment.NumberOfStacks;
  37. }
  38. }
  39. else
  40. {
  41. foreach (ObjectPlacementBoxStackSegment segment in allPathSegments)
  42. {
  43. for (int stackIndex = 0; stackIndex < segment.NumberOfStacks; ++stackIndex)
  44. {
  45. segment.GetStackByIndex(stackIndex).SetHeight(heightPattern.GetHeightValue(stackIndex, wrapPattern));
  46. }
  47. }
  48. }
  49. }
  50. #endregion
  51. }
  52. }
  53. #endif