// 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>());
                    }
                }
            }
        }
    }
Пример #2
0
    // 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;
                    }
                }
            }
        }
    }