示例#1
0
 void OnEnable()
 {
     if (regenerateAfterActive)
     {
         if (Random.Range(0, 100) <= placmentPercentage)
         {
             if (autoGetPooler && ObjectObject == null)
             {
                 ObjectObject = FindObjectsOfType <ObjectPooler> ().First(o => o.name == objectPoolerName);
             }
             if (ObjectObject != null)
             {
                 ObjectPlacerSet selectedSet = placerSets.Where(p => p.active).ToList() [Random.Range(0, placerSets.Count(p => p.active))];
                 if (placeAllActiveSets)
                 {
                     for (int i = 0; i < placerSets.Count(); i++)
                     {
                         if (addRowParents)
                         {
                             GameObject newRowObject = new GameObject("Row#" + i);
                             if (attachedToParent)
                             {
                                 newRowObject.transform.parent = gameObject.transform;
                             }
                             CalculateAndPlaceObjects(placerSets [i], i, newRowObject.transform);
                         }
                         else
                         {
                             CalculateAndPlaceObjects(placerSets [i], i);
                         }
                     }
                 }
                 else
                 {
                     CalculateAndPlaceObjects(selectedSet);
                 }
             }
         }
     }
 }
示例#2
0
        void CalculateAndPlaceObjects(ObjectPlacerSet placerset, int row = 0, Transform parent = null)
        {
            if (!this.isActiveAndEnabled)
            {
                return;
            }

            if (placerset == null)
            {
                return;
            }

            if (placerSets.Count() == 0)
            {
                return;
            }


            float x = (colliderRadious + placerset.marginRadious / 2) * Mathf.Cos(Mathf.Deg2Rad * 0);
            float y = (colliderRadious + placerset.marginRadious / 2) * Mathf.Sin(Mathf.Deg2Rad * 0);

            x += myCenter.x;
            if (placerset.oriantation == PathOriantation.Y_Axes)
            {
                y += myCenter.y;
            }
            else
            {
                y += myCenter.z;
            }
            float spaceBetween = 360.0f / placerset.numberOfObject;

            if (autoObjectSize)
            {
                ObjectObjectSize = (spaceBetween * ((placerset.marginRadious + colliderRadious) / 3)) * Mathf.Deg2Rad;
            }
            Sprite sp = null;

            if (ObjectObject != null)
            {
                var spr = ObjectObject.pooledObject.GetComponentInChildren <SpriteRenderer> ();
                if (spr != null)
                {
                    sp = spr.sprite;
                    if (autoObjectSize)
                    {
                        ObjectObjectSize = Mathf.Max(sp.bounds.extents.x, sp.bounds.extents.y);
                    }
                }
            }

            for (int i = 0; i < placerset.numberOfObject; i++)
            {
                float angle = (placerset.startingAngle + (i * spaceBetween + i * placerset.spaceing));
                if (placerset.pathType == ObjectPathType.line)
                {
                    angle = (placerset.startingAngle + (i * spaceBetween));
                    if (angle >= 0 && angle < 90)
                    {
                        angle = 0;
                    }
                    if (angle >= 90 && angle < 180)
                    {
                        angle = 90;
                    }
                    if (angle >= 180 && angle < 270)
                    {
                        angle = 180;
                    }
                    if (angle >= 270 && angle < 360)
                    {
                        angle = 270;
                    }
                }

                if (angle >= 0 && angle <= 180)
                {
                    angle += placerset.zeroTo180Padding;
                }
                if (angle >= 180 && angle <= 360)
                {
                    angle += placerset.oneeightyTo360Padding;
                }
                if (angle >= 90 && angle <= 270)
                {
                    angle += placerset.ninetyTo270Padding;
                }
                if ((angle >= 270 && angle <= 360) || (angle >= 0 && angle <= 90))
                {
                    angle += placerset.twoseventyTo90Padding;
                }

                float angleInDeg = angle;
                angle *= Mathf.Deg2Rad;

                float ObjectObjectSizeDeg = (ObjectObjectSize * Mathf.Rad2Deg) + placerset.fineTuneRemovalP;

                if (placerset.clampAfter360 && angleInDeg > 360)
                {
                    continue;
                }
                if (placerset.clampAfter180 && angleInDeg > 180)
                {
                    continue;
                }
                if (placerset.clampAfter90 && angleInDeg > 90)
                {
                    continue;
                }
                if (placerset.clampAfter270 && angleInDeg > 270)
                {
                    continue;
                }
                if (placerset.clampBefore0 && angleInDeg < 0)
                {
                    continue;
                }
                if (placerset.endingAngle > 0 && angleInDeg > placerset.endingAngle)
                {
                    continue;
                }

                if (angleInDeg > 360)
                {
                    angleInDeg = angleInDeg % 360;
                }
                if (angleInDeg < 0)
                {
                    angleInDeg = 360 - (Mathf.Abs(angleInDeg) % 360);
                }
                if (placerset.removeEastWest && ((angleInDeg >= 0.0f - ObjectObjectSizeDeg - placerset.fineTuneRemovalN && angleInDeg <= 0.0f + ObjectObjectSizeDeg + placerset.fineTuneRemovalP) ||
                                                 (angleInDeg >= 180.0f - ObjectObjectSizeDeg - placerset.fineTuneRemovalN && angleInDeg <= 180.0f + ObjectObjectSizeDeg + placerset.fineTuneRemovalP) ||
                                                 (angleInDeg >= 360.0f - ObjectObjectSizeDeg - placerset.fineTuneRemovalN && angleInDeg <= 360.0f + ObjectObjectSizeDeg + placerset.fineTuneRemovalP)))
                {
                    continue;
                }
                if (placerset.removeNorthSouth && ((angleInDeg >= 90.0f - ObjectObjectSizeDeg - placerset.fineTuneRemovalN && angleInDeg <= 90.0f + ObjectObjectSizeDeg + placerset.fineTuneRemovalP) ||
                                                   (angleInDeg >= 270.0f - ObjectObjectSizeDeg - placerset.fineTuneRemovalN && angleInDeg <= 270.0f + ObjectObjectSizeDeg + placerset.fineTuneRemovalP)))
                {
                    continue;
                }

                if (placerset.removeTopSide && (angleInDeg >= 45.0f - ObjectObjectSizeDeg - placerset.fineTuneRemovalN && angleInDeg <= 135.0f + ObjectObjectSizeDeg + placerset.fineTuneRemovalP))
                {
                    continue;
                }
                if (placerset.removeBottomSide && (angleInDeg >= 180 + 45.0f - ObjectObjectSizeDeg - placerset.fineTuneRemovalN && angleInDeg <= 270 + 45.0f + ObjectObjectSizeDeg + placerset.fineTuneRemovalP))
                {
                    continue;
                }
                if (placerset.removeLeftSide && (angleInDeg >= 135.0f - ObjectObjectSizeDeg - placerset.fineTuneRemovalN && angleInDeg <= 225.0f + ObjectObjectSizeDeg + placerset.fineTuneRemovalP))
                {
                    continue;
                }
                if (placerset.removeRightSide && (angleInDeg >= 270 + 45.0f - ObjectObjectSizeDeg - placerset.fineTuneRemovalN && angleInDeg <= 360.0f + ObjectObjectSizeDeg + placerset.fineTuneRemovalP))
                {
                    continue;
                }
                if (placerset.removeRightSide && (angleInDeg >= 0.0f - ObjectObjectSizeDeg - placerset.fineTuneRemovalN && angleInDeg <= 45.0f + ObjectObjectSizeDeg + placerset.fineTuneRemovalP))
                {
                    continue;
                }

                if (placerset.pathType == ObjectPathType.Circle)
                {
                    x = ((colliderRadious + placerset.marginRadious / 2) - placerset.bendingXOffset) * Mathf.Cos(angle);
                    y = ((colliderRadious + placerset.marginRadious / 2) - placerset.bendingYOffset) * Mathf.Sin(angle);
                }
                else if (placerset.pathType == ObjectPathType.Box)
                {
                    x = ((colliderRadious + placerset.marginRadious / 2) + ((colliderRadious + placerset.marginRadious / 2) / 100 * 40f) - placerset.bendingXOffset) * Mathf.Cos(angle);
                    y = ((colliderRadious + placerset.marginRadious / 2) + ((colliderRadious + placerset.marginRadious / 2) / 100 * 40f) - placerset.bendingYOffset) * Mathf.Sin(angle);
                    x = Mathf.Clamp(x, -(colliderRadious + placerset.marginRadious / 2), (colliderRadious + placerset.marginRadious / 2));
                    y = Mathf.Clamp(y, -(colliderRadious + placerset.marginRadious / 2), (colliderRadious + placerset.marginRadious / 2));
                }
                else if (placerset.pathType == ObjectPathType.line)
                {
                    float spaceInLine = (i % (placerset.numberOfObject / 4)) * (placerset.spaceing + (ObjectObjectSize * 2));
                    x = ((spaceInLine + colliderRadious + placerset.marginRadious / 2) - placerset.bendingXOffset) * Mathf.Cos(angle);
                    y = ((spaceInLine + colliderRadious + placerset.marginRadious / 2) - placerset.bendingYOffset) * Mathf.Sin(angle);
                }

                x += myCenter.x;
                if (placerset.oriantation == PathOriantation.Y_Axes)
                {
                    y += myCenter.y;
                }
                else
                {
                    y += myCenter.z;
                }

                if (ObjectObject != null)
                {
                    GameObject newObject;
                    // if there is a custom object pooler for the place set then use that instead of default one
                    if (placerset.CustomObjectPooler == null)
                    {
                        newObject = ObjectObject.GetPooledObject();
                    }
                    else
                    {
                        newObject = placerset.CustomObjectPooler.GetPooledObject();
                    }

                    newObject.name = newObject.name.Replace("(Clone)", "") + "-Row(" + row + ")-Cell(" + i + ")";
                    //newObject.transform.position = new Vector3 (x, y, myCenter.z);
                    if (placerset.oriantation == PathOriantation.Y_Axes)
                    {
                        newObject.transform.position = new Vector3(x, y, myCenter.z) + placerset.localOffset;
                    }
                    else
                    {
                        newObject.transform.position = new Vector3(x, myCenter.y, y) + placerset.localOffset;
                    }

                    newObject.SetActive(true);
                    //		Camera2DPerspectiveMove perspectiveCamera = newObject.GetComponent<Camera2DPerspectiveMove> ();
                    //		if (perspectiveCamera != null) {
                    //		perspectiveCamera.ResetCameraLocation ();
                    //}
                    if (parent == null)
                    {
                        parent = gameObject.transform;
                    }
                    newObject.transform.SetParent(parent);
                    //newObject.transform.SetParent (gameObject.transform);
                    if (!attachedToParent)
                    {
                        newObject.transform.SetParent(null);
                    }
                }
            }
        }