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
{
public:
Device(const std::string &baseName) : baseName(baseName) {}
virtual ~Device() {}
virtual Track &getTrack(const std::string &trackName) = 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);

View File

@ -12,7 +12,7 @@ class ClientDevice : public Device
{
public:
ClientDevice(const std::string &baseName, SOCKET serverSocket, Timer &timer) :
baseName(baseName),
Device(baseName),
timer(timer),
serverSocket(serverSocket),
serverRow(-1)
@ -25,10 +25,8 @@ public:
bool update(float row);
private:
std::string getTrackFileName(std::string trackName);
void saveTracks();
const std::string baseName;
sync::Data syncData;
Timer &timer;
@ -161,15 +159,6 @@ bool ClientDevice::update(float row)
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)
{
FILE *fp = fopen(fileName.c_str(), "wb");

View File

@ -12,7 +12,7 @@ class PlayerDevice : public Device
{
public:
PlayerDevice(const std::string &baseName, Timer &timer) :
baseName(baseName),
Device(baseName),
timer(timer)
{
}
@ -23,13 +23,43 @@ public:
bool update(float row);
private:
const std::string &baseName;
sync::Data syncData;
Timer &timer;
};
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)
{
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();
// TODO: load data from file
track->setKeyFrame(0, Track::KeyFrame(1.0f, Track::KeyFrame::IT_LERP));
track->setKeyFrame(10, Track::KeyFrame(0.0f, Track::KeyFrame::IT_LERP));
assert(NULL != track);
loadTrack(*track, getTrackFileName(trackName));
/* 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();
syncData.actualTracks.push_back(track);

View File

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