| 252 | } |
| 253 | |
| 254 | const std::vector<byte> SaveGame::Build() |
| 255 | { |
| 256 | ItemInfo itemToSerialize{}; |
| 257 | FlatBufferBuilder fbb{}; |
| 258 | |
| 259 | std::vector<flatbuffers::Offset<Save::Item>> serializedItems{}; |
| 260 | |
| 261 | // Savegame header |
| 262 | auto levelNameOffset = fbb.CreateString(g_GameFlow->GetString(g_GameFlow->GetLevel(CurrentLevel)->NameStringKey.c_str())); |
| 263 | |
| 264 | Save::SaveGameHeaderBuilder sghb{ fbb }; |
| 265 | sghb.add_level_name(levelNameOffset); |
| 266 | sghb.add_level_hash(LastLevelHash); |
| 267 | |
| 268 | const auto& gameTime = SaveGame::Statistics.Game.TimeTaken; |
| 269 | sghb.add_hours(gameTime.GetHours()); |
| 270 | sghb.add_minutes(gameTime.GetMinutes()); |
| 271 | sghb.add_seconds(gameTime.GetSeconds()); |
| 272 | |
| 273 | sghb.add_level(CurrentLevel); |
| 274 | sghb.add_timer(GlobalCounter); |
| 275 | sghb.add_count(++LastSaveGame); |
| 276 | auto headerOffset = sghb.Finish(); |
| 277 | |
| 278 | Save::SaveGameStatisticsBuilder sgLevelStatisticsBuilder{ fbb }; |
| 279 | sgLevelStatisticsBuilder.add_ammo_hits(Statistics.Level.AmmoHits); |
| 280 | sgLevelStatisticsBuilder.add_ammo_used(Statistics.Level.AmmoUsed); |
| 281 | sgLevelStatisticsBuilder.add_kills(Statistics.Level.Kills); |
| 282 | sgLevelStatisticsBuilder.add_medipacks_used(Statistics.Level.HealthUsed); |
| 283 | sgLevelStatisticsBuilder.add_damage_taken(Statistics.Level.DamageTaken); |
| 284 | sgLevelStatisticsBuilder.add_distance(Statistics.Level.Distance); |
| 285 | sgLevelStatisticsBuilder.add_pickups(Statistics.Level.Pickups); |
| 286 | sgLevelStatisticsBuilder.add_secrets(Statistics.Level.Secrets); |
| 287 | sgLevelStatisticsBuilder.add_timer(SaveGame::Statistics.Level.TimeTaken); |
| 288 | auto levelStatisticsOffset = sgLevelStatisticsBuilder.Finish(); |
| 289 | |
| 290 | Save::SaveGameStatisticsBuilder sgGameStatisticsBuilder{ fbb }; |
| 291 | sgGameStatisticsBuilder.add_ammo_hits(Statistics.Game.AmmoHits); |
| 292 | sgGameStatisticsBuilder.add_ammo_used(Statistics.Game.AmmoUsed); |
| 293 | sgGameStatisticsBuilder.add_kills(Statistics.Game.Kills); |
| 294 | sgGameStatisticsBuilder.add_medipacks_used(Statistics.Game.HealthUsed); |
| 295 | sgGameStatisticsBuilder.add_damage_taken(Statistics.Game.DamageTaken); |
| 296 | sgGameStatisticsBuilder.add_distance(Statistics.Game.Distance); |
| 297 | sgGameStatisticsBuilder.add_pickups(Statistics.Game.Pickups); |
| 298 | sgGameStatisticsBuilder.add_secrets(Statistics.Game.Secrets); |
| 299 | sgGameStatisticsBuilder.add_timer(SaveGame::Statistics.Game.TimeTaken); |
| 300 | auto gameStatisticsOffset = sgGameStatisticsBuilder.Finish(); |
| 301 | |
| 302 | // Background video playback |
| 303 | auto videoNameOffset = fbb.CreateString(g_VideoPlayer.GetFileName()); |
| 304 | Save::VideoInfoBuilder sgVideoInfoBuilder{ fbb }; |
| 305 | sgVideoInfoBuilder.add_name(videoNameOffset); |
| 306 | sgVideoInfoBuilder.add_position(g_VideoPlayer.GetNormalizedPosition()); |
| 307 | sgVideoInfoBuilder.add_silent(g_VideoPlayer.GetSilent()); |
| 308 | sgVideoInfoBuilder.add_looped(g_VideoPlayer.GetLooped()); |
| 309 | auto videoInfoOffset = sgVideoInfoBuilder.Finish(); |
| 310 | |
| 311 | // Lara |
nothing calls this directly
no test coverage detected