Subversion Repositories Kolibri OS

Rev

Rev 5235 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5235 alpine 1
#include "rsplatform.h"
2
 
3
rs_app_t rs_app;
4
 
5
 
6
 
7
 
8
// set this macro to zero (0) if bug is fixed
9
#define FIX_MENUETOS_LEGACY_ONE_PIXEL_BORDER_GAP_BUG (-1)
10
 
11
// Fixed frame rate, set to 25
12
#define GAME_REQUIRED_FPS 25
13
 
14
 
15
 
16
//extern char	PATH[256];
17
//extern char	PARAM[256];
18
 
19
int window_width, window_height;
20
 
21
int fps = 0;
22
int dt = 1;
23
int draw_dt = 1;
24
int area_width = 160;
25
int area_height = 160;
26
 
27
int w_plus = 0;
28
 
29
 
30
 
31
 
32
 
33
#define     BIT_SET(var,mask)   { var |= (mask); }
34
#define     BIT_CLEAR(var,mask) { var &= ~(mask); }
35
#define     BIT_TOGGLE(var,mask) { var ^= (mask); }
36
 
37
#define     IS_BIT_SET(var,mask)      ( (var) & (mask) )
38
#define     IS_BIT_CLEARED(var,mask)  (!( (var) & (mask) ))
39
 
40
 
41
void BoardPuts(const char *s)
42
{
43
	unsigned int i = 0;
44
	while(*(s + i))
45
	{
46
		asm volatile ("int $0x40"::"a"(63), "b"(1), "c"(*(s + i)));
47
		i++;
48
	}
49
}
50
 
51
void board_write_integer(const char *s, int i) {
52
 
53
	char tmp[16];
54
 
55
 
56
 
57
};
58
 
59
 
60
void kol_wnd_resize(unsigned w, unsigned h)
61
{
62
	asm volatile ("int $0x40"::"a"(67), "b"(-1), "c"(-1), "d"(w), "S"(h));
63
}
64
 
65
 
66
 
67
 
68
void wnd_draw()
69
{
70
 
5324 alpine 71
	char tmp[] = "Fps:000 | Marble Match-3 ";
5235 alpine 72
 
73
	kol_paint_start();
74
 
75
	tmp[4] = '0' + ( (fps/100) % 10 );
76
	tmp[5] = '0' + ( (fps/10) % 10 );
77
	tmp[6] = '0' + ( (fps) % 10 );
78
 
79
	kol_wnd_define(100, 100, window_width, window_height, 0x74ddddff, 0x34ddddff, "Heliothryx");
80
	kol_wnd_caption(tmp);
81
 
82
	GameProcess();
83
 
84
	//kol_btn_define(10, 10, 120, 20, 2, 0xccccee);
85
	//kol_paint_string(20, 15, "Hello World", 0x902222ff);
86
 
87
	kol_paint_end();
88
 
89
}
90
 
91
 
92
unsigned int get_time() {
93
	return (unsigned int) ((kol_system_time_get()*10));
94
};
95
 
96
 
97
/// ===========================================================
98
 
