about summary refs log blame commit diff stats
path: root/src/subway_map.h
blob: feee8ff8e1f13fe55f1e98a1e6b8acdbb9aa6fee (plain) (tree)
1
2
3
4
5
6
7
8
9







                             
                   
                 
                 
                              

                        


                                  
                   
                          
                                                                           
                     


                                        
                                          
                                         
                                    
                                          
                                          
                
                         
 
                                               
                                                
                                               
                                   
                                                  
                                                  
 
                     
                     
                          
 
                     
                    
                         
 


                                     
                            


                         
                         
                         
                                         

                                                         
  
                                                             
                                   

                                           

                                                        
#ifndef SUBWAY_MAP_H_BD2D843E
#define SUBWAY_MAP_H_BD2D843E

#include <wx/wxprec.h>

#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif

#include <memory>
#include <optional>
#include <set>
#include <string>
#include <vector>

#include <quadtree/Quadtree.h>

#include "game_data.h"
#include "network_set.h"

class SubwayMap : public wxPanel {
 public:
  SubwayMap(wxWindow *parent);

  void OnConnect();
  void UpdateIndicators();
  void UpdateSunwarp(SubwaySunwarp from_sunwarp, SubwaySunwarp to_sunwarp);
  void Zoom(bool in);

 private:
  void OnPaint(wxPaintEvent &event);
  void OnMouseMove(wxMouseEvent &event);
  void OnMouseScroll(wxMouseEvent &event);
  void OnMouseLeave(wxMouseEvent &event);
  void OnMouseClick(wxMouseEvent &event);
  void OnTimer(wxTimerEvent &event);
  void OnZoomSlide(wxCommandEvent &event);
  void OnClickHelp(wxCommandEvent &event);

  void Redraw();
  void SetUpHelpButton();

  wxPoint MapPosToRenderPos(wxPoint pos) const;
  wxPoint MapPosToVirtualPos(wxPoint pos) const;
  wxPoint RenderPosToMapPos(wxPoint pos) const;

  void EvaluateScroll(wxPoint pos);

  void SetZoomPos(wxPoint pos);
  void SetScrollSpeed(int scroll_x, int scroll_y);
  void SetZoom(double zoom, wxPoint static_point);

  wxImage map_image_;
  wxImage owl_image_;
  wxBitmap unchecked_eye_;
  wxBitmap checked_eye_;

  wxBitmap rendered_;
  int render_x_ = 0;
  int render_y_ = 0;
  int render_width_ = 1;
  int render_height_ = 1;

  double zoom_ = 1.0;
  int zoom_x_ = 0; // in render space
  int zoom_y_ = 0;

  bool scroll_mode_ = false;
  wxTimer* scroll_timer_;
  int scroll_x_ = 0;
  int scroll_y_ = 0;

  wxSlider *zoom_slider_;

  wxButton *help_button_;

  std::optional<wxPoint> mouse_position_;

  struct GetItemBox {
    quadtree::Box<float> operator()(const int &id) const;
  };
  
  std::unique_ptr<quadtree::Quadtree<int, GetItemBox>> tree_;
  std::optional<int> hovered_item_;
  std::optional<int> actual_hover_;
  bool sticky_hover_ = false;

  NetworkSet networks_;
  std::set<std::string> checked_paintings_;
};

#endif /* end of include guard: SUBWAY_MAP_H_BD2D843E */