Subversion Repositories Kolibri OS

Rev

Rev 5225 | Rev 5261 | 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 | 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.  
  86. }
  87.  
  88.  
  89.  
  90.  
  91. /// ===========================================================
  92.  
  93. void kol_main()
  94. {
  95.  
  96.         BoardPuts("Hello, Heliothryx!\n");
  97.        
  98.         int    err;
  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.     }
  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();
  242. }
  243.