/*bool TryGetTouchPosition(out Vector2 touchPosition)
     * {
     *  if(Input.touchCount > 0)
     *  {
     *      touchPosition = Input.GetTouch(0).position;
     *      return true;
     *  }
     *
     *  touchPosition = default;
     *
     *  return false;
     * }*/

    // Update is called once per frame
    void Update()
    {
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            touchPosition = touch.position;

            if (arRaycastManager.Raycast(touchPosition, hits, TrackableType.PlaneWithinPolygon))
            {
                var hitPose = hits[0].pose;


                if (spawnedObject == null)
                {
                    referencePoint0 = arReferencePointManager.AddReferencePoint(hitPose);
                    Quaternion rotation90 = Quaternion.Euler(0, 0, 0);
                    spawnedObject = Instantiate(gameObjectToInstantiate, referencePoint0.transform.position, rotation90, referencePoint0.transform);

                    arPlaneManager.enabled = false;
                    foreach (ARPlane plane in arPlaneManager.trackables)
                    {
                        plane.gameObject.SetActive(false);
                    }
                }
                else
                {
                    referencePoint1 = arReferencePointManager.AddReferencePoint(hitPose);
                    //Quaternion rotation90 = Quaternion.Euler(90,0,0);
                    spawnedObject.transform.parent   = referencePoint1.transform;
                    spawnedObject.transform.position = referencePoint1.transform.position;
                    //spawnedObject.transform.rotation = referencePoint1.transform.rotation;
                }
            }
        }
    }
Ejemplo n.º 2
0
        private void TouchtoHostCloudReferencePoint()
        {
            OutputText.text = m_AppMode.ToString();

            if (Input.touchCount >= 1 &&
                Input.GetTouch(0).phase == TouchPhase.Began &&
                !EventSystem.current.IsPointerOverGameObject(
                    Input.GetTouch(0).fingerId))
            {
                List <ARRaycastHit> hitResults = new List <ARRaycastHit>();
                RaycastManager.Raycast(Input.GetTouch(0).position, hitResults);
                if (hitResults.Count > 0)
                {
                    pose = hitResults[0].pose;

                    // Create a reference point at the touch.
                    ARReferencePoint referencePoint =
                        ReferencePointManager.AddReferencePoint(
                            pose);

                    // Create Cloud Reference Point.
                    m_CloudReferencePoint =
                        ReferencePointManager.AddCloudReferencePoint(
                            referencePoint);
                    if (m_CloudReferencePoint == null)
                    {
                        OutputText.text = "Create Failed!";
                        return;
                    }

                    // Wait for the reference point to be ready.
                    m_AppMode = AppMode.WaitingForHostedReferencePoint;
                }
            }
        }
    void Update()
    {
        if (Input.touchCount == 0)
        {
            return;
        }

        Touch touch = Input.GetTouch(0);

        if (touch.phase != TouchPhase.Began)
        {
            return;
        }

        if (arRaycastManager.Raycast(touch.position, hits, TrackableType.FeaturePoint))
        {
            Pose             hitPose        = hits[0].pose;
            ARReferencePoint referencePoint = arReferencePointManager.AddReferencePoint(hitPose);

            if (referencePoint == null)
            {
                debugLog.gameObject.SetActive(true);
                string errorEntry = "There was an error creating a reference point\n";
                Debug.Log(errorEntry);
                debugLog.text += errorEntry;
            }
            else
            {
                referencePoints.Add(referencePoint);
                referencePointCount.text = $"Reference Point Count: {referencePoints.Count}";
            }
        }
    }
Ejemplo n.º 4
0
    /// <summary>
    /// Deaktiviert ARPlane, ARPointCloudManager und setzt das Placement Prefab des ARPlacementInteractable auf null
    /// </summary>
    /// <param name="arPlacementInteractable"></param>
    /// <param name="placedObject"></param>
    public void SetReferencePointAsParent(ARPlacementInteractable arPlacementInteractable, GameObject placedObject)
    {
        if (gamePrefab == null)
        {
            gamePrefab = arPlacementInteractable.placementPrefab;
        }

        Vector3    position   = placedObject.transform.position;
        Quaternion quaternion = placedObject.transform.rotation;
        Pose       hitPose    = new Pose(position, quaternion);

        // will be null when unsuccessful
        ARReferencePoint referencePoint = arReferencePointManager.AddReferencePoint(hitPose);

        placedObject.transform.SetParent(referencePoint.transform);

        arPlaneManager.enabled = false;
        foreach (ARPlane plane in arPlaneManager.trackables)
        {
            plane.gameObject.SetActive(false);
        }
        arPointCloudManager.enabled = false;
        foreach (ARPointCloud pointCloud in arPointCloudManager.trackables)
        {
            pointCloud.gameObject.SetActive(false);
        }

        arPlacementInteractable.placementPrefab = null;
    }
Ejemplo n.º 5
0
    // Update is called once per frame
    void Update()
    {
        if (Input.touchCount == 0)
        {
            return;
        }

        Touch touch = Input.GetTouch(0);

        if (touch.phase != TouchPhase.Began)
        {
            return;
        }

        if (arRaycastManager.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon))
        {
            Pose             hitPose        = hits[0].pose;
            ARReferencePoint referencePoint = arReferencePointManager.AddReferencePoint(hitPose);

            if (referencePoint == null)
            {
                string errorEntry = "There was an error creating a reference point";
                Debug.Log(errorEntry);
            }
            else
            {
                referencePoints.Add(referencePoint);
                referencePointCount.text = $"Reference Point Count: {referencePoints.Count}";
            }
        }
    }
