EyeBossManager.Beam C# (CSharp) Method

Beam() private method

private Beam ( ) : IEnumerator
return IEnumerator
    IEnumerator Beam()
    {
        while (true) {
            if (inPlane) {
                // First open the iris shield
                networkView.RPC("irisShieldAnimation", RPCMode.All, 0.5f, 0.0f);
                yield return new WaitForSeconds(animation["Irishield"].length);
                irisOpen = true;
                int targetPlayer = PickTarget();
                if (targetPlayer != -1) {
                    character = GameObject.Find("Character" + targetPlayer);

                    // Then instantiate the two beam prefabs at the correct position, just in front of the cornea
                    chargingBeam = (ParticleSystem)Network.Instantiate(chargingBeamPrefab, beamSpawn.transform.position, Quaternion.identity, 100);
                    chargedBeam = (ParticleSystem)Network.Instantiate(chargedBeamPrefab, beamSpawn.transform.position, Quaternion.identity, 100);
                    networkView.RPC("modifyNames", RPCMode.All, chargingBeam.name, chargedBeam.name);

                    // Play the charging animation on all of the clients
                    networkView.RPC("chargingAnimation", RPCMode.All);

                    // Play charging noise on all clients
                    networkView.RPC("PlayBossFire", RPCMode.All);

                    chargingBeam.Play();
                    //while (chargingBeam.isPlaying) {
                    //    yield return new WaitForSeconds(0.1f);
                    //}
                    yield return new WaitForSeconds(chargingBeam.duration);
                    Vector3 aimPos = character.transform.position;
                    iTween.LookTo(chargingBeam.gameObject, aimPos, 2.0f);
                    iTween.LookTo(gameObject, aimPos, 2.0f);
                    while (chargingBeam.isPlaying) {
                        yield return new WaitForSeconds(0.1f);
                    }
                    chargedBeam.transform.LookAt(aimPos, Vector3.forward);

                    networkView.RPC("chargedAnimation", RPCMode.All);
                    chargedBeam.Play();
                    beamCollider = (GameObject)Network.Instantiate(beamColliderPrefab, aimPos, Quaternion.identity, 100);
                    beamCollider.name = "BeamCollider";
                    EnemyBulletSettings weaponSettings = beamCollider.GetComponent<EnemyBulletSettings>();
                    weaponSettings.damage = beamPower;

                    networkView.RPC("chargedAnimation", RPCMode.All);
                    chargedBeam.Play();
                    while (chargedBeam.isPlaying) {
                        yield return new WaitForSeconds(0.1f);
                    }

                    Network.Destroy(chargingBeam.gameObject);
                    Network.Destroy(chargedBeam.gameObject);
                    Network.Destroy(beamCollider);
                    iTween.LookUpdate(gameObject, Vector3.left, 2);
                    //iTween.LookTo(gameObject, Vector3.left, 5);
                    networkView.RPC("irisShieldAnimation", RPCMode.All, -0.5f, animation["Irishield"].length);
                    yield return new WaitForSeconds(animation["Irishield"].length * 3f);
                    irisOpen = false;
                }
            }
            else yield return new WaitForSeconds(1f);
        }
    }