예제 #1
0
 public void Update()
 {
     if (GameManager.Instance != null)
     {
         if (!PointerHelper.IsPointerOverGameObject())
         {
             if (Input.GetMouseButtonDown(0) ||
                 Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began)
             {
                 CloseMenu();
             }
         }
     }
 }
예제 #2
0
    public void Update()
    {
        if (Console.Instance && Console.Instance.ConsoleState == ConsoleState.Large)
        {
            return;
        }

        if (PointerImage.sprite != null)
        {
            Vector2 mousePosition           = Input.mousePosition;
            bool    isPointerOverGameObject = PointerHelper.IsPointerOverGameObject();
            if (isPointerOverGameObject && BuildMenuContainer.Instance.IsOpen)
            {
                PointerImageGO.transform.position = new Vector2(mousePosition.x, mousePosition.y);
            }
            else
            {
                if (BuildMenuContainer.Instance.IsOpen)
                {
                    Logger.Log(Logger.UI, "Close build menu");
                    BuildMenuContainer.Instance.ActivateAnimationFreeze();

                    BuildMenuContainer.Instance.IsOpen = false;
                    BuildMenuContainer.Instance.RemoveBuildMenuContent(0.5f);
                }
                Vector2 mouseWorldPosition = Camera.main.ScreenToWorldPoint(mousePosition);
                mouseWorldPosition = new Vector2(mouseWorldPosition.x, mouseWorldPosition.y + 7.5f);

                float xx = Mathf.Round((mouseWorldPosition.y) / TileSizeInUnits.y + (mouseWorldPosition.x) / TileSizeInUnits.x);
                float yy = Mathf.Round((mouseWorldPosition.y) / TileSizeInUnits.y - (mouseWorldPosition.x) / TileSizeInUnits.x) - 1;

                // Calculate grid aligned position from current position
                float snappedX = (xx - yy) * 0.5f * TileSizeInUnits.x;
                float snappedY = (xx + yy) * 0.5f * TileSizeInUnits.y;

                if (_currentSnappedX != snappedX || _currentSnappedY != snappedY)
                {
                    _currentSnappedX = snappedX;
                    _currentSnappedY = snappedY;

                    if (BuilderManager.Instance.BuildingPlotLocations.ContainsKey(new Vector2(_currentSnappedX, _currentSnappedY)))
                    {
                        Vector2 availablePlotVectorPosition = BuilderManager.Instance.BuildingPlotLocations[new Vector2(_currentSnappedX, _currentSnappedY)];
                        if (BuildingPlot.AvailablePlotVectorPosition == availablePlotVectorPosition && BuilderManager.PointerIsOnAvailablePlot)
                        {
                            return;
                        }

                        BuildingPlot.AvailablePlotVectorPosition = availablePlotVectorPosition;

                        SetPointerImageOverlayColor(PointerImageOverlayState.Normal);
                        BuilderManager.PointerIsOnAvailablePlot = true;
                        BuildingPlot buildingPlot = BuilderManager.Instance.BuildingPlots[BuildingPlot.AvailablePlotVectorPosition];

                        Sprite roomIcon = GetRoomIcon(buildingPlot.RoomBlueprint.Name, buildingPlot.PlotRotation);
                        SetPointerImage(roomIcon, buildingPlot.PlotRotation);

                        RepositionImage();
                    }
                    else
                    {
                        if (BuilderManager.PointerIsOnAvailablePlot)
                        {
                            BuilderManager.PointerIsOnAvailablePlot = false;
                        }
                        if (_currentPointerImageOverlayState == PointerImageOverlayState.Normal)
                        {
                            SetPointerImageOverlayColor(PointerImageOverlayState.Red);
                        }

                        RepositionImage();
                    }
                }
            }

            if (GameManager.Instance.CurrentPlatform == Platform.PC)
            {
                if (BuildMenuContainer.Instance.PanelAnimationPlaying)
                {
                    return;
                }

                if (Input.GetMouseButtonDown(1))
                {
                    UnsetPointerImage();

                    if (!BuildMenuContainer.Instance.IsOpen)
                    {
                        BuildMenuContainer.Instance.ActivateAnimationFreeze();
                        BuilderManager.Instance.ActivateBuildMenuMode();
                    }
                }
            }
        }
    }
    void Update()
    {
        if (InBuildMode && MainCanvas.Instance.IsDraggingIcon && !BuildMenuContainer.Instance.IsOpen)
        {
            if (PointerIsOnAvailablePlot)
            {
                if (GameManager.Instance.CurrentPlatform == Platform.PC)
                {
                    if (Input.GetMouseButtonDown(0))
                    {
                        Logger.Warning("Let's build a {0}", SelectedRoom.Name);
                        BuildingPlot buildingPlot = BuildingPlot.FindBuildingPlot(BuildingPlot.AvailablePlotVectorPosition);
                        BuildRoom(SelectedRoom, buildingPlot);

                        if (BuildMenuContainer.Instance.PanelAnimationPlaying)
                        {
                            ReopenBuildMenu();
                        }
                        else
                        {
                            BuildMenuContainer.Instance.ActivateAnimationFreeze();
                            ActivateBuildMenuMode();
                        }
                    }
                }
            }
            else
            {
                if (GameManager.Instance.CurrentPlatform == Platform.PC)
                {
                    if (Input.GetMouseButtonDown(0))
                    {
                        Logger.Warning("Cannot build here!");
                        GameObject   notificationGO = Instantiate(MainCanvas.Instance.NotificationPrefab, MainCanvas.Instance.transform);
                        Notification notification   = notificationGO.transform.GetComponent <Notification>();
                        notification.Setup(NotificationType.FromPointer, "Cannot build in location");

                        if (BuildMenuContainer.Instance.PanelAnimationPlaying)
                        {
                            ReopenBuildMenu();
                        }
                        else
                        {
                            BuildMenuContainer.Instance.ActivateAnimationFreeze();
                            ActivateBuildMenuMode();
                        }
                    }
                }
            }
        }

        if (Input.touchCount == 1)
        {
            if (Input.touches[0].phase == TouchPhase.Ended)
            {
                if (MainCanvas.Instance.PointerImage.sprite != null && !BuildMenuContainer.Instance.IsOpen)
                {
                    if (PointerIsOnAvailablePlot)
                    {
                        Logger.Warning("Let's build!");
                        BuildingPlot buildingPlot = BuildingPlot.FindBuildingPlot(BuildingPlot.AvailablePlotVectorPosition);
                        BuildRoom(SelectedRoom, buildingPlot);
                    }
                    else
                    {
                        if (MainCanvas.Instance.IsDraggingIcon && !BuildMenuContainer.Instance.IsOpen)
                        {
                            GameObject   notificationGO = Instantiate(MainCanvas.Instance.NotificationPrefab, MainCanvas.Instance.transform);
                            Notification notification   = notificationGO.transform.GetComponent <Notification>();
                            notification.Setup(NotificationType.FromPointer, "Cannot build in location");
                        }
                    }

                    if (BuildMenuContainer.Instance.PanelAnimationPlaying)
                    {
                        ReopenBuildMenu();
                    }
                    else
                    {
                        BuildMenuContainer.Instance.ActivateAnimationFreeze();
                        ActivateBuildMenuMode();
                    }
                }
                else
                {
                    MainCanvas.Instance.UnsetPointerImage();
                }
            }
        }

        if (ConfirmationModal.CurrentConfirmationModal != null)
        {
            if (Input.GetMouseButtonDown(0) || (Input.touchCount == 1 && Input.touches[0].phase == TouchPhase.Began))
            {
                bool isPointerOverGameObject = PointerHelper.IsPointerOverGameObject();
                if (!isPointerOverGameObject)
                {
                    ConfirmationModal.CurrentConfirmationModal.ResetDeleteTrigger();
                    ConfirmationModal.CurrentConfirmationModal.DestroyConfirmationModal();
                }
            }
        }
    }