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