IEnumerator ShootSeed(MapleCopter copter) { popSound.Play(); leafParticles.transform.position = copter.transform.position; leafParticles.transform.forward = copter.transform.position - transform.position; leafParticles.Emit(50); foreach (Transform t2 in copter.GetComponentsInChildren <Transform>()) { t2.gameObject.layer = LayerMask.NameToLayer("Copter"); } copter.gameObject.layer = LayerMask.NameToLayer("Copter"); Vector3 trajectory = (copter.transform.position - transform.position).normalized; Vector3 lastPos = copter.transform.position; float force = 75 - copter.transform.position.y; float t = 0; float rotSpeed = copter.lefty ? -100 : 100; //SynthSound.i.PlayNote(60); while (t < 1) { Vector3 targetPos = new Vector3(trajectory.x, 0, trajectory.z) * 10f + (Vector3.up * trajectory.y * (Mathf.Cos(t * Mathf.PI)) * (1 - t) * force); copter.transform.position += targetPos * Time.deltaTime; copter.transform.RotateAround(Tree.instance.transform.position, Vector3.up, Time.deltaTime * Mathf.Clamp01(1 - t * 2f) * rotSpeed); copter.transform.right = (lastPos - copter.transform.position); lastPos = copter.transform.position; t += Time.deltaTime * 0.75f; yield return(null); } copter.enabled = true; copter.Drop(); }
IEnumerator PopSeed() { bendSound.PlayOneShot(creaks[Random.Range(0, creaks.Length)]); isCreatingCopter = true; int index = Random.Range(0, treeLeaves.Count); Transform l = treeLeaves[index]; Vector3 originalScale = l.localScale; Vector3 lookDir = (new Vector3(transform.position.x, l.position.y, transform.position.z) - l.position).normalized; if (Vector3.Dot(new Vector3(-lookDir.z, lookDir.y, lookDir.x), mainCam.transform.parent.forward) > Vector3.Dot(new Vector3(lookDir.z, lookDir.y, -lookDir.x), mainCam.transform.parent.forward)) { left = true; } else { left = false; } GameObject copter = Random.Range(0, 100) > 50 ? RightCopter : LeftCopter; GameObject newCopter = Instantiate(copter, l.position, Quaternion.identity); newCopter.transform.up = Random.onUnitSphere; float t = 0; while (Input.GetKey(KeyCode.Space)) { copterCam.transform.forward = newCopter.transform.position - copterCam.transform.position; magnifyMesh.position = l.transform.position - mainCam.transform.forward * 5f; magnifyMesh.rotation = Quaternion.LookRotation(mainCam.transform.forward, mainCam.transform.up); //mainCam.orthographicSize = Mathf.Lerp(mainCam.orthographicSize, copterZoom, Time.deltaTime); l.localScale = Vector3.Lerp(originalScale, new Vector3(originalScale.x, 0.5f, originalScale.z), Mathf.Pow(t, 0.3f)); t += Time.deltaTime * 3; if (t > 0.5f) { mainCam.transform.parent.position = Vector3.SmoothDamp(mainCam.transform.parent.position, new Vector3(transform.position.x, l.position.y + 3f, transform.position.z), ref velocity, 0.3f); lookDir = (new Vector3(transform.position.x, l.position.y, transform.position.z) - l.position).normalized; lookDir = left ? new Vector3(-lookDir.z, lookDir.y, lookDir.x) : new Vector3(lookDir.z, lookDir.y, -lookDir.x); mainCam.transform.parent.forward = Vector3.Lerp(mainCam.transform.parent.forward, lookDir, Time.deltaTime * 3); magnifyMesh.gameObject.SetActive(true); if (instructions.gameObject.activeSelf) { instructions.gameObject.SetActive(false); } } yield return(null); } if (Input.GetKeyUp(KeyCode.Space) && t < 0.5f) { Vector3 curScale = l.localScale; t = 1; magnifyMesh.gameObject.SetActive(false); bendSound.Stop(); while (t > 0) { l.localScale = Vector3.Lerp(originalScale, curScale, t); t -= Time.deltaTime * 2; yield return(null); } isCreatingCopter = false; yield break; } popSound.Play(); timeSinceSpawned = 0; // magnifyMesh.gameObject.SetActive(false); leafParticles.transform.position = l.position; leafParticles.transform.forward = l.position - transform.position; leafParticles.Emit(50); isPilotingCopter = true; curCopter = newCopter.GetComponent <MapleCopter>(); // curCopter.enabled = false; foreach (Transform t2 in curCopter.GetComponentsInChildren <Transform>()) { t2.gameObject.layer = LayerMask.NameToLayer("Copter"); } curCopter.gameObject.layer = LayerMask.NameToLayer("Copter"); curCopter.isPlayer = true; Vector3 trajectory = (l.position - transform.position).normalized; Vector3 lastPos = newCopter.transform.position; float force = 75 - l.position.y; t = 0; float rotSpeed = curCopter.lefty ? -100 : 100; //SynthSound.i.PlayNote(60); while (t < 1) { mainCam.nearClipPlane = Mathf.Lerp(mainCam.nearClipPlane, clipPlaneZoom, t); Vector3 targetPos = new Vector3(trajectory.x, 0, trajectory.z) * 10f + (Vector3.up * trajectory.y * (Mathf.Cos(t * Mathf.PI)) * (1 - t) * force); newCopter.transform.position += targetPos * Time.deltaTime; newCopter.transform.RotateAround(Tree.instance.transform.position, Vector3.up, Time.deltaTime * Mathf.Clamp01(1 - t * 2f) * rotSpeed); newCopter.transform.right = (lastPos - newCopter.transform.position); lastPos = newCopter.transform.position; l.localScale = Vector3.Lerp(l.localScale, originalScale, t); t += Time.deltaTime * 0.75f; yield return(null); } curCopter.enabled = true; isCreatingCopter = false; curCopter.Drop(); //curCopter.GetComponentInChildren<ParticleSystem>().Play(); TargetCopter(); }