public DirectionalControl PlaceDirectionalControl(GameObject prefab, Vector3 position) { bool existingControl = CheckIfExisting(position); if (!existingControl) { DirectionalControl d = Instantiate(directionPrefab, NearestGridPosition(position), Quaternion.identity).GetComponent <DirectionalControl>(); FindObjectOfType <AudioManager>().Play("PlaceArrow"); return(d); } else { return(null); } }
// Update is called once per frame void Update() { FindObjectOfType <DirectionSelection>().status = values; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); highlight.pointDirection = currentDirection; RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.CompareTag("Floor")) { highlight.position = NearestGridPosition(hit.point); } } bool b = true; if (FindObjectOfType <PauseUI>() != null) { b = !FindObjectOfType <PauseUI>().isPaused; } if (Input.GetMouseButtonDown(0) && b) { if (Physics.Raycast(ray, out hit)) { if (hit.collider.GetComponent <FloatingColectable>() != null) { hit.collider.GetComponent <FloatingColectable>().OnCollected.Invoke(); } else { if (values[IntFromDirection(currentDirection)] > 0) { DirectionalControl d = PlaceDirectionalControl(directionPrefab, highlight.position); if (d != null) { d.pointDirection = currentDirection; values[IntFromDirection(currentDirection)] -= 1; } } else { FindObjectOfType <DirectionSelection>().Error(IntFromDirection(currentDirection)); } } } } if (Input.GetMouseButtonDown(1) && b) { if (Physics.Raycast(ray, out hit)) { if (hit.collider.GetComponent <DirectionalControl>() != null) { ParticleSystem p = Instantiate(Dust, hit.collider.GetComponent <DirectionalControl>().transform.position, Quaternion.Euler(new Vector3(-90, 0, 0))).GetComponent <ParticleSystem>(); p.Play(); Destroy(p.gameObject, 5); FindObjectOfType <AudioManager>().Play("Remove"); Destroy(hit.collider.GetComponent <DirectionalControl>().gameObject); } } } if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow)) { ChangeSelctionDirection(DirectionalControl.Direction.Up); } else if (Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.DownArrow)) { ChangeSelctionDirection(DirectionalControl.Direction.Down); } else if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) { ChangeSelctionDirection(DirectionalControl.Direction.Left); } else if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) { ChangeSelctionDirection(DirectionalControl.Direction.Right); } }
// Update is called once per frame void Update() { foreach (DirectionalControl d in FindObjectsOfType <DirectionalControl>()) { Car car = FindObjectOfType <Car>(); Vector3 carPos = new Vector3(car.transform.position.x, 0, car.transform.position.z); Vector3 position = d.transform.position; if (car.m_direction == DirectionalControl.Direction.Down && carPos.z == position.z && carPos.x > position.x) { Debug.DrawLine(carPos, position); if (nextControl == null) { nextControl = d; } else { if (Vector3.Distance(nextControl.transform.position, carPos) > Vector3.Distance(d.transform.position, carPos)) { nextControl = d; } } } if (car.m_direction == DirectionalControl.Direction.Up && carPos.z == position.z && carPos.x < position.x) { Debug.DrawLine(carPos, position); if (nextControl == null) { nextControl = d; } else { if (Vector3.Distance(nextControl.transform.position, carPos) > Vector3.Distance(d.transform.position, carPos)) { nextControl = d; } } } if (car.m_direction == DirectionalControl.Direction.Right && carPos.x == position.x && carPos.z > position.z) { Debug.DrawLine(carPos, position); if (nextControl == null) { nextControl = d; } else { if (Vector3.Distance(nextControl.transform.position, carPos) > Vector3.Distance(d.transform.position, carPos)) { nextControl = d; } } } if (car.m_direction == DirectionalControl.Direction.Left && carPos.x == position.x && carPos.z < position.z) { Debug.DrawLine(carPos, position); if (nextControl == null) { nextControl = d; } else { if (Vector3.Distance(nextControl.transform.position, carPos) > Vector3.Distance(d.transform.position, carPos)) { nextControl = d; } } } } if (nextControl == null) { index = 4; } else { if (nextControl.pointDirection == DirectionalControl.Direction.Left) { index = 0; } else if (nextControl.pointDirection == DirectionalControl.Direction.Up) { index = 1; } else if (nextControl.pointDirection == DirectionalControl.Direction.Down) { index = 2; } else if (nextControl.pointDirection == DirectionalControl.Direction.Right) { index = 3; } } arrow.sprite = arrows[index]; arrow.color = colors[index]; }