private void OnActionPointBaseUpdated(object sender, BareActionPointEventArgs args)
 {
     if (CurrentActionPoint == null || args.ActionPoint.Id != CurrentActionPoint.GetId())
     {
         return;
     }
     PositionManualEdit.SetPosition(args.ActionPoint.Position);
     UpdateJointsDynamicList((string)JointsRobotsList.GetValue());   //because of possible invalidation of joints
 }
    public async void UpdateMenu()
    {
        ActionPointName.text = CurrentActionPoint.Data.Name;

        CustomDropdown positionRobotsListDropdown = PositionRobotsList.Dropdown;

        positionRobotsListDropdown.dropdownItems.Clear();
        await PositionRobotsList.gameObject.GetComponent <DropdownRobots>().Init(OnRobotChanged, true);

        if (!SceneManager.Instance.SceneStarted || positionRobotsListDropdown.dropdownItems.Count == 0)
        {
            PositionRobotsList.gameObject.SetActive(false);
            PositionEndEffectorList.gameObject.SetActive(false);
            UpdatePositionUsingRobotBtn.interactable    = false;
            AddOrientationUsingRobotButton.interactable = false;
        }
        else
        {
            PositionRobotsList.gameObject.SetActive(true);
            PositionEndEffectorList.gameObject.SetActive(true);
            UpdatePositionUsingRobotBtn.interactable    = true;
            AddOrientationUsingRobotButton.interactable = true;
            OnRobotChanged((string)PositionRobotsList.GetValue());
        }

        PositionExpertModeBlock.SetActive(GameManager.Instance.ExpertMode);
        PositionManualEdit.SetPosition(CurrentActionPoint.Data.Position);


        JointsRobotsList.Dropdown.dropdownItems.Clear();
        await JointsRobotsList.gameObject.GetComponent <DropdownRobots>().Init(UpdateJointsDynamicList, false);

        if (JointsRobotsList.Dropdown.dropdownItems.Count > 0)
        {
            JointsRobotsList.gameObject.SetActive(true);
            JointsDynamicList.SetActive(true);
            UpdateJointsDynamicList((string)JointsRobotsList.GetValue());
        }
        else
        {
            JointsRobotsList.gameObject.SetActive(false);
            JointsDynamicList.SetActive(false);
        }
        if (SceneManager.Instance.SceneStarted)
        {
            AddJointsButton.interactable = true;
        }
        else
        {
            AddJointsButton.interactable = false;
        }

        UpdateOrientationsDynamicList();
        UpdateTooltips();
    }
 private void OnActionPointJointsAdded(object sender, RobotJointsEventArgs args)
 {
     if (args.ActionPointId != CurrentActionPoint.GetId())
     {
         return;
     }
     if (SceneManager.Instance.GetRobot(args.Data.RobotId).GetName() == (string)JointsRobotsList.GetValue())
     {
         var btn = CreateJointsButton(JointsDynamicList.transform, args.Data.Id, args.Data.Name, () => OpenDetailMenu(args.Data));
         btn.State = args.Data.IsValid;
         btn.GetComponentInChildren <ActionButton>().Highlight(2f);
     }
 }