Ejemplo n.º 6
0
    private void PlacePlanet()
    {
        if (placementIsPoseValid)
        {
            Pose planetPose = placementIndicatorPose;
            planetPose.position.y += 0.8f;
            ARReferencePoint planetReferencePoint = arReferencePointManager.AddReferencePoint(planetPose);

            if (planetReferencePoint == null)
            {
                string errorEntry = "There was an error creating a reference point\n";
                Debug.Log(errorEntry);
            }
            else
            {
                planetEarth.transform.SetParent(planetReferencePoint.gameObject.transform);
                planetEarth.transform.localPosition = new Vector3(0, 0, 0);
                planetEarth.GetComponent <Planet_Explosion_Fast>().enabled = true;
                planetEarth.GetComponent <MeteorsSpawn>().enabled          = true;
                planetEarth.GetComponent <PlanetController>().enabled      = true;
                referencePoints.Add(planetReferencePoint);
                planetPlaced = true;
                placementIndicator.SetActive(false);
            }
        }
    }
Ejemplo n.º 7
0
    private void PlaceObject()
    {
        try {
            ARReferencePoint referencePoint = referencePointManager.AddReferencePoint(placementPose);
            //referencePointManager.referencePointPrefab = objectToSpawn;

            if (referencePoint != null)
            {
                referencePoints.Add(packageCounter, referencePoint);
                GameObject packageObject = Instantiate(objectToSpawn, placementPose.position, Quaternion.Euler(0, 180, 0));
                packageObject.transform.SetParent(referencePoint.transform, true);
                packageHistory.Add(packageCounter, packageObject);

                if (packageCounter < 3)
                {
                    packageCounter++;
                    objectToSpawn = packagePrefabs[packageCounter];
                }
                else
                {
                    uiText.text       = "";
                    objectToSpawn     = null;
                    placementIsActive = false;
                    placementIndicator.SetActive(false);
                    HidePlaneDetection();
                    StartCoroutine(WaitAfterPlacementFinished());
                }
            }
        }
        catch (Exception e)
        {
            DebugText.SetText(1, "9 " + e.Message);
        }
    }
Ejemplo n.º 8
0
    void CreateLine()
    {
        _drawPositions.Clear();
        _lineRenderer = null;

        _currentLine  = Instantiate(linePrefab, Vector3.zero, Quaternion.identity);
        _lineRenderer = _currentLine.GetComponent <LineRenderer>();

        //_screenCenter = Camera.main.ViewportToScreenPoint(_viewPortCenter);
        Vector3 startPosition = Camera.main.ScreenPointToRay(_screenCenter).direction;

        startPosition.z += 0.01f;
        startPosition   += Camera.main.ScreenToWorldPoint(_screenCenter);

        Vector3    startRot      = Camera.main.transform.rotation.eulerAngles;
        Quaternion startRotation = Quaternion.Euler(startRot);

        Pose p = new Pose();

        p.rotation = startRotation;
        p.position = startPosition;
        _pointManager.AddReferencePoint(p);

        lineAnchor.transform.position = startPosition;
        lineAnchor.transform.rotation = startRotation;
        _currentLine.transform.parent = lineAnchor.transform;

        _drawPositions.Add(startPosition);
        _drawPositions.Add(startPosition);

        _lineRenderer.SetPosition(0, _drawPositions[0]);
        _lineRenderer.SetPosition(1, _drawPositions[1]);
    }
Ejemplo n.º 9
0
    void Update()
    {
        if (Input.touchCount == 0)
        {
            return;
        }
        Touch touch = Input.GetTouch(0);

        if (touch.phase != TouchPhase.Began)
        {
            return;
        }
        if (arRaycastManager.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon))
        {
            Pose hitPose = hits[0].pose;
            Debug.Log("hit pose" + hitPose);
            ARReferencePoint referencePoint = arReferencePointManager.AddReferencePoint(hitPose);
            if (referencePoint == null)
            {
                debugLog.gameObject.SetActive(true);
                string errorEntry = "Error creating a reference point\n";
                Debug.Log(errorEntry);
                debugLog.text += errorEntry;
            }

            else
            {
                referencePoint.GetComponent <AddText>().positionItem.SetText(referencePoint.transform.position.ToString());
                referencePoint.GetComponent <AddText>().Name_Scene.SetText("Reference point");
                referencePoints.Add(referencePoint);
                if (referencePoints.Count == 1)
                {
                    Scene.referencePoint1 = referencePoint.transform.position;
                }
                if (referencePoints.Count == 2)
                {
                    Scene.referencePoint2 = referencePoint.transform.position;

                    foreach (Item item in Scene.items)
                    {
                        GameObject _item    = Instantiate(prefabSphere, item.position, Quaternion.identity);
                        Color      MyColour = Color.clear;
                        ColorUtility.TryParseHtmlString(item.color, out MyColour);
                        _item.GetComponent <MeshRenderer>().material.color = MyColour;
                        _item.GetComponent <AddText>().Name_Scene.SetText(item.name);
                        _item.GetComponent <AddText>().Color_Item.SetText("Color: " + item.color);
                        _item.GetComponent <AddText>().positionItem.SetText(_item.transform.position.ToString());
                        Get_Param(MyColour, item.name, item.color, _item.transform.position);
                    }

                    arReferencePointManager.referencePointPrefab.SetActive(false);
                }
            }
            //referencePointCount.text = $"Reference Point Count: {referencePoints.Count}";
        }
    }
