Fixing player
This commit is contained in:
parent
501efec81e
commit
97ccbc3174
|
@ -15,7 +15,8 @@
|
||||||
|
|
||||||
struct stepData_t
|
struct stepData_t
|
||||||
{
|
{
|
||||||
std::string input;
|
std::string inputString;
|
||||||
|
jaffar::input_t decodedInput;
|
||||||
uint8_t *stateData;
|
uint8_t *stateData;
|
||||||
jaffarCommon::hash::hash_t hash;
|
jaffarCommon::hash::hash_t hash;
|
||||||
};
|
};
|
||||||
|
@ -26,10 +27,11 @@ class PlaybackInstance
|
||||||
static const uint16_t image_height = 240;
|
static const uint16_t image_height = 240;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void addStep(const std::string &input)
|
void addStep(const std::string &inputString, const jaffar::input_t decodedInput)
|
||||||
{
|
{
|
||||||
stepData_t step;
|
stepData_t step;
|
||||||
step.input = input;
|
step.inputString = inputString;
|
||||||
|
step.decodedInput = decodedInput;
|
||||||
step.stateData = (uint8_t *)malloc(_emu->getFullStateSize());
|
step.stateData = (uint8_t *)malloc(_emu->getFullStateSize());
|
||||||
|
|
||||||
jaffarCommon::serializer::Contiguous serializer(step.stateData);
|
jaffarCommon::serializer::Contiguous serializer(step.stateData);
|
||||||
|
@ -92,18 +94,24 @@ class PlaybackInstance
|
||||||
|
|
||||||
void initialize(const std::vector<std::string> &sequence)
|
void initialize(const std::vector<std::string> &sequence)
|
||||||
{
|
{
|
||||||
|
// Getting input decoder
|
||||||
|
auto inputParser = _emu->getInputParser();
|
||||||
|
|
||||||
// Building sequence information
|
// Building sequence information
|
||||||
for (const auto &input : sequence)
|
for (const auto &input : sequence)
|
||||||
{
|
{
|
||||||
|
// Getting decoded input
|
||||||
|
const auto decodedInput = inputParser->parseInputString(input);
|
||||||
|
|
||||||
// Adding new step
|
// Adding new step
|
||||||
addStep(input);
|
addStep(input, decodedInput);
|
||||||
|
|
||||||
// Advance state based on the input received
|
// Advance state based on the input received
|
||||||
_emu->advanceState(input);
|
_emu->advanceState(decodedInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adding last step with no input
|
// Adding last step with no input
|
||||||
addStep("<End Of Sequence>");
|
addStep("<End Of Sequence>", jaffar::input_t());
|
||||||
}
|
}
|
||||||
|
|
||||||
void enableRendering(SDL_Window *window)
|
void enableRendering(SDL_Window *window)
|
||||||
|
@ -149,14 +157,14 @@ class PlaybackInstance
|
||||||
// Load correct overlay images, if using overlay
|
// Load correct overlay images, if using overlay
|
||||||
if (_useOverlay == true)
|
if (_useOverlay == true)
|
||||||
{
|
{
|
||||||
if (step.input.find("A") != std::string::npos) overlayButtonASurface = _overlayButtonASurface;
|
if (step.inputString.find("A") != std::string::npos) overlayButtonASurface = _overlayButtonASurface;
|
||||||
if (step.input.find("B") != std::string::npos) overlayButtonBSurface = _overlayButtonBSurface;
|
if (step.inputString.find("B") != std::string::npos) overlayButtonBSurface = _overlayButtonBSurface;
|
||||||
if (step.input.find("S") != std::string::npos) overlayButtonSelectSurface = _overlayButtonSelectSurface;
|
if (step.inputString.find("S") != std::string::npos) overlayButtonSelectSurface = _overlayButtonSelectSurface;
|
||||||
if (step.input.find("T") != std::string::npos) overlayButtonStartSurface = _overlayButtonStartSurface;
|
if (step.inputString.find("T") != std::string::npos) overlayButtonStartSurface = _overlayButtonStartSurface;
|
||||||
if (step.input.find("L") != std::string::npos) overlayButtonLeftSurface = _overlayButtonLeftSurface;
|
if (step.inputString.find("L") != std::string::npos) overlayButtonLeftSurface = _overlayButtonLeftSurface;
|
||||||
if (step.input.find("R") != std::string::npos) overlayButtonRightSurface = _overlayButtonRightSurface;
|
if (step.inputString.find("R") != std::string::npos) overlayButtonRightSurface = _overlayButtonRightSurface;
|
||||||
if (step.input.find("U") != std::string::npos) overlayButtonUpSurface = _overlayButtonUpSurface;
|
if (step.inputString.find("U") != std::string::npos) overlayButtonUpSurface = _overlayButtonUpSurface;
|
||||||
if (step.input.find("D") != std::string::npos) overlayButtonDownSurface = _overlayButtonDownSurface;
|
if (step.inputString.find("D") != std::string::npos) overlayButtonDownSurface = _overlayButtonDownSurface;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Since we do not store the blit information (too much memory), we need to load the previous frame and re-run the input
|
// Since we do not store the blit information (too much memory), we need to load the previous frame and re-run the input
|
||||||
|
@ -170,7 +178,7 @@ class PlaybackInstance
|
||||||
const auto stateData = getStateData(stepId - 1);
|
const auto stateData = getStateData(stepId - 1);
|
||||||
jaffarCommon::deserializer::Contiguous deserializer(stateData);
|
jaffarCommon::deserializer::Contiguous deserializer(stateData);
|
||||||
_emu->deserializeState(deserializer);
|
_emu->deserializeState(deserializer);
|
||||||
_emu->advanceState(getStateInput(stepId - 1));
|
_emu->advanceState(getDecodedInput(stepId - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Updating image
|
// Updating image
|
||||||
|
@ -184,7 +192,7 @@ class PlaybackInstance
|
||||||
return _stepSequence.size();
|
return _stepSequence.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string getInput(const size_t stepId) const
|
const std::string getInputString(const size_t stepId) const
|
||||||
{
|
{
|
||||||
// Checking the required step id does not exceed contents of the sequence
|
// Checking the required step id does not exceed contents of the sequence
|
||||||
if (stepId > _stepSequence.size()) JAFFAR_THROW_LOGIC("[Error] Attempting to render a step larger than the step sequence");
|
if (stepId > _stepSequence.size()) JAFFAR_THROW_LOGIC("[Error] Attempting to render a step larger than the step sequence");
|
||||||
|
@ -193,7 +201,19 @@ class PlaybackInstance
|
||||||
const auto &step = _stepSequence[stepId];
|
const auto &step = _stepSequence[stepId];
|
||||||
|
|
||||||
// Returning step input
|
// Returning step input
|
||||||
return step.input;
|
return step.inputString;
|
||||||
|
}
|
||||||
|
|
||||||
|
const jaffar::input_t getDecodedInput(const size_t stepId) const
|
||||||
|
{
|
||||||
|
// Checking the required step id does not exceed contents of the sequence
|
||||||
|
if (stepId > _stepSequence.size()) JAFFAR_THROW_LOGIC("[Error] Attempting to render a step larger than the step sequence");
|
||||||
|
|
||||||
|
// Getting step information
|
||||||
|
const auto &step = _stepSequence[stepId];
|
||||||
|
|
||||||
|
// Returning step input
|
||||||
|
return step.decodedInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t *getStateData(const size_t stepId) const
|
const uint8_t *getStateData(const size_t stepId) const
|
||||||
|
@ -220,17 +240,6 @@ class PlaybackInstance
|
||||||
return step.hash;
|
return step.hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string getStateInput(const size_t stepId) const
|
|
||||||
{
|
|
||||||
// Checking the required step id does not exceed contents of the sequence
|
|
||||||
if (stepId > _stepSequence.size()) JAFFAR_THROW_LOGIC("[Error] Attempting to render a step larger than the step sequence");
|
|
||||||
|
|
||||||
// Getting step information
|
|
||||||
const auto &step = _stepSequence[stepId];
|
|
||||||
|
|
||||||
// Returning step input
|
|
||||||
return step.input;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Internal sequence information
|
// Internal sequence information
|
||||||
|
|
|
@ -115,7 +115,7 @@ int main(int argc, char *argv[])
|
||||||
nlohmann::json emulatorConfig;
|
nlohmann::json emulatorConfig;
|
||||||
emulatorConfig["Controller 1 Type"] = controller1Type;
|
emulatorConfig["Controller 1 Type"] = controller1Type;
|
||||||
emulatorConfig["Controller 2 Type"] = controller2Type;
|
emulatorConfig["Controller 2 Type"] = controller2Type;
|
||||||
NESInstance e;
|
NESInstance e(emulatorConfig);
|
||||||
|
|
||||||
// Loading ROM File
|
// Loading ROM File
|
||||||
std::string romFileData;
|
std::string romFileData;
|
||||||
|
@ -165,7 +165,7 @@ int main(int argc, char *argv[])
|
||||||
if (disableRender == false) p.renderFrame(currentStep);
|
if (disableRender == false) p.renderFrame(currentStep);
|
||||||
|
|
||||||
// Getting input
|
// Getting input
|
||||||
const auto &input = p.getStateInput(currentStep);
|
const auto &inputString = p.getInputString(currentStep);
|
||||||
|
|
||||||
// Getting state hash
|
// Getting state hash
|
||||||
const auto hash = p.getStateHash(currentStep);
|
const auto hash = p.getStateHash(currentStep);
|
||||||
|
@ -180,7 +180,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
jaffarCommon::logger::log("[] ----------------------------------------------------------------\n");
|
jaffarCommon::logger::log("[] ----------------------------------------------------------------\n");
|
||||||
jaffarCommon::logger::log("[] Current Step #: %lu / %lu\n", currentStep + 1, sequenceLength);
|
jaffarCommon::logger::log("[] Current Step #: %lu / %lu\n", currentStep + 1, sequenceLength);
|
||||||
jaffarCommon::logger::log("[] Input: %s\n", input.c_str());
|
jaffarCommon::logger::log("[] Input: %s\n", inputString.c_str());
|
||||||
jaffarCommon::logger::log("[] State Hash: 0x%lX%lX\n", hash.first, hash.second);
|
jaffarCommon::logger::log("[] State Hash: 0x%lX%lX\n", hash.first, hash.second);
|
||||||
|
|
||||||
// Only print commands if not in reproduce mode
|
// Only print commands if not in reproduce mode
|
||||||
|
|
Loading…
Reference in New Issue