Class to store the actions that a player can undo and redo. More...
#include <undo.hpp>
Public Member Functions | |
undo_list (const undo_list &)=delete | |
undo_list & | operator= (const undo_list &)=delete |
undo_list () | |
Constructor. More... | |
~undo_list () | |
Destructor. More... | |
void | add_auto_shroud (bool turned_on) |
Adds an auto-shroud toggle to the undo stack. More... | |
void | add_dummy () |
Adds an auto-shroud toggle to the undo stack. More... | |
void | add_dismissal (const unit_const_ptr u) |
Adds a dismissal to the undo stack. More... | |
void | add_move (const unit_const_ptr u, const std::vector< map_location >::const_iterator &begin, const std::vector< map_location >::const_iterator &end, int start_moves, int timebonus=0, int village_owner=-1, const map_location::DIRECTION dir=map_location::NDIRECTIONS) |
Adds a move to the undo stack. More... | |
void | add_recall (const unit_const_ptr u, const map_location &loc, const map_location &from, int orig_village_owner, bool time_bonus) |
Adds a recall to the undo stack. More... | |
void | add_recruit (const unit_const_ptr u, const map_location &loc, const map_location &from, int orig_village_owner, bool time_bonus) |
Adds a recruit to the undo stack. More... | |
void | add_update_shroud () |
Adds a shroud update to the undo stack. More... | |
void | clear () |
Clears the stack of undoable (and redoable) actions. More... | |
bool | commit_vision () |
Updates fog/shroud based on the undo stack, then updates stack as needed. More... | |
void | new_side_turn (int side) |
Performs some initializations and error checks when starting a new side-turn. More... | |
bool | player_acted () const |
Returns true if the player has performed any actions this turn. More... | |
void | read (const config &cfg) |
Read the undo_list from the provided config. More... | |
void | write (config &cfg) const |
Write the undo_list into the provided config. More... | |
bool | can_undo () const |
True if there are actions that can be undone. More... | |
bool | can_redo () const |
True if there are actions that can be redone. More... | |
void | undo () |
Undoes the top action on the undo stack. More... | |
void | redo () |
Redoes the top action on the redo stack. More... | |
Static Public Member Functions | |
static undo_action_base * | create_action (const config &cfg) |
Creates an undo_action based on a config. More... | |
Private Types | |
typedef std::unique_ptr< undo_action_base > | action_ptr_t |
typedef std::vector< action_ptr_t > | action_list |
typedef std::vector< std::unique_ptr< config > > | redos_list |
Private Member Functions | |
void | add (undo_action_base *action) |
Adds an action to the undo stack. More... | |
bool | apply_shroud_changes () const |
Applies the pending fog/shroud changes from the undo stack. More... | |
Private Attributes | |
action_list | undos_ |
redos_list | redos_ |
int | side_ |
Tracks the current side. More... | |
bool | committed_actions_ |
Tracks if actions have been cleared from the stack since the turn began. More... | |
|
private |
|
private |
|
private |
|
delete |
actions::undo_list::undo_list | ( | ) |
|
inlineprivate |
Adds an action to the undo stack.
Definition at line 109 of file undo.hpp.
References redos_, and undos_.
Referenced by add_auto_shroud(), add_dismissal(), add_dummy(), add_move(), add_recall(), add_recruit(), and add_update_shroud().
void actions::undo_list::add_auto_shroud | ( | bool | turned_on | ) |
Adds an auto-shroud toggle to the undo stack.
Definition at line 135 of file undo.cpp.
References add().
Referenced by SYNCED_COMMAND_HANDLER_FUNCTION().
void actions::undo_list::add_dismissal | ( | const unit_const_ptr | u | ) |
Adds a dismissal to the undo stack.
Definition at line 148 of file undo.cpp.
References add().
Referenced by SYNCED_COMMAND_HANDLER_FUNCTION().
void actions::undo_list::add_dummy | ( | ) |
Adds an auto-shroud toggle to the undo stack.
Definition at line 140 of file undo.cpp.
References add().
Referenced by SYNCED_COMMAND_HANDLER_FUNCTION().
void actions::undo_list::add_move | ( | const unit_const_ptr | u, |
const std::vector< map_location >::const_iterator & | begin, | ||
const std::vector< map_location >::const_iterator & | end, | ||
int | start_moves, | ||
int | timebonus = 0 , |
||
int | village_owner = -1 , |
||
const map_location::DIRECTION | dir = map_location::NDIRECTIONS |
||
) |
void actions::undo_list::add_recall | ( | const unit_const_ptr | u, |
const map_location & | loc, | ||
const map_location & | from, | ||
int | orig_village_owner, | ||
bool | time_bonus | ||
) |
Adds a recall to the undo stack.
Definition at line 168 of file undo.cpp.
References add().
Referenced by actions::recall_unit().
void actions::undo_list::add_recruit | ( | const unit_const_ptr | u, |
const map_location & | loc, | ||
const map_location & | from, | ||
int | orig_village_owner, | ||
bool | time_bonus | ||
) |
Adds a recruit to the undo stack.
Definition at line 177 of file undo.cpp.
References add().
Referenced by actions::recruit_unit().
void actions::undo_list::add_update_shroud | ( | ) |
Adds a shroud update to the undo stack.
This is called from within commit_vision(), so there should be no need for this to be publicly visible.
Definition at line 188 of file undo.cpp.
References add().
Referenced by SYNCED_COMMAND_HANDLER_FUNCTION().
|
private |
Applies the pending fog/shroud changes from the undo stack.
Does nothing if the the current side does not use fog or shroud.
Definition at line 430 of file undo.cpp.
References team::auto_shroud_updates(), actions::clear_shroud(), actions::shroud_clearer::clear_unit(), actions::shroud_clearer::fire_events(), team::fog_or_shroud(), resources::gameboard, cursor::get(), game_display::get_singleton(), game_board::get_team(), i, actions::shroud_clearer::invalidate_after_clear(), game_display::invalidate_unit(), synced_context::is_synced(), LOG_NG, side_, and undos_.
Referenced by clear(), and commit_vision().
|
inline |
True if there are actions that can be redone.
Definition at line 101 of file undo.hpp.
References redos_.
Referenced by play_controller::can_redo().
|
inline |
True if there are actions that can be undone.
Definition at line 99 of file undo.hpp.
References undos_.
Referenced by play_controller::can_undo(), and playmp_controller::send_actions().
void actions::undo_list::clear | ( | ) |
Clears the stack of undoable (and redoable) actions.
(Also handles updating fog/shroud if needed.) Call this if an action alters the game state, but add that action to the stack before calling this (if the action is a kind that can be undone). This may fire events and change the game state.
Definition at line 201 of file undo.cpp.
References apply_shroud_changes(), committed_actions_, redos_, and undos_.
Referenced by synced_context::ask_server_choice(), synced_context::block_undo(), ai::recall_result::do_execute(), ai::recruit_result::do_execute(), wb::side_actions::execute(), playsingle_controller::play_ai_turn(), playmp_controller::play_human_turn(), actions::recall_unit(), actions::recruit_unit(), synced_context::run(), wb::manager::set_active(), synced_context::set_is_simultaneous(), playmp_controller::surrender(), and SYNCED_COMMAND_HANDLER_FUNCTION().
bool actions::undo_list::commit_vision | ( | ) |
Updates fog/shroud based on the undo stack, then updates stack as needed.
Returns true if somethign was cleared.
Call this when "updating shroud now". This may fire events and change the game state.
Definition at line 223 of file undo.cpp.
References apply_shroud_changes(), committed_actions_, and undos_.
Referenced by SYNCED_COMMAND_HANDLER_FUNCTION().
|
static |
Creates an undo_action based on a config.
Throws bad_lexical_cast or config::error if it cannot parse the config properly.
Definition at line 62 of file undo.cpp.
References config::child_or_empty(), ERR_NG, unit_type_data::find(), config::mandatory_child(), map_location::parse_direction(), and unit_types.
Referenced by read().
void actions::undo_list::new_side_turn | ( | int | side | ) |
Performs some initializations and error checks when starting a new side-turn.
[in] | side | The side whose turn is about to start. |
Definition at line 243 of file undo.cpp.
References committed_actions_, ERR_NG, redos_, side_, and undos_.
Referenced by play_controller::do_init_side().
|
inline |
Returns true if the player has performed any actions this turn.
Definition at line 90 of file undo.hpp.
References committed_actions_, and undos_.
void actions::undo_list::read | ( | const config & | cfg | ) |
Read the undo_list from the provided config.
Currently, this is only used when the undo_list is empty, but in theory it could be used to append the config to the current data.
Definition at line 269 of file undo.cpp.
References config::child_range(), committed_actions_, create_action(), e, ERR_NG, redos_, side_, and undos_.
void actions::undo_list::redo | ( | ) |
Redoes the top action on the redo stack.
Definition at line 385 of file undo.cpp.
References _(), data, ERR_NG, game_display::get_singleton(), wfl::msg(), resources::recorder, replay::redo(), redos_, synced_context::run(), and gui2::show_transient_message().
Referenced by play_controller::redo().
void actions::undo_list::undo | ( | ) |
Undoes the top action on the undo stack.
Definition at line 329 of file undo.cpp.
References ERR_NG, resources::gameboard, n_unit::id_manager::get_save_id(), game_display::get_singleton(), resources::recorder, replay::redo(), redos_, n_unit::id_manager::set_save_id(), side_, replay::undo_cut(), undos_, game_board::unit_id_manager(), and resources::whiteboard.
Referenced by playmp_controller::play_human_turn(), and play_controller::undo().
void actions::undo_list::write | ( | config & | cfg | ) | const |
Write the undo_list into the provided config.
Definition at line 313 of file undo.cpp.
References config::add_child(), committed_actions_, redos_, side_, and undos_.
|
private |
Tracks if actions have been cleared from the stack since the turn began.
Definition at line 121 of file undo.hpp.
Referenced by clear(), commit_vision(), new_side_turn(), player_acted(), read(), and write().
|
private |
Definition at line 116 of file undo.hpp.
Referenced by add(), can_redo(), clear(), new_side_turn(), read(), redo(), undo(), and write().
|
private |
Tracks the current side.
Definition at line 119 of file undo.hpp.
Referenced by apply_shroud_changes(), new_side_turn(), read(), undo(), and write().
|
private |
Definition at line 115 of file undo.hpp.
Referenced by add(), apply_shroud_changes(), can_undo(), clear(), commit_vision(), new_side_turn(), player_acted(), read(), undo(), and write().