public OptionResult Perform(IInteractionOptionItem <IActor, TTarget, GameHitParameters <TTarget> > option, GameHitParameters <TTarget> parameters) { try { return(Run(option as TOption, parameters)); } catch (Exception e) { GameHitParameters <TTarget> .Exception(parameters, e); return(OptionResult.Failure); } }
public bool Test(GameHitParameters <TTarget> parameters) { try { return(Allow(parameters)); } catch (Exception e) { GameHitParameters <TTarget> .Exception(parameters, e); return(false); } }
public override OptionResult Perform(GameHitParameters <TTarget> parameters) { try { while (true) { IEnumerable <T> allOptions = GetOptions(); if (allOptions == null) { return(OptionResult.Failure); } List <T> options = new List <T>(); foreach (T option in allOptions) { if (!option.Test(parameters)) { continue; } options.Add(option); } CommonSelection <T> .Results selection = new CommonSelection <T>(Name, options).SelectMultiple(NumSelectable); if (selection.Count == 0) { if (selection.mOkayed) { return(OptionResult.SuccessClose); } else { return(OptionResult.Failure); } } bool success = false; bool retain = false; bool levelDown = false; foreach (T item in selection) { switch (Run(item, parameters)) { case OptionResult.SuccessClose: success = true; break; case OptionResult.SuccessRetain: retain = true; break; case OptionResult.SuccessLevelDown: levelDown = true; break; } } if (levelDown) { return(OptionResult.SuccessRetain); } else if ((success) && (!retain)) { return(OptionResult.SuccessClose); } } } catch (Exception e) { GameHitParameters <TTarget> .Exception(parameters, e); return(OptionResult.Failure); } }