| 306 | } |
| 307 | |
| 308 | bool sGameRecorded::FromJson(const std::string& pJson) { |
| 309 | Json LoadedData; |
| 310 | |
| 311 | try { |
| 312 | LoadedData = Json::parse(pJson); |
| 313 | } |
| 314 | catch (std::exception Exception) { |
| 315 | std::cout << "SaveGame JSON Parsing Error: " << Exception.what() << "\n"; |
| 316 | return false; |
| 317 | } |
| 318 | |
| 319 | clear(); |
| 320 | |
| 321 | mVersion = LoadedData["SaveVersion"]; |
| 322 | if (mVersion >= 1) { |
| 323 | try { |
| 324 | mSeed[0] = LoadedData["Seed1"]; |
| 325 | mSeed[1] = LoadedData["Seed2"]; |
| 326 | mSeed[2] = LoadedData["Seed3"]; |
| 327 | mSeed[3] = LoadedData["Seed4"]; |
| 328 | mInputTicks = LoadedData["InputTicks"]; |
| 329 | mEngineTicks = LoadedData["mEngineTicks"]; |
| 330 | mRecordedPlatform = LoadedData["mPlatform"]; |
| 331 | |
| 332 | mParams->FromJson(LoadedData["mParams"]); |
| 333 | for (auto& Event : LoadedData["mEvents"]) { |
| 334 | uint32 Ticks = Event["1"]; |
| 335 | |
| 336 | cEvent EventRecorded; |
| 337 | |
| 338 | EventRecorded.mButton = Event["2"]; |
| 339 | EventRecorded.mButtonCount = Event["3"]; |
| 340 | EventRecorded.mPosition.mX = Event["4"]; |
| 341 | EventRecorded.mPosition.mY = Event["5"]; |
| 342 | EventRecorded.mType = Event["6"]; |
| 343 | |
| 344 | mEvents.insert(mEvents.end(), std::make_pair(Ticks, EventRecorded )); |
| 345 | } |
| 346 | |
| 347 | for (auto& State : LoadedData["mStates"]) { |
| 348 | uint32 Ticks = State["1"]; |
| 349 | |
| 350 | cStateRecorded StateRecorded; |
| 351 | |
| 352 | StateRecorded.mInputMouseX = State["2"]; |
| 353 | StateRecorded.mInputMouseY = State["3"]; |
| 354 | StateRecorded.mMouseButtonStatus = State["4"]; |
| 355 | |
| 356 | mState.insert(mState.end(), std::make_pair( Ticks, StateRecorded )); |
| 357 | } |
| 358 | |
| 359 | for (auto& val : LoadedData["mVideoTicks"]) { |
| 360 | mVideoTicks.push_back(val); |
| 361 | } |
| 362 | |
| 363 | } |
| 364 | catch (std::exception Exception) { |
| 365 | std::cout << "sGameRecorded: V1 Elements not found: " << Exception.what() << "\n"; |