protected ComponentSolverShim(BombCommander bombCommander, BombComponent bombComponent) : base(bombCommander, bombComponent) { string modType = GetModuleType(); if (!SolverShims.TryGetValue(modType, out ShimData)) { ShimData = new ShimData(); ShimData.ProcessMethod = ComponentSolverFactory.FindProcessCommandMethod(bombComponent, out ShimData.ModCommandType, out ShimData.ComponentType); if (ShimData.ComponentType == null) { throw new NotSupportedException(string.Format("Currently {0} is not supported by 'Twitch Plays'.", bombComponent.GetModuleDisplayName())); } ShimData.ForcedSolveMethod = ComponentSolverFactory.FindSolveMethod(ShimData.ComponentType); ShimData.TryCancelField = ComponentSolverFactory.FindCancelBool(ShimData.ComponentType); ShimData.ZenModeField = ComponentSolverFactory.FindZenModeBool(ShimData.ComponentType); ShimData.HelpMessageFound = ComponentSolverFactory.FindHelpMessage(bombComponent, ShimData.ComponentType, out ShimData.HelpMessage); ComponentSolverFactory.FindManualCode(bombComponent, ShimData.ComponentType, out ShimData.ManualCode); SolverShims[modType] = ShimData; } ProcessMethod = ShimData.ProcessMethod; CommandComponent = bombComponent.GetComponent(ShimData.ComponentType); ForcedSolveMethod = ShimData.ForcedSolveMethod; TryCancelField = ShimData.TryCancelField; ZenModeField = ShimData.ZenModeField; ZenMode = OtherModes.ZenModeOn; modInfo = !ShimData.HelpMessageFound ? ComponentSolverFactory.GetModuleInfo(modType) : ComponentSolverFactory.GetModuleInfo(modType, ShimData.HelpMessage, ShimData.ManualCode); }