public ShellPuzzle GenerateShellPuzzle(int layers, float minSize, float maxSize) { ShellPuzzle puzzle = new GameObject("Shell Puzzle").AddComponent <ShellPuzzle>(); for (int i = 0; i < layers; i++) { //lerp min to max by i/count float sphereSize = Mathf.Lerp(minSize, maxSize, (float)i / (layers - 1)); //Create layer ShellLayer layer = Instantiate(shellLayerPrefab, puzzle.transform); //fit to size Bounds bounds = new Bounds(puzzle.transform.position, new Vector3(sphereSize, sphereSize, sphereSize)); FitToSpace(layer.transform, layer.gameObject.MakeBoundingBoxForObjectRenderers(), bounds.center, bounds); //Rotate randomly layer.transform.rotation = Random.rotation; //disable layer.gameObject.SetActive(false); //add to list puzzle.shellLayersOrdered.Add(layer); } puzzle.shellLayersOrdered.Last().gameObject.SetActive(true); return(puzzle); }
public void PopLayer(ShellLayer layer) { layer.target.gameObject.SetActive(false); layer.myEffect.gameObject.SetActive(false); float force = 1; layer.leftHalf.AddComponent <Rigidbody>().AddForce(force * Vector3.up, ForceMode.Impulse); layer.rightHalf.AddComponent <Rigidbody>().AddForce(force * Vector3.up, ForceMode.Impulse); StartCoroutine(GenericCoroutines.DoAfterSeconds(() => layer.gameObject.SetActive(false), 2)); if (shellLayersOrdered.IndexOf(layer) == 0) { Debug.Log("Show Prize!"); artDisplay.gameObject.SetActive(true); StartCoroutine(GrowImageAndStopRotating(2.5f)); } else { Debug.Log("Popping a layer"); shellLayersOrdered[shellLayersOrdered.IndexOf(layer) - 1].gameObject.SetActive(true); } }