4 ReplayData::ReplayData()
12 header.randomSeed = time(NULL);
13 header.version = VERSION;
14 header.release = RELEASE;
19 ReplayData::~ReplayData()
21 if (replayMode == REPLAY_MODE::RECORD)
25 fwrite(&header, sizeof(ReplayDataHeader), 1, fp);
28 if (replayMode != REPLAY_MODE::NONE)
34 void ReplayData::printReplayInformation()
36 tm *timeinfo = localtime(&header.randomSeed);
37 printf("Recorded on : %s", asctime(timeinfo));
38 printf("Map : %s\n", header.map);
39 printf("Score : %d\n", header.score);
40 printf("Time : %s\n", Math::formatTime(header.time));
43 void ReplayData::swapHeaderEndians()
46 header.randomSeed = SDL_SwapLE32(header.randomSeed);
47 header.version = SDL_SwapLE32(header.version);
48 header.release = SDL_SwapLE32(header.release);
49 header.skill = SDL_SwapLE32(header.skill);
50 header.score = SDL_SwapLE32(header.score);
54 void ReplayData::setMode(REPLAY_MODE::TYPE replayMode)
56 this->replayMode = replayMode;
58 if (replayMode == REPLAY_MODE::PLAYBACK)
60 fp = fopen(filename, "rb");
64 printf("ERROR: Replay file '%s' could not be loaded.\n", filename);
65 replayMode = REPLAY_MODE::NONE;
69 if (fread(&header, sizeof(ReplayDataHeader), 1, fp) != 1)
71 printf("ERROR: Replay file '%s' is corrupt\n", filename);
72 replayMode = REPLAY_MODE::NONE;
79 printf("\n==== REPLAY HEADER DATA ====\n");
80 printReplayInformation();
81 if ((header.version != VERSION) && (header.release != RELEASE))
83 printf("\nWARNING: Replay is from a different version (%f %d) and may not play back correctly\n", header.version, header.release);
85 printf("Press F5 to toggle Fast Playback\n");
88 else if (replayMode == REPLAY_MODE::RECORD)
90 fp = fopen(filename, "wba");
94 printf("ERROR: Replay file '%s' could not be opened for writing.\n", filename);
95 replayMode = REPLAY_MODE::NONE;
101 fwrite(&header, sizeof(ReplayDataHeader), 1, fp);
107 void ReplayData::reset()
111 for (int i = 0 ; i < DATA_LENGTH ; i++)
113 for (int j = 0 ; j < CONTROL::MAX ; j++)
119 for (int i = 0 ; i < CONTROL::MAX ; i++)
125 void ReplayData::read(int *c)
127 if (replayMode != REPLAY_MODE::PLAYBACK)
134 for (int i = 0 ; i < CONTROL::MAX ; i++)
142 for (int i = 0 ; i < CONTROL::MAX ; i++)
144 c[i] = data[index][i];
148 c[CONTROL::PAUSE] = 0;
151 void ReplayData::set(int *c)
153 if (replayMode != REPLAY_MODE::RECORD)
158 for (int i = 0 ; i < CONTROL::MAX ; i++)
160 data[index][i] = c[i];
164 void ReplayData::commit()
166 if ((endOfReplay) || (replayMode == REPLAY_MODE::NONE))
173 if (index < DATA_LENGTH)
175 if (replayMode == REPLAY_MODE::PLAYBACK)
177 if (data[index][0] == -1)
179 printf("===== END OF REPLAY =====\n");
187 for (int i = 0 ; i < CONTROL::MAX ; i++)
194 if (index >= DATA_LENGTH)
196 if (replayMode == REPLAY_MODE::PLAYBACK)
200 else if (replayMode == REPLAY_MODE::RECORD)
209 void ReplayData::load()
216 debug(("ReplayData::load()\n"));
218 int size = fread(data, 1, DATA_LENGTH * CONTROL::MAX, fp);
220 if (size != DATA_LENGTH * CONTROL::MAX)
222 printf("Error reading replay data\n");
226 debug(("ReplayData::load() - Done (%d)\n", size));
229 void ReplayData::save()
231 debug(("ReplayData::save()\n"));
233 int size = fwrite(data, 1, DATA_LENGTH * CONTROL::MAX, fp);
235 if (size != DATA_LENGTH * CONTROL::MAX)
237 printf("Error saving replay data\n");
241 debug(("ReplayData::save() - Done (%d)\n", size));