Beispiel #1
0
void Replay::CarState::RecordFrame(const std::vector <float> & inputs, CarDynamics & car)
{
	assert(inputbuffer.size() == CarInput::INVALID);

	// record inputs, delta encoding
	InputFrame newinputframe(frame);
	for (unsigned i = 0; i < CarInput::INVALID; i++)
	{
		if (inputs[i] != inputbuffer[i])
		{
			inputbuffer[i] = inputs[i];
			newinputframe.AddInput(i, inputs[i]);
		}
	}
	if (newinputframe.GetNumInputs() > 0)
		inputframes.push_back(newinputframe);

	// record every 30th state, input frame
	if (frame % 30 == 0)
	{
		std::ostringstream statestream;
		joeserialize::BinaryOutputSerializer serialize_output(statestream);
		car.Serialize(serialize_output);
		stateframes.push_back(StateFrame(frame));
		stateframes.back().SetBinaryStateData(statestream.str());
		stateframes.back().SetInputSnapshot(inputs);
	}

	frame++;
}
Beispiel #2
0
void REPLAY::CARSTATE::RecordFrame(const std::vector <float> & inputs, CAR & car)
{
	assert(inputbuffer.size() == CARINPUT::GAME_ONLY_INPUTS_START_HERE);

	// record inputs, delta encoding
	INPUTFRAME newinputframe(frame);
	for (unsigned i = 0; i < CARINPUT::GAME_ONLY_INPUTS_START_HERE; i++)
	{
		if (inputs[i] != inputbuffer[i])
		{
			inputbuffer[i] = inputs[i];
			newinputframe.AddInput(i, inputs[i]);
		}
	}
	if (newinputframe.GetNumInputs() > 0)
		inputframes.push_back(newinputframe);

	// record every 30th state, input frame
	if (frame % 30 == 0)
	{
		std::stringstream statestream;
		joeserialize::BinaryOutputSerializer serialize_output(statestream);
		car.Serialize(serialize_output);
		stateframes.push_back(STATEFRAME(frame));
		stateframes.back().SetBinaryStateData(statestream.str());
		stateframes.back().SetInputSnapshot(inputs);
	}

	frame++;
}
Beispiel #3
0
void REPLAY::RecordFrame(const std::vector <float> & inputs, CAR & car)
{
	if (!GetRecording())
		return;

	if (frame > 2000000000) //enforce a maximum recording time of about 92 days
	{
		StopRecording("");
	}

	assert(inputbuffer.size() == CARINPUT::GAME_ONLY_INPUTS_START_HERE);
	assert((unsigned int) version_info.inputs_supported == CARINPUT::GAME_ONLY_INPUTS_START_HERE);

	//record inputs
	INPUTFRAME newinputframe(frame);

	for (unsigned i = 0; i < CARINPUT::GAME_ONLY_INPUTS_START_HERE; i++)
	{
		if (inputs[i] != inputbuffer[i])
		{
			inputbuffer[i] = inputs[i];
			newinputframe.AddInput(i, inputs[i]);
		}
	}

	if (newinputframe.GetNumInputs() > 0)
		inputframes.push_back(newinputframe);


	//record state
	int framespersecond = 1.0/version_info.framerate;
	if (frame % framespersecond == 0) //once per second
	{
		std::stringstream statestream;
		joeserialize::BinaryOutputSerializer serialize_output(statestream);
		car.Serialize(serialize_output);
		stateframes.push_back(STATEFRAME(frame));
		//stateframes.push_back(STATEFRAME(11189196)); //for debugging; in hex, 11189196 is AABBCC
		//cout << "Recording state size: " << statestream.str().length() << endl; //should be ~984
		stateframes.back().SetBinaryStateData(statestream.str());
		stateframes.back().SetInputSnapshot(inputs);
	}

	frame++;
}