#ifndef _WALKTHROUGHRECORDER_H__ #define _WALKTHROUGHRECORDER_H__ #include "common.h" #include #include "Vector3.h" namespace CHCDemoEngine { class Camera; struct FrameInfo { FrameInfo(const Vector3 &pos, const Vector3 &dir): mPosition(pos), mDirection(dir) {} FrameInfo() {} ///////////// Vector3 mPosition; Vector3 mDirection; friend std::ostream& operator<< (std::ostream &s, const FrameInfo &A); friend std::istream& operator>> (std::istream &s, FrameInfo &A); }; /// Overload << operator for C++-style output inline std::ostream& operator<< (std::ostream &s, const FrameInfo &A) { return s << A.mPosition << " " << A.mDirection; } /// Overload >> operator for C++-style input inline std::istream& operator>> (std::istream &s, FrameInfo &A) { return s >> A.mPosition >> A.mDirection; } /** Records given walkthrough */ class WalkThroughRecorder { public: /** Writes walkthrough frames to file. */ WalkThroughRecorder(const std::string &filename); ~WalkThroughRecorder(); /** Writes current camera data. */ void WriteFrame(Camera *cam); protected: std::ofstream mFile; }; /** Replays a given walkthrough */ class WalkThroughPlayer { public: /** Writes walkthrough frames to file. */ WalkThroughPlayer(const std::string &filename); /** Reads next frame. returns false if end of recorded frames is reached. */ bool ReadNextFrame(Camera *cam); protected: std::vector mFrameInfos; int mFrame; }; } #endif