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