Esempio n. 1
0
 void ChangeTarget(Transform t)  //called when tower dies
 {
     isIdle      = true;
     isAttacking = false;
     isWalking   = false;
     kingAnimator.ResetTrigger("moveTrigger");
     kingAnimator.ResetTrigger("attackTrigger");
     kingAnimator.SetTrigger("idleTrigger");
     if (IsTargetPresent(t))
     {
         if (currentTarget == t)
         {
             attack = false;
             entityLL.Remove(FindFromTargets(t));
             currentTarget = null;
             if (entityLL.Count > 0)
             {
                 currentTarget = entityLL.First.Value.GetTransfrom();
                 agent.SetDestination(currentTarget.position);
                 attack = true;
             }
         }
         else
         {
             entityLL.Remove(FindFromTargets(t));
             currentState = KingStates.IDLE;
         }
     }
     else
     {
         Debug.LogError("Couldn't change target as the previous target is not getting removed");
     }
 }
Esempio n. 2
0
 protected override void SetMyProperties()
 {
     mainCamera   = Camera.main;
     health       = kingHealth;
     currentState = KingStates.IDLE;
     agent        = GetComponent <NavMeshAgent>();
     kingAnimator = GetComponent <Animator>();
 }
Esempio n. 3
0
 protected override void SetMyProperties()
 {
     mainCamera = Camera.main;
     health = kingHealth;
     currentState = KingStates.IDLE;
     agent = GetComponent<NavMeshAgent>();
     kingAnimator = GetComponent<Animator>();
 }
Esempio n. 4
0
 void OnTriggerEnter(Collider col)
 {
     if (col.gameObject.tag == "TowerBase")
     {
         entityLL.AddLast(new MyTargets(col.transform.parent.transform, true, myFirstName));
         Entity defenseEntity = entityLL.Last.Value.GetTransfrom().GetComponent <Entity>();
         defenseEntity.OnDeath += ChangeTarget;
         //targets.AddLast(col.gameObject.transform);
         if (col.gameObject.transform.parent.tag == "BlockBarricade")
         {
             currentTarget = entityLL.Last.Value.GetTransfrom();
             agent.SetDestination(this.transform.position);
             currentState = KingStates.ATTACK;
             attack       = true;
         }
         else if (currentTarget == null && (currentState == KingStates.IDLE || currentState == KingStates.WALK))
         {
             currentTarget = entityLL.First.Value.GetTransfrom();
             currentState  = KingStates.ATTACK;
             attack        = true;
         }
     }
 }
Esempio n. 5
0
    // Update is called once per frame
    void Update()
    {
        healthSlider.GetComponent <Image>().fillAmount = health / kingHealth;
        // movement
        if (Input.GetMouseButtonDown(0) && !UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())//on mouse click go to destination
        {
            Vector3 clickPos = Input.mousePosition;
            Ray     ray      = mainCamera.ScreenPointToRay(clickPos);
            Debug.DrawRay(ray.origin, ray.direction * 10, Color.red);

            RaycastHit rayhit;
            if (Physics.Raycast(ray.origin, ray.direction * 10000, out rayhit, 5000, pathLayerMask))
            {
                Vector3 final = rayhit.point;
                currentState = KingStates.WALK;
                agent.SetDestination(final + Vector3.up * 0.4f);
                if (!isWalking)
                {
                    isAttacking = false;
                    isIdle      = false;
                    isWalking   = true;
                    kingAnimator.ResetTrigger("idleTrigger");
                    kingAnimator.ResetTrigger("attackTrigger");
                    kingAnimator.SetTrigger("moveTrigger");
                }
            }
        }

        // if destination reached and there is target in range(in targets linked list) then attack else idle
        if (currentState == KingStates.WALK && this.transform.position == agent.destination)
        {
            if (currentTarget != null)
            {
                currentState = KingStates.ATTACK;
                agent.SetDestination(currentTarget.position);
            }
            else if (entityLL.Count > 0)
            {
                currentState  = KingStates.ATTACK;
                currentTarget = entityLL.First.Value.GetTransfrom();
                agent.SetDestination(currentTarget.position);
            }
            else
            {
                currentState = KingStates.IDLE;
            }
        }

        //shoot at regular interval
        if (attack && currentTarget != null)
        {
            if (Time.time > lastShootTime + timeBetweenShoots)
            {
                lastShootTime = Time.time;
                Shoot();
            }
            else
            {
            }
        }

        if (currentState == KingStates.IDLE)
        {
            if (!isIdle)
            {
                isIdle      = true;
                isAttacking = false;
                isWalking   = false;
                kingAnimator.ResetTrigger("moveTrigger");
                kingAnimator.ResetTrigger("attackTrigger");
                kingAnimator.SetTrigger("idleTrigger");
            }
        }
    }
