Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Fighter : MonoBehaviour, IAction
- {
- [SerializeField] float weaponRange = 2f;
- [SerializeField] Transform target;
- [SerializeField] ParticleSystem muzzleFlash;
- [SerializeField] float range;
- [SerializeField] float damage;
- [SerializeField] GameObject hitEffect;
- [SerializeField] AudioClip shooting;
- Coroutine trigger;
- bool check;
- public Health targetPlayer;
- Health health;
- void Start()
- {
- health = GetComponent<Health>();
- check = false;
- Debug.DrawRay(this.transform.position, this.transform.forward, Color.red, 30);
- }
- void Update()
- {
- if (target == null) return;
- if (!GetIsInRange())
- {
- GetComponent<Mover>().MoveTo(target.position);
- }
- else
- {
- GetComponent<Mover>().Cancel();
- if (!health.IsDead())
- {
- AttackBehaviour();
- }
- }
- }
- private bool GetIsInRange()
- {
- return Vector3.Distance(transform.position, target.position) < weaponRange;
- }
- public bool CanAttack(GameObject combatTarget)
- {
- if (combatTarget == null) { return false; }
- targetPlayer = combatTarget.GetComponent<Health>();
- return targetPlayer != null && !targetPlayer.IsDead();
- }
- private void AttackBehaviour()
- {
- transform.LookAt(target.transform);
- if (trigger == null)
- {
- trigger = StartCoroutine(TriggerAttack());
- }
- }
- IEnumerator TriggerAttack()
- {
- do
- {
- yield return new WaitForSeconds(1);
- PlayMuzzleFlash();
- Process();
- } while (GetIsInRange());
- }
- private void PlayMuzzleFlash()
- {
- muzzleFlash.Play();
- AudioSource.PlayClipAtPoint(shooting, Camera.main.transform.position);
- }
- private void Process()
- {
- RaycastHit hit;
- if (Physics.Raycast(this.transform.position, this.transform.forward, out hit, range))
- {
- Debug.Log("I hit this thing: " + hit.transform.name);
- targetPlayer = hit.transform.GetComponent<Health>();
- if (targetPlayer == null) return;
- targetPlayer.PlayerTakeDamage(damage);
- }
- else
- {
- return;
- }
- }
- public void Attack(GameObject combatTarget)
- {
- GetComponent<ActionSchedular>().StartAction(this);
- target = combatTarget.transform;
- }
- public void Cancel()
- {
- target = null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement