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"); } }
protected override void SetMyProperties() { mainCamera = Camera.main; health = kingHealth; currentState = KingStates.IDLE; agent = GetComponent <NavMeshAgent>(); kingAnimator = GetComponent <Animator>(); }
protected override void SetMyProperties() { mainCamera = Camera.main; health = kingHealth; currentState = KingStates.IDLE; agent = GetComponent<NavMeshAgent>(); kingAnimator = GetComponent<Animator>(); }
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; } } }
// 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"); } } }
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; } } }
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"); } }
// 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"); } } }