| 92 | namespace olc |
| 93 | { |
| 94 | class TransformedView : public olc::PGEX |
| 95 | { |
| 96 | public: |
| 97 | TransformedView() = default; |
| 98 | virtual void Initialise(const olc::vi2d& vViewArea, const olc::vf2d& vPixelScale = { 1.0f, 1.0f }); |
| 99 | |
| 100 | olc::PixelGameEngine* GetPGE(); |
| 101 | |
| 102 | public: |
| 103 | void SetWorldOffset(const olc::vf2d& vOffset); |
| 104 | void MoveWorldOffset(const olc::vf2d& vDeltaOffset); |
| 105 | void SetWorldScale(const olc::vf2d& vScale); |
| 106 | void SetViewArea(const olc::vi2d& vViewArea); |
| 107 | olc::vf2d GetWorldTL() const; |
| 108 | olc::vf2d GetWorldBR() const; |
| 109 | olc::vf2d GetWorldVisibleArea() const; |
| 110 | void ZoomAtScreenPos(const float fDeltaZoom, const olc::vi2d& vPos); |
| 111 | void SetZoom(const float fZoom, const olc::vf2d& vPos); |
| 112 | void StartPan(const olc::vi2d& vPos); |
| 113 | void UpdatePan(const olc::vi2d& vPos); |
| 114 | void EndPan(const olc::vi2d& vPos); |
| 115 | const olc::vf2d& GetWorldOffset() const; |
| 116 | const olc::vf2d& GetWorldScale() const; |
| 117 | virtual olc::vf2d WorldToScreen(const olc::vf2d& vWorldPos) const; |
| 118 | virtual olc::vf2d ScreenToWorld(const olc::vf2d& vScreenPos) const; |
| 119 | virtual olc::vf2d ScaleToWorld(const olc::vf2d& vScreenSize) const; |
| 120 | virtual olc::vf2d ScaleToScreen(const olc::vf2d& vWorldSize) const; |
| 121 | virtual bool IsPointVisible(const olc::vf2d& vPos) const; |
| 122 | virtual bool IsRectVisible(const olc::vf2d& vPos, const olc::vf2d& vSize) const; |
| 123 | virtual void HandlePanAndZoom(const int nMouseButton = 2, const float fZoomRate = 0.1f, const bool bPan = true, const bool bZoom = true); |
| 124 | void SetScaleExtents(const olc::vf2d& vScaleMin, const olc::vf2d& vScaleMax); |
| 125 | void EnableScaleClamp(const bool bEnable); |
| 126 | |
| 127 | protected: |
| 128 | olc::vf2d m_vWorldOffset = { 0.0f, 0.0f }; |
| 129 | olc::vf2d m_vWorldScale = { 1.0f, 1.0f }; |
| 130 | olc::vf2d m_vRecipPixel = { 1.0f, 1.0f }; |
| 131 | olc::vf2d m_vPixelScale = { 1.0f, 1.0f }; |
| 132 | bool m_bPanning = false; |
| 133 | olc::vf2d m_vStartPan = { 0.0f, 0.0f }; |
| 134 | olc::vi2d m_vViewArea; |
| 135 | bool m_bZoomClamp = false; |
| 136 | olc::vf2d m_vMaxScale = { 0.0f, 0.0f }; |
| 137 | olc::vf2d m_vMinScale = { 0.0f, 0.0f }; |
| 138 | |
| 139 | public: // Hopefully, these should look familiar! |
| 140 | // Plots a single point |
| 141 | virtual bool Draw(float x, float y, olc::Pixel p = olc::WHITE); |
| 142 | bool Draw(const olc::vf2d& pos, olc::Pixel p = olc::WHITE); |
| 143 | // Draws a line from (x1,y1) to (x2,y2) |
| 144 | void DrawLine(float x1, float y1, float x2, float y2, olc::Pixel p = olc::WHITE, uint32_t pattern = 0xFFFFFFFF); |
| 145 | void DrawLine(const olc::vf2d& pos1, const olc::vf2d& pos2, olc::Pixel p = olc::WHITE, uint32_t pattern = 0xFFFFFFFF); |
| 146 | // Draws a circle located at (x,y) with radius |
| 147 | void DrawCircle(float x, float y, float radius, olc::Pixel p = olc::WHITE, uint8_t mask = 0xFF); |
| 148 | void DrawCircle(const olc::vf2d& pos, float radius, olc::Pixel p = olc::WHITE, uint8_t mask = 0xFF); |
| 149 | // Fills a circle located at (x,y) with radius |
| 150 | void FillCircle(float x, float y, float radius, olc::Pixel p = olc::WHITE); |
| 151 | void FillCircle(const olc::vf2d& pos, float radius, olc::Pixel p = olc::WHITE); |
nothing calls this directly
no outgoing calls
no test coverage detected