private void spotAssignement(ARSpot spot, GameObject text, GameObject temp) { spot.assignTextObj(text); spot.setObj(temp); spot.setProd(listOfItems[0]); listOfItems.RemoveAt(0); }
private void startAR() { Dictionary <string, Products> cart = cartController.getCart(); listOfItems = new List <Products>(); objectsOnDisplay = new List <ARSpot>(); int count2 = 0; foreach (KeyValuePair <string, Products> item in cart) { listOfItems.Add(item.Value); } while (objectsOnDisplay.Count < 3 && 0 < listOfItems.Count) { string objName = listOfItems[0].getName(); ARSpot spot = new ARSpot(); Debug.Log("objName: " + objName); GameObject temp = (GameObject)Instantiate(Resources.Load(objName)); GameObject text = (GameObject)Instantiate(Resources.Load("ARtext")); initializeARObj(text, temp); text.transform.position = temp.transform.position + new Vector3(0f, 0.2f, 0f); objectSettings(temp); if (count2 == 0) { itemRot[0] = 20; temp.transform.position = this.transform.position + this.transform.forward.normalized * objDistance; temp.transform.RotateAround(this.transform.position, Vector3.up, itemRot[0]); spot.setIndex(0); } else if (count2 == 1) { itemRot[1] = 0; temp.transform.position = this.transform.position + this.transform.forward.normalized * objDistance; spot.setIndex(1); } else { itemRot[2] = -20; temp.transform.position = this.transform.position + this.transform.forward.normalized * objDistance; temp.transform.RotateAround(this.transform.position, Vector3.up, itemRot[2]); spot.setIndex(2); } spotAssignement(spot, text, temp); objectsOnDisplay.Add(spot); temp.transform.LookAt(this.transform); temp.transform.Rotate(-90f, 0f, 180f); aimARText(count2); count2++; } }
void Update() { if (active) { //rotates objects if (gripButtonDown) { float distance = Vector3.Distance(wand.transform.position, interactionPoint.position); for (int i = objectsOnDisplay.Count - 1; i >= 0; i--) { if (Vector3.Distance(wand.transform.position, this.transform.right) > Vector3.Distance(interactionPoint.transform.position, this.transform.right)) { itemRot[i] -= distance * rotationSpeed; } else { itemRot[i] += distance * rotationSpeed; } GameObject currObj = objectsOnDisplay[i].getObj(); updateObj(currObj, i); updateText(i, currObj); if (itemRot[i] > 30) { float diff = Mathf.Abs(itemRot[i] - 30); itemRot[i] = -30 + diff; addBackToListAndRemove(i); } else if (itemRot[i] < -30) { float diff = Mathf.Abs(itemRot[i] + 30); itemRot[i] = 30 - diff; addBackToListAndRemove(i); } } } //check if object has been thrown for (int i = objectsOnDisplay.Count - 1; i >= 0; i--) { if (!object.ReferenceEquals(null, objectsOnDisplay[i])) { if (Vector3.Distance(objectsOnDisplay[i].getObj().transform.position, this.transform.position) >= 2.0f) { if (cartController.removeQuantityFromCart(objectsOnDisplay[i].getProd().getID(), 1)) { destroyTextAndObj(i); } else { objectsOnDisplay[i].setText("Quantity: " + objectsOnDisplay[i].getProd().getQuantity()); objectsOnDisplay[i].getObj().transform.position = this.transform.position + this.transform.forward.normalized * objDistance; objectsOnDisplay[i].getObj().transform.parent = this.transform; objectsOnDisplay[i].getObj().transform.rotation = new Quaternion(0f, 0f, 0f, 0f); objectsOnDisplay[i].getObj().transform.LookAt(this.transform); objectsOnDisplay[i].getObj().transform.Rotate(-90f, 0f, 180f); int index = objectsOnDisplay.IndexOf(objectsOnDisplay[i]); objectsOnDisplay[i].getObj().GetComponent <Rigidbody>().isKinematic = true; objectsOnDisplay[i].getObj().GetComponent <BoxCollider>().isTrigger = true; aimARText(i); if (i == 0) { objectsOnDisplay[i].getObj().transform.RotateAround(this.transform.position, Vector3.up, itemRot[0]); } else if (i == 1) { objectsOnDisplay[i].getObj().transform.RotateAround(this.transform.position, Vector3.up, itemRot[1]); } else if (i == 2) { objectsOnDisplay[i].getObj().transform.RotateAround(this.transform.position, Vector3.up, itemRot[2]); } } } } } //creates new object if needed while (objectsOnDisplay.Count < 3 && listOfItems.Count > 0) { ARSpot spot = new ARSpot(); Debug.Log("objName: " + listOfItems[0].getName()); GameObject temp = (GameObject)Instantiate(Resources.Load(listOfItems[0].getName())); GameObject text = (GameObject)Instantiate(Resources.Load("ARtext")); initializeARObj(text, temp); bool index0Exists = false; bool index1Exists = false; bool index2Exists = false; foreach (ARSpot item in objectsOnDisplay) { int index = item.getIndex(); if (index == 0) { index0Exists = true; } else if (index == 1) { index1Exists = true; } else if (index == 2) { index2Exists = true; } } objectSettings(temp); spotAssignement(spot, text, temp); if (!index0Exists) { spot.setIndex(0); objectsOnDisplay.Insert(0, spot); objectsOnDisplay[0].getObj().transform.position = this.transform.position + this.transform.forward.normalized * objDistance; objectsOnDisplay[0].getObj().transform.RotateAround(this.transform.position, Vector3.up, itemRot[0]); index0Exists = false; Debug.Log("Adding at index: " + 0); } else if (!index1Exists) { spot.setIndex(1); objectsOnDisplay.Insert(1, spot); objectsOnDisplay[1].getObj().transform.position = this.transform.position + this.transform.forward.normalized * objDistance; objectsOnDisplay[1].getObj().transform.RotateAround(this.transform.position, Vector3.up, itemRot[1]); index1Exists = false; Debug.Log("Adding at index: " + 1); } else if (!index2Exists) { spot.setIndex(2); objectsOnDisplay.Insert(2, spot); objectsOnDisplay[2].getObj().transform.position = this.transform.position + this.transform.forward.normalized * objDistance; objectsOnDisplay[2].getObj().transform.RotateAround(this.transform.position, Vector3.up, itemRot[2]); index2Exists = false; Debug.Log("Adding at index: " + 2); } aimARText(0); } } }