84 lines
1.7 KiB
C++
84 lines
1.7 KiB
C++
/* Copyright (C) 2007-2008 Erik Faye-Lund and Egbert Teeselink
|
|
* For conditions of distribution and use, see copyright notice in LICENSE.TXT
|
|
*/
|
|
|
|
#include "device.h"
|
|
#include "data.h"
|
|
#include "network.h"
|
|
|
|
using namespace sync;
|
|
|
|
class PlayerDevice : public Device
|
|
{
|
|
public:
|
|
PlayerDevice(const std::string &baseName, Timer &timer) :
|
|
Device(baseName),
|
|
timer(timer)
|
|
{
|
|
}
|
|
|
|
~PlayerDevice();
|
|
|
|
Track &getTrack(const std::string &trackName);
|
|
bool update(float row);
|
|
|
|
private:
|
|
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)
|
|
{
|
|
int trackIndex = syncData.getTrackIndex(trackName);
|
|
if (0 <= trackIndex) return syncData.getTrack(trackIndex);
|
|
|
|
trackIndex = int(syncData.createTrack(trackName));
|
|
sync::Track &track = syncData.getTrack(trackIndex);
|
|
loadTrack(track, getTrackFileName(trackName));
|
|
return track;
|
|
}
|
|
|
|
bool PlayerDevice::update(float row)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
Device *sync::createDevice(const std::string &baseName, Timer &timer)
|
|
{
|
|
Device *device = new PlayerDevice(baseName, timer);
|
|
return device;
|
|
}
|