yes! saving and loading works!

This commit is contained in:
Erik Faye-Lund 2008-02-17 17:48:03 +00:00
parent edce2d8fc7
commit 3997eb7b26
4 changed files with 45 additions and 17 deletions

View File

@ -25,10 +25,14 @@ namespace sync
class Device class Device
{ {
public: public:
Device(const std::string &baseName) : baseName(baseName) {}
virtual ~Device() {} virtual ~Device() {}
virtual Track &getTrack(const std::string &trackName) = 0; virtual Track &getTrack(const std::string &trackName) = 0;
virtual bool update(float row) = 0; virtual bool update(float row) = 0;
protected:
std::string getTrackFileName(std::string trackName);
const std::string baseName;
}; };
Device *createDevice(const std::string &baseName, Timer &timer); Device *createDevice(const std::string &baseName, Timer &timer);

View File

@ -12,7 +12,7 @@ class ClientDevice : public Device
{ {
public: public:
ClientDevice(const std::string &baseName, SOCKET serverSocket, Timer &timer) : ClientDevice(const std::string &baseName, SOCKET serverSocket, Timer &timer) :
baseName(baseName), Device(baseName),
timer(timer), timer(timer),
serverSocket(serverSocket), serverSocket(serverSocket),
serverRow(-1) serverRow(-1)
@ -25,10 +25,8 @@ public:
bool update(float row); bool update(float row);
private: private:
std::string getTrackFileName(std::string trackName);
void saveTracks(); void saveTracks();
const std::string baseName;
sync::Data syncData; sync::Data syncData;
Timer &timer; Timer &timer;
@ -161,15 +159,6 @@ bool ClientDevice::update(float row)
return !done; return !done;
} }
std::string ClientDevice::getTrackFileName(std::string trackName)
{
std::string fileName = baseName.c_str();
fileName += "_";
fileName += trackName;
fileName += ".track";
return fileName;
}
static bool saveTrack(const sync::Track &track, std::string fileName) static bool saveTrack(const sync::Track &track, std::string fileName)
{ {
FILE *fp = fopen(fileName.c_str(), "wb"); FILE *fp = fopen(fileName.c_str(), "wb");

View File

@ -12,7 +12,7 @@ class PlayerDevice : public Device
{ {
public: public:
PlayerDevice(const std::string &baseName, Timer &timer) : PlayerDevice(const std::string &baseName, Timer &timer) :
baseName(baseName), Device(baseName),
timer(timer) timer(timer)
{ {
} }
@ -23,13 +23,43 @@ public:
bool update(float row); bool update(float row);
private: private:
const std::string &baseName;
sync::Data syncData; sync::Data syncData;
Timer &timer; Timer &timer;
}; };
PlayerDevice::~PlayerDevice() { } PlayerDevice::~PlayerDevice() { }
static bool loadTrack(sync::Track &track, std::string fileName)
{
FILE *fp = fopen(fileName.c_str(), "rb");
if (NULL == fp) return false;
size_t keyFrameCount;
fread(&keyFrameCount, sizeof(size_t), 1, fp);
for (size_t i = 0; i < keyFrameCount; ++i)
{
size_t row;
float value;
char interp;
fread(&row, sizeof(size_t), 1, fp);
fread(&value, sizeof(float), 1, fp);
fread(&interp, sizeof(char), 1, fp);
track.setKeyFrame(row,
Track::KeyFrame(
value,
Track::KeyFrame::InterpolationType(interp)
)
);
}
fclose(fp);
fp = NULL;
return true;
}
Track &PlayerDevice::getTrack(const std::string &trackName) Track &PlayerDevice::getTrack(const std::string &trackName)
{ {
sync::Data::TrackContainer::iterator iter = syncData.tracks.find(trackName); sync::Data::TrackContainer::iterator iter = syncData.tracks.find(trackName);
@ -37,9 +67,10 @@ Track &PlayerDevice::getTrack(const std::string &trackName)
sync::Track *track = new sync::Track(); sync::Track *track = new sync::Track();
// TODO: load data from file assert(NULL != track);
track->setKeyFrame(0, Track::KeyFrame(1.0f, Track::KeyFrame::IT_LERP)); loadTrack(*track, getTrackFileName(trackName));
track->setKeyFrame(10, Track::KeyFrame(0.0f, Track::KeyFrame::IT_LERP)); /* track->setKeyFrame(0, Track::KeyFrame(1.0f, Track::KeyFrame::IT_LERP));
track->setKeyFrame(10, Track::KeyFrame(0.0f, Track::KeyFrame::IT_LERP)); */
size_t index = syncData.actualTracks.size(); size_t index = syncData.actualTracks.size();
syncData.actualTracks.push_back(track); syncData.actualTracks.push_back(track);

View File

@ -275,6 +275,10 @@
> >
</File> </File>
<File <File
RelativePath=".\sync\device.cpp"
>
</File>
<File
RelativePath=".\sync\device_client.cpp" RelativePath=".\sync\device_client.cpp"
> >
<FileConfiguration <FileConfiguration