ConsoleGameEngine

Форк
0
/
SpriteEditor.cpp 
187 строк · 4.7 Кб
1
#define CGE_IMPL
2
#include "ConsoleGameEngine.hpp"
3

4
using namespace std;
5

6
constexpr int aGlyphs[4] = { PIXEL_SOLID, PIXEL_QUARTER, PIXEL_HALF, PIXEL_THREEQUARTERS };
7

8
class Example : public ConsoleGameEngine
9
{
10
public:
11
	Example() {}
12

13
	inline static wstring s_sFileName;
14
	static int s_nWidth;
15
	static int s_nHeight;
16

17
	Sprite* sprCanvas = nullptr;
18

19
	int nGlyph = 0;
20
	int nColour = FG_WHITE;
21

22
protected:
23
	bool OnUserCreate() override
24
	{
25
		if (s_nWidth == 0 || s_nHeight == 0)
26
		{
27
			if (s_sFileName.empty())
28
			{
29
				// Create a canvas without a size
30
				sprCanvas = new Sprite();
31

32
				// Set a default filename
33
				s_sFileName = L"untitled.spr";
34
			}
35
			else
36
			{
37
				// Create the canvas and set load its content from a file
38
				sprCanvas = new Sprite(s_sFileName);
39
			}
40
		}
41
		else
42
		{
43
			// Create the canvas with a size
44
			sprCanvas = new Sprite(s_nWidth, s_nHeight);
45
		}
46

47
		sAppName = s_sFileName;
48

49
		return true;
50
	}
51

52
	bool OnUserUpdate(float fDeltaTime) override
53
	{
54
		if (GetKey(VK_ESCAPE).bPressed)
55
			return false;
56

57
		if (GetKey(L'S').bPressed)
58
			sprCanvas->Save(s_sFileName);
59

60
		if (GetKey(VK_UP).bPressed) nColour--;
61
		if (GetKey(VK_DOWN).bPressed) nColour++;
62

63
		if (GetKey(VK_LEFT).bPressed) nGlyph--;
64
		if (GetKey(VK_RIGHT).bPressed) nGlyph++;
65

66
		if (nColour < 0x0) nColour = 0xF;
67
		if (nColour > 0xF) nColour = 0x0;
68

69
		if (nGlyph < 0) nGlyph = 3;
70
		if (nGlyph > 3) nGlyph = 0;
71

72
		int nCanvasStartX = ScreenWidth() * 0.3f;
73
		int nCanvasStartY = ScreenHeight() * 0.3f;
74

75
		int nCanvasEndX = nCanvasStartX + sprCanvas->nWidth;
76
		int nCanvasEndY = nCanvasStartY + sprCanvas->nHeight;
77

78
		int nMouseX = MouseX();
79
		int nMouseY = MouseY();
80

81
		int nNormalisedX = nMouseX - nCanvasStartX;
82
		int nNormalisedY = nMouseY - nCanvasStartY;
83

84
		if (nNormalisedX >= 0 && nNormalisedY >= 0 && nNormalisedX < sprCanvas->nWidth && nNormalisedY < sprCanvas->nHeight)
85
		{
86
			if (GetMouse(0).bHeld)
87
			{
88
				sprCanvas->SetGlyph(nNormalisedX, nNormalisedY, aGlyphs[nGlyph]);
89
				sprCanvas->SetColour(nNormalisedX, nNormalisedY, nColour);
90
			}
91

92
			if (GetMouse(1).bHeld)
93
			{
94
				sprCanvas->SetGlyph(nNormalisedX, nNormalisedY, PIXEL_SOLID);
95
				sprCanvas->SetColour(nNormalisedX, nNormalisedY, FG_BLACK);
96
			}
97
		}
98

99
		Clear(PIXEL_SOLID, FG_BLACK);
100

101
		// Draw an outline
102
		DrawLine(nCanvasStartX - 1, nCanvasStartY - 1, nCanvasEndX, nCanvasStartY - 1, PIXEL_SOLID, FG_RED | BG_RED);
103
		DrawLine(nCanvasStartX - 1, nCanvasEndY, nCanvasEndX, nCanvasEndY, PIXEL_SOLID, FG_RED | BG_RED);
104
		DrawLine(nCanvasStartX - 1, nCanvasStartY - 1, nCanvasStartX - 1, nCanvasEndY, PIXEL_SOLID, FG_RED | BG_RED);
105
		DrawLine(nCanvasEndX, nCanvasStartY - 1, nCanvasEndX, nCanvasEndY, PIXEL_SOLID, FG_RED | BG_RED);
106

107
		// Draw the canvas
108
		DrawSprite(nCanvasStartX, nCanvasStartY, sprCanvas);
109

110
		int y = 0;
111

112
		// Display info about a current state of the program
113
		DrawString(0, y++, L"Brush: ", FG_WHITE); Draw(8, y - 1, aGlyphs[nGlyph], nColour);
114
		DrawString(0, y++, L"Mouse: " + to_wstring(nNormalisedX) + L", " + to_wstring(nNormalisedY), FG_WHITE);
115

116
		y++;
117

118
		// Display controls
119
		DrawString(0, y++, L"Change brush glyph: ←, →", FG_WHITE);
120
		DrawString(0, y++, L"Change brush colour: ↑, ↓", FG_WHITE);
121
		DrawString(0, y++, L"Save: S", FG_WHITE);
122
		DrawString(0, y++, L"Exit: ESC", FG_WHITE);
123

124
		y++;
125
		
126
		// Display a glyph table
127
		DrawString(0, y++, L"Glyphs:");
128
		DrawString(0, y++, L"PIXEL_SOLID = 9608");
129
		DrawString(0, y++, L"PIXEL_QUARTER = 9617");
130
		DrawString(0, y++, L"PIXEL_HALF = 9618");
131
		DrawString(0, y++, L"PIXEL_THREEQUARTERS = 9619");
132

133
		y++;
134

135
		// Display a colour table
136
		DrawString(0, y++, L"Colours:");
137
		DrawString(0, y++, L"FG_BLACK = 0");
138
		DrawString(0, y++, L"FG_DARK_BLUE = 1");
139
		DrawString(0, y++, L"FG_DARK_GREEN = 2");
140
		DrawString(0, y++, L"FG_DARK_CYAN = 3");
141
		DrawString(0, y++, L"FG_DARK_RED = 4");
142
		DrawString(0, y++, L"FG_DARK_MAGENTA = 5");
143
		DrawString(0, y++, L"FG_DARK_YELLOW = 6");
144
		DrawString(0, y++, L"FG_GREY = 7");
145
		DrawString(0, y++, L"FG_DARK_GREY = 8");
146
		DrawString(0, y++, L"FG_BLUE = 9");
147
		DrawString(0, y++, L"FG_GREEN = 10");
148
		DrawString(0, y++, L"FG_CYAN = 11");
149
		DrawString(0, y++, L"FG_RED = 12");
150
		DrawString(0, y++, L"FG_MAGENTA = 13");
151
		DrawString(0, y++, L"FG_YELLOW = 14");
152
		DrawString(0, y++, L"FG_WHITE = 15");
153

154
		return true;
155
	}
156
};
157

158
int Example::s_nWidth = 0;
159
int Example::s_nHeight = 0;
160

161
int main(int argc, char** argv)
162
{
163
	Example demo;
164

165
	if (argc >= 2)
166
	{
167
		Example::s_sFileName.resize(strlen(argv[1]));
168
		mbstowcs(Example::s_sFileName.data(), argv[1], Example::s_sFileName.size());
169

170
		if (argc == 3)
171
		{
172
			int nWidth = atoi(argv[2]);
173
			Example::s_nWidth = Example::s_nHeight = nWidth;
174
		}
175

176
		if (argc == 4)
177
		{
178
			Example::s_nWidth = atoi(argv[2]);
179
			Example::s_nHeight = atoi(argv[3]);
180
		}
181
	}
182

183
	if (demo.ConstructConsole(80, 80, 10, 10) == rcode::OK)
184
		demo.Run();
185

186
	return 0;
187
}
188

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.