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); } }
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); }
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); }