Ejemplo n.º 10
0
        protected override SpongyAnchor CreateAnchor(AnchorId id, Transform parent, Pose initialPose)
        {
            Debug.Log($"Creating anchor {id.FormatStr()}");
            var referencePoint = arReferencePointManager.AddReferencePoint(initialPose);

            referencePoint.gameObject.name = id.FormatStr();
            SpongyAnchorARF newAnchor = referencePoint.gameObject.AddComponent <SpongyAnchorARF>();

            return(newAnchor);
        }
 //TODO: Consider anchoring ReferencePoint to a detected plane instead of just anchoring to worldspace pose
 private ARReferencePoint CreateAnchor()
 {
     if (!RayCastController.isRaycastingToTrackable)
     {
         return(null);
     }
     else
     {
         return(referencePointManager.AddReferencePoint(RayCastController.hitPose));
     }
 }
Ejemplo n.º 12
0
    void ReferencePointPlacement()
    {
        if (!TryGetTouchPosition(out Vector2 touchPosition))
        {
            return;
        }

        if (arRaycastManager.Raycast(touchPosition, hits, UnityEngine.XR.ARSubsystems.TrackableType.PlaneWithinPolygon))
        {
            var hitPose = hits[0].pose;
            ARReferencePoint referencePoint = aRReferencePointManager.AddReferencePoint(hitPose);

            if (referencePoint == null)
            {
                Debug.Log("nothing");
            }
            else
            {
                referencePoints.Add(referencePoint);
            }
        }
    }
Ejemplo n.º 13
0
    void Update()
    {
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            //Vector2 RawPosition = new Vector2 (touch.rawPosition);
            Vector3 position = arCamera.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, 1.0f));
            Pose    pose     = new Pose(position, Quaternion.identity);


            if (spawnedObject == null)
            {
                referencePoint0 = arReferencePointManager.AddReferencePoint(pose);
                spawnedObject   = Instantiate(placedPrefab, referencePoint0.transform.position, referencePoint0.transform.rotation, referencePoint0.transform);
            }
            else
            {
                referencePoint1 = arReferencePointManager.AddReferencePoint(pose);
                spawnedObject.transform.position = referencePoint1.transform.position;
                spawnedObject.transform.rotation = referencePoint1.transform.rotation;
                // spawnedObject.transform.parent = referencePoint1.transform;
            }


            /*if (arRaycastManager.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon))
             *      {
             *              var hitPose = hits[0].pose;
             *              var anchorPoint = arAnchorManager.AddAnchor(hitPose);
             *              var spawnObject = Instantiate(placedPrefab, hitPose.position, hitPose.rotation);
             *              spawnObject.transform.parent = anchorPoint.transform;
             *      }
             * }*/
        }
        else
        {
            return;
        }
    }
Ejemplo n.º 14
0
    public void UpdateAnchor(Vector3 pos, Quaternion rot, Action callback = null)
    {
        ClearAnchor();

        currentAnchor = mAnchorManager.AddReferencePoint(new Pose(pos, rot));
        if (currentAnchor != null)
        {
            navModel.transform.SetParent(currentAnchor.transform, false);
        }

        SetTransform(navModel, pos, rot);
        ToggleTransform(navModel, true);
        callback?.Invoke();
    }
Ejemplo n.º 15
0
 public void PlaceObject()
 {
     if (appStateManager.placementCursorIsSurface)
     {
         //logText.text = placementObjects.Count.ToString();
         ARReferencePoint newAnchor = anchorManager.AddReferencePoint(appStateManager.placementCursorPose);
         PlacementObject  newPlaced = Instantiate(objectToPlace, appStateManager.placementCursorPose.position, appStateManager.placementCursorPose.rotation, newAnchor.transform);
         //newPlaced.SetActiveMedia(false);
         placementObjects.Add(newPlaced);
         anchors.Add(newAnchor);
         DragDropBar.gameObject.SetActive(true);
         createRaycastPanel.SetActive(false);
     }
 }
        void AddReferencePoint(ARRaycastHit hit)
        {
            var hitPose        = hit.pose;
            var referencePoint = referencePointManager.AddReferencePoint(hitPose);

            if (referencePoint == null)
            {
                Debug.Log("Error creating reference point");
            }
            else
            {
                referencePoints.Add(referencePoint);
            }
        }
Ejemplo n.º 17
0
    public GameObject CreateReferencePoint(Pose pose, Transform parentObject)
    {
        ARReferencePoint referencePoint = arReferencePointManager.AddReferencePoint(pose);

        if (referencePoint == null)
        {
            return(null);
        }
        else
        {
            referencePoints.Add(referencePoint);
            referencePoint.gameObject.transform.SetParent(parentObject);
            return(referencePoint.gameObject);
        }
    }
