Subversion Repositories Kolibri OS

Rev

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
}