private void OnDamageEvent(WeaponDamageEvent evt)
	{
		if(evt.Damage.hit.target == Entity)
		{
			CurrentHealth -= evt.Damage.amount;
		}
	}
	private void OnDamageEvent(WeaponDamageEvent evt)
	{
		GameObject bloodParticle = Instantiate(bloodParticlePrefab);
		bloodParticle.transform.SetParent(transform);

		bloodParticle.transform.position = evt.Damage.hit.point;
		bloodParticle.transform.rotation = Quaternion.FromToRotation(transform.forward, evt.Damage.hit.normal) * transform.rotation;
	}
	private void OnDamageReceived(WeaponDamageEvent evt)
	{
		if(Time.time - lastTime >= delay)
		{
			lastTime = Time.time;
			audioManager.PlayRandomAt(damageSounds, Entity.transform.position);
		}		
	}
	private void OnDamageReceived(WeaponDamageEvent evt)
	{
		if(!dead && health.CurrentHealth <= 0)
		{
			dead = true;
			
			EntityDiedEvent diedEvent = new EntityDiedEvent(evt.Damage, Entity);

			GlobalEvents.Invoke(diedEvent);
			Entity.Events.Invoke(diedEvent);

			// Mark the entity as dead
			Entity.AddTag("Dead");
		}
	}
Exemple #5
0
	protected virtual void FixedUpdate()
	{
		if(firing)
		{
			foreach(WeaponComponent component in components)
			{
				component.TryFire();
			}

			if(CanFire())
			{
				Vector3 direction = GetAimDirection();
				HitInfo hit = GetHitInfo(direction);

				foreach(WeaponComponent component in components)
				{
					component.OnFire(hit);
				}

				GlobalEvents.Invoke(new WeaponFireEvent(this, hit));

				if(hit.target != null)
				{
					if(hit.target.GetComponentInChildren<Damagable>() != null)
					{
						DamageInfo damage = new DamageInfo(hit, GetDamage(hit));
						WeaponDamageEvent damageEvent = new WeaponDamageEvent(this, damage);

						foreach(WeaponComponent component in components)
						{
							component.OnDamage(damage);
						}

						GlobalEvents.Invoke(damageEvent);
						hit.target.Events.Invoke(damageEvent);
					}
				}
			}
		}
	}
	private void OnWeaponDamageEvent(WeaponDamageEvent evt)
	{
		rigidbody.AddForce(-evt.Hit.normal * 7, ForceMode.Impulse);
	}