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); } } } } }
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); } } } }