diff --git a/sync/device.h b/sync/device.h
index 88b00da..797447a 100644
--- a/sync/device.h
+++ b/sync/device.h
@@ -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);
diff --git a/sync/device_client.cpp b/sync/device_client.cpp
index 8231f0a..951219d 100644
--- a/sync/device_client.cpp
+++ b/sync/device_client.cpp
@@ -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");
diff --git a/sync/device_player.cpp b/sync/device_player.cpp
index e6361d6..9c710f4 100644
--- a/sync/device_player.cpp
+++ b/sync/device_player.cpp
@@ -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);
diff --git a/sync_player.vcproj b/sync_player.vcproj
index 34b5c35..304e22a 100644
--- a/sync_player.vcproj
+++ b/sync_player.vcproj
@@ -275,6 +275,10 @@
>
+
+