Skip to content

Commit

Permalink
Add ability filter and nest selector to raid settings
Browse files Browse the repository at this point in the history
* Make raid templates more readable

* Add ability to raid templates

* Add ability raid filter

* Add ability, ability filter, and ability raid setting enums

* Lower overlay raid search to 5000 frames to conserve memory

* Clean applet raid filter menu item creation

* Add choosing den and nest to applet raid settings

* Expose game reader and raid settings from main app
  • Loading branch information
zaksabeast committed Mar 29, 2020
1 parent 7835f2f commit 39ac5bf
Show file tree
Hide file tree
Showing 26 changed files with 14,769 additions and 3,298 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

#include <tesla.hpp>

#define ADVANCES_TO_SEARCH 5000

class RaidSearchResultLayout : public tsl::Gui {
public:
RaidSearchResultLayout(u64 seed, u32 flawlessIVs);
Expand All @@ -11,7 +13,7 @@ class RaidSearchResultLayout : public tsl::Gui {
private:
u64 m_seed = 0;
u8 m_flawlessIVs = 1;
u32 m_firstShinyAdvance = MAX_RAID_ADVANCES;
u32 m_firstShinyAdvance = ADVANCES_TO_SEARCH;
// Assume shiny will be star in case no nearby shinies are found
std::string m_firstShinyTypeText = "";
};
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,16 @@ tsl::elm::Element* RaidSearchResultLayout::createUI() {
std::string subTitle = "Not a non-shiny raid Pokemon!";

searchSettings->SetSeed(m_seed);
searchSettings->SetFlawlessIVs(m_flawlessIVs);
searchSettings->SetAdvancesToSearch(ADVANCES_TO_SEARCH);
searchSettings->SetRaidEncounter(
csight::raid::
RaidEncounter{species : 0, flawlessIVs : m_flawlessIVs, ability : csight::ability::raid::FirstOrSecond, probabilities : {35, 0, 0, 0, 0}});

if (m_seed > 0) {
csight::raid::calculateRaidPKMList(
searchSettings, std::bind(&RaidSearchResultLayout::AddRaidMenuItem, this, denList, std::placeholders::_1, std::placeholders::_2));
title = csight::utils::convertNumToHexString(m_seed);
subTitle = "Next shiny frame: " + m_firstShinyTypeText + csight::utils::getRaidShinyAdvanceText(m_firstShinyAdvance);
subTitle = "Next shiny frame: " + m_firstShinyTypeText + csight::utils::getRaidShinyAdvanceText(m_firstShinyAdvance, ADVANCES_TO_SEARCH);
}

auto rootFrame = new tsl::elm::OverlayFrame(title, subTitle);
Expand All @@ -38,7 +41,7 @@ void RaidSearchResultLayout::AddRaidMenuItem(tsl::elm::List* denList, std::share
if (raid->GetIsShiny()) {
shinyText = raid->GetShinyType() == csight::shiny::Square ? "" : "";

if (m_firstShinyAdvance == MAX_RAID_ADVANCES) {
if (m_firstShinyAdvance == ADVANCES_TO_SEARCH) {
m_firstShinyAdvance = advance;
m_firstShinyTypeText = shinyText;
}
Expand Down
4 changes: 3 additions & 1 deletion CaptureSight/include/ui/MainApplication.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@ class MainApplication : public pu::ui::Application {

void OnLoad() override;
u32 GetSlot();
std::shared_ptr<csight::GameReader> GetGameReader();
std::shared_ptr<csight::raid::RaidSearchSettings> GetRaidSearchSettings();

private:
u32 m_slot = 0;
u32 m_maxSlot = 0;
std::function<std::string(u32 slot)> m_GetSummaryTitle = [&](u32) { return ""; };
std::unique_ptr<csight::GameReader> m_save;
std::shared_ptr<csight::GameReader> m_gameReader;
std::vector<std::shared_ptr<csight::PK8>> m_pkms;
std::vector<std::shared_ptr<csight::raid::Den>> m_dens;
bool m_isShowingExtraDetail = false;
Expand Down
2 changes: 1 addition & 1 deletion CaptureSight/include/ui/views/RaidSearchResultLayout.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class RaidSearchResultLayout : public pu::ui::Layout {
RaidSearchResultLayout();
PU_SMART_CTOR(RaidSearchResultLayout)

void UpdateValues(std::shared_ptr<csight::raid::RaidSearchSettings> searchSettings);
void UpdateValues();
void AddRaidMenuItem(std::shared_ptr<csight::raid::RaidPokemon> raid, u32 advance);

private:
Expand Down
19 changes: 16 additions & 3 deletions CaptureSight/include/ui/views/RaidSearchSettingsLayout.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,33 @@ class RaidSearchSettingsLayout : public pu::ui::Layout {
RaidSearchSettingsLayout();
PU_SMART_CTOR(RaidSearchSettingsLayout)

void UpdateValues(std::shared_ptr<csight::raid::RaidSearchSettings> searchSettings);
void UpdateValues();
void DecrementAbilityFilter();
void IncrementAbilityFilter();
void IncrementShinyTypeFilter();
void DecrementShinyTypeFilter();
void IncrementFlawlessIVFilter();
void DecrementFlawlessIVFilter();
void ToggleIsRareDenFilter();
void IncrementFlawlessIVs();
void DecrementFlawlessIVs();
void IncrementDenIndex();
void DecrementDenIndex();
void SetEncounterIndex(u32 encounterIndex);
void IncrementEncounterIndex();
void DecrementEncounterIndex();

private:
std::shared_ptr<csight::raid::RaidSearchSettings> m_raidSearchSettings;
u32 m_denIndex = 0;
u32 m_encounterIndex = 0;
bool m_isRareDenFilter = false;
pu::ui::elm::TextBlock::Ref m_titleTextBlock;
pu::ui::elm::TextBlock::Ref m_instructionsTextBlock;
pu::ui::elm::Menu::Ref m_filterMenu;
pu::ui::elm::MenuItem::Ref m_shinyFilterMenuItem;
pu::ui::elm::MenuItem::Ref m_flawlessIVFilterMenuItem;
pu::ui::elm::MenuItem::Ref m_flawlessIVsMenuItem;
pu::ui::elm::MenuItem::Ref m_abilityFiltermenuItem;
pu::ui::elm::MenuItem::Ref m_denIndexMenuItem;
pu::ui::elm::MenuItem::Ref m_spawnIndexMenuItem;
pu::ui::elm::MenuItem::Ref m_isRareDenFilterMenuItem;
};
40 changes: 24 additions & 16 deletions CaptureSight/source/ui/MainApplication.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ void MainApplication::OnLoad() {
if (language.compare("chs") == 0 || language.compare("cht") == 0)
pu::ui::render::SetDefaultFontFromShared(pu::ui::render::SharedFont::ChineseSimplified); // ChineseTraditional doesn't work for cht!?

m_save = std::make_unique<csight::GameReader>();
bool isDebugServiceRunning = m_save->GetIsServiceRunning();
m_gameReader = std::make_shared<csight::GameReader>();
bool isDebugServiceRunning = m_gameReader->GetIsServiceRunning();

m_warningLayout = WarningLayout::New();
m_warningLayout->SetBackgroundColor(gsets.GetTheme().background.dark);
Expand All @@ -34,18 +34,18 @@ void MainApplication::OnLoad() {
return;
}

Result rc = m_save->Attach();
Result rc = m_gameReader->Attach();

if (R_FAILED(rc) || !m_save->GetIsPokemonRunning()) {
if (R_FAILED(rc) || !m_gameReader->GetIsPokemonRunning()) {
std::string warningTranslationKey = "Please start a Pokemon game before running CaptureSight";
std::string warningText = i18n->Translate(warningTranslationKey) + "\ndmnt:cht result: " + std::to_string(rc);
m_warningLayout->SetWarningText(warningText);
this->NavigateTo(m_warningLayout);
return;
}

m_pkms = m_save->ReadParty();
m_dens = m_save->ReadDens(false);
m_pkms = m_gameReader->ReadParty();
m_dens = m_gameReader->ReadDens(false);

m_versionTextBlock = pu::ui::elm::TextBlock::New(50, 50, CSIGHT_VERION, 25);
m_versionTextBlock->SetColor(gsets.GetTheme().text.light);
Expand Down Expand Up @@ -74,10 +74,10 @@ void MainApplication::OnLoad() {
SETUP_LAYOUT(RaidSearchSettingsLayout, m_raidSearchSettingsLayout);
m_raidSearchSettingsLayout->SetOnInput(std::bind(&MainApplication::OnInputRaidSearchSettingsLayout, this, std::placeholders::_1,
std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
m_raidSearchSettingsLayout->UpdateValues(m_raidSearchSettings);
m_raidSearchSettingsLayout->UpdateValues();
m_raidSearchSettings->AddUpdateCallback(std::bind(&RaidSearchSettingsLayout::UpdateValues, m_raidSearchSettingsLayout));
m_raidSearchSettings->AddUpdateCallback(std::bind(&RaidSearchResultLayout::UpdateValues, m_raidSearchResultLayout));

m_raidSearchSettings->AddUpdateCallback(std::bind(&RaidSearchSettingsLayout::UpdateValues, m_raidSearchSettingsLayout, m_raidSearchSettings));
m_raidSearchSettings->AddUpdateCallback(std::bind(&RaidSearchResultLayout::UpdateValues, m_raidSearchResultLayout, m_raidSearchSettings));
this->SetOnInput(std::bind(&MainApplication::OnMainApplicationInput, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
std::placeholders::_4));
this->NavigateTo(m_mainMenuLayout);
Expand Down Expand Up @@ -123,31 +123,31 @@ void MainApplication::SelectPokemonSlot(u32 slot) {
void MainApplication::SetViewMode(ViewMode viewMode) {
switch (viewMode) {
case activeDens:
m_dens = m_save->ReadDens(false);
m_dens = m_gameReader->ReadDens(false);
m_denMenuLayout->UpdateValues(m_dens);
this->NavigateTo(m_denMenuLayout);
return;
case allDens:
m_dens = m_save->ReadDens(true);
m_dens = m_gameReader->ReadDens(true);
m_denMenuLayout->UpdateValues(m_dens);
this->NavigateTo(m_denMenuLayout);
return;
case wild:
m_GetSummaryTitle = std::bind(&MainApplication::GetWildSummaryTitle, this, std::placeholders::_1);
m_pkms = std::vector<std::shared_ptr<csight::PK8>>{
m_save->ReadWild(),
m_save->ReadRaid(),
m_save->ReadTrade(),
m_gameReader->ReadWild(),
m_gameReader->ReadRaid(),
m_gameReader->ReadTrade(),
};
break;
case box:
m_GetSummaryTitle = std::bind(&MainApplication::GetBoxSummaryTitle, this, std::placeholders::_1);
m_pkms = m_save->ReadBoxes();
m_pkms = m_gameReader->ReadBoxes();
break;
case party:
default:
m_GetSummaryTitle = std::bind(&MainApplication::GetPartySummaryTitle, this, std::placeholders::_1);
m_pkms = m_save->ReadParty();
m_pkms = m_gameReader->ReadParty();
break;
}

Expand Down Expand Up @@ -259,3 +259,11 @@ void MainApplication::DecreaseSlot(u32 slotDecrease) {
u32 slot = newSlot >= m_maxSlot ? m_maxSlot : newSlot;
this->SetSlot(slot);
}

std::shared_ptr<csight::GameReader> MainApplication::GetGameReader() {
return m_gameReader;
}

std::shared_ptr<csight::raid::RaidSearchSettings> MainApplication::GetRaidSearchSettings() {
return m_raidSearchSettings;
}
7 changes: 4 additions & 3 deletions CaptureSight/source/ui/views/RaidSearchResultLayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ RaidSearchResultLayout::RaidSearchResultLayout() : Layout::Layout() {
this->Add(m_menu);
}

void RaidSearchResultLayout::UpdateValues(std::shared_ptr<csight::raid::RaidSearchSettings> searchSettings) {
void RaidSearchResultLayout::UpdateValues() {
auto searchSettings = mainApp->GetRaidSearchSettings();
std::string headerText = i18n->Translate("No raid seed found! This may not be a raid Pokemon");
auto seedString = csight::utils::convertNumToHexString(searchSettings->GetSeed());
m_menu->SetSelectedIndex(0);
Expand All @@ -32,7 +33,7 @@ void RaidSearchResultLayout::UpdateValues(std::shared_ptr<csight::raid::RaidSear
csight::raid::calculateRaidPKMList(searchSettings,
std::bind(&RaidSearchResultLayout::AddRaidMenuItem, this, std::placeholders::_1, std::placeholders::_2));
headerText = i18n->Translate("Seed") + ": " + seedString + m_firstShinyTypeText + i18n->Translate("Shiny") + " " +
csight::utils::getRaidShinyAdvanceText(m_firstShinyAdvance) + " " + i18n->Translate("(A) to apply filters");
csight::utils::getRaidShinyAdvanceText(m_firstShinyAdvance, MAX_RAID_ADVANCES) + " " + i18n->Translate("(A) to apply filters");
}

m_headerTextBlock->SetText(headerText);
Expand All @@ -55,7 +56,7 @@ void RaidSearchResultLayout::AddRaidMenuItem(std::shared_ptr<csight::raid::RaidP

auto formattedIVs = csight::utils::joinNums(raid->GetIVs(), "/");
std::string title = i18n->Translate("Advance") + " " + std::to_string(advance) + " - " + i18n->Translate("IVs") + ": " + formattedIVs +
advanceShinyType + i18n->Translate(shinyText);
advanceShinyType + i18n->Translate(shinyText) + ", " + i18n->Translate("Ability") + ": " + raid->GetAbilityString();
auto menuItem = pu::ui::elm::MenuItem::New(title);

menuItem->SetColor(gsets.GetTheme().text.light);
Expand Down

0 comments on commit 39ac5bf

Please sign in to comment.