Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- public class Place : MonoBehaviour
- {
- [Header("Hold settings")]
- public List<GameObject> holds;
- public GameObject selectedHold;
- public bool holdSelected;
- public int HoldsMask = 1024;
- public int WallMask = 512;
- public int WallAndHoldsMask;
- public float holdUpRotation;
- [Header("UI settings")]
- public Image cursor;
- [Header("Camera settings")]
- public GameObject cam;
- [Header("Orbit settings")]
- public float orbitSpeed; // The speed at which the camera lerps
- public float orbitSensitivity; // The amount of orbiting for the mouse movement
- private Vector3 orbitTarget; // The target of the camera rotation
- [Header("Zoom settings")]
- public float zoomSpeed; // The speed at which the zoom lerps
- public float zoomSensitivity; // The amount of zoom for the mouse scolling
- private Vector3 zoomTarget = new Vector3(0, 0, -10); // The target of the zooming
- private void Start() {
- WallAndHoldsMask = HoldsMask | WallMask;
- }
- void Update()
- {
- if(holdSelected) {
- // Move UI cursor
- Vector2 pos = Camera.main.WorldToScreenPoint(selectedHold.transform.position);
- cursor.gameObject.transform.position = pos;
- Debug.DrawLine(selectedHold.transform.position, selectedHold.transform.position + selectedHold.transform.up, Color.red);
- }
- if(Input.GetMouseButton(0) && holdSelected) {
- // move selectedHold
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- RaycastHit hit;
- if (Physics.Raycast(ray, out hit, Mathf.Infinity, WallAndHoldsMask)) {
- selectedHold.transform.position = hit.point;
- selectedHold.transform.up = hit.normal;
- Debug.Log("Is supposed to rotate " + holdUpRotation + " degrees.");
- selectedHold.transform.RotateAround(selectedHold.transform.position, selectedHold.transform.up, holdUpRotation);
- }
- }
- if(Input.GetMouseButtonDown(0) && !holdSelected) {
- // Select raycasthit
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- RaycastHit hit;
- if (Physics.Raycast(ray, out hit, Mathf.Infinity, HoldsMask)) {
- cursor.enabled = true;
- selectedHold = hit.collider.gameObject;
- selectedHold.GetComponent<MeshCollider>().enabled = false;
- holdSelected = true;
- }
- }
- if(Input.GetMouseButtonDown(1) && !holdSelected) {
- // Create new hold
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- RaycastHit hit;
- if (Physics.Raycast(ray, out hit, Mathf.Infinity, WallAndHoldsMask)) {
- selectedHold = Instantiate(holds[Random.Range(0, holds.Count)], hit.point, Quaternion.identity);
- holdSelected = true;
- cursor.enabled = true;
- selectedHold.transform.up = hit.normal;
- }
- }
- if(Input.GetMouseButton(1) && holdSelected) {
- // Rotate selectedHold
- float angle = Input.GetAxis("Mouse X") * 10;
- selectedHold.transform.Rotate(Vector3.up, angle);
- holdUpRotation += angle;
- Debug.DrawLine(selectedHold.transform.position, selectedHold.transform.position + selectedHold.transform.forward, Color.blue);
- }
- if(Input.GetKeyDown(KeyCode.Return) && holdSelected) {
- // Deselect selectedHold
- holdSelected = false;
- selectedHold.GetComponent<MeshCollider>().enabled = true;
- selectedHold = null;
- cursor.enabled = false;
- }
- if(Input.GetKeyDown(KeyCode.Delete) && holdSelected) {
- // Delete selectedHold
- Destroy(selectedHold);
- holdSelected = false;
- selectedHold = null;
- cursor.enabled = false;
- }
- {
- // Camera movement
- if(Input.GetMouseButton(2)) {
- // Orbit camera
- orbitTarget += new Vector3(-Input.GetAxis("Mouse Y") * orbitSensitivity, Input.GetAxis("Mouse X") * orbitSensitivity, 0);
- orbitTarget.z = 0;
- }
- // Apply orbit
- Quaternion q = Quaternion.Euler(orbitTarget.x, orbitTarget.y, 0);
- transform.rotation = Quaternion.Lerp(transform.rotation, q, Time.deltaTime * orbitSpeed);
- // Zoom camera
- zoomTarget += new Vector3(0, 0, Input.mouseScrollDelta.y * zoomSensitivity);
- // Apply zoom
- if(cam.transform.localPosition != zoomTarget) {
- cam.transform.localPosition = Vector3.Lerp(cam.transform.localPosition, zoomTarget, Time.deltaTime * zoomSpeed);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement