public void Clear()
    {
        if (spawnedObject != null)
        {
            // Destroy existing object
            Destroy(spawnedObject);

            ObjectPlaced?.Invoke(null);
        }
    }
Exemplo n.º 2
0
    // Update is called once per frame
    void Update()
    {
        RaycastHit hit;

        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit))
            {
                if (hit.collider.GetComponent <PlaceToGo>())
                {
                    myPlaceToGo = hit.collider.GetComponent <PlaceToGo>();
                    avatarAgent.SetDestination(myPlaceToGo.positionAvatar);
                    placeToGoIsNext      = true;
                    objectToPlacedIsNext = false;
                }
                else if (hit.collider.GetComponent <ObjectPlaced>())
                {
                    myObjectPlaced = hit.collider.GetComponent <ObjectPlaced>();
                    avatarAgent.SetDestination(myObjectPlaced.positionAvatar);
                    objectToPlacedIsNext = true;
                    placeToGoIsNext      = false;
                }
                else
                {
                    placeToGoIsNext      = false;
                    objectToPlacedIsNext = false;
                    avatarAgent.SetDestination(hit.point);
                }
            }
        }

        if (placeToGoIsNext)
        {
            if (Mathf.Abs(avatar.transform.position.x - avatarAgent.destination.x) < 0.11f && Mathf.Abs(avatar.transform.position.z - avatarAgent.destination.z) < 0.11f)
            {
                Debug.Log("give");
                placeToGoIsNext = false;
            }
        }

        if (objectToPlacedIsNext)
        {
            if (Mathf.Abs(avatar.transform.position.x - avatarAgent.destination.x) < 0.11f && Mathf.Abs(avatar.transform.position.z - avatarAgent.destination.z) < 0.11f)
            {
                Debug.Log("take");
                //objectIHave.Add (PlaceToGo)
                objectToPlacedIsNext = false;
            }
        }
    }
Exemplo n.º 3
0
    public void Place(BoardObject obj, Vector2Int position)
    {
        if (objects.ContainsKey(position))
        {
            Debug.LogError($"Position {position} already contains object.");
            return;
        }
        if (objects.ContainsValue(obj))
        {
            objects.Remove(GetPosition(obj));
        }
        objects[position] = obj;

        ObjectPlaced?.Invoke(obj, position);
    }
    void Update()
    {
        if (Input.touchCount == 0)
        {
            return;
        }

        Touch touch = Input.GetTouch(0);

        if (IsTouchOverUIObject(touch))
        {
            return;
        }

        if (touch.phase == TouchPhase.Began)
        {
            if (m_RaycastManager.Raycast(touch.position, m_Hits, TrackableType.PlaneWithinPolygon))
            {
                Pose hitPose = m_Hits[0].pose;

                if (spawnedObject != null)
                {
                    // Destroy existing object
                    Destroy(spawnedObject);
                }

                spawnedObject = Instantiate(placedPrefab, hitPose.position, hitPose.rotation);

                // content face the user
                Vector3 lookVector = Camera.main.transform.position - spawnedObject.transform.position;
                spawnedObject.transform.rotation = Quaternion.LookRotation(lookVector, Vector3.up);
                spawnedObject.transform.rotation = new Quaternion(0, spawnedObject.transform.rotation.y, 0, spawnedObject.transform.rotation.w) * Quaternion.Euler(0, 180, 0);

                ObjectPlacementHandler objectPlacementHandler = spawnedObject.GetComponent <ObjectPlacementHandler>();

                objectPlacementHandler.SetObject(hitPose.position);
                m_UIPanelRoot.SetActive(true);

                ObjectPlaced?.Invoke(objectPlacementHandler);
            }
        }
    }