Exemplo n.º 1
0
    // Update is called once per frame
    void Update()
    {
        if (!isLocalPlayer)
        {
            return;
        }

        selected.RemoveAll(item => item == null);

        float deltaZoom = Input.GetAxis("Mouse ScrollWheel");

        cameraHeight      -= deltaZoom * zoomSpeed;
        cameraHeight       = Mathf.Clamp(cameraHeight, minHeight, maxHeight);
        transform.position = new Vector3(transform.position.x, cameraHeight, transform.position.z);

        if (Input.GetMouseButton(2))
        {
            float mouseX = Input.GetAxis("Mouse X");
            float mouseY = Input.GetAxis("Mouse Y");
            transform.Translate(new Vector3(mouseY, 0, -mouseX));
        }
        else if (edgeCam)
        {
            float mouseX = Input.GetAxis("Mouse X");
            float mouseY = Input.GetAxis("Mouse Y");
            if (Input.mousePosition.x <= 10 && mouseX < 0)
            {
                transform.Translate(new Vector3(0, 0, mouseX * 0.5f));
            }
            if (Input.mousePosition.x >= Screen.width - 10 && mouseX > 0)
            {
                transform.Translate(new Vector3(0, 0, mouseX * 0.5f));
            }
            if (Input.mousePosition.y <= 10 & mouseY < 0)
            {
                transform.Translate(new Vector3(-mouseY * 0.5f, 0, 0));
            }
            if (Input.mousePosition.y >= Screen.height - 10 & mouseY > 0)
            {
                transform.Translate(new Vector3(-mouseY * 0.5f, 0, 0));
            }
        }
        if (Input.GetMouseButton(0))
        {
            if (mouseDown == false)
            {
                selectionPanel = Instantiate(selectionPrefab, Input.mousePosition, Quaternion.identity, canvas.transform);
                selectionPanel.transform.SetAsFirstSibling();
                selectionPanel.transform.localScale = new Vector3(0, 0, 1);
                selectionPanel.transform.position   = Input.mousePosition;
                selectionStart = Input.mousePosition;
                mouseDown      = true;
                foreach (GameObject minion in selected)
                {
                    minion.GetComponent <MeshRenderer>().material.color = new Color((1 - team), 0f, team, 1);
                }
                selected.Clear();
            }
            else
            {
                selectionPanel.transform.localScale = new Vector3(Input.mousePosition.x - selectionStart.x, Input.mousePosition.y - selectionStart.y, 0) / 1000;
                selectionPanel.transform.position   = (Input.mousePosition + selectionStart) / 2;
            }
        }
        else
        {
            if (mouseDown == true)
            {
                GameObject[] minions = GameObject.FindGameObjectsWithTag("Minion");


                Ray        ray = GetComponentInChildren <Camera>().ScreenPointToRay(selectionStart);
                RaycastHit hit;

                if (Physics.Raycast(ray, out hit, 100, movementMask))
                {
                    Ray        ray2 = GetComponentInChildren <Camera>().ScreenPointToRay(Input.mousePosition);
                    RaycastHit hit2;

                    if (Physics.Raycast(ray2, out hit2, 100, movementMask))
                    {
                        foreach (GameObject minion in minions)
                        {
                            if (Mathf.Min(hit.point.x, hit2.point.x) < minion.transform.position.x &&
                                Mathf.Max(hit.point.x, hit2.point.x) > minion.transform.position.x &&
                                Mathf.Min(hit.point.z, hit2.point.z) < minion.transform.position.z &&
                                Mathf.Max(hit.point.z, hit2.point.z) > minion.transform.position.z &&
                                ((minion.GetComponent <MinionController>() != null && minion.GetComponent <MinionController>().team == team) || (minion.GetComponent <FighterController>() != null && minion.GetComponent <FighterController>().team == team)))
                            {
                                selected.Add(minion);
                                minion.GetComponent <MeshRenderer>().material.color = new Color(0.3f * (1 - team), 0f, 0.3f * team, 1);
                            }
                        }
                    }
                }



                Destroy(selectionPanel);
                mouseDown = false;
            }
        }


        if (Input.GetMouseButtonDown(1))
        {
            GameObject[] minions = GameObject.FindGameObjectsWithTag("Minion");

            foreach (GameObject minion in selected)
            {
                if (minion.GetComponent <MinionController>() != null)
                {
                    MinionController minionController = minion.GetComponent <MinionController>();

                    if (minionController.team == team)
                    {
                        Ray        ray = GetComponentInChildren <Camera>().ScreenPointToRay(Input.mousePosition);
                        RaycastHit hit;

                        if (Physics.Raycast(ray, out hit, 100, resourceMask))
                        {
                            Debug.Log("Hit resource");
                            minionController.SetTarget(hit.collider.name, hit.point, hit.collider.transform.gameObject);
                            minionController.mode      = 1;
                            minionController.commander = this;
                            minion.GetComponent <NavMeshAgent>().SetDestination(hit.point);
                        }
                        else if (Physics.Raycast(ray, out hit, 100, movementMask))
                        {
                            Debug.Log(hit.point);
                            minionController.SetTarget("", hit.point, null);
                            minion.GetComponent <NavMeshAgent>().SetDestination(hit.point);
                            minionController.mode = 1;
                        }
                    }
                }

                if (minion.GetComponent <FighterController>() != null)
                {
                    FighterController fighterController = minion.GetComponent <FighterController>();

                    if (fighterController.team == team)
                    {
                        Ray        ray = GetComponentInChildren <Camera>().ScreenPointToRay(Input.mousePosition);
                        RaycastHit hit;

                        if (Physics.Raycast(ray, out hit, 100, attackMask))
                        {
                            Debug.Log("Hit attackable");
                            fighterController.SetTarget(hit.collider.name, hit.point, hit.collider.transform.gameObject);
                            fighterController.mode          = 2;
                            fighterController.attackMinions = false;
                            fighterController.attackPlayers = false;
                            fighterController.commander     = this;
                            // change this / may not be needed
                            minion.GetComponent <NavMeshAgent>().SetDestination(hit.point);
                        }
                        else if (Physics.Raycast(ray, out hit, 100, movementMask))
                        {
                            Debug.Log(hit.point);
                            fighterController.SetTarget("", hit.point, null);
                            minion.GetComponent <NavMeshAgent>().SetDestination(hit.point);
                            fighterController.mode          = 1;
                            fighterController.attackMinions = false;
                            fighterController.attackPlayers = false;
                        }
                    }
                }
            }
        }

        // attack minions
        if (Input.GetKeyDown(KeyCode.A))
        {
            GameObject[] minions = GameObject.FindGameObjectsWithTag("Minion");

            foreach (GameObject minion in selected)
            {
                if (minion.GetComponent <FighterController>() != null)
                {
                    FighterController fighterController = minion.GetComponent <FighterController>();

                    if (fighterController.team == team)
                    {
                        fighterController.mode          = 3;
                        fighterController.attackMinions = true;
                        fighterController.attackPlayers = false;
                    }
                }
            }
        }

        // attack players
        if (Input.GetKeyDown(KeyCode.S))
        {
            GameObject[] minions = GameObject.FindGameObjectsWithTag("Minion");

            foreach (GameObject minion in selected)
            {
                if (minion.GetComponent <FighterController>() != null)
                {
                    FighterController fighterController = minion.GetComponent <FighterController>();

                    if (fighterController.team == team)
                    {
                        fighterController.mode          = 4;
                        fighterController.attackMinions = false;
                        fighterController.attackPlayers = true;
                    }
                }
            }
        }

        if (Input.GetKeyDown("1"))
        {
            SpawnMinion();
        }


        if (Input.GetKeyDown("2"))
        {
            SpawnFighter();
        }

        // player health
        if (Input.GetKeyDown("3"))
        {
            UpgradeHealth();
        }

        // speed
        if (Input.GetKeyDown("4"))
        {
            UpgradeSpeed();
        }

        // damage against base
        if (Input.GetKeyDown("5"))
        {
            UpgradeDamage();
        }

        // heal base
        if (Input.GetKeyDown("6"))
        {
            RepairBase();
        }
    }