private void ApplyIndividualObstacleData(ObstacleData mainData, ObstacleData.ObstacleSide side,
                                          ObstacleDataContainerSide sideData)
 {
     mainData.SetupObstacle(side, sideData.scale,
                            sideData.lockedScaleSide, sideData.boundsLocation,
                            sideData.lockedAxis, sideData.basedOnHeightOnly);
 }
        protected override void SetScale(ref ObstacleDataContainerSide leftSide, ref ObstacleDataContainerSide rightSide)
        {
            float firstScale  = Random.Range(MINIMUM_SCALE, 1f - MINIMUM_OBSTACLE_GAP - MINIMUM_SCALE);
            float secondScale = (1f - firstScale) - MINIMUM_OBSTACLE_GAP;

            if (Random.value >= 0.5f)
            {
                leftSide.scale  = new Vector2(firstScale, OBSTACLE_HEIGHT);
                rightSide.scale = new Vector2(secondScale, OBSTACLE_HEIGHT);
            }
            else
            {
                leftSide.scale  = new Vector2(secondScale, OBSTACLE_HEIGHT);
                rightSide.scale = new Vector2(firstScale, OBSTACLE_HEIGHT);
            }
        }
 protected abstract void SetScale(ref ObstacleDataContainerSide leftSide, ref ObstacleDataContainerSide rightSide);