public void SetupAndEnable(RectTransform target, int radius, float scale, IBranchPosition branchPosition)
        {
            Target          = target;
            BranchPosition  = branchPosition;
            Origin.position = branchPosition.GetPositionIn(Camera, Canvas);
            var originPos = Origin.anchoredPosition;

            CurrentQuadrant = new Vector3(Mathf.Sign(originPos.x), Mathf.Sign(originPos.y), 1f);
            if (LineFromOrigin == null)
            {
                BuildBranch();
            }
            else
            {
                SetLineSize(LineFromOrigin, lineSize.x);
                SetLineSize(LineToRadial, lineSize.x);
            }

            // Flip the branch as needed based on the clicked quadrant.
            SetOriginScale();
            CalculateTargetPosition(radius, scale);

            var xPos = originPos.x - (lineSize.x + Origin.rect.width / 2) * CurrentQuadrant.x;
            var yPos = originPos.y + (LineToRadial.rect.height / 2) * CurrentQuadrant.y;

            RepositionLineToRadial(new Vector2(xPos, yPos));
            this.SetActive(true);
        }
    void Update()
    {
        // Get right mouse click
        if (CommonInput.GetMouseButtonDown(1))
        {
            var mousePos = CommonInput.mousePosition;

            var objects = GetGameObjects(mousePos, out var isUI);
            //Generates menus
            var options = Generate(objects);

            if (options == null || options.Count <= 0)
            {
                return;
            }

            IBranchPosition branchPosition = BranchScreenPosition.SetPosition(mousePos);

            if (isUI == false)
            {
                var tile = objects.Select(o => o.RegisterTile()).FirstOrDefault();
                if (tile)
                {
                    branchPosition = BranchWorldPosition.SetTile(tile);
                }
            }

            MenuController.SetupMenu(options, branchPosition);
        }
    }
Example #3
0
        public void SetupMenu(List <RightClickMenuItem> items, IBranchPosition branchPosition)
        {
            Items = items;
            radialBranch.SetupAndEnable((RectTransform)ItemRadial.transform, ItemRadial.OuterRadius, ItemRadial.Scale, branchPosition);
            ItemRadial.SetupWithItems(items);
            ItemRadial.CenterItemsTowardsAngle(Items.Count, radialBranch.GetBranchToTargetAngle());

            this.SetActive(true);
            ItemRadial.SetActive(true);

            ActionRadial.Setup(0);
            ActionRadial.SetActive(false);
        }
Example #4
0
        public async Task <GameObject> ShowRadialMenu(List <GameObject> objects, GameObject radialCenter)
        {
            this.SetActive(true);
            ItemRadial.SetActive(true);
            selectedObject = default;               //reset previous selection
            Items          = GenerateItemMenu(objects);
            IBranchPosition branchPosition = SetCenter(radialCenter);

            radialBranch.SetupAndEnable((RectTransform)ItemRadial.transform, ItemRadial.OuterRadius, ItemRadial.Scale, branchPosition);
            ItemRadial.SetupWithItems(Items);
            ItemRadial.CenterItemsTowardsAngle(Items.Count, radialBranch.GetBranchToTargetAngle());
            while (selectedObject == null && isActiveAndEnabled == true)
            {
                await Task.Yield();                 //wait until the selectedObject is chosen
            }
            return(selectedObject);
        }