public static InteractionDefinitionOptionList CreateNesting(IActor actor, GameObjectHit hit, List <InteractionObjectPair> pairs)
        {
            InteractionDefinitionOptionList primary = new InteractionDefinitionOptionList("");

            foreach (InteractionObjectPair pair in pairs)
            {
                GreyedOutTooltipCallback greyedOutTooltipCallback = null;

                InteractionInstanceParameters parameters = new InteractionInstanceParameters(pair, actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true);
                parameters.mGameObjectHit = hit;

                InteractionTestResult result = pair.InteractionDefinition.Test(ref parameters, ref greyedOutTooltipCallback);
                if (!IUtil.IsPass(result))
                {
                    continue;
                }

                string[] paths = pair.InteractionDefinition.GetPath(actor.IsFemale);

                List <string> fullPath = new List <string>();

                if (paths != null)
                {
                    fullPath.AddRange(paths);
                }

                if (pair is IopWithPrependedPath)
                {
                    fullPath.Insert(0, (pair as IopWithPrependedPath).PrependPath);
                }

                InteractionDefinitionOptionList list = primary;

                foreach (string path in fullPath)
                {
                    string lookup = path;
                    if (lookup == null)
                    {
                        lookup = "";
                    }

                    InteractionDefinitionOptionList nextList = list.GetOption(lookup);
                    if (nextList == null)
                    {
                        nextList = new InteractionDefinitionOptionList(lookup);

                        list.Add(nextList);
                    }

                    list = nextList;
                }

                list.Add(new InteractionDefinitionOption(pair, actor));
            }

            return(primary);
        }
        public static OptionResult Perform(IActor actor, GameObjectHit hit, List <InteractionObjectPair> pairs, bool popupStyle)
        {
            if (popupStyle)
            {
                Sims3.Gameplay.UI.PieMenu.TestAndBringUpPieMenu(actor, new InteractionDefinitionOptionList.UIMouseEventArgsEx(), hit, pairs, InteractionMenuTypes.Normal);
                return(OptionResult.SuccessClose);
            }
            else
            {
                InteractionDefinitionOptionList primary = InteractionDefinitionOptionList.CreateNesting(actor, hit, pairs);

                return(primary.Perform(new GameHitParameters <GameObject>(actor, actor as GameObject, hit)));
            }
        }
        public InteractionDefinitionOptionList GetOption(string name)
        {
            if (name == null)
            {
                return(null);
            }

            InteractionDefinitionOptionList option = null;

            if (!mLookup.TryGetValue(name, out option))
            {
                return(null);
            }

            return(option);
        }