﻿using UnityEngine;
using System.Collections;
using UnityStandardAssets.Characters.ThirdPerson;

public class AI : MonoBehaviour {

    public GameObject enemy;
    public GameObject weapon;
    public int hearRange = 25;
    public float accuracy = 0.8f;

    private float timer = 0;
    private bool alive = true;
    private bool enemyInVision = false;

    // Use this for initialization
    void Start () {
        GetComponent<AICharacterControl>().SetTarget(transform);
    }

    // Update is called once per frame
    void Update()
    {
        if (alive)
        {
            if (timer > 0)
            {
                timer -= Time.deltaTime;
            }

            Vector3 direction;
            direction = (enemy.transform.position - transform.position).normalized;
            direction.y = 0;

            RaycastHit hit;
            if (Physics.Raycast(new Vector3(transform.position.x, transform.position.y + 0.5f, transform.position.z), direction, out hit))
            {
                if (hit.collider.gameObject == enemy)
                {
                    enemyInVision = true;
                    GetComponent<AICharacterControl>().SetTarget(transform);
                    transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(direction), 10);
                    RaycastHit shoot;
                    if (Physics.Raycast(new Vector3(transform.position.x, transform.position.y + 0.5f, transform.position.z), transform.forward, out shoot))
                    {
                        if (hit.collider.gameObject == enemy && timer <= 0 && GetComponent<Rigidbody>().velocity.x == 0 && GetComponent<Rigidbody>().velocity.z == 0)
                        {
                            weapon.SendMessage("Shoot");
                            if (Random.value > accuracy)
                            {
                                enemy.GetComponent<PlayerGUI>().Damage(weapon.GetComponent<Weapon>().damage);
                            }
                            timer = Random.Range(0.25f, 1);
                        }
                    }
                }
                else
                {
                    enemyInVision = false;
                }
            }
        }
    }
    public void setAlive(bool set)
    {
        alive = set;
    }
    public void Hear(Transform loc)
    {
        if (Vector3.Distance(loc.position, transform.position) < hearRange && alive && !enemyInVision)
        {
            GetComponent<AICharacterControl>().SetTarget(loc);
        }
    }
}