Skip to content

Commit c103b70

Browse files
committed
Add ui to display enemy hp.
1 parent 57372b8 commit c103b70

File tree

5 files changed

+82
-3
lines changed

5 files changed

+82
-3
lines changed

rm_referee/include/rm_referee/referee_base.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class RefereeBase
3535
virtual void interactiveDataCallBack(const rm_referee::InteractiveData& interactive_data,
3636
const ros::Time& last_get_data_time);
3737
virtual void eventDataCallBack(const rm_msgs::EventData& event_data, const ros::Time& last_get_data_time);
38-
virtual void updateHeroHitDataCallBack(const rm_msgs::GameRobotHp& game_robot_hp_data);
38+
virtual void updateGameRobotHpDataCallBack(const rm_msgs::GameRobotHp& game_robot_hp_data);
3939
virtual void supplyBulletDataCallBack(const rm_msgs::SupplyProjectileAction& data);
4040
virtual void updateShootDataDataCallBack(const rm_msgs::ShootData& msg);
4141
virtual void updateBulletRemainData(const rm_referee::BulletNumData& data);
@@ -121,6 +121,7 @@ class RefereeBase
121121
*engineer_joint3_time_change_ui{};
122122
TargetDistanceTimeChangeUi* target_distance_time_change_ui_{};
123123
FriendBulletsTimeChangeGroupUi* friend_bullets_time_change_group_ui_{};
124+
TargetHpTimeChangeUi* target_hp_time_change_ui_{};
124125

125126
DroneTowardsTimeChangeGroupUi* drone_towards_time_change_group_ui_{};
126127
StringTriggerChangeUi *servo_mode_trigger_change_ui_{}, *stone_num_trigger_change_ui_{},

rm_referee/include/rm_referee/ui/time_change_ui.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,4 +379,31 @@ class FriendBulletsTimeChangeGroupUi : public TimeChangeGroupUi
379379
int hero_bullets_{ 1 }, standard3_bullets_{ 3 }, standard4_bullets_{ 4 }, standard5_bullets_{ 5 };
380380
};
381381

382+
class TargetHpTimeChangeUi : public TimeChangeUi
383+
{
384+
public:
385+
explicit TargetHpTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
386+
std::deque<Graph>* character_queue)
387+
: TimeChangeUi(rpc_value, base, "target_hp", graph_queue, character_queue)
388+
{
389+
if (rpc_value.hasMember("enemy_id"))
390+
{
391+
XmlRpc::XmlRpcValue& enemy_id = rpc_value["enemy_id"];
392+
for (int i = 0; i < enemy_id.size(); i++)
393+
{
394+
int id = static_cast<int>(enemy_id[i]);
395+
enemy_robot_hp_[id] = 0;
396+
}
397+
}
398+
}
399+
void setEnemyHp(const rm_msgs::GameRobotHp& data);
400+
void updateTrackID(int id);
401+
void updateTargeHptData();
402+
403+
private:
404+
void updateConfig() override;
405+
std::map<int, int> enemy_robot_hp_;
406+
int target_hp_{}, target_id_{};
407+
};
408+
382409
} // namespace rm_referee

rm_referee/src/referee.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ int Referee::unpack(uint8_t* rx_data)
138138
game_robot_hp_data.red_base_hp = game_robot_hp_ref.red_base_hp;
139139
game_robot_hp_data.stamp = last_get_data_time_;
140140

141-
referee_ui_.updateHeroHitDataCallBack(game_robot_hp_data);
141+
referee_ui_.updateGameRobotHpDataCallBack(game_robot_hp_data);
142142
game_robot_hp_pub_.publish(game_robot_hp_data);
143143
break;
144144
}

rm_referee/src/referee_base.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ RefereeBase::RefereeBase(ros::NodeHandle& nh, Base& base) : base_(base), nh_(nh)
141141
if (rpc_value[i]["name"] == "friend_bullets")
142142
friend_bullets_time_change_group_ui_ =
143143
new FriendBulletsTimeChangeGroupUi(rpc_value[i], base_, &graph_queue_, &character_queue_);
144+
if (rpc_value[i]["name"] == "target_hp")
145+
target_hp_time_change_ui_ = new TargetHpTimeChangeUi(rpc_value[i], base_, &graph_queue_, &character_queue_);
144146
}
145147

