record::push
The record::push function allows you to add operations to the record history for later undo and redo operations.
Function Signature
#![allow(unused)]
fn main() {
record::push<Act>() -> ActionSeed<Track<Act>, EditRecordResult>
}
Creates an action that pushes a Track onto the Record. The output will be an EditRecordResult, which will be an error (UndoRedoInProgress) if an undo or redo operation is in progress.
Parameters
Act: The type of operation being recorded. This is a generic type parameter that allows you to define different types of operations.
Return Value
Returns an ActionSeed<Track<Act>, EditRecordResult> that, when executed, will push the provided Track onto the Record.
Example
#![allow(unused)]
fn main() {
use bevy::prelude::*;
use bevy_flurx::prelude::*;
// Define an operation type
struct MoveAct;
fn spawn_reactor(mut commands: Commands) {
commands.spawn(Reactor::schedule(|task| async move {
// Push an operation onto the record history
task.will(Update, record::push()
.with(Track {
act: MoveAct,
rollback: Rollback::undo_redo(|| once::run(|mut player: Query<&mut Transform>| {
let pos = player.single_mut().unwrap().translation;
player.single_mut().unwrap().translation = Vec3::Z;
RedoAction::new(once::run(move |mut player: Query<&mut Transform>| {
player.single_mut().unwrap().translation = pos;
}))
}))
})
).await.expect("An error will be returned if undo or redo is operating.");
}));
}
}
Creating a Track
The Track struct is used to define an operation and its rollback behavior:
#![allow(unused)]
fn main() {
Track {
act: YourActType,
rollback: Rollback::undo_redo(|| /* your undo action */)
}
}
Track Fields
act: The operation being recorded. This can be any type that implementsSend + Sync + 'static.rollback: The process called when a rollback is requested. This is created using one of theRollbackmethods.
Rollback Methods
Rollback::new(): Creates a rollback with a function that may optionally create a redo action.Rollback::undo(): Creates a rollback that doesn’t create a redo action.Rollback::undo_redo(): Creates a rollback that always creates a redo action.Rollback::parts(): Declares undo and redo separately withUndoandRedotypes.
Error Handling
The push function returns an EditRecordResult, which is a Result<(), UndoRedoInProgress>. If an undo or redo operation is in progress, the function will return Err(UndoRedoInProgress).
When to Use
Use record::push when you need to:
- Add an operation to the record history
- Define how an operation can be undone and redone
- Track user actions for later reversal
This function is the foundation of the record system, as it allows you to define operations and their rollback behavior.