public void AddHitListener(IHitlistener listener) { if (this.hitListener == null) { this.hitListener = listener; } }
public void Fire(Transform origin, IWeapon weapon, Transform calculationTransform, IHitlistener hitListener) { if (calculationTransform == null) { calculationTransform = origin; } Ray ray = new Ray(calculationTransform.position, calculationTransform.forward); RaycastHit hit; if (Physics.Raycast(ray, out hit, MaxShotLength)) { ShowShot(origin.position, hit.point); var targetCollider = hit.collider.GetComponent <TargetCollider>(); if (targetCollider != null) { Hit tHit = targetCollider.GetOwner <IHittable>().RegisterHit(hit); if (hitListener != null) { hitListener.NotifyHit(tHit, weapon); } } else if (hitListener != null) { hitListener.NotifyHit(Hit.Miss(), weapon); } } else { if (hitListener != null) { hitListener.NotifyHit(Hit.Miss(), weapon); } ShowShot(origin.position, origin.position + origin.forward * MaxShotLength); } }