public BotController(ILogger logger) { wowProcess = new WowProcess(logger); this.WowScreen = new WowScreen(logger); this.logger = logger; var frames = DataFrameConfiguration.ConfigurationExists() ? DataFrameConfiguration.LoadConfiguration() : new List <DataFrame>(); //config.CreateConfiguration(WowScreen.GetAddonBitmap()); AddonReader = new AddonReader(WowScreen, frames, logger); minimapNodeFinder = new MinimapNodeFinder(new PixelClassifier()); MinimapImageFinder = minimapNodeFinder as IImageProvider; addonThread = new Thread(AddonRefreshThread); addonThread.Start(); // wait for addon to read the wow state while (AddonReader.PlayerReader.Sequence == 0 || !Enum.GetValues(typeof(PlayerClassEnum)).Cast <PlayerClassEnum>().Contains(AddonReader.PlayerReader.PlayerClass)) { logger.LogWarning("There is a problem with the addon, I have been unable to read the player class. Is it running ?"); Thread.Sleep(100); } npcNameFinder = new NpcNameFinder(wowProcess, AddonReader.PlayerReader, logger); ActionFactory = new GoalFactory(AddonReader, logger, wowProcess, npcNameFinder); screenshotThread = new Thread(ScreenshotRefreshThread); screenshotThread.Start(); }
public void InitialiseBot() { ClassConfig = ReadClassConfiguration(); var blacklist = this.ClassConfig.Mode != Mode.Grind ? new NoBlacklist() : (IBlacklist) new Blacklist(AddonReader.PlayerReader, ClassConfig.NPCMaxLevels_Above, ClassConfig.NPCMaxLevels_Below, ClassConfig.Blacklist, logger); //this.currentAction = followRouteAction; var actionFactory = new GoalFactory(AddonReader, this.logger, this.wowProcess, npcNameFinder); var availableActions = actionFactory.CreateGoals(ClassConfig, blacklist); RouteInfo = actionFactory.RouteInfo; this.GoapAgent = new GoapAgent(AddonReader.PlayerReader, availableActions, blacklist, logger, ClassConfig); this.actionThread = new GoalThread(this.AddonReader.PlayerReader, this.wowProcess, GoapAgent, logger); // hookup events between actions availableActions.ToList().ForEach(a => { a.ActionEvent += this.actionThread.OnActionEvent; a.ActionEvent += GoapAgent.OnActionEvent; // tell other action about my actions availableActions.ToList().ForEach(b => { if (b != a) { a.ActionEvent += b.OnActionEvent; } }); }); }