diff --git a/scripts/GameField.gd b/scripts/GameField.gd index 1e0d559..2cb6a3a 100644 --- a/scripts/GameField.gd +++ b/scripts/GameField.gd @@ -280,14 +280,23 @@ func _input(event: InputEvent) -> void: var undo_stack = [] var undo_preview_pos := 0 setget set_undo_preview_pos +func apply_undo_preview(): + undo_stack.resize(len(undo_stack)-undo_preview_pos) + undo_preview_pos = 0 + func do_action(action): + if undo_preview_pos > 0: + apply_undo_preview() action.activate() undo_stack.append(action) func undo(): if !undo_stack.empty(): - var action = undo_stack.pop_back() - action.undo() + if undo_preview_pos > 0: + apply_undo_preview() + else: + var action = undo_stack.pop_back() + action.undo() func set_undo_preview_pos(value): if value < 0: # Negative is past the end of the stack @@ -300,10 +309,10 @@ func set_undo_preview_pos(value): var delta = value - old_pos if delta > 0: # We are undoing for i in delta: - undo_stack[-old_pos-i].undo() + undo_stack[-old_pos-1-i].undo() elif delta < 0: # We are redoing for i in -delta: - undo_stack[-old_pos+1+i].activate() + undo_stack[-old_pos+i].activate() class UndoAction: var action_type