예제 #1
0
    public override void OnInspectorGUI()
    {
        EnvironmentElement element = (EnvironmentElement)target;


        if (GUILayout.Button("ApplyToTilemap", GUILayout.Width(200)))
        {
            if (element.tile != null)
            {
                element.tile.SetOccupied(false);
                EditorUtility.SetDirty(element.tile);
            }


            Vector3 pos = element.transform.position;
            pos.y -= 0.1f;
            GameObject collider = M_GameHelper.SGetObjectAtWorldPoint(pos);

            Tile tile = collider.transform.parent.gameObject.GetComponent <Tile>();

            if (tile != null)
            {
                pos   = tile.gameObject.transform.position;
                pos.y = M_MapManager.SGetYDepthValue(pos.z);
                element.transform.position = pos;
                element.tile = tile;
                tile.SetOccupied(true);
                EditorUtility.SetDirty(element);
                EditorUtility.SetDirty(element.tile);
            }
        }
    }
예제 #2
0
    /// <summary> Function called when Building is supposed to be placed. </summary>
    private void OnBuildingBuildIconClick()
    {
        // check whether the place is not occupied.
        foreach (Tile tile in m_tilesHighlighted)
        {
            if (tile.IsOccupied())
            {
                return;
            }
        }

        UT_Pair <int, int> cost = M_BuildingManager.SGetBuildingCost(m_tempBuildingComp.GetData().id);

        // Apply cost to the resources
        M_InGameResourcesManager.SAddFood(-cost.first);
        M_InGameResourcesManager.SAddResearch(-cost.second);

        // Mark highlighted tiles as occupied
        foreach (Tile tile in m_tilesHighlighted)
        {
            tile.SetOccupied(true);
            tile.Highlight(false);
        }
        // set final building position
        Vector3 pos = m_currentMiddleTile.transform.position;

        pos.y = M_MapManager.SGetYDepthValue(pos.z);
        m_tempBuildingObj.transform.position = pos;
        // Move to the BUILDINGS group
        M_GameHelper.AddToGroup(m_tempBuildingObj, M_GameHelper.Group.BUILDINGS);

        m_tempBuildingComp.SetActionOnBuildingFinished(ActionOnBuildingFinished);
        // Start in-game building process
        m_tempBuildingComp.StartBuilding();


        m_onBuildingPlacedAction(m_tempBuildingComp);

        // reset values
        m_tempBuildingObj.GetComponent <IBuilding>().GetBuildButton().SetActive(false);
        m_tempBuildingObj   = null;
        m_tempBuildingComp  = null;
        m_currentMiddleTile = null;
        m_tilesHighlighted.Clear();
        M_MiscManager.ShowCancelButton(false);
    }
