Subversion Repositories Kolibri OS

Rev

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

  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.  
  71.         char tmp[] = "Fps:000 | Marble Match-3 ";
  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.  
  269.  
  270.