diff --git a/include/lolautoaccept.h b/include/lolautoaccept.h index f7dbe50..dd681c5 100644 --- a/include/lolautoaccept.h +++ b/include/lolautoaccept.h @@ -12,6 +12,7 @@ class LolAutoAccept { public: using onposchange_func = std::function; + using onruneschange_func = std::function, uint32_t, uint32_t)>; protected: struct Stage { Stage(); @@ -29,6 +30,7 @@ protected: Config::RootConfig& config; DataDragon& dd; onposchange_func onPoschange; + onruneschange_func onRuneschange; bool shouldrun = false; std::thread lolaathread; @@ -45,7 +47,7 @@ public: PICK = 2, }; - LolAutoAccept(Config::RootConfig& config, DataDragon& dd, onposchange_func = {}); + LolAutoAccept(Config::RootConfig& config, DataDragon& dd, onposchange_func = {}, onruneschange_func = {}); ~LolAutoAccept(); void setChamps(const std::vector& champs, State s); diff --git a/include/runedisplay.h b/include/runedisplay.h index a879cfe..c391516 100644 --- a/include/runedisplay.h +++ b/include/runedisplay.h @@ -15,7 +15,7 @@ public: ~RuneDisplay(); void setRuneMeta(const std::vector& runeinfo); - void setRunes(std::vector ids, uint32_t primary, uint32_t secondary); + void setRunes(const std::vector& ids, uint32_t primary, uint32_t secondary); private: void updateText(); std::string getRuneText(uint32_t id); diff --git a/src/blitzapi.cpp b/src/blitzapi.cpp index 4768f2f..8996372 100644 --- a/src/blitzapi.cpp +++ b/src/blitzapi.cpp @@ -51,7 +51,7 @@ BlitzAPI::ChampionInfo::ChampionInfo(const QJsonObject& json) { if(!it.isObject()) continue; QJsonObject rune = it.toObject(); - auto runeid = rune["runeid"]; + auto runeid = rune["runeId"]; if(runeid.isDouble()) { runes.push_back(runeid.toDouble()); } diff --git a/src/lolautoaccept.cpp b/src/lolautoaccept.cpp index 4febcf4..b70933c 100644 --- a/src/lolautoaccept.cpp +++ b/src/lolautoaccept.cpp @@ -7,7 +7,7 @@ LolAutoAccept::Stage::Stage() {} LolAutoAccept::Stage::~Stage() {} -LolAutoAccept::LolAutoAccept(Config::RootConfig& config, DataDragon& dd, onposchange_func onposch) : config(config), dd(dd), onPoschange(onposch) { +LolAutoAccept::LolAutoAccept(Config::RootConfig& config, DataDragon& dd, onposchange_func onposch, onruneschange_func onrunch) : config(config), dd(dd), onPoschange(onposch), onRuneschange(onrunch) { std::lock_guard lock(stagesMutex); stages.resize(3); // accept, ban, pick } @@ -21,6 +21,8 @@ void LolAutoAccept::setChamps(const std::vector& champs, State s) { Log::warn << "setChamps() called on invalid State"; return; } + Log::debug << "LolAutoAccept::setChamps"; + { std::lock_guard lock(stagesMutex); stages.at((int) s).champids = champs; @@ -174,7 +176,7 @@ void LolAutoAccept::loadPosition(Position pos) { } uint32_t LolAutoAccept::getChampOfState(State s) { - assert(((int) s) >= 0 && s <= State::PICK); + assert(s > State::LOBBY && s <= State::PICK); Stage& stage = stages[(int) s]; uint32_t size = stage.champids.size(); @@ -191,7 +193,7 @@ uint32_t LolAutoAccept::getChampOfState(State s) { void LolAutoAccept::nextChampOfState(State s) { assert(s > State::LOBBY && s <= State::PICK); - auto stage = stages[(int) s]; + Stage& stage = stages[(int) s]; uint32_t size = stage.champids.size(); stage.currentOffset++; @@ -286,9 +288,12 @@ void LolAutoAccept::champSelect() { // find own cellid info const ClientAPI::ChampSelectCell* me = nullptr; + uint32_t pickedChamp = 0; + static uint32_t lastPickedChamp = 0; for(const auto& it : session.myTeam) { if(it.cellID == cellid) { me = ⁢ + pickedChamp = it.championID; break; } } @@ -298,6 +303,20 @@ void LolAutoAccept::champSelect() { pos = Position::UTILITY; // default: support TODO: make the default changeable? extra tab? } + + // check if runes need adjustment + if(pickedChamp != lastPickedChamp) { + Log::info << "picked champ changed from: " << lastPickedChamp << " to: " << pickedChamp; + lastPickedChamp = pickedChamp; + + // update runes + if(onRuneschange) { + auto champinfo = blitzapi.getChampionInfo(pickedChamp, pos); // TODO: add detection for enemy champ + Log::info << "champinfo aquired: " << champinfo.runes.size() << " runes primary: " << champinfo.primaryRune; + onRuneschange(champinfo.runes, champinfo.primaryRune, 0); // + } + } + // reload config based on position if changed if(pos != currentPosition) { Log::note << "LolAutoAccept reloading config for position: " << pos << " because it was: " << currentPosition; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4ff81c4..4a275bf 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -3,7 +3,8 @@ #include -MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), dd(QLocale().name().toStdString()), lolaa(conf.getConfig(), dd, std::bind(&MainWindow::onPosChange, this, std::placeholders::_1)) { +MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), dd(QLocale().name().toStdString()), + lolaa(conf.getConfig(), dd, std::bind(&MainWindow::onPosChange, this, std::placeholders::_1), std::bind(&MainWindow::onRuneChanged, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)) { ui->setupUi(this); conf.load(); diff --git a/src/runedisplay.cpp b/src/runedisplay.cpp index 2ba66ea..69abd62 100644 --- a/src/runedisplay.cpp +++ b/src/runedisplay.cpp @@ -15,7 +15,7 @@ void RuneDisplay::setRuneMeta(const std::vector& ri) { runeinfo = ri; } -void RuneDisplay::setRunes(std::vector ids, uint32_t primary, uint32_t secondary) { +void RuneDisplay::setRunes(const std::vector& ids, uint32_t primary, uint32_t secondary) { runes = ids; this->primary = primary; this->secondary = secondary; @@ -26,10 +26,10 @@ void RuneDisplay::setRunes(std::vector ids, uint32_t primary, uint32_t void RuneDisplay::updateText() { std::ostringstream out; - out << "primary: " << getRuneText(primary) << " secondary: " << getRuneText(secondary) << " "; + out << "primary: " << getRuneText(primary) << " secondary: " << getRuneText(secondary) << '\n'; for(uint32_t rune : runes) { - out << getRuneText(rune); + out << getRuneText(rune) << '\n'; } ui->runetext->setText(QString::fromStdString(out.str())); }