1#ifndef GAME_EDITOR_MAP_VIEW_H
2#define GAME_EDITOR_MAP_VIEW_H
3
4#include "component.h"
5#include "map_grid.h"
6#include "proof_mode.h"
7#include "smooth_value.h"
8
9#include <base/vmath.h>
10
11class CLayerGroup;
12
13class CMapView : public CEditorComponent
14{
15public:
16 enum class EActiveOp
17 {
18 NONE,
19 BRUSH_GRAB,
20 BRUSH_DRAW,
21 BRUSH_PAINT,
22 PAN_WORLD,
23 PAN_EDITOR,
24 };
25
26 class CState
27 {
28 public:
29 CSmoothValue m_Zoom;
30 float m_WorldZoom;
31 vec2 m_WorldOffset;
32 vec2 m_EditorOffset;
33
34 float m_MouseWorldScale; // Mouse (i.e. UI) scale relative to the World (selected Group)
35 vec2 m_MouseWorldPos;
36 vec2 m_MouseWorldNoParaPos;
37 vec2 m_MouseDeltaWorld;
38
39 EActiveOp m_ActiveOp;
40
41 void Reset(CEditor *pEditor);
42 };
43
44 void OnInit(CEditor *pEditor) override;
45 void OnMapLoad() override;
46
47 void ZoomMouseTarget(float ZoomFactor);
48 void UpdateZoom();
49
50 void RenderGroupBorder();
51 void RenderEditorMap();
52 void Render(CUIRect View);
53
54 void UpdateMouseWorld();
55 void ResetMouseDeltaWorld();
56 float MouseWorldScale() const;
57 vec2 MouseDeltaWorld() const;
58 vec2 MouseWorldPos() const;
59 vec2 MouseWorldNoParaPos() const;
60
61 bool IsFocused();
62 void Focus();
63
64 /**
65 * Reset zoom and editor offset.
66 */
67 void ResetZoom();
68
69 /**
70 * Scale length according to zoom value.
71 */
72 float ScaleLength(float Value) const;
73
74 float GetWorldZoom() const;
75
76 void OffsetWorld(vec2 Offset);
77 void OffsetEditor(vec2 Offset);
78 void SetWorldOffset(vec2 WorldOffset);
79 void SetEditorOffset(vec2 EditorOffset);
80 vec2 GetWorldOffset() const;
81 vec2 GetEditorOffset() const;
82
83 CSmoothValue *Zoom();
84 const CSmoothValue *Zoom() const;
85 CProofMode *ProofMode();
86 const CProofMode *ProofMode() const;
87 CMapGrid *MapGrid();
88 const CMapGrid *MapGrid() const;
89
90private:
91 CProofMode m_ProofMode;
92 CMapGrid m_MapGrid;
93};
94
95#endif
96