private static void ListOptions(IInteractionProxy <IActor, TTarget, GameHitParameters <TTarget> > proxy, IEnumerable <IInteractionOptionItem <IActor, TTarget, GameHitParameters <TTarget> > > options, IActor actor, TTarget target, GameObjectHit hit, bool popup, List <string> path, List <InteractionObjectPair> results) { GameHitParameters <TTarget> parameters = new GameHitParameters <TTarget>(actor, target, hit); foreach (IInteractionOptionItem <IActor, TTarget, GameHitParameters <TTarget> > option in options) { if (!option.Test(parameters)) { continue; } IInteractionOptionList <TTarget> list = option as IInteractionOptionList <TTarget>; if (list != null) { List <string> newPath = new List <string>(path); newPath.Add(option.Name); ListOptions(list, list.IOptions(), actor, target, hit, popup, newPath, results); } else { results.Add(new InteractionObjectPair(new CommonDefinition <INTERACTION>(proxy, option, popup, path.ToArray()), target)); } } }
protected override OptionResult Run(GameHitParameters <GameObject> parameters) { IInteractionOptionList <GameObject> list = mOption as IInteractionOptionList <GameObject>; if (list != null) { return(new HotkeyOptionList(list).Perform(parameters)); } else { return(base.Run(parameters)); } }
public HotkeyOptionList(IInteractionOptionList <GameObject> options) : base(options.ToString()) { foreach (IInteractionOptionItem <IActor, GameObject, GameHitParameters <GameObject> > paramOption in options.IOptions()) { IOptionItem option = paramOption as IOptionItem; if (option == null) { continue; } if (!(option is IOptionList)) { if (string.IsNullOrEmpty(option.HotkeyID)) { continue; } } mOptions.Add(new HotkeyOption(option)); } }