Allow exiting game after timed modifications

Also fix a logic mistake
This commit is contained in:
William Pierce 2020-05-17 14:24:30 -07:00
parent efa9a55c7f
commit 9605b25df3
4 changed files with 268 additions and 243 deletions

View File

@ -236,6 +236,262 @@ Give it some time, eventually it'll finish downloading all the pretty icons!</pr
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkDialog" id="timed_modifications_window">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Timed Achievement Modification Menu</property>
<property name="modal">True</property>
<property name="default_width">400</property>
<property name="default_height">200</property>
<property name="icon">../assets/icon_256.png</property>
<property name="type_hint">dialog</property>
<child type="titlebar">
<placeholder/>
</child>
<child internal-child="vbox">
<object class="GtkBox">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkButtonBox">
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="cancel_timed_modifications_button">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="submit_timed_modifications_button">
<property name="label" translatable="yes">Submit</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Apply modifications across </property>
<property name="justify">right</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="modifications_time_amount">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="max_width_chars">5</property>
<property name="text" translatable="yes">0</property>
<property name="input_purpose">number</property>
<property name="adjustment">modifications_time_amount_adjustment</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="modifications_time_unit">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="active">1</property>
<property name="popup_fixed_width">False</property>
<items>
<item id="seconds_id" translatable="yes">Seconds</item>
<item id="minutes_id" translatable="yes">Minutes</item>
<item id="hours_id" translatable="yes">Hours</item>
<item id="days_id" translatable="yes">Days</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Space out applying modifications with</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="even_spacing_button">
<property name="label" translatable="yes">even spacing</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<property name="group">random_spacing_button</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="random_spacing_button">
<property name="label" translatable="yes">random spacing</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Apply modifications in order of</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="order_of_selection_button">
<property name="label" translatable="yes">selection</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="order_random_button">
<property name="label" translatable="yes">random</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<property name="group">order_of_selection_button</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="exit_game_after_done_button">
<property name="label" translatable="yes">Exit game after done applying modifications</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="applying_modifications_label">
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Applying modifications now. Click cancel to cancel</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">10</property>
<property name="position">4</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkBox" id="no_achievements_found_placeholder">
<property name="visible">True</property>
<property name="can_focus">False</property>
@ -972,244 +1228,4 @@ Did you make a typo? Or maybe this game has no stats.</property>
</object>
</child>
</object>
<object class="GtkDialog" id="timed_modifications_window">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Timed Achievement Modification Menu</property>
<property name="modal">True</property>
<property name="default_width">400</property>
<property name="default_height">200</property>
<property name="icon">../assets/icon_256.png</property>
<property name="type_hint">dialog</property>
<child type="titlebar">
<placeholder/>
</child>
<child internal-child="vbox">
<object class="GtkBox">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkButtonBox">
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="cancel_timed_modifications_button">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="submit_timed_modifications_button">
<property name="label" translatable="yes">Submit</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Apply modifications across </property>
<property name="justify">right</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="modifications_time_amount">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="max_width_chars">5</property>
<property name="text" translatable="yes">0</property>
<property name="input_purpose">number</property>
<property name="adjustment">modifications_time_amount_adjustment</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="modifications_time_unit">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="active">1</property>
<property name="popup_fixed_width">False</property>
<items>
<item id="seconds_id" translatable="yes">Seconds</item>
<item id="minutes_id" translatable="yes">Minutes</item>
<item id="hours_id" translatable="yes">Hours</item>
<item id="days_id" translatable="yes">Days</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Space out applying modifications with</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="even_spacing_button">
<property name="label" translatable="yes">even spacing</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<property name="group">random_spacing_button</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="random_spacing_button">
<property name="label" translatable="yes">random spacing</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Apply modifications in order of</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="order_of_selection_button">
<property name="label" translatable="yes">selection</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="order_random_button">
<property name="label" translatable="yes">random</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<property name="group">order_of_selection_button</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="applying_modifications_label">
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Applying modifications now. Click cancel to cancel</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">10</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

View File

@ -379,18 +379,18 @@ MySteam::commit_timed_modifications(uint64_t seconds, MODIFICATION_SPACING spaci
}
for (size_t i = 0; i < size; i++) {
std::cout << "Unlock achievement" << achievement_changes[i].id << " in " << times[i] << " seconds"
std::cout << "Unlock achievement " << achievement_changes[i].id << " in " << times[i] << " seconds"
<< " (or " << (((double)times[i]) / 60) << " minutes or " << (((double)times[i]) / 60) << " hours)" << std::endl;
}
// Execute
for (size_t i = 0; i < size; i++) {
uint64_t sleep_time = times[i] - total_time_spent;
std::cout << "Unlocking achievement" << achievement_changes[i].id << " in " << sleep_time << " seconds"
std::cout << "Unlocking achievement " << achievement_changes[i].id << " in " << sleep_time << " seconds"
<< " (or " << (((double)sleep_time) / 60) << " minutes or " << ((((double)sleep_time) / 60) / 60) << " hours)" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(sleep_time));
total_time_spent += times[i];
total_time_spent = times[i];
// Give the function a dummy array with just the one change
std::vector<AchievementChange_t> achievement_change;

View File

@ -53,6 +53,7 @@ MainPickerWindow::MainPickerWindow(GtkApplicationWindow* cobject, const Glib::Re
m_builder->get_widget("applying_modifications_label", m_applying_modifications_label);
m_builder->get_widget("cancel_timed_modifications_button", cancel_timed_modifications_button);
m_builder->get_widget("submit_timed_modifications_button", m_submit_timed_modifications_button);
m_builder->get_widget("exit_game_after_done_button", m_exit_game_after_done_button);
// Connect them manually to slots
signal_delete_event().connect(sigc::mem_fun(this, &MainPickerWindow::on_delete));
@ -286,6 +287,7 @@ MainPickerWindow::on_submit_timed_modifications_button_clicked() {
uint64_t time = m_modifications_time_amount->get_value();
MODIFICATION_SPACING spacing = EVEN_SPACING;
MODIFICATION_ORDER order = SELECTION_ORDER;
bool exit_game_after_done = false;
std::string active_time_id = m_modifications_time_unit->get_active_id();
@ -321,6 +323,12 @@ MainPickerWindow::on_submit_timed_modifications_button_clicked() {
}
g_steam->commit_timed_modifications(time, spacing, order);
// Allows users to modify this while the modifications are taking place
// I guess that's a feature?
if (m_exit_game_after_done_button->get_active()) {
on_back_button_clicked();
}
}
// => on_submit_timed_modifications_button_clicked

View File

@ -200,6 +200,7 @@ private:
Gtk::RadioButton* m_order_of_selection_button;
Gtk::RadioButton* m_order_of_percent_players_achieved_button;
Gtk::RadioButton* m_order_random_button;
Gtk::CheckButton* m_exit_game_after_done_button;
Gtk::Label* m_applying_modifications_label;
Gtk::Button* m_submit_timed_modifications_button;