public int fireWeapon() { Debug.Log(upgradeStates[0] + " " + upgradeStates[1] + " " + upgradeStates[2]); Debug.Log(weaponRateOfFire() + " " + weaponDamage() + " " + weaponCapacity()); /*if(fireTimer.timerTick()){ * fireTimer.TimerValue = weaponRateOfFire(); * fireTimer.resetTimer(); */ //if(fireTimer.timerTick()) if (canShoot) { // fireTimer.TimerValue = weaponRateOfFire(); // fireTimer.resetTimer(); StartCoroutine(Shoot(weaponRateOfFire())); audio.PlayOneShot(fireExplosion); GameObject newShot = (GameObject)Object.Instantiate(Resources.Load(ammoType)); newShot.tag = "PlayerProjectile"; newShot.layer = LayerMask.NameToLayer("PlayerProjectile"); Projectile_Base script = newShot.GetComponent <Projectile_Base>(); script.setProjectileDamage(weaponDamage()); newShot.transform.position = barrelEnd.position; newShot.transform.rotation = barrelEnd.rotation; return(1); } else { return(0); } }
void SnapProjectileDirectionXZ(Projectile_Base p, float threshold) { Vector3 d = p.MoveDirection; if (Vector3.Angle(d, Vector3.left) < threshold) { d = Vector3.left; SnapProjectilePositionZ(p); } if (Vector3.Angle(d, Vector3.right) < threshold) { d = Vector3.right; SnapProjectilePositionZ(p); } if (Vector3.Angle(d, Vector3.back) < threshold) { d = Vector3.back; SnapProjectilePositionX(p); } if (Vector3.Angle(d, Vector3.forward) < threshold) { d = Vector3.forward; SnapProjectilePositionX(p); } if (d != p.MoveDirection) { p.PointInDirection(d); p.MoveDirection = d; } }
override protected Projectile_Base FireProjectile(Vector3 dir) { Projectile_Base p = base.FireProjectile(dir); MoveProjectileToDropPosition(p); return(p); }
void AttackMultipleEnemies(int amount) { List <Enemy> enemyInRange = radarSystem.GetEnemyList(); for (int i = 0; i < enemyInRange.Count; i++) { float dist1 = (enemyInRange[i].transform.position - transform.position).sqrMagnitude; for (int j = i + 1; j < enemyInRange.Count; j++) { float dist2 = (enemyInRange[j].transform.position - transform.position).sqrMagnitude; if (dist1 > dist2) { Enemy temp = enemyInRange[i]; enemyInRange[i] = enemyInRange[j]; enemyInRange[j] = temp; } } } for (int i = 0; i < amount; i++) { if (i < enemyInRange.Count) { Projectile_Base projectile = EntityManager.S.GetEntity(projectileType) as Projectile_Base; projectile.transform.position = transform.position; projectile.transform.rotation = transform.rotation; // becuase the tower is already looking at the enemy projectile.FireProjectile(enemyInRange[i].transform, cur_damage, cur_attkRange); } } SetAnimation_Attack(); }
virtual protected Projectile_Base FireProjectile(Vector3 dir) { GameObject g = Instantiate(_projectilePrefab) as GameObject; Projectile_Base p = g.GetComponent <Projectile_Base>(); p.onProjectileWillBeDestroyed_Callback = OnProjectileWillBeDestroyed; Transform t = p.transform; t.SetParent(CommonObjects.ProjectilesContainer); Vector3 offset = p.Length * 0.5f * dir; t.position = MuzzlePosition + offset; p.PointInDirection(dir); p.MoveDirection = dir; if (_snapFireDirectionToXZ) { SnapProjectileDirectionXZ(p, SNAP_PROJECTILE_DIR_THRESHOLD); } _firedProjectiles.Add(p); return(p); }
public override void Attack(BaseGameEntity target) { Projectile_Base projectile = EntityManager.S.GetEntity(projectileType) as Projectile_Base; projectile.transform.position = transform.position; projectile.transform.rotation = transform.rotation; // becuase the tower is already looking at the enemy projectile.FireProjectile(target.transform, cur_damage, cur_attkRange); SetAnimation_Attack(); }
override protected void OnProjectileWillBeDestroyed(Projectile_Base sender) { base.OnProjectileWillBeDestroyed(sender); if (spawnFlame) { DoSpawnFlame(sender.transform.position); } }
IEnumerator StartCharge() { lookAtTarget = false; audioSource.Play(); charge1.Play(); charge2.Play(); float endTime = Time.time + chargeTime; while (true) { if (endTime < Time.time) { break; } yield return(null); } charge1.Stop(); charge2.Stop(); Enemy target = radarSystem.GetTarget(); if (target != null) { fire.Play(); SetAnimation_Attack(); endTime = Time.time + laserDuration; while (true) { if (endTime < Time.time) { break; } Projectile_Base projectile = EntityManager.S.GetEntity(projectileType) as Projectile_Base; Vector3 pos = transform.position; pos.y += 0.5f; // increase Y pos, so the laser is above the ground projectile.transform.position = pos; projectile.transform.rotation = transform.rotation; // becuase the tower is already looking at the enemy projectile.FireProjectile(target.transform, cur_damage / laserBulletsPerAttack, cur_attkRange); // Laser projectile doesn't use target, so we don't need to check null yield return(new WaitForSeconds(laserFrequency)); } } else { audioSource.Stop(); } yield return(new WaitForSeconds(chargeTime)); audioSource.Stop(); lookAtTarget = true; }
void MoveProjectileToDropPosition(Projectile_Base p) { float actualDropDistance = dropDistance; if (modifyDropDistIfRaycastHit) { float halfLength = p.Length * 0.5f; Ray ray = new Ray(p.transform.position, p.MoveDirection); RaycastHit hitInfo; bool hit = Physics.Raycast(ray, out hitInfo, dropDistance + halfLength); actualDropDistance = hit ? (hitInfo.distance - halfLength) : dropDistance; } p.transform.position += p.MoveDirection * actualDropDistance; }
virtual protected void OnProjectileWillBeDestroyed(Projectile_Base sender) { _firedProjectiles.Remove(sender); }
void SnapProjectilePositionZ(Projectile_Base p) { Transform t = p.transform; t.SetZ(Mathf.Floor(t.position.z + 0.5f)); }