Separate custom save states. (nw)

This commit is contained in:
couriersud 2017-02-12 01:11:07 +01:00
parent d7f420ccf7
commit f2c3b51553
2 changed files with 15 additions and 7 deletions

View File

@ -16,6 +16,7 @@ state_manager_t::state_manager_t()
state_manager_t::~state_manager_t()
{
m_save.clear();
m_custom.clear();
}
@ -35,20 +36,25 @@ void state_manager_t::remove_save_items(const void *owner)
else
i++;
}
for (auto i = m_custom.begin(); i != m_custom.end(); )
{
if (i->get()->m_owner == owner)
i = m_save.erase(i);
else
i++;
}
}
void state_manager_t::pre_save()
{
for (auto & s : m_save)
if (s->m_dt.is_custom)
s->m_callback->on_pre_save();
for (auto & s : m_custom)
s->m_callback->on_pre_save();
}
void state_manager_t::post_load()
{
for (auto & s : m_save)
if (s->m_dt.is_custom)
s->m_callback->on_post_load();
for (auto & s : m_custom)
s->m_callback->on_post_load();
}
template<> void state_manager_t::save_item(const void *owner, callback_t &state, const pstring &stname)
@ -56,7 +62,7 @@ template<> void state_manager_t::save_item(const void *owner, callback_t &state,
//save_state_ptr(stname, DT_CUSTOM, 0, 1, &state);
callback_t *state_p = &state;
auto p = plib::make_unique<entry_t>(stname, owner, state_p);
m_save.push_back(std::move(p));
m_custom.push_back(std::move(p));
state.register_state(*this, stname);
}

View File

@ -135,6 +135,8 @@ protected:
private:
entry_t::list_t m_save;
entry_t::list_t m_custom;
};
template<> void state_manager_t::save_item(const void *owner, callback_t &state, const pstring &stname);