Ejemplo n.º 18
0
    public IEnumerator SpawnMeteors()
    {
        while (canSpawnmeteors)
        {
            Pose pose;
            pose.position = RandomPointOnSphere();
            pose.rotation = Quaternion.identity;
            ARReferencePoint meteorReferencePoint = arReferencePointManager.AddReferencePoint(pose);

            GameObject meteor = Instantiate(meteorPrefab, pose.position, Quaternion.identity);
            meteor.transform.SetParent(meteorReferencePoint.gameObject.transform);
            meteor.transform.localPosition = new Vector3(0, 0, 0);
            meteor.transform.LookAt(center);
            yield return(new WaitForSeconds(3f));
        }
    }
        protected override SpongyAnchor CreateAnchor(AnchorId id, Transform parent, Pose initialPose)
        {
#if WLT_EXTRA_LOGGING
            Debug.Log($"Creating anchor {id.FormatStr()}");
#endif // WLT_EXTRA_LOGGING
            initialPose = AnchorFromSpongy.Multiply(initialPose);
            var arAnchor = arReferencePointManager.AddReferencePoint(initialPose);
            if (arAnchor == null)
            {
                Debug.LogError($"ARReferencePoinManager failed to create ARAnchor {id}");
                return(null);
            }
            arAnchor.gameObject.name = id.FormatStr();
            SpongyAnchorARF newAnchor = arAnchor.gameObject.AddComponent <SpongyAnchorARF>();
            return(newAnchor);
        }
    // Update is called once per frame
    void Update()
    {
        if (referencePoints.Count >= 2)
        {
            usaPlane.SetActive(true);

            float aX = referencePoints[0].transform.position.x;
            float aZ = referencePoints[0].transform.position.z;

            float bX = referencePoints[1].transform.position.x;
            float bZ = referencePoints[1].transform.position.z;

            usaPlane.transform.localScale = new Vector3((bX - aX) / 10, 1, (bZ - aZ) / 10);
            usaPlane.transform.position   = new Vector3((aX + bX) / 2, (referencePoints[0].gameObject.transform.position.y), (aZ + bZ) / 2);
            adjustAspectRatio(1.305f, usaPlane);
            //referencePoints[0].gameObject.GetComponent<Material>().color = new Color32(0, 255, 0, 255);
            //referencePoints[1].gameObject.transform.rotation.SetEulerAngles(referencePoints[1].gameObject.transform.rotation;
        }

        if (Input.touchCount == 0)
        {
            return;
        }

        Touch touch = Input.GetTouch(0);

        if (touch.phase != TouchPhase.Began)
        {
            return;
        }

        if (arRaycastManager.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon) && !planeSearch)
        {
            Pose             hitPose        = hits[0].pose;
            ARReferencePoint referencePoint = arReferencePointManager.AddReferencePoint(hitPose);

            if (referencePoint == null)
            {
                Debug.Log("There was an error creating a reference point here");
            }
            else if (!planeSearch)
            {
                referencePoints.Add(referencePoint);
            }
        }
    }
    void Update()
    {
        if (Input.touchCount == 0)
        {
            return;
        }

        Touch touch = Input.GetTouch(0);

        if (touch.phase != TouchPhase.Began)
        {
            return;
        }

        Vector3 newPos = arCamera.ScreenToWorldPoint(new Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, 0.3f));

        arReferencePointManager.AddReferencePoint(new Pose(newPos, Quaternion.identity));
    }
        IEnumerator Start()
        {
            m_ReferencePoints = new List <ARReferencePoint>();

            yield return(new WaitForSeconds(1f));

            for (int i = 0; i < m_Count; ++i)
            {
                var position = Random.insideUnitSphere * m_Radius + transform.position;
                var rotation = Quaternion.AngleAxis(Random.Range(0, 360), Random.onUnitSphere);

                var referencePoint = m_ReferencePointManager.AddReferencePoint(new Pose(position, rotation));
                if (referencePoint != null)
                {
                    m_ReferencePoints.Add(referencePoint);
                }

                yield return(new WaitForSeconds(.5f));
            }

            var previousPosition = transform.localPosition;

            while (enabled)
            {
                if (transform.hasChanged)
                {
                    var delta = transform.position - previousPosition;
                    previousPosition = transform.position;

                    foreach (var referencePoint in m_ReferencePoints)
                    {
                        var pose = new Pose(referencePoint.transform.position + delta, referencePoint.transform.rotation);
                        ReferencePointApi.Update(referencePoint.trackableId, pose, TrackingState.Tracking);

                        yield return(new WaitForSeconds(.5f));
                    }

                    transform.hasChanged = false;
                }

                yield return(null);
            }
        }
Ejemplo n.º 23
0
    void Update()
    {
        // Once Sally's placed, the plane she's stands on will be assigned to mainPlane. Then, Update is bypassed
        if (mainPlane != null)
        {
            return;
        }
        // When a plane with a decent size is detected, the cavas UI image and icod is changed for tap action
        if (!isDecentSizePlaneDetected && planeManager.trackables.count > 0)
        {
            foreach (var plane in planeManager.trackables)
            {
                // Default mininum width set to 25cm, lenght set to 70% of the width
                if (plane.extents.x > minExtentOfPlaneForTap && plane.extents.y > minExtentOfPlaneForTap * 0.7f)
                {
                    StartUI uiScript = startUI.GetComponent <StartUI>();
                    uiScript.isMainPlaneDetected = true;
                    isDecentSizePlaneDetected    = true;
                }
            }
        }

        // Quit update routine in case of no touch input
        Touch touch;

        if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
        {
            return;
        }

        // Raycast on the plane and place Sally when Sally is not visible in the beginning
        if (!isSallyVisible && isDecentSizePlaneDetected && arRaycaster.Raycast(touch.position, s_Hits, TrackableType.PlaneWithinPolygon))
        {
            // Get Camera bearing(rotation without vertical component) and set main plane
            Pose    hitPose    = s_Hits[0].pose;
            Vector3 camForward = Camera.main.transform.forward;
            Vector3 camBearing = new Vector3(camForward.x, 0, camForward.z);
            mainPlane = planeManager.GetPlane(s_Hits[0].trackableId);

            //Play tapplace sound effect//
            SoundManagerScript.Play("tapplace");

            // Make Sally visible on the plane and rotate her toward the Camera
            GameObject  sally = GameObject.Find("skinnysally");
            sallyScript s     = sally.GetComponent <sallyScript>();
            sally.transform.localScale = new Vector3(s.size, s.size, s.size);
            s.isVisible              = true;
            isSallyVisible           = true;
            sally.transform.position = hitPose.position;
            sally.transform.rotation = Quaternion.LookRotation(camBearing, mainPlane.normal);
            sally.transform.Rotate(0, 180, 0, Space.Self);

            // Match CylinderMask at sally's position and rotation and activate with the moving up direction true
            GameObject mask = GameObject.Find("CylinderMask");
            mask.GetComponent <CylinderMask>().activate(sally, true);

            // Create AR Reference point(anchor) and parent it to Sally, Zero and Mask and deactivate UI and start the flow
            ARReferencePoint anchorRefPoint = refPointManager.AddReferencePoint(hitPose);
            GameObject       anchor         = anchorRefPoint.gameObject;
            sally.transform.parent = anchor.transform;
            GameObject zero = GameObject.Find("zero");
            zero.transform.parent = anchor.transform;
            mask.transform.parent = anchor.transform;
            startUI.SetActive(false);
            inActivatePlanes();
            Invoke("startFlow", 4.0f);
        }
    }
