00001
00005
#include <utils/Linear.h>
00006
00007
#include "RoadPlayer.h"
00008
00009 bool RoadPlayer::open(utils::ConfigFile& params,
00010 utils::SymbolTable* globals)
00011 {
00012
00013
00014
00015
if (!_mgr.open(
"Road.rad", params, globals))
00016
return false;
00017
00018
00019 _player = _mgr.getPlayer();
00020
00021
00022 memset(&_input_area, 0,
sizeof(_input_area));
00023
00024
00025
int major_version = _mgr.getPlayer()->getHeader().
00026 getInt(
"int DataFormat.version_major", 1);
00027
int minor_version = _mgr.getPlayer()->getHeader().
00028 getInt(
"int DataFormat.version_minor", 1);
00029
00030
00031
if (major_version != 1 && minor_version != 0) {
00032 printf(
"RoadPlayer::init: Cannot read version %d.%d\n",
00033 major_version, minor_version);
00034
return false;
00035 }
00036
00037
00038
00039
00040 _play_elem = _player->expect(
"points",
ROAD_DATA_FMT, &_input_area);
00041
00042
00043
return _player->setup();
00044 }
00045
00046 bool RoadPlayer::advance()
00047 {
00048
00049
00050
00051
00052
00053
return _mgr.next(_play_time);
00054 }
00055
00056 bool RoadPlayer::getPoints(utils::Time& time,
00057 std::vector<utils::Vec3d> & points)
00058 {
00059
00060 points.clear();
00061
for (
int i=0;i<_input_area.
num_points;i++) {
00062
RoadDataPoint& pt = _input_area.
points[i];
00063 points.push_back(utils::Vec3d(pt.
x, pt.
y, pt.
z));
00064 }
00065
00066
00067 _player->release(_play_elem);
00068
00069
00070 time = _play_time;
00071
00072
return true;
00073 }
00074
00075 bool RoadPlayer::nextPoints(utils::Time& time,
00076 std::vector<utils::Vec3d> & points,
00077
bool blocking)
00078 {
00079
if (blocking || (!blocking && _mgr.poll())) {
00080
if (!
advance())
00081
return false;
00082 }
00083
return getPoints(time, points);
00084 }
00085
00086