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