area.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include <memory>
  2. #include <write-copy.h>
  3. #include <area.h>
  4. template<> std::shared_ptr<area_list>
  5. single_base<area_list, int, std::shared_ptr<area>>::m_instance=std::make_shared<area_list>();
  6. struct area_impl
  7. {
  8. area_impl()
  9. {
  10. }
  11. void on_hover(int64_t card_id,std::shared_ptr<area_hover>&c,double speed)
  12. {
  13. }
  14. void on_enter(int64_t card_id,std::shared_ptr<area_hover>&c,double speed)
  15. {
  16. }
  17. void on_leave(int64_t card_id,std::shared_ptr<area_hover>&c,double speed)
  18. {
  19. }
  20. };
  21. area_list::area_list()
  22. {
  23. }
  24. std::vector<std::shared_ptr<area>> area_list::get_area(const point&pt)
  25. {
  26. std::vector<std::shared_ptr<area>> ret;
  27. //需要添加根据点查找区域的算法
  28. return std::move(ret);
  29. }
  30. void area_tool::on_point(int64_t card_id,const point&pt,double speed)
  31. {
  32. std::vector<std::shared_ptr<area>> areas=area_list::instance()->get_area(pt);//找出所有的区域
  33. std::sort(areas.begin(),areas.end(),[](std::shared_ptr<area>&l,std::shared_ptr<area>&r){
  34. return l->id()<r->id();
  35. });
  36. auto c1=m_clist.begin(),ce=m_clist.end();
  37. auto a1=areas.begin() ,ae=areas.end();
  38. std::vector<std::shared_ptr<area_hover>> nlist;
  39. while (c1!=ce && a1!=ae)
  40. {
  41. if ((*c1)->id()<(*a1)->id())
  42. {
  43. do_leave_biz(card_id,*c1,speed);
  44. ++c1;
  45. }
  46. else if ((*a1)->id()<(*c1)->id())
  47. {
  48. nlist.push_back(std::make_shared<area_hover>(*a1,pt,speed));
  49. do_enter_biz(card_id,nlist.back(),speed);
  50. ++a1;
  51. }
  52. else
  53. {
  54. nlist.push_back(*c1);
  55. do_hover_biz(card_id,nlist.back(),speed);
  56. ++c1,++a1;
  57. }
  58. }
  59. while(c1!=ce)
  60. {
  61. do_leave_biz(card_id,*c1,speed);
  62. ++c1;
  63. }
  64. while(a1!=ae)
  65. {
  66. nlist.push_back(std::make_shared<area_hover>(*a1,pt,speed));
  67. do_enter_biz(card_id,nlist.back(),speed);
  68. ++a1;
  69. }
  70. m_clist=std::move(nlist);
  71. }