public BotController(ILogger logger, IPPather pather, DataConfig dataConfig, IConfiguration configuration) { this.logger = logger; this.pather = pather; this.DataConfig = dataConfig; this.areaDb = new AreaDB(logger, dataConfig); updatePlayerPostion.Start(); wowProcess = new WowProcess(); WowScreen = new WowScreen(logger, wowProcess); WowProcessInput = new WowProcessInput(logger, wowProcess); var frames = DataFrameConfiguration.LoadFrames(); var scad = new StartupConfigAddonData(); configuration.GetSection(StartupConfigAddonData.Position).Bind(scad); if (scad.Mode == "Network") { logger.LogInformation("Using NetworkedAddonDataProvider"); addonDataProvider = new NetworkedAddonDataProvider(logger, scad.myPort, scad.connectTo, scad.connectPort); } else { logger.LogInformation("Using AddonDataProvider"); addonDataProvider = new AddonDataProvider(WowScreen, frames); } AddonReader = new AddonReader(logger, DataConfig, areaDb, addonDataProvider); minimapNodeFinder = new MinimapNodeFinder(WowScreen, new PixelClassifier()); MinimapImageFinder = minimapNodeFinder as IImageProvider; addonThread = new Thread(AddonRefreshThread); addonThread.Start(); // wait for addon to read the wow state var sw = new Stopwatch(); sw.Start(); while (AddonReader.PlayerReader.Sequence == 0 || !Enum.GetValues(typeof(PlayerClassEnum)).Cast <PlayerClassEnum>().Contains(AddonReader.PlayerReader.PlayerClass)) { if (sw.ElapsedMilliseconds > 5000) { logger.LogWarning("There is a problem with the addon, I have been unable to read the player class. Is it running ?"); sw.Restart(); } Thread.Sleep(100); } logger.LogDebug($"Woohoo, I have read the player class. You are a {AddonReader.PlayerReader.PlayerClass}."); npcNameFinder = new NpcNameFinder(logger, WowScreen, WowProcessInput); WowScreen.AddDrawAction(npcNameFinder.ShowNames); //ActionFactory = new GoalFactory(AddonReader, logger, wowProcess, npcNameFinder); screenshotThread = new Thread(ScreenshotRefreshThread); screenshotThread.Start(); }
public AddonReader(ILogger logger, DataConfig dataConfig, AreaDB areaDb, IAddonDataProvider addonDataProvider) { this.logger = logger; this.addonDataProvider = addonDataProvider; this.squareReader = new SquareReader(this); this.CreatureHistory = new CreatureHistory(squareReader, 64, 65, 66, 67); this.ItemDb = new ItemDB(logger, dataConfig); this.CreatureDb = new CreatureDB(logger, dataConfig); this.spellDb = new SpellDB(logger, dataConfig); this.talentDB = new TalentDB(logger, dataConfig, spellDb); this.EquipmentReader = new EquipmentReader(squareReader, 24, 25); this.BagReader = new BagReader(squareReader, ItemDb, EquipmentReader, 20, 21, 22, 23); this.ActionBarCostReader = new ActionBarCostReader(squareReader, 36); this.GossipReader = new GossipReader(squareReader, 37); this.SpellBookReader = new SpellBookReader(squareReader, 71, spellDb); this.PlayerReader = new PlayerReader(squareReader); this.LevelTracker = new LevelTracker(PlayerReader); this.TalentReader = new TalentReader(squareReader, 72, PlayerReader, talentDB); this.AreaDb = areaDb; this.WorldMapAreaDb = new WorldMapAreaDB(logger, dataConfig); UpdateLatencys = new CircularBuffer <double>(10); UIMapId.Changed += (object obj, EventArgs e) => { this.AreaDb.Update(WorldMapAreaDb.GetAreaId(UIMapId.Value)); ZoneChanged?.Invoke(this, EventArgs.Empty); }; GlobalTime.Changed += (object obj, EventArgs e) => { UpdateLatencys.Put((DateTime.Now - GlobalTime.LastChanged).TotalMilliseconds); AvgUpdateLatency = 0; for (int i = 0; i < UpdateLatencys.Size; i++) { AvgUpdateLatency += UpdateLatencys.PeekAt(i); } AvgUpdateLatency /= UpdateLatencys.Size; }; }
public AddonReader(ILogger logger, DataConfig dataConfig, AreaDB areaDb, IAddonDataProvider addonDataProvider) { this.logger = logger; this.addonDataProvider = addonDataProvider; this.squareReader = new SquareReader(this); this.itemDb = new ItemDB(logger, dataConfig); this.creatureDb = new CreatureDB(logger, dataConfig); this.BagReader = new BagReader(squareReader, 20, itemDb); this.equipmentReader = new EquipmentReader(squareReader, 30); this.PlayerReader = new PlayerReader(squareReader, creatureDb); this.LevelTracker = new LevelTracker(PlayerReader); this.areaDb = areaDb; this.worldMapAreaDb = new WorldMapAreaDB(logger, dataConfig); }