예제 #3
0
    public void Update()
    {
        switch (SystemInfo.deviceType)
        {
        case DeviceType.Desktop:
            m_currentTrackedModel = M_GameHelper.SGetObjectAtScreenPoint(Input.mousePosition);
            break;

        case DeviceType.Handheld:
            if (Input.touchCount > 0)
            {
                m_currentTrackedModel = M_GameHelper.SGetObjectAtScreenPoint(Input.GetTouch(0).position);
            }
            break;
        }

        if (m_processing)
        {
            m_freezeTimeElapsed += Time.deltaTime;
        }

        if (m_freezeTimeElapsed > CLICK_TIME)
        {
            switch (SystemInfo.deviceType)
            {
            case DeviceType.Desktop:

                if (m_leftButtonDown)
                {
                    m_leftButtDownTimeElapsed += Time.deltaTime;
                }


                if (Input.GetMouseButtonDown(0)) // On Start
                {
                    m_leftButtDownTimeElapsed = 0f;
                    m_leftButtonDown          = true;
                    m_draggingCandidate       = m_currentTrackedModel;

                    // Examine if object should be clicked. if not then skip to dragging examination.
                    if (m_currentTrackedModel != null)
                    {
                        ClickableObject clickable = m_currentTrackedModel.GetComponent <ClickableObject>();
                        DraggableObject draggable = m_currentTrackedModel.GetComponent <DraggableObject>();
                        if (clickable != null && clickable.disabled && draggable != null && draggable.draggingEnabled)
                        {
                            m_leftButtDownTimeElapsed = CLICK_TIME * 2;
                            CameraController.SSetOverallMovement(false);
                            m_currentDraggedObject = m_currentTrackedModel.gameObject.transform.parent.gameObject;
                        }
                    }
                    //
                }
                else if (Input.GetMouseButtonUp(0) && m_leftButtDownTimeElapsed < CLICK_TIME)   // OnClick
                {
                    if (m_currentTrackedModel != null)
                    {
                        ClickableObject comp = m_currentTrackedModel.transform.parent.gameObject.GetComponent <ClickableObject>();
                        if (comp != null)
                        {
                            comp.OnClick();
                        }
                    }
                    m_leftButtonDown          = false;
                    m_leftButtDownTimeElapsed = 0f;
                    m_currentTrackedModel     = null;
                    m_draggingCandidate       = null;
                }
                else if (Input.GetMouseButtonUp(0) && m_leftButtDownTimeElapsed > CLICK_TIME)   // End of dragging
                {
                    m_leftButtonDown          = false;
                    m_leftButtDownTimeElapsed = 0f;
                    m_currentDraggedObject    = null;
                }


                // Examine for dragging
                if (m_currentDraggedObject == null && m_leftButtDownTimeElapsed > CLICK_TIME)
                {
                    // get a parent object
                    if (m_draggingCandidate != null)
                    {
                        m_currentDraggedObject     = m_draggingCandidate.transform.parent.gameObject;
                        m_currentDraggedObjectComp = m_currentDraggedObject.GetComponent <DraggableObject>();
                        if (!(m_currentDraggedObjectComp != null && m_currentDraggedObjectComp.draggingEnabled))
                        {
                            m_currentDraggedObject = null;
                        }
                        m_draggingCandidate = null;
                    }
                }
                else if (m_currentDraggedObject != null)     // Dragging
                {
                    Vector3 temp = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                    if (m_currentDraggedObjectComp.keepHighYDepthValue)
                    {
                        temp.y = M_MapManager.SGetHighYDepthValue(temp.z);
                    }
                    else
                    {
                        temp.y = M_MapManager.SGetYDepthValue(temp.z);
                    }
                    m_currentDraggedObject.transform.position = temp;
                }
                break;

            // ------- Handheld --------
            case DeviceType.Handheld:

                StringBuilder stringBuilder = new StringBuilder();

                if (m_leftButtonDown)
                {
                    m_leftButtDownTimeElapsed += Time.deltaTime;
                }


                // Examine for dragging
                if (m_currentDraggedObject == null && m_leftButtDownTimeElapsed > CLICK_TIME)
                {
                    // get a parent object
                    if (m_draggingCandidate != null)
                    {
                        m_currentDraggedObject     = m_draggingCandidate.transform.parent.gameObject;
                        m_currentDraggedObjectComp = m_currentDraggedObject.GetComponent <DraggableObject>();
                        if (!(m_currentDraggedObjectComp != null && m_currentDraggedObjectComp.draggingEnabled))
                        {
                            m_currentDraggedObject = null;
                        }
                        else
                        {
                            CameraController.SSetOverallMovement(false);
                        }
                        m_draggingCandidate = null;
                    }
                }



                if (m_processing)
                {
                    m_freezeTimeElapsed += Time.deltaTime;
                }

                if (m_freezeTimeElapsed > CLICK_TIME)
                {
                    if (Input.touchCount > 0)
                    {
                        Touch touch = Input.GetTouch(0);

                        switch (touch.phase)
                        {
                        case TouchPhase.Began:
                            stringBuilder.AppendLine("Began: " + touch.position);

                            m_leftButtDownTimeElapsed = 0f;
                            m_leftButtonDown          = true;
                            m_draggingCandidate       = m_currentTrackedModel;

                            // Examine if object should be clicked. if not then skip to dragging examination.
                            if (m_currentTrackedModel != null)
                            {
                                ClickableObject clickable = m_currentTrackedModel.GetComponent <ClickableObject>();
                                DraggableObject draggable = m_currentTrackedModel.GetComponent <DraggableObject>();
                                if (clickable != null && clickable.disabled && draggable != null && draggable.draggingEnabled)
                                {
                                    m_leftButtDownTimeElapsed = CLICK_TIME * 2;
                                    CameraController.SSetOverallMovement(false);
                                    m_currentDraggedObject = m_currentTrackedModel.gameObject.transform.parent.gameObject;
                                }
                            }
                            //

                            break;

                        case TouchPhase.Moved:
                            stringBuilder.AppendLine("Moved: " + touch.position);

                            if (m_currentDraggedObject != null)         // Dragging
                            {
                                Vector3 temp = Camera.main.ScreenToWorldPoint(touch.position);
                                if (m_currentDraggedObjectComp.keepHighYDepthValue)
                                {
                                    temp.y = M_MapManager.SGetHighYDepthValue(temp.z);
                                }
                                else
                                {
                                    temp.y = M_MapManager.SGetYDepthValue(temp.z);
                                }
                                m_currentDraggedObject.transform.position = temp;
                            }

                            break;

                        case TouchPhase.Ended:
                            stringBuilder.AppendLine("Ended: " + touch.position);

                            if (m_leftButtDownTimeElapsed < CLICK_TIME)     // OnClick
                            {
                                if (m_currentTrackedModel != null)
                                {
                                    ClickableObject comp = m_currentTrackedModel.transform.parent.gameObject.GetComponent <ClickableObject>();
                                    if (comp != null)
                                    {
                                        comp.OnClick();
                                    }
                                }
                                m_leftButtonDown          = false;
                                m_leftButtDownTimeElapsed = 0f;
                                m_currentTrackedModel     = null;
                                m_draggingCandidate       = null;
                            }
                            else       // End of dragging
                            {
                                m_leftButtonDown          = false;
                                m_leftButtDownTimeElapsed = 0f;
                                m_currentDraggedObject    = null;
                                CameraController.SSetOverallMovement(true);
                            }
                            break;
                        }
                    }
                    else
                    {
                        stringBuilder.AppendLine("No touch");
                    }
                }

                stringBuilder.AppendLine("CurrentDraggedObject: " + (m_currentDraggedObject == null ? "NULL" : m_currentDraggedObject.name));
                stringBuilder.AppendLine("CurrentTrackedModel: " + (m_currentTrackedModel == null ? "NULL" : m_currentTrackedModel.name));
                stringBuilder.AppendLine("DraggingCandidate " + (m_draggingCandidate == null ? "NULL" : m_draggingCandidate.name));
                M_GameHelper.debugText = stringBuilder.ToString();
                break;
            }
        }
    }