Ejemplo n.º 24
0
    void Update()
    {
        if (!photonView.IsMine)
        {
            return;
        }
        #region AppMode.TouchToHostCloudReferencePoint
        if (m_AppMode == AppMode.TouchToHostCloudReferencePoint)
        {
            if (Input.touchCount >= 1 &&
                Input.GetTouch(0).phase == TouchPhase.Began &&
                !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
            {
                List <ARRaycastHit> hitResults = new List <ARRaycastHit>();
                RaycastManager.Raycast(Input.GetTouch(0).position, hitResults);
                if (hitResults.Count > 0)
                {
                    Pose pose = hitResults[0].pose;

                    // Create a reference point at the touch.
                    ARReferencePoint referencePoint = ReferencePointManager.AddReferencePoint(hitResults[0].pose);

                    // Create Cloud Reference Point.
                    m_CloudReferencePoint = ReferencePointManager.AddCloudReferencePoint(referencePoint);
                    if (m_CloudReferencePoint == null)
                    {
                        Message.text = "Create Failed!";
                        return;
                    }

                    //Ref point created we can now turn off environment visualization
                    StartCoroutine(VisualizePlanes(false));
                    StartCoroutine(VisualizePoints(false));
                    // Wait for the reference point to be ready.
                    m_AppMode = AppMode.WaitingForHostedReferencePoint;
                }
            }
        }
        #endregion AppMode.TouchToHostCloudReferencePoint

        #region AppMode.WaitingForHostedReferencePoint
        else if (m_AppMode == AppMode.WaitingForHostedReferencePoint)
        {
            CloudReferenceState cloudReferenceState = m_CloudReferencePoint.cloudReferenceState;

            if (cloudReferenceState == CloudReferenceState.Success)
            {
                //GameObject cloudAnchor = Instantiate(HostedPointPrefab, Vector3.zero, Quaternion.identity);
                //cloudAnchor.transform.SetParent(m_CloudReferencePoint.transform, false);

                m_CloudReferenceId = m_CloudReferencePoint.cloudReferenceId;  // Getting cloud id to share with Others

                PhotonPlayersSingleton.Instance.CloudReferencePointId = m_CloudReferenceId;

                //m_CloudReferencePoint = null;

                //m_AppMode = AppMode.TouchToResolveCloudReferencePoint;

                this.photonView.RPC("Set_CloudReferenceId", RpcTarget.OthersBuffered, m_CloudReferenceId);
                m_AppMode = AppMode.WaitingForResolvedReferencePoint;
            }
        }
        #endregion AppMode.WaitingForHostedReferencePoint

        #region AppMode.ResolveCloudReferencePoint
        //All other than MasterClient
        else if (m_AppMode == AppMode.ResolveCloudReferencePoint && PhotonPlayersSingleton.Instance.CloudReferencePointId != "" && PhotonPlayersSingleton.Instance.CloudReferencePointId != null)
        {
            m_CloudReferencePoint = null;
            m_CloudReferencePoint = ReferencePointManager.ResolveCloudReferenceId(PhotonPlayersSingleton.Instance.CloudReferencePointId);

            if (m_CloudReferencePoint == null)
            {
                Message.text = "Resolve Failed!";
                return;
            }
            m_AppMode    = AppMode.WaitingForResolvedReferencePoint;
            Message.text = "Mode: AppMode.WaitingForResolvedReferencePoint";
        }
        #endregion AppMode.ResolveCloudReferencePoint

        #region AppMode.WaitingForResolvedReferencePoint
        else if (m_AppMode == AppMode.WaitingForResolvedReferencePoint)
        {
            CloudReferenceState cloudReferenceState = m_CloudReferencePoint.cloudReferenceState;
            if (cloudReferenceState == CloudReferenceState.Success)
            {
                Message.text = "XCloudReferenceId: " + PhotonPlayersSingleton.Instance.CloudReferencePointId +
                               "\nCloudReferencePoint position: " + m_CloudReferencePoint.transform.position.ToString();

                GameObject cloudAnchor = Instantiate(ResolvedPointPrefab, Vector3.zero, Quaternion.identity);

                //if (PhotonNetwork.LocalPlayer.IsMasterClient)
                {
                    cloudAnchor.transform.SetParent(m_CloudReferencePoint.transform, false);
                    StartCoroutine(VisualizePlanes(false));
                    StartCoroutine(VisualizePoints(false));
                }

                PhotonPlayersSingleton.Instance.LocalPlayerCloudReferencePose = m_CloudReferencePoint.pose;
                m_AppMode    = AppMode.Finished;
                Message.text = "Mode: AppMode.Finished";

                //this.enabled = false;  //
            }
        }
        #endregion AppMode.WaitingForResolvedReferencePoint
    }
Ejemplo n.º 25
0
    /// <summary>
    /// Runs once per frame
    /// </summary>
    void FixedUpdate()
    {
        // Checks to see if player is out of ammo. If so, triggers the replay canvas
        if (outOfAmmo)
        {
            gameOver.Play();
            replayCanvas.SetActive(true);
        }

        // Runs only once to make the reference point for the ammo the player interacts with.
        // It sets the spawned prefab as a child of the camera, then we save that child as a
        // game object - ammo. Center position of ammo is also set.
        if (flag == 0)
        {
            gameCanvas.SetActive(true);
            spawnedObjectRef = m_ReferencePoint.AddReferencePoint(ammoPose);
            spawnedObjectRef.transform.SetParent(mainCamera.transform, false);
            ammo      = mainCamera.gameObject.transform.GetChild(0).gameObject;
            centerPos = spawnedObjectRef.transform.position;
            flag      = 1;
        }

        // Detects if player touches the screen.
        if (spawnedObjectRef && Input.touchCount > 0)
        {
            ammoPickup.Play();
            if ((Input.GetTouch(0).phase == TouchPhase.Moved))
            {
                Touch touch = Input.GetTouch(0);

                if (m_RaycastManager.Raycast(touch.position, s_Hits, TrackableType.FeaturePoint))
                {
                    ammo.transform.position = s_Hits[0].pose.position + Vector3.zero;
                }
            }

            // Occurs when player releases the ammo
            if (Input.GetTouch(0).phase == TouchPhase.Ended)
            {
                ammoDrop.Play();
                ammo.transform.position = centerPos;
                scoreText.text          = "Score: " + score.ToString();
                score += 5;
                if (bullet7.activeSelf)
                {
                    bullet7.SetActive(false);
                }
                else if (bullet6.activeSelf)
                {
                    bullet6.SetActive(false);
                }
                else if (bullet5.activeSelf)
                {
                    bullet5.SetActive(false);
                }
                else if (bullet4.activeSelf)
                {
                    bullet4.SetActive(false);
                }
                else if (bullet3.activeSelf)
                {
                    bullet3.SetActive(false);
                }
                else if (bullet2.activeSelf)
                {
                    bullet2.SetActive(false);
                }
                else if (bullet1.activeSelf)
                {
                    bullet1.SetActive(false);
                    outOfAmmo = true;
                }
            }
        }
    }
Ejemplo n.º 26
0
    void FixedUpdate()
    {
        if (outOfAmmo)
        {
            replayCanvas.SetActive(true);
        }

        if (flag == 0)
        {
            // spawnedObjectRef = Instantiate(ammo, new Vector3(0f, 0f, 0.3f), Quaternion.identity);
            // spawnedObjectRef.transform.SetParent(mainCamera.transform, false);
            // Vector3 centerPos = spawnedObjectRef.position;
            // flag = 1;
            gameCanvas.SetActive(true);

            spawnedObjectRef = m_ReferencePoint.AddReferencePoint(ammoPose);
            spawnedObjectRef.transform.SetParent(mainCamera.transform, false);
            ammo = mainCamera.gameObject.transform.GetChild(0).gameObject;
            Debug.Log("*** ammo variable: " + ammo + " ***");
            Debug.Log("*** ammo variable type: " + ammo.GetType() + " ***");
            centerPos = spawnedObjectRef.transform.position;
            Debug.Log("*** centerPos: " + centerPos + " ***");
            flag = 1;
        }
        if (spawnedObjectRef && Input.touchCount > 0)
        {
            if ((Input.GetTouch(0).phase == TouchPhase.Moved))
            {
                Touch touch = Input.GetTouch(0);
                Debug.Log("*** Got here, but.... ***");
                if (m_RaycastManager.Raycast(touch.position, s_Hits, TrackableType.FeaturePoint))
                {
                    Debug.Log("***** GET HERE? ***");
                    // Vector3 pos = touch.position;

                    // ammo.transform.position = touch.position;
                    ammo.transform.position = s_Hits[0].pose.position + Vector3.zero;

                    // spawnedObjectRef.transform.position = new Vector3(
                    //  spawnedObjectRef.transform.position.x + touch.deltaPosition.x * speed,
                    //  spawnedObjectRef.transform.position.y,
                    //  spawnedObjectRef.transform.position.z + touch.deltaPosition.y * speed
                    // );

                    // touchPos = mainCamera.ScreenToWorldPoint(touch.position);
                    // touchPos.z = 0;
                    // direction = (touchPos - transform.position);
                    // rb = spawnedObjectRef.GetComponent<Rigidbody>();
                    // rb.velocity = new Vector2(direction.x, direction.y) * speed;
                }
            }
            if (Input.GetTouch(0).phase == TouchPhase.Ended)
            {
                ammo.transform.position = centerPos;
                scoreText.text          = "Score: " + score.ToString();
                score += 5;
                if (bullet7.activeSelf)
                {
                    bullet7.SetActive(false);
                }
                else if (bullet6.activeSelf)
                {
                    bullet6.SetActive(false);
                }
                else if (bullet5.activeSelf)
                {
                    bullet5.SetActive(false);
                }
                else if (bullet4.activeSelf)
                {
                    bullet4.SetActive(false);
                }
                else if (bullet3.activeSelf)
                {
                    bullet3.SetActive(false);
                }
                else if (bullet2.activeSelf)
                {
                    bullet2.SetActive(false);
                }
                else if (bullet1.activeSelf)
                {
                    bullet1.SetActive(false);
                    outOfAmmo = true;
                }
            }
        }
    }
Ejemplo n.º 27
0
    void Update()
    {
        if (Input.touchCount == 0)
        {
            return;
        }
        Touch touch = Input.GetTouch(0);

        if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject(touch.fingerId))
        {
            return;
        }

        if (touch.phase != TouchPhase.Began)
        {
            return;
        }

        Ray        ray = arCamera.ScreenPointToRay(touch.position);
        RaycastHit hitObject;

        if (Physics.Raycast(ray, out hitObject))
        {
            debugLog.gameObject.SetActive(true);
            removeBallButton.gameObject.SetActive(true);
            ChangeColor(Color.gray);

            GameObject obj = hitObject.transform.gameObject;
            selectedBall = obj;

            ChangeColor(Color.red);
        }
        else
        {
            if (selectedBall != null)
            {
                ChangeColor(Color.gray);
                selectedBall = null;
                removeBallButton.gameObject.SetActive(false);
                return;
            }

            if (arRaycastManager.Raycast(touch.position, hits, TrackableType.FeaturePoint))
            {
                Pose             hitPose        = hits[0].pose;
                ARReferencePoint referencePoint = arReferencePointManager.AddReferencePoint(hitPose);

                if (referencePoint == null)
                {
                    debugLog.gameObject.SetActive(true);
                    string errorEntry = "There was an error creating a reference point\n";
                    Debug.Log(errorEntry);
                    debugLog.text += errorEntry;
                }
                else
                {
                    referencePoints.Add(referencePoint);
                    referencePointCount.text = $"Reference Point Count: {referencePoints.Count}";
                }
            }
        }
    }
