27 const std::shared_ptr<const GraphicDataBroker>& broker_ptr,
28 const std::shared_ptr<const IHexapodCoordinateConverter>& converter_ptr,
29 const std::shared_ptr<const IHexapodJointCalculator>& calculator_ptr,
30 const std::shared_ptr<const IHexapodPostureValidator>& checker_ptr,
31 const std::shared_ptr<const ApplicationSettingRecord>& setting_ptr) :
32 kNodeGetCount(setting_ptr->window_fps * 2),
33 kInterpolatedAnimeCount(1),
34 broker_ptr_(broker_ptr),
35 mouse_ptr_(
std::make_shared<
Mouse>()),
38 movement_locus_renderer_{},
39 interpolated_node_creator_{ converter_ptr },
40 robot_ground_point_renderer_{ converter_ptr },
41 map_state_(broker_ptr->map_state.GetData()),
46 movement_locus_renderer_.SetIsHighQuality(
true);
49 const auto camera = std::make_shared<DxlibCamera>();
50 const auto camera_gui = std::make_shared<DxlibGuiCamera>(setting_ptr->window_size_x, setting_ptr->window_size_y, camera);
53 const auto camera_parameter_gui = std::make_shared<DxlibGuiCameraParameterDisplayer>(setting_ptr->window_size_x, setting_ptr->window_size_y, camera);
55 camera_parameter_gui->SetVisible(
false);
56 const auto node_display_gui = std::make_shared<DxlibGuiNodeDisplayer>(setting_ptr->window_size_x, setting_ptr->window_size_y, converter_ptr, calculator_ptr, checker_ptr);
58 const auto camera_dragger = std::make_shared<CameraDragger>(camera);
60 const auto [hexapod_renderer, hexapod_node_setter] =
62 const auto stability_margin_renderer = std::make_shared<StabilityMarginRenderer>(converter_ptr);
63 const auto world_grid_renderer = std::make_shared<WorldGridRenderer>();
71 gui_updater_.OpenTerminal();
73 render_group_.Register(map_renderer_ptr_);
74 render_group_.Register(hexapod_renderer);
76 render_group_.Register(world_grid_renderer);
78 node_setter_group_.Register(map_renderer_ptr_);
79 node_setter_group_.Register(camera_gui);
80 node_setter_group_.Register(hexapod_node_setter);
81 node_setter_group_.Register(node_display_gui);
82 node_setter_group_.Register(stability_margin_renderer);
89 if (map_update_count != broker_ptr_->map_state.GetUpdateCount())
91 map_update_count = broker_ptr_->map_state.GetUpdateCount();
92 map_state_ = broker_ptr_->map_state.GetData();
94 map_renderer_ptr_->SetMapState(map_state_);
99 if (counter_ % kNodeGetCount == 0 && graph_update_count != broker_ptr_->graph.GetUpdateCount())
102 graph_ = broker_ptr_->graph.GetData();
104 std::vector<size_t> simu_end_index;
106 simu_end_index = broker_ptr_->simulation_end_index.GetData();
109 display_node_switch_gui_->SetGraphData(graph_.size(), simu_end_index);
122 graph_update_count = broker_ptr_->graph.GetUpdateCount();
130 if (display_node_index_ != display_node_switch_gui_->GetDisplayNodeNum())
132 if (display_node_index_ > 0)
135 interpolated_anime_start_count_ = 0;
137 interpolated_node_.clear();
140 graph_[display_node_index_],
141 graph_[display_node_switch_gui_->GetDisplayNodeNum()]);
145 display_node_index_ = display_node_switch_gui_->GetDisplayNodeNum();
146 display_node_switch_gui_->InAnimation(
true);
149 node_setter_group_.
SetNode(graph_.at(display_node_index_));
152 if (0 < interpolated_node_.size() &&
153 0 <= interpolated_anime_start_count_ &&
154 interpolated_anime_start_count_ < interpolated_node_.size())
157 if (counter_ % kInterpolatedAnimeCount == 0)
159 interpolated_anime_start_count_ += display_node_switch_gui_->GetAnimeSpeed();
162 if (interpolated_anime_start_count_ < interpolated_node_.size())
164 node_setter_group_.
SetNode(interpolated_node_[interpolated_anime_start_count_]);
167 else if (interpolated_node_.size() <= interpolated_anime_start_count_)
169 display_node_switch_gui_->InAnimation(
false);
170 interpolated_anime_start_count_ = -1;
171 node_setter_group_.
SetNode(graph_.at(display_node_index_));
bool Update() override
描画画面の更新を行う.純粋仮想関数のため, 継承先では必ず override する必要がある.
void Draw() const override
描画を行う. ここでは描画系の処理のみを行い内部のデータを 更新しないため const を付けている.