-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathGobanView.h
138 lines (109 loc) · 3.14 KB
/
GobanView.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//
// Created by jan on 7.5.17.
//
#include <utility>
#include <string>
#include "GobanOverlay.h"
#include <Rocket/Core/Types.h>
#include <Rocket/Core/Texture.h>
#include <Rocket/Controls/ElementFormControlSelect.h>
#include <Rocket/Controls/SelectOption.h>
#include "GobanShader.h"
#include "GobanModel.h"
#include "GameObserver.h"
#include "Metrics.h"
#include "Camera.h"
#include "GameState.h"
#include "Shell.h"
#ifndef GOBAN_GOBANVIEW_H
#define GOBAN_GOBANVIEW_H
extern std::shared_ptr<Configuration> config;
class GobanView: public GameObserver {
public:
enum {
UPDATE_NONE = 0, UPDATE_BOARD = 1, UPDATE_STONES = 2,
UPDATE_GUI = 4, UPDATE_OVERLAY = 8, UPDATE_SOME = 16,
UPDATE_SHADER = 32, UPDATE_SOUND_STONE = 64,
UPDATE_ALL = (1|2|3|4|8|16|32)
};
GobanView(GobanModel& m);
virtual void onGameMove(const Move& move, const std::string& comment);
~GobanView() {
gobanShader.destroy();
}
void Render(int, int);
void updateTranslation();
//bool invalidate(int inc = 1);
void reshape(int, int);
void initCam();
void initPan(float x, float y);
void endPan();
void initRotation(float x, float y);
void endRotation();
void initZoom(float x, float y);
void endZoom();
void mouseMoved(float x, float y);
void zoomRelative(float);
void setGamma(float gamma) {
gobanShader.setGamma(gamma);
updateFlag |= UPDATE_SHADER;
};
void setContrast(float contrast) {
gobanShader.setContrast(contrast);
updateFlag |= UPDATE_SHADER;
}
float getGamma() {
return gobanShader.getGamma();
}
void resetAdjustments() {
gobanShader.setGamma(1.0);
gobanShader.setContrast(0.0);
updateFlag |= UPDATE_SHADER;
}
float getContrast() {
return gobanShader.getContrast();
}
bool toggleFpsLimit() {MAX_FPS = !MAX_FPS; return MAX_FPS;}
int cycleShaders();
void switchShader(int idx) {
updateFlag |= GobanView::UPDATE_ALL;
gobanShader.choose(idx);
state.metricsReady = false;
gobanShader.setReady();
}
Position getBoardCoordinate(float x, float y)const ;
glm::vec2 boardCoordinate(float x, float y) const;
void resetView();
void shadeit(float, GobanShader&);
void animateIntro();
bool needsRepaint();
void requestRepaint(int what = UPDATE_SOME);
bool toggleOverlay();
void Update();
void moveCursor(float, float);
int updateCursor(const Position& last);
public:
GobanShader gobanShader;
GobanOverlay gobanOverlay;
GobanModel& model;
bool MAX_FPS;
int WINDOW_WIDTH = 0, WINDOW_HEIGHT = 0;
float VIEWPORT_WIDTH, VIEWPORT_HEIGHT;
glm::vec3 translate, newTranslate;
glm::vec2 resolution;
float lastTime, startTime;
bool animationRunning;
bool calculatingScore = false;
bool isPanning, isZooming, isRotating;
int needsUpdate;
DDG::Camera cam;
float startX, startY, lastX, lastY;
Board board;
GameState state;
int updateFlag;
int currentProgram;
bool showOverlay;
Position lastMove;
AudioPlayer player;
};
#endif //GOBAN_GOBANVIEW_H