yes! saving and loading works!
This commit is contained in:
parent
edce2d8fc7
commit
3997eb7b26
@ -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);
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -275,6 +275,10 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sync\device.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sync\device_client.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user