protected virtual IEnumerator Shoot() { while (true) { yield return(_sync()); Alien closestEnemy; if ((closestEnemy = EnemyInRange()) != null) { GameObject newProj; if (GameSession.Instance.isNetworkGame) { newProj = (GameObject)Network.Instantiate(Bullet, BarrelTip, Quaternion.identity, 0); TowerWrapper tower = transform.parent.GetComponent <TowerWrapper>(); tower.mirrorShootAction(); } else { newProj = (GameObject)GameObject.Instantiate(Bullet, BarrelTip, Quaternion.identity); handleShootAnimationSound(); } ProjectileInit(newProj, closestEnemy); yield return(new WaitForSeconds((float)RateOfFire)); } } }
// Update is called once per frame void FixedUpdate() { if (toInitialize) { toInitialize = false; swapTowerSkin(); } Alien closestEnemy; if (GameSession.Instance.isDefender) { if ((closestEnemy = EnemyInRange()) != null) { Vector3 lookDir = closestEnemy.transform.position - transform.position; lookDir -= new Vector3(0, lookDir.y, 0); Quaternion targetRotation = Quaternion.LookRotation(lookDir); transform.parent.rotation = Quaternion.RotateTowards(transform.parent.rotation, targetRotation, Time.deltaTime * rotationSpeed); } } else if (GameSession.Instance.isNetworkGame) { TowerWrapper tower = transform.parent.GetComponent <TowerWrapper>(); if (tower != null && tower.targetView != NetworkViewID.unassigned) { NetworkView view = NetworkView.Find(tower.targetView); if (view == null) // enemy has dieded { return; } closestEnemy = (Alien)view.GetComponent <Alien>(); Vector3 lookDir = closestEnemy.transform.position - transform.position; lookDir -= new Vector3(0, lookDir.y, 0); Quaternion targetRotation = Quaternion.LookRotation(lookDir); transform.parent.rotation = Quaternion.RotateTowards(transform.parent.rotation, targetRotation, Time.deltaTime * rotationSpeed); } if (tower != null && Level != tower.Level) { Level = tower.Level; swapTowerSkin(); } } }