void GamePlayScene::loadGameState(const std::vector<char> *data) { union change { int i; unsigned char buf[4]; } itoc; itoc.buf[0] = data->at(0); itoc.buf[1] = data->at(1); itoc.buf[2] = data->at(2); itoc.buf[3] = data->at(3); loadPuzzle(itoc.i); m_sudoku->loadGameFromBuffer(data); AbstractCommand *cmd; int pos = SUDOKU_SIZE * SUDOKU_SIZE * 3 + 4; while (pos < data->size()) { cmd = AbstractCommand::loadFromBuffer(this, data, pos); m_logStack.push_back(cmd); if (cmd->isPuzzleCmd()) { m_undoStack.push_back(cmd->clone()); } pos += cmd->getCommandBufSize(); } m_puzzleLayer->resetValues(); m_inputLayer->setUndoButton(hasSomethingToUndo()); m_inputLayer->setNumberCompleted(); }