Ejemplo n.º 1
0
    // Description:
    // Updates the UI position and displays the correct
    // menu for the input index in the grid.
    private void UpdatePlacementUI(Vector2 touchPosition, bool updatePosition = true)
    {
        // Update position
        if (updatePosition)
        {
            PlacementUI.transform.position = new Vector3(touchPosition.x, touchPosition.y, PlacementUI.transform.position.z);
        }

        bool foregroundObjectPresent = levelManager.isObjectAtPosition(touchPosition),
             backgroundObjectPresent = levelManager.isBackgroundObjectAtPosition(touchPosition);

        // Display correct menu
        if (!backgroundObjectPresent && !foregroundObjectPresent)
        {
            PlacementUI.transform.Find("ReplaceRemove").gameObject.SetActive(false);
            PlacementUI.transform.Find("ReplaceRemove/PathBtn").gameObject.SetActive(false);
        }
        else
        {
            PlacementUI.transform.Find("ReplaceRemove").gameObject.SetActive(true);
            PlacementUI.transform.Find("ReplaceRemove/PathBtn").gameObject.SetActive(false);
            bool showReplaceButton = activeKey != "" &&
                                     (database[activeKey].first.tag != "PaintableBackground" && foregroundObjectPresent ||
                                      database[activeKey].first.tag == "PaintableBackground" && backgroundObjectPresent);
            PlacementUI.transform.Find("ReplaceRemove/ReplaceBtn").gameObject.SetActive(showReplaceButton);
            pathSliderGroup.SetActive(false);
            jumpSliderGroup.SetActive(false);
            moveSliderGroup.SetActive(false);
            aiHorizMoveSliderGroup.SetActive(false);

            Pair <GameObject, GameObject> selectedObject;
            if (foregroundObjectPresent)
            {
                selectedObject = levelManager.getObjectAtPosition(touchPosition);
            }
            else
            {
                selectedObject = levelManager.getBackgroundObjectAtPosition(touchPosition);
            }

            PathFollowing p = selectedObject.second.GetComponent <PathFollowing>();
            if (p != null)
            {
                p.startDrawingPath();
            }

            p = selectedObject.first.GetComponent <PathFollowing>();
            if (p != null)
            {
                PlacementUI.transform.Find("ReplaceRemove/PathBtn").gameObject.SetActive(true);

                if (!p.isEmpty())
                {
                    pathSliderGroup.SetActive(true);
                }

                if (p.currentState == PathFollowing.PathState.Idle)
                {
                    p.setStateToPlaying();
                    lastObjectSelected = selectedObject;

                    // Set slider tab to correct position
                    float xpos = (((p.pathSpeed - 1f) / 8f) * 5.6f) - 2.8f;
                    pathSliderTab.transform.localPosition = new Vector3(xpos, pathSliderTab.transform.localPosition.y, 0f);
                }
            }

            Jump j = selectedObject.first.GetComponent <Jump>();
            if (j != null)
            {
                jumpSliderGroup.SetActive(true);
                float xpos = (((j.burst - 2f) / 8f) * 5.6f) - 2.8f;
                jumpSliderTab.transform.localPosition = new Vector3(xpos, jumpSliderTab.transform.localPosition.y, 0f);
            }

            Move m = selectedObject.first.GetComponent <Move>();
            if (m != null)
            {
                moveSliderGroup.SetActive(true);
                float speed = 0f;
                for (int i = 0; i < 4; i++)
                {
                    if (!Mathf.Approximately(m.maxSpeed[i], 0f))
                    {
                        speed = m.maxSpeed[i];
                        break;
                    }
                }

                if (!Mathf.Approximately(speed, 0f))
                {
                    float xpos = (((speed - 2f) / 8f) * 5.6f) - 2.8f;
                    moveSliderTab.transform.localPosition = new Vector3(xpos, moveSliderTab.transform.localPosition.y, 0f);
                }
            }

            MoveHorizontalUntilCollision mh = selectedObject.first.GetComponent <MoveHorizontalUntilCollision>();
            if (mh != null)
            {
                aiHorizMoveSliderGroup.SetActive(true);
                if (!Mathf.Approximately(mh.speed, 0f))
                {
                    float xpos = ((mh.speed / 8f) * 5.6f) - 2.8f;
                    aiHorizMoveSliderTab.transform.localPosition = new Vector3(xpos, aiHorizMoveSliderTab.transform.localPosition.y, 0f);
                }
            }
        }
    }