示例#1
0
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();
}