From 3997eb7b26d4df51ed0f4cea5edbd19f0874f329 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Sun, 17 Feb 2008 17:48:03 +0000 Subject: [PATCH] yes! saving and loading works! --- sync/device.h | 4 ++++ sync/device_client.cpp | 13 +------------ sync/device_player.cpp | 41 ++++++++++++++++++++++++++++++++++++----- sync_player.vcproj | 4 ++++ 4 files changed, 45 insertions(+), 17 deletions(-) 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 @@ > + +