Esempio n. 6
0
 void OnTriggerEnter(Collider col)
 {
     if (col.gameObject.tag == "TowerBase")
     {
         entityLL.AddLast(new MyTargets(col.transform.parent.transform,true,myFirstName));
         Entity defenseEntity = entityLL.Last.Value.GetTransfrom().GetComponent<Entity>();
         defenseEntity.OnDeath += ChangeTarget;
         //targets.AddLast(col.gameObject.transform);
         if (col.gameObject.transform.parent.tag == "BlockBarricade")
         {
             currentTarget = entityLL.Last.Value.GetTransfrom();
             agent.SetDestination(this.transform.position);
             currentState = KingStates.ATTACK;
             attack = true;
         }
         else if(currentTarget == null && (currentState == KingStates.IDLE || currentState == KingStates.WALK))
         {
             currentTarget = entityLL.First.Value.GetTransfrom();
             currentState = KingStates.ATTACK;
             attack = true;
         }
     }
 }
Esempio n. 7
0
 void ChangeTarget(Transform t)
 {
     //called when tower dies
     isIdle = true;
     isAttacking = false;
     isWalking = false;
     kingAnimator.ResetTrigger("moveTrigger");
     kingAnimator.ResetTrigger("attackTrigger");
     kingAnimator.SetTrigger("idleTrigger");
     if (IsTargetPresent(t))
     {
         if (currentTarget == t)
         {
             attack = false;
             entityLL.Remove(FindFromTargets(t));
             currentTarget = null;
             if (entityLL.Count > 0)
             {
                 currentTarget = entityLL.First.Value.GetTransfrom();
                 agent.SetDestination(currentTarget.position);
                 attack = true;
             }
         }
         else
         {
             entityLL.Remove(FindFromTargets(t));
             currentState = KingStates.IDLE;
         }
     }
     else
     {
         Debug.LogError("Couldn't change target as the previous target is not getting removed");
     }
 }
Esempio n. 8
0
    // Update is called once per frame
    void Update()
    {
        healthSlider.GetComponent<Image>().fillAmount = health / kingHealth;
        // movement
        if (Input.GetMouseButtonDown(0) && !UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())//on mouse click go to destination
        {
            Vector3 clickPos = Input.mousePosition;
            Ray ray = mainCamera.ScreenPointToRay(clickPos);
            Debug.DrawRay(ray.origin, ray.direction * 10, Color.red);

            RaycastHit rayhit;
            if (Physics.Raycast(ray.origin, ray.direction * 10000, out rayhit, 5000, pathLayerMask))
            {
                Vector3 final = rayhit.point;
                currentState = KingStates.WALK;
                agent.SetDestination(final + Vector3.up * 0.4f);
                if (!isWalking)
                {
                    isAttacking = false;
                    isIdle = false;
                    isWalking = true;
                    kingAnimator.ResetTrigger("idleTrigger");
                    kingAnimator.ResetTrigger("attackTrigger");
                    kingAnimator.SetTrigger("moveTrigger");
                }
            }
        }

        // if destination reached and there is target in range(in targets linked list) then attack else idle
        if (currentState == KingStates.WALK && this.transform.position == agent.destination) {
            if (currentTarget != null) {
                currentState = KingStates.ATTACK;
                agent.SetDestination(currentTarget.position);
            }
            else if (entityLL.Count > 0)
            {
                currentState = KingStates.ATTACK;
                currentTarget = entityLL.First.Value.GetTransfrom();
                agent.SetDestination(currentTarget.position);
            }
            else
            {
               currentState = KingStates.IDLE;
            }
        }

        //shoot at regular interval
        if (attack && currentTarget != null)
        {
            if (Time.time > lastShootTime + timeBetweenShoots)
            {
                lastShootTime = Time.time;
                Shoot();
            }
            else
            {
            }
        }

        if(currentState == KingStates.IDLE)
        {
            if(!isIdle)
            {
                isIdle = true;
                isAttacking = false;
                isWalking = false;
                kingAnimator.ResetTrigger("moveTrigger");
                kingAnimator.ResetTrigger("attackTrigger");
                kingAnimator.SetTrigger("idleTrigger");
            }
        }
    }