File: rewind.cpp

package info (click to toggle)
ares 126-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 32,600 kB
  • sloc: cpp: 356,508; ansic: 20,394; makefile: 16; sh: 2
file content (36 lines) | stat: -rw-r--r-- 1,136 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
auto Program::rewindSetMode(Rewind::Mode mode) -> void {
  rewind.mode = mode;
  rewind.counter = 0;
}

auto Program::rewindReset() -> void {
  rewindSetMode(Rewind::Mode::Playing);
  rewind.history.reset();
  rewind.length = settings.rewind.length;
  rewind.frequency = settings.rewind.frequency;
}

auto Program::rewindRun() -> void {
  if(!settings.general.rewind) return;  //rewind disabled?

  if(rewind.mode == Rewind::Mode::Playing) {
    if(++rewind.counter < rewind.frequency) return;
    rewind.counter = 0;
    if(rewind.history.size() >= rewind.length) rewind.history.takeFirst();
    auto s = emulator->root->serialize(0);
    rewind.history.append(s);
  }

  if(rewind.mode == Rewind::Mode::Rewinding) {
    if(!rewind.history.size()) return rewindSetMode(Rewind::Mode::Playing);  //nothing left to rewind?
    if(++rewind.counter < rewind.frequency / 5) return;  //rewind 5x faster than playing
    rewind.counter = 0;
    auto s = rewind.history.takeLast();
    s.setReading();
    emulator->root->unserialize(s);
    if(!rewind.history) {
      showMessage("Rewind history exhausted");
      rewindReset();
    }
  }
}