99
void kol_main()
100
{
101
 
102
	BoardPuts("Hello, Heliothryx!\n");
103
 
104
	int    err;
105
    int    version =-1;
106
 
107
    if((err = InitSound(&version)) !=0 ){
108
        BoardPuts("Sound Error 1\n");
109
    };
110
 
111
    if( (SOUND_VERSION>(version&0xFFFF)) ||
112
        (SOUND_VERSION<(version >> 16))){
113
        BoardPuts("Sound Error 2\n");
114
    }
115
 
116
 
117
	unsigned event;
118
	unsigned key;
119
	unsigned key_up;
120
 
121
	unsigned btn, btn_state;
122
	unsigned pos, x, y;
123
	int gx, gy;
124
 
125
	//srand(kol_system_time_get());
126
 
127
	kol_event_mask(0xC0000027); // mouse and keyboard
128
 
129
	kol_key_mode_set(1);
130
 
131
	area_width = 512;
132
	area_height = 512;
133
 
134
	// Initializing variables
135
	window_width = FIX_MENUETOS_LEGACY_ONE_PIXEL_BORDER_GAP_BUG + area_width + 10; // 2 x 5px border
136
	window_height = FIX_MENUETOS_LEGACY_ONE_PIXEL_BORDER_GAP_BUG + kol_skin_height() + area_height + 5; // bottom 5px border
137
 
138
	//rs_main_init();
139
 
140
	GameInit();
141
 
142
	wnd_draw();
143
 
144
	fps = 0;
145
 
146
	unsigned int tick_start = kol_time_tick();
147
	unsigned int tick_current = tick_start;
148
	unsigned int tick_last = tick_start;
149
 
150
	unsigned int fps_counter = 0;
151
	int wait_time;
152
	int already_drawn = 0;
153
 
154
	float xf;
155
	float xfs;
156
	int xfs_i;
157
 
158
	while (1) {
159
		tick_last = tick_current;
160
		tick_current = kol_time_tick();
161
		dt = tick_current - tick_last;
162
		tick_last = tick_current;
163
 
164
		already_drawn = 0;
165
 
166
		while (( event = kol_event_wait_time(1) )) {
167
		//while (( event = kol_event_wait() )) {
168
 
169
			switch (event) {
170
 
171
				case 1:
172
					wnd_draw(); // <--- need to clear event!
173
					already_drawn = 1;
174
					break;
175
 
176
				case 2:
177
					key = kol_key_get();
178
					key = (key & 0xff00)>>8;
179
					key_up = key & 0x80;
180
					key = key & 0x7F;
181
 
182
					if (key_up) {
183
						GameKeyUp(key);
184
						//rs_app.OnKeyUp(key);
185
					}
186
					else {
187
						GameKeyDown(key);
188
						//rs_app.OnKeyDown(key, 1);
189
					};
190
 
191
					break;
192
 
193
				case 3:
194
					switch ((kol_btn_get() & 0xff00)>>8)
195
						{
196
						case 1: // close button
197
							kol_exit();
198
						case 2: // 'new' button
199
							//init_board();
200
							//wnd_draw();
201
							break;
202
						}
203
					break;
204
 
205
				case 6:
206
					btn = kol_mouse_btn() & 1; // read mouse button (only left)
207
					pos = kol_mouse_posw(); // read mouse position
208
					x = pos / 65536;
209
					y = pos % 65536;
210
					/*if (x > window_width)
211
						x=0;
212
					if (y > window_height)
213
						y=0;*/
214
 
215
					if (btn && (!btn_state)) {
216
						//rs_app.OnMouseDown(x,y);
217
						GameMouseDown(x, y);
218
 
219
						BoardPuts("MouseDown!\n");
220
 
221
					}
222
					else if ( (!btn) && btn_state ) {
223
						//rs_app.OnMouseUp(x,y);
224
						GameMouseUp(x, y);
225
					}
226
					else {
227
						//GameMouseMove(x, y);
228
					};
229
 
230
					btn_state = btn;
231
 
232
					break;
233
			}
234
 
235
		};
236
 
237
 
238
		if (!already_drawn) {
239
			wnd_draw();
240
		};
241
 
242
 
243
		fps_counter++;
244
 
245
		tick_current = kol_time_tick();
246
 
247
		if (tick_current > tick_start+100) {
248
			fps = fps_counter;
249
			fps_counter = 0;
250
			tick_start += 100;
251
		};
252
 
253
		draw_dt = tick_current - tick_last;
254
 
255
		wait_time = (100/GAME_REQUIRED_FPS) - draw_dt;
256
		if (wait_time <= 0) {
257
			wait_time = 1;
258
		};
259
		kol_sleep(wait_time);
260
 
261
 
262
	}
263
 
264
	GameTerm();
265
 
266
	kol_exit();
267
}
268