00001
00002
00003
00004
00005
00006 #ifndef CAJUN_SEARCH_GRID_PUBLISHER_H
00007 #define CAJUN_SEARCH_GRID_PUBLISHER_H
00008
00009
00010 #include "grid_publisher.H"
00011 #include "search_grid.H"
00012
00013
00014 namespace cajun
00015 {
00016
00017
00018 class search_grid_publisher_t : public grid_publisher_t
00019 {
00020 public:
00021 search_grid_publisher_t (unsigned qid_, double cell_size_) :
00022 grid_publisher_t (qid_, cell_size_) {}
00023
00024 void publish (search_grid_t &grid_, double tstamp_,
00025 unsigned sequence_, float max_cost_)
00026 {
00027 m_tile.tstamp = tstamp_;
00028 m_sequence = sequence_;
00029 m_max_cost = max_cost_;
00030 grid_.walk (*this);
00031 }
00032
00033 void visit (unsigned x_, unsigned y_, search_grid_t::iterator_t &iter_)
00034 {
00035 unsigned value = m_tile.INVALID_CELL;
00036
00037 if (iter_->sequence == m_sequence)
00038 {
00039 m_publish_tile = true;
00040
00041 if (iter_->cost == search_cell_t::BLOCKED_CELL)
00042 value = m_tile.BLOCKED_CELL;
00043 else
00044 value = (unsigned)
00045 (m_tile.MAX_CELL_VALUE *
00046 iter_->cost / m_max_cost);
00047 }
00048 m_tile.cell_value[x_][y_] = value;
00049 }
00050
00051 protected:
00052 unsigned m_sequence;
00053 float m_max_cost;
00054 };
00055
00056
00057 };
00058
00059
00060 #endif