// 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(); } }