private void FireWeaponAtTarget() { timeSinceLastShot -= Time.deltaTime; if (!target) { return; } Vector3 dir = target.transform.position - transform.position; float diff = dir.magnitude; //Debug.Log("distance: " + diff + ". AtkRng: " + attackRange); if (diff <= attackRange && timeSinceLastShot <= 0) { sh.SpikeLoudnessDueToAttack(); AudioSource.PlayClipAtPoint(selectedFiringSound, transform.position); selectedFiringSound = SelectSoundFromArray(firingSounds); float zAng = Vector3.SignedAngle(Vector2.up, dir, Vector3.forward); Quaternion rot = Quaternion.Euler(0, 0, zAng); GameObject bullet = Instantiate(weaponPrefab, transform.position + (dir * bulletOffset), rot) as GameObject; bullet.GetComponent <Rigidbody2D>().velocity = weaponSpeed * bullet.transform.up; DamageDealer dd = bullet.GetComponent <DamageDealer>(); dd.SetDamage(weaponDamage); dd.SetAttackSource(gameObject); Destroy(bullet, weaponLifetime); timeSinceLastShot = timeBetweenShots; } }
protected override void ExecuteAttackOnServer() { // Server-side validation of shot. Sufficient time between shots? Enough energy? Perhaps take in client's believed position and allow it // to be the source of the shot as long as its within a certain range of server-true position. if (timeSinceLastAttack < 0) { Debug.Log("execute attack on server"); GameObject bullet = Instantiate(projectilePrefab, weaponSource.position + (weaponSource.up * offset), weaponSource.rotation) as GameObject; bullet.GetComponent <Rigidbody2D>().velocity = bullet.transform.up * weaponSpeed; DamageDealer dd = bullet.GetComponent <DamageDealer>(); dd.Simulated = false; dd.SetDamage(weaponDamage); Destroy(bullet, weaponLifetime); timeSinceLastAttack = timeBetweenAttacks; sh.SpikeLoudnessDueToAttack(); RpcDisplaySimAttackOnClients(); } }