Ejemplo n.º 28
0
        void Update()
        {
            if (m_AppMode == AppMode.TouchToHostCloudReferencePoint)
            {
                OutputText.text = m_AppMode.ToString();

                if (Input.touchCount >= 1 &&
                    Input.GetTouch(0).phase == TouchPhase.Began &&
                    !EventSystem.current.IsPointerOverGameObject(
                        Input.GetTouch(0).fingerId))
                {
                    List <ARRaycastHit> hitResults = new List <ARRaycastHit>();
                    RaycastManager.Raycast(Input.GetTouch(0).position, hitResults);
                    if (hitResults.Count > 0)
                    {
                        Pose pose = hitResults[0].pose;

                        // Create a reference point at the touch.
                        ARReferencePoint referencePoint =
                            ReferencePointManager.AddReferencePoint(
                                hitResults[0].pose);

                        // Create Cloud Reference Point.
                        m_CloudReferencePoint =
                            ReferencePointManager.AddCloudReferencePoint(
                                referencePoint);
                        if (m_CloudReferencePoint == null)
                        {
                            OutputText.text = "Create Failed!";
                            return;
                        }

                        // Wait for the reference point to be ready.
                        m_AppMode = AppMode.WaitingForHostedReferencePoint;
                    }
                }
            }
            else if (m_AppMode == AppMode.WaitingForHostedReferencePoint)
            {
                OutputText.text = m_AppMode.ToString();

                CloudReferenceState cloudReferenceState =
                    m_CloudReferencePoint.cloudReferenceState;
                OutputText.text += " - " + cloudReferenceState.ToString();

                if (cloudReferenceState == CloudReferenceState.Success)
                {
                    GameObject cloudAnchor = Instantiate(
                        HostedPointPrefab,
                        Vector3.zero,
                        Quaternion.identity);
                    cloudAnchor.transform.SetParent(
                        m_CloudReferencePoint.transform, false);

                    m_CloudReferenceId    = m_CloudReferencePoint.cloudReferenceId;
                    m_CloudReferencePoint = null;

                    m_AppMode = AppMode.TouchToResolveCloudReferencePoint;
                }
            }
            else if (m_AppMode == AppMode.TouchToResolveCloudReferencePoint)
            {
                OutputText.text = m_CloudReferenceId;

                if (Input.touchCount >= 1 &&
                    Input.GetTouch(0).phase == TouchPhase.Began &&
                    !EventSystem.current.IsPointerOverGameObject(
                        Input.GetTouch(0).fingerId))
                {
                    m_CloudReferencePoint =
                        ReferencePointManager.ResolveCloudReferenceId(
                            m_CloudReferenceId);
                    if (m_CloudReferencePoint == null)
                    {
                        OutputText.text    = "Resolve Failed!";
                        m_CloudReferenceId = string.Empty;
                        m_AppMode          = AppMode.TouchToHostCloudReferencePoint;
                        return;
                    }

                    m_CloudReferenceId = string.Empty;

                    // Wait for the reference point to be ready.
                    m_AppMode = AppMode.WaitingForResolvedReferencePoint;
                }
            }
            else if (m_AppMode == AppMode.WaitingForResolvedReferencePoint)
            {
                OutputText.text = m_AppMode.ToString();

                CloudReferenceState cloudReferenceState =
                    m_CloudReferencePoint.cloudReferenceState;
                OutputText.text += " - " + cloudReferenceState.ToString();

                if (cloudReferenceState == CloudReferenceState.Success)
                {
                    GameObject cloudAnchor = Instantiate(
                        ResolvedPointPrefab,
                        Vector3.zero,
                        Quaternion.identity);
                    cloudAnchor.transform.SetParent(
                        m_CloudReferencePoint.transform, false);

                    m_CloudReferencePoint = null;

                    m_AppMode = AppMode.TouchToHostCloudReferencePoint;
                }
            }
        }
    void Update()
    {
        if (placementTimer >= generateAfterSeconds)
        {
            placementTimer = 0;
            GroupBalls();
        }
        else
        {
            placementTimer += Time.deltaTime * 1.0f;
        }
        if (lineRenderer != null)
        {
            Vector3 newPos = arCamera.transform.position;
            if (PositionChanged(newPos))
            {
                if (index >= lineRenderer.positionCount)
                {
                    lineRenderer.positionCount++;
                }
                lineRenderer.SetPosition(index++, newPos);
            }
        }

        if (Input.touchCount == 0)
        {
            return;
        }
        Touch touch = Input.GetTouch(0);

        if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject(touch.fingerId))
        {
            return;
        }

        if (touch.phase != TouchPhase.Began)
        {
            return;
        }

        Ray        ray = arCamera.ScreenPointToRay(touch.position);
        RaycastHit hitObject;

        if (Physics.Raycast(ray, out hitObject))
        {
            debugLog.gameObject.SetActive(true);
            removeBallButton.gameObject.SetActive(true);
            ChangeColor(Color.gray);
            GroupBalls();

            GameObject obj = hitObject.transform.gameObject;
            selectedBall = obj;

            ChangeColor(Color.red);
        }
        else
        {
            if (selectedBall != null)
            {
                ChangeColor(Color.gray);
                GroupBalls();
                selectedBall = null;
                removeBallButton.gameObject.SetActive(false);
                return;
            }

            if (arRaycastManager.Raycast(touch.position, hits, TrackableType.FeaturePoint))
            {
                Pose             hitPose        = hits[0].pose;
                ARReferencePoint referencePoint = arReferencePointManager.AddReferencePoint(hitPose);

                if (referencePoint == null)
                {
                    debugLog.gameObject.SetActive(true);
                    string errorEntry = "There was an error creating a reference point\n";
                    Debug.Log(errorEntry);
                    debugLog.text += errorEntry;
                }
                else
                {
                    referencePoints.Add(referencePoint);
                    referencePointCount.text = $"Reference Point Count: {referencePoints.Count}";
                }
            }
        }
    }
    void Update()
    {
        //When the master client place the popcorn machine in their local copy, isPlaced=true
        if (m_AppMode == AppMode.ReadyToHostCloudReferencePoint && isPlaced)
        {
            placePos        = new Pose(popcornMachine.transform.position, Quaternion.identity);
            OutputText.text = m_AppMode.ToString();
            ARReferencePoint referencePoint =
                ReferencePointManager.AddReferencePoint(
                    placePos);

            // Create Cloud Reference Point.
            m_CloudReferencePoint =
                ReferencePointManager.AddCloudReferencePoint(
                    referencePoint);
            if (m_CloudReferencePoint == null)
            {
                OutputText.text = "Create Failed!";
                return;
            }

            // Wait for the reference point to be ready.
            m_AppMode = AppMode.WaitingForHostedReferencePoint;
        }

        else if (m_AppMode == AppMode.WaitingForHostedReferencePoint)
        {
            CloudReferenceState cloudReferenceState =
                m_CloudReferencePoint.cloudReferenceState;

            if (cloudReferenceState == CloudReferenceState.Success)
            {
                //Instantiate an empty game object to indicate the cloud anchor is placed at the position, can be replaced with other game object for debugging
                OutputText.text = "Success! Click Ready when you are ready";
                GameObject cloudAnchor = Instantiate(
                    HostedPointPrefab,
                    Vector3.zero,
                    Quaternion.identity);
                cloudAnchor.transform.SetParent(
                    m_CloudReferencePoint.transform, false);

                //Popcorn machine will follow the transform of cloud anchor
                popcornMachine.transform.position = cloudAnchor.transform.position;
                popcornMachine.transform.SetParent(m_CloudReferencePoint.transform);

                //Get the cloud anchor reference Id and send this ID to other clients
                m_CloudReferenceId    = m_CloudReferencePoint.cloudReferenceId;
                m_CloudReferencePoint = null;
                _photonView.RPC("setCloudReferenceId", RpcTarget.Others, m_CloudReferenceId);
            }
            else
            {
                OutputText.text = /*m_AppMode.ToString() +*/ " Please wait for a few seconds..." + " - " + cloudReferenceState.ToString();
            }
        }

        else if (m_AppMode == AppMode.ReadyToResolveCloudReferencePoint)
        {
            OutputText.text = m_CloudReferenceId;
            {
                m_CloudReferencePoint =
                    ReferencePointManager.ResolveCloudReferenceId(
                        m_CloudReferenceId);
                if (m_CloudReferencePoint == null)
                {
                    OutputText.text    = "Resolve Failed!";
                    m_CloudReferenceId = string.Empty;
                    return;
                }

                m_CloudReferenceId = string.Empty;

                // Wait for the reference point to be ready.
                m_AppMode = AppMode.WaitingForResolvedReferencePoint;
            }
        }

        else if (m_AppMode == AppMode.WaitingForResolvedReferencePoint)
        {
            CloudReferenceState cloudReferenceState =
                m_CloudReferencePoint.cloudReferenceState;
            if (cloudReferenceState == CloudReferenceState.Success)
            {
                OutputText.text = "Success! Click Ready when you are ready";
                GameObject cloudAnchor = Instantiate(
                    ResolvedPointPrefab,
                    Vector3.zero,
                    Quaternion.identity);
                cloudAnchor.transform.SetParent(
                    m_CloudReferencePoint.transform, false);
                popcornMachine.transform.position = cloudAnchor.transform.position;
                popcornMachine.transform.SetParent(m_CloudReferencePoint.transform);
                m_CloudReferencePoint = null;
            }
            else
            {
                OutputText.text = /*m_AppMode.ToString()+*/ " Please wait for a few seconds..." + " - " + cloudReferenceState.ToString();
            }
        }
    }