//update position of disk private void updatePosition(float fallHeight) { gameController.ceilingObject.SetActive(false); float y; if (fallHeight == 0.0) { y = (float)actualColumn.getNumberofDisks() * gameController.getDiskHeight() - 0.5f * gameController.getDiskHeight(); state = diskState.lying; } else { y = fallHeight; state = diskState.animatedDown; } Vector3 newPos = new Vector3(actualColumn.gameObject.transform.position.x, y, transform.position.z); //TODO is it necessary to have both lines here? transform.position = newPos; //rigidbody.position = newPos; }
void Start() { //initialization state = diskState.lying; waitingForTarget = false; boundary = new Boundary(); }
void Update() { if (state == diskState.animatedUp) { float cp = gameController.getCeilingPosition(); //print("Ceiling position y: " + cp); if (transform.position.y > cp) { gameController.ceilingObject.SetActive(true); state = diskState.dragged; GetComponent<Rigidbody>().isKinematic = true; initialDiskScreenPoint = Camera.main.WorldToScreenPoint(transform.position); //offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, initialDiskScreenPoint.z)); } } //"ground" falling disk if (state == diskState.animatedDown) { if (transform.position.y < (float)actualColumn.getNumberofDisks() * gameController.getDiskHeight() - 0.5f * gameController.getDiskHeight() + 0.1) { state = diskState.lying; } } if (state == diskState.dragged) { Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, initialDiskScreenPoint.z); Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);// +offset; //TODO clamp position curPosition.x = Mathf.Clamp(curPosition.x, boundary.xMin, boundary.xMax); curPosition.y = Mathf.Clamp(curPosition.y, boundary.yMin, boundary.yMax); curPosition.z = 0.0f; transform.position = curPosition; } }
private void animateDiskUp() { state = diskState.animatedUp; //adjust impulse to number of disk on the column - the more disks, the less necessary impulse GetComponent<Rigidbody>().AddForce(transform.up * (10.75f - (0.375f * actualColumn.getNumberofDisks())), ForceMode.Impulse); }