146148
ui_nh.getParam("fixed", rpc_value);
@@ -262,6 +264,8 @@ void RefereeBase::addUi()
262264
target_distance_time_change_ui_->addForQueue();
263265
if (friend_bullets_time_change_group_ui_)
264266
friend_bullets_time_change_group_ui_->addForQueue();
267+
if (target_hp_time_change_ui_)
268+
target_hp_time_change_ui_->addForQueue();
265269
if (visualize_state_trigger_change_ui_)
266270
visualize_state_trigger_change_ui_->addForQueue();
267271
add_ui_times_++;
@@ -359,10 +363,12 @@ void RefereeBase::robotStatusDataCallBack(const rm_msgs::GameRobotStatus& data,
359363
fixed_ui_->updateForQueue();
360364
}
361365

362-
void RefereeBase::updateHeroHitDataCallBack(const rm_msgs::GameRobotHp& game_robot_hp_data)
366+
void RefereeBase::updateGameRobotHpDataCallBack(const rm_msgs::GameRobotHp& game_robot_hp_data)
363367
{
364368
if (hero_hit_flash_ui_)
365369
hero_hit_flash_ui_->updateHittingConfig(game_robot_hp_data);
370+
if (target_hp_time_change_ui_)
371+
target_hp_time_change_ui_->setEnemyHp(game_robot_hp_data);
366372
}
367373
void RefereeBase::gameStatusDataCallBack(const rm_msgs::GameStatus& data, const ros::Time& last_get_data_time)
368374
{
@@ -508,6 +514,8 @@ void RefereeBase::trackCallBack(const rm_msgs::TrackDataConstPtr& data)
508514
target_view_angle_trigger_change_ui_->updateTrackID(data->id);
509515
if (target_distance_time_change_ui_ && !is_adding_)
510516
target_distance_time_change_ui_->updateTargetDistanceData(data);
517+
if (target_hp_time_change_ui_ && !is_adding_)
518+
target_hp_time_change_ui_->updateTrackID(data->id);
511519
}
512520
void RefereeBase::balanceStateCallback(const rm_msgs::BalanceStateConstPtr& data)
513521
{

rm_referee/src/ui/time_change_ui.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,4 +501,47 @@ void FriendBulletsTimeChangeGroupUi::updateConfig()
501501
}
502502
}
503503

504+
void TargetHpTimeChangeUi::setEnemyHp(const rm_msgs::GameRobotHp& data)
505+
{
506+
bool is_enemy_red = base_.robot_id_ > 100;
507+
if (is_enemy_red)
508+
{
509+
enemy_robot_hp_[1] = data.red_1_robot_hp;
510+
enemy_robot_hp_[2] = data.red_2_robot_hp;
511+
enemy_robot_hp_[3] = data.red_3_robot_hp;
512+
enemy_robot_hp_[4] = data.red_4_robot_hp;
513+
enemy_robot_hp_[7] = data.red_7_robot_hp;
514+
}
515+
else
516+
{
517+
enemy_robot_hp_[1] = data.blue_1_robot_hp;
518+
enemy_robot_hp_[2] = data.blue_2_robot_hp;
519+
enemy_robot_hp_[3] = data.blue_3_robot_hp;
520+
enemy_robot_hp_[4] = data.blue_4_robot_hp;
521+
enemy_robot_hp_[7] = data.blue_7_robot_hp;
522+
}
523+
}
524+
525+
void TargetHpTimeChangeUi::updateTrackID(int id)
526+
{
527+
target_id_ = id;
528+
updateTargeHptData();
529+
}
530+
531+
void TargetHpTimeChangeUi::updateTargeHptData()
532+
{
533+
auto it = enemy_robot_hp_.find(target_id_);
534+
target_hp_ = it == enemy_robot_hp_.end() ? 0 : it->second;
535+
updateForQueue();
536+
}
537+
538+
void TargetHpTimeChangeUi::updateConfig()
539+
{
540+
graph_->setIntNum(target_hp_);
541+
if (target_hp_ > 50)
542+
graph_->setColor(rm_referee::GraphColor::GREEN);
543+
else
544+
graph_->setColor(rm_referee::GraphColor::ORANGE);
545+
}
546+
504547
} // namespace rm_referee

0 commit comments

Comments
 (0)