yes! saving and loading works!
This commit is contained in:
parent
edce2d8fc7
commit
3997eb7b26
@ -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);
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user