private void CheckCollision(Vector3 position) { RaycastHit hit; float dist = Vector3.Distance(Transform.position, position); Vector3 direction = Transform.position - position; Ray ray = new Ray(position, direction); if (!Physics.Raycast(ray, out hit, dist, _targetMask)) { return; } Quaternion rot = Quaternion.FromToRotation(Vector3.forward, hit.normal); Vector3 pos = hit.point; Utility.IEntity affectedEntity = CheckBulletCollision(hit.collider); if (affectedEntity != null) { OnBulletHit(); OnTargetHit(affectedEntity); } OnBulletDestroy(hit, true); }
protected override void OnTargetHit(Utility.IEntity affectedEntity) { affectedEntity.ModifyHealth(_damage); if (Random.Range(0.0f, 1.0f) <= _impactChance) { affectedEntity.ApplyForce(Transform.forward * ImpactPower); } }
private bool IsEntityAffected(Utility.IEntity hittedEntity) { for (int i = 0; i < _affectedEntities.Count; i++) { if (_affectedEntities[i].Id == hittedEntity.Id) { return(true); } } return(false); }
protected override void OnTriggerEnter(Collider other) { Utility.IEntity affectedEntity = CheckBulletCollision(other); if (affectedEntity != null) { OnBulletHit(); OnTargetHit(affectedEntity); } OnBulletDestroy(other, true); }
protected override void OnTriggerEnter(Collider other) { Utility.IEntity affectedEntity = CheckBulletCollision(other); if ((affectedEntity == null) || IsEntityAffected(affectedEntity)) { return; } OnBulletHit(); OnTargetHit(affectedEntity); _affectedEntities.Add(affectedEntity); }
protected override void OnTargetHit(Utility.IEntity affectedEntity) { base.OnTargetHit(affectedEntity); affectedEntity.ApplyForce(Transform.forward * _impactPower); }
protected virtual void OnTargetHit(Utility.IEntity affectedEntity) { affectedEntity.ModifyHealth(_damage); }