public void DamageEnemy(ActorBase enemy, float amount, Vector3 direction, float forceModifier, bool headshot = false) { if (headshot) { amount *= 1.5f; } enemy.ApplyDamage(amount, direction, forceModifier, headshot); }
public static int Swing(Vector3 where, float damage, float radius, AudioClip clipHit, AudioClip clipMiss, out float recoil) { recoil = -0.2f; ProjectileManager.Instance.DeflectSource = where; ProjectileManager.Instance.DoDeflect = true; ProjectileManager.Instance.DeflectRadius = radius; int aliveCount = BlackboardScript.GetEnemies(where, radius); var clip = aliveCount == 0 ? clipMiss : clipHit; AudioManager.Instance.PlayClipWithRandomPitch(AudioManager.Instance.PlayerAudioSource, clip); for (int i = 0; i < aliveCount; ++i) { int idx = BlackboardScript.Matches[i].Idx; ActorBase enemy = BlackboardScript.Enemies[idx]; enemy.SetSlowmotion(); enemy.ApplyDamage(damage, enemy.transform.position - where, 1.0f, true); } return(aliveCount); }
IEnumerator ThrowCo(Vector3 from, Vector3 to) { shadowRenderer_.enabled = false; var fuseEmission = fuseParticles_.emission; fuseEmission.enabled = true; float length = (to - from).magnitude; float force = Mathf.Min(5.0f, length); float velocityY = 1.0f * force; float downForce = -25.0f; float speed = 5.0f * force; float fuseT0 = Time.time; float fuseT1 = fuseT0 + FuseTime; Vector3 dir = (to - from).normalized; Vector3 pos = from; float offsetY = 0; audioSource_.clip = AudioManager.Instance.AudioData.BombFuseBurn; audioSource_.volume = 0.5f * AudioManager.Instance.MasterVolume; audioSource_.Play(); while (Time.time < fuseT1) { float delta = Time.deltaTime; Vector3 showPos = pos; showPos.y += offsetY; trans_.position = showPos; bombRenderer_.sortingOrder = (Mathf.RoundToInt(trans_.position.y * 100f)); bombMaterial_.SetFloat(flashParamId_, (Mathf.Sin((Time.time * 15) + 1.0f) * 0.5f) * 0.75f); offsetY += velocityY * delta; velocityY += downForce * delta; if (offsetY <= 0) { shadowRenderer_.enabled = true; velocityY = -velocityY * 0.5f; } pos += dir * speed * Time.deltaTime; speed *= 1.0f - (5.0f * delta); yield return(null); } fuseEmission.enabled = false; audioSource_.clip = AudioManager.Instance.AudioData.BombExplode; audioSource_.volume = 1.0f * AudioManager.Instance.MasterVolume; audioSource_.Play(); GameManager.Instance.MakeFlash(pos, Radius * 1.5f); GameManager.Instance.MakePoof(pos, 6, Radius * 1.5f); GameManager.Instance.ShakeCamera(4.0f); int deadCount = BlackboardScript.GetDeadEnemies(pos, Radius); for (int i = 0; i < deadCount; ++i) { int idx = BlackboardScript.Matches[i].Idx; ActorBase enemy = BlackboardScript.DeadEnemies[idx]; enemy.AddForce((enemy.transform.position - pos) * 0.25f); // enemy.Explode(2.0f + Random.value * 2); } int aliveCount = BlackboardScript.GetEnemies(pos, Radius); for (int i = 0; i < aliveCount; ++i) { int idx = BlackboardScript.Matches[i].Idx; ActorBase enemy = BlackboardScript.Enemies[idx]; enemy.ApplyDamage(Damage, enemy.transform.position - pos, 1.0f, true); } for (int i = 0; i < 10; ++i) { Vector2 rnd = RndUtil.RandomInsideUnitCircle() * Radius * 0.5f; Vector3 flamePos = pos; flamePos.x += rnd.x; flamePos.y += rnd.y; GameManager.Instance.EmitFlame(flamePos, Random.value + 0.5f); yield return(null); } // Kill player if very close, else just push float playerDist = BlackboardScript.DistanceToPlayer(pos); if (playerDist < 3.0f) { GameManager.Instance.PlayerScript.AddForce((GameManager.Instance.PlayerTrans.position - pos) * 0.1f); } Hide(); }
void OnCollision(ProjectileManager.Basic projectile, ActorBase other, float damage, Vector3 dir) { other.ApplyDamage(damage, dir, 1.0f, false); }