// Update is called once per frame void Update() { if (currentHealth < maxHealth) { healthBar.SetActive(true); } if (currentHealth > maxHealth) { currentHealth = maxHealth; } if (targetChunk != null) { if (currentChunk != endChunk) { if (this.transform.position.x <= targetChunk.positionX + 0.1f && this.transform.position.x > targetChunk.positionX - 0.1f && this.transform.position.z <= targetChunk.positionZ + 0.1f && this.transform.position.z > targetChunk.positionZ - 0.1f) { // Change target chunk to next chunk in path list int currentIndex = path.IndexOf(targetChunk); if (currentIndex + 1 < path.Count) { targetChunk = path[currentIndex + 1]; } } else if (this.transform.position.x <= targetChunk.positionX + 0.1f && this.transform.position.x > targetChunk.positionX - 0.1f) { // Move towards z centre of target chunk transform.position = Vector3.MoveTowards(this.transform.position, targetChunk.transform.position, speed * Time.deltaTime); Vector3 direction = (targetChunk.transform.position - transform.position).normalized; Quaternion lookRotation = Quaternion.LookRotation(direction); transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, speed * Time.deltaTime); } else if (this.transform.position.z <= targetChunk.positionZ + 0.1f && this.transform.position.z > targetChunk.positionZ - 0.1f) { // Move towards x centre of target chunk transform.position = Vector3.MoveTowards(this.transform.position, targetChunk.transform.position, speed * Time.deltaTime); Vector3 direction = (targetChunk.transform.position - transform.position).normalized; Quaternion lookRotation = Quaternion.LookRotation(direction); transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, speed * Time.deltaTime); } else { // Move towards centre of target chunk transform.position = Vector3.MoveTowards(this.transform.position, targetChunk.transform.position, speed * Time.deltaTime); Vector3 direction = (targetChunk.transform.position - transform.position).normalized; Quaternion lookRotation = Quaternion.LookRotation(direction); transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, speed * Time.deltaTime); } } else if (this.transform.position.x != endChunk.positionX || this.transform.position.z != endChunk.positionZ) { //Move towards endChunk centre transform.position = Vector3.MoveTowards(this.transform.position, targetChunk.transform.position, speed * Time.deltaTime); Vector3 direction = (targetChunk.transform.position - transform.position).normalized; Quaternion lookRotation = Quaternion.LookRotation(direction); transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, speed * Time.deltaTime); } //Do Nothing - turn off calculations? else { targetChunk = null; if (animManager.anim.GetBool("Running") == true) { animManager.Run(false); GetComponent <AudioSource>().Stop(); } if (actions > 0 && turnScript.currentTeam == 0) { aiScript.DistanceTemplate(); turnScript.CheckVisibleEnemies(); } else if (actions > 0 && turnScript.currentTeam == 1) { aiScript.behaviourScript.TakeAction(aiScript.aiEntity.GetComponent <AI_Follower_Script>()); } else if (GetActions() == 0) { turnScript.currentTeam = team; aiScript.aiEntity.GetComponent <AI_Follower_Script>().weaponRange.SetActive(false); aiScript.aiEntity = turnScript.GetNextUnit().gameObject; if (turnScript.currentTeam == 0) { turnScript.CheckVisibleEnemies(); aiScript.DistanceTemplate(); turnScript.aiScript.cameraTrolley.transform.position = turnScript.aiScript.aiEntity.transform.position; aiScript.aiEntity.GetComponent <AI_Follower_Script>().weaponRange.SetActive(true); } else { aiScript.behaviourScript.TakeAction(aiScript.aiEntity.GetComponent <AI_Follower_Script>()); } } } } }
// Update is called once per frame void Update() { if (turnScript.currentTeam == 0) { if (Input.GetMouseButtonDown(1)) { if (selectedObject != null) { if (selectedObject.GetComponent <MeshRenderer>() != null) { selectedObject.GetComponent <MeshRenderer>().material = materialContainer.FindMaterial(selectedObject.tag); } selectedObject = null; } Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (aiEntity.GetComponent <AI_Follower_Script>().GetActions() > 0) { if (hit.collider.CompareTag("Chunk")) { SetGrid(); endChunk = hit.collider.gameObject.GetComponent <Chunk_Script>(); if (!endChunk.impassable && !endChunk.lowCover) { path = FindPath(endChunk.gameObject); if (path != null) { path = CalculatePath(endChunk); MoveUnit(path); cameraTrolley.transform.position = endChunk.transform.position; aiEntity.GetComponent <AI_Follower_Script>().TakeAction(1); if (aiEntity.GetComponent <AI_Follower_Script>().animManager.anim.GetBool("Running") == false) { aiEntity.GetComponent <AI_Follower_Script>().animManager.Run(true); aiEntity.GetComponent <AudioSource>().Play(); } if (selectedObject != null) { selectedObject.GetComponent <MeshRenderer>().material = materialContainer.FindMaterial(selectedObject.tag); } foreach (Chunk_Script cs in GetNeighbourList(endChunk)) { if (cs.lowCover) { aiEntity.GetComponent <AI_Follower_Script>().animManager.Crouch(true); aiEntity.GetComponent <AI_Follower_Script>().crouching = true; break; } else { aiEntity.GetComponent <AI_Follower_Script>().crouching = false; aiEntity.GetComponent <AI_Follower_Script>().animManager.Crouch(false); } } renderer.enabled = false; } } } else if (hit.collider.CompareTag("Tall Cover") || hit.collider.CompareTag("Low Cover")) { float distance = Vector3.Distance(hit.collider.gameObject.transform.position, aiEntity.transform.position); if (distance < aiEntity.GetComponent <AI_Follower_Script>().maxRange) { cameraTrolley.transform.position = hit.collider.gameObject.transform.position; if (selectedObject == null) { selectedObject = hit.collider.gameObject; selectedObject.GetComponent <MeshRenderer>().material = materialContainer.FindMaterial("Selected"); } else { selectedObject.GetComponent <MeshRenderer>().material = materialContainer.FindMaterial(selectedObject.tag); selectedObject = hit.collider.gameObject; selectedObject.GetComponent <MeshRenderer>().material = materialContainer.FindMaterial("Selected"); } Vector3[] positions = new Vector3[] { aiEntity.transform.position, selectedObject.transform.position }; renderer.SetPositions(positions); renderer.enabled = true; shooter.ShowButton(true); } } else if (hit.collider.CompareTag("Good Guy")) { if (aiEntity.GetComponent <AI_Follower_Script>().turnScript.currentTeam == 1) { float distance = Vector3.Distance(hit.collider.gameObject.transform.position, aiEntity.transform.position); if (distance < aiEntity.GetComponent <AI_Follower_Script>().maxRange) { cameraTrolley.transform.position = hit.collider.gameObject.transform.position; if (selectedObject == null) { selectedObject = hit.collider.gameObject; } else { selectedObject = hit.collider.gameObject; } Vector3[] positions = new Vector3[] { aiEntity.transform.position, selectedObject.transform.position }; renderer.SetPositions(positions); renderer.enabled = true; shooter.ShowButton(true); } } } else if (hit.collider.CompareTag("Bad Guy")) { if (aiEntity.GetComponent <AI_Follower_Script>().turnScript.currentTeam == 0) { float distance = Vector3.Distance(hit.collider.gameObject.transform.position, aiEntity.transform.position); if (distance < aiEntity.GetComponent <AI_Follower_Script>().maxRange) { cameraTrolley.transform.position = hit.collider.gameObject.transform.position; if (selectedObject == null) { selectedObject = hit.collider.gameObject; } else { selectedObject = hit.collider.gameObject; } Vector3[] positions = new Vector3[] { aiEntity.transform.position, selectedObject.transform.position }; renderer.SetPositions(positions); renderer.enabled = true; shooter.ShowButton(true); } } } else { selectedObject.GetComponent <MeshRenderer>().material = materialContainer.FindMaterial(selectedObject.tag); renderer.enabled = false; } } } } if (Input.GetMouseButtonDown(0)) { Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.CompareTag("Good Guy")) { if (turnScript.currentTeam == 0 && aiEntity.GetComponent <AI_Follower_Script>().GetActions() != 1) { aiEntity.GetComponent <AI_Follower_Script>().weaponRange.SetActive(false); aiEntity = hit.collider.gameObject; turnScript.CheckVisibleEnemies(); cameraTrolley.transform.position = aiEntity.transform.position; DistanceTemplate(); aiEntity.GetComponent <AI_Follower_Script>().weaponRange.SetActive(true); } else { cameraTrolley.transform.position = aiEntity.transform.position; aiEntity.GetComponent <AI_Follower_Script>().weaponRange.SetActive(true); } } else if (hit.collider.CompareTag("Bad Guy")) { if (turnScript.currentTeam == 1 && aiEntity.GetComponent <AI_Follower_Script>().GetActions() != 1) { aiEntity.GetComponent <AI_Follower_Script>().weaponRange.SetActive(false); aiEntity = hit.collider.gameObject; turnScript.CheckVisibleEnemies(); cameraTrolley.transform.position = aiEntity.transform.position; DistanceTemplate(); aiEntity.GetComponent <AI_Follower_Script>().weaponRange.SetActive(true); } else { cameraTrolley.transform.position = aiEntity.transform.position; aiEntity.GetComponent <AI_Follower_Script>().weaponRange.SetActive(true); } } else { if (selectedObject != null && (selectedObject.tag != "Bad Guy" && selectedObject.tag != "Good Guy")) { selectedObject.GetComponent <MeshRenderer>().material = materialContainer.FindMaterial(selectedObject.tag); } renderer.enabled = false; } } } } }