#pragma once #include "stdafx.h" #include #include #include "IInputRecorder.h" #include "BatteryManager.h" #include "INotificationListener.h" #include "MovieTypes.h" class ZipWriter; class Console; class RewindData; //struct CodeInfo; class MovieRecorder : public INotificationListener, public IInputRecorder, public IBatteryRecorder, public IBatteryProvider, public std::enable_shared_from_this { private: static const uint32_t MovieFormatVersion = 1; shared_ptr _console; string _filename; string _author; string _description; unique_ptr _writer; std::unordered_map> _batteryData; stringstream _inputData; bool _hasSaveState = false; stringstream _saveStateData; void GetGameSettings(stringstream &out); //void WriteCheat(stringstream &out, CodeInfo &code); void WriteString(stringstream &out, string name, string value); void WriteInt(stringstream &out, string name, uint32_t value); void WriteBool(stringstream &out, string name, bool enabled); public: MovieRecorder(shared_ptr console); virtual ~MovieRecorder(); bool Record(RecordMovieOptions options); bool Stop(); bool CreateMovie(string movieFile, std::deque& data, uint32_t startPosition, uint32_t endPosition); // Inherited via IInputRecorder void RecordInput(vector> devices) override; // Inherited via IBatteryRecorder void OnLoadBattery(string extension, vector batteryData) override; vector LoadBattery(string extension) override; // Inherited via INotificationListener void ProcessNotification(ConsoleNotificationType type, void *parameter) override; };