Fix IW4 fastfile writer factory steps

This commit is contained in:
Jan 2021-05-08 16:41:21 +02:00
parent 54579deea4
commit acc11a1609
3 changed files with 33 additions and 0 deletions

View File

@ -8,7 +8,9 @@
#include "Game/IW4/ZoneConstantsIW4.h"
#include "Writing/Processor/OutputProcessorDeflate.h"
#include "Writing/Steps/StepAddOutputProcessor.h"
#include "Writing/Steps/StepWriteTimestamp.h"
#include "Writing/Steps/StepWriteXBlockSizes.h"
#include "Writing/Steps/StepWriteZero.h"
#include "Writing/Steps/StepWriteZoneContentToFile.h"
#include "Writing/Steps/StepWriteZoneContentToMemory.h"
#include "Writing/Steps/StepWriteZoneHeader.h"
@ -78,6 +80,12 @@ public:
// Write zone header
m_writer->AddWritingStep(std::make_unique<StepWriteZoneHeader>(CreateHeaderForParams(isSecure, false)));
// Write dummy byte that the game ignores as well. No clue what it means.
m_writer->AddWritingStep(std::make_unique<StepWriteZero>(1));
// Write timestamp
m_writer->AddWritingStep(std::make_unique<StepWriteTimestamp>());
m_writer->AddWritingStep(std::make_unique<StepAddOutputProcessor>(std::make_unique<OutputProcessorDeflate>()));
// Start of the XFile struct

View File

@ -0,0 +1,15 @@
#include "StepWriteTimestamp.h"
#include <algorithm>
#include <ctime>
StepWriteTimestamp::StepWriteTimestamp()
{
}
void StepWriteTimestamp::PerformStep(ZoneWriter* zoneWriter, IWritingStream* stream)
{
// time_t is not guaranteed to be 64bit so cast is necessary
const auto time = static_cast<int64_t>(std::time(nullptr));
stream->Write(&time, sizeof(time));
}

View File

@ -0,0 +1,10 @@
#pragma once
#include "Writing/IWritingStep.h"
class StepWriteTimestamp final : public IWritingStep
{
public:
StepWriteTimestamp();
void PerformStep(ZoneWriter* zoneWriter, IWritingStream* stream) override;
};