Advertisement
Guest User

Untitled

a guest
Jul 8th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //initialize
  2. var x_temp, y_temp, x_target, y_target, h_collision_list, v_collision_list, _c, i, _n, _n2;
  3.    
  4. x_prev = x + x_slop;
  5. y_prev = y + y_slop;
  6. x_temp = x_prev;
  7. y_temp = y_prev;
  8. x_target = x_prev + x_speed;
  9. y_target = y_prev + y_speed;
  10. h_collision_list = ds_list_create();
  11. v_collision_list = ds_list_create();
  12.    
  13. //get h_collision_list
  14. if x_speed < 0 and bool( collision_rectangle( bbox_left + x_slop + x_speed, bbox_top, bbox_left + x_slop, bbox_bottom, tmp_block, 0, 1 ) ) {
  15.        
  16.     _c = 0;
  17.     while _c != noone {
  18.            
  19.         _c = collision_rectangle( bbox_left + x_slop + x_speed, bbox_top, bbox_left + x_slop, bbox_bottom, tmp_block, 0, 1 );
  20.         if _c != noone {
  21.                
  22.             ds_list_add( h_collision_list, _c );
  23.             instance_deactivate_object( _c );
  24.                
  25.         }
  26.                
  27.     }
  28.        
  29.     //truncate x_speed to nearest obstacle if needed
  30.     if ds_list_size( h_collision_list ) > 0 {
  31.        
  32.         _n = x_target;
  33.         for ( i = 0; i < ds_list_size( h_collision_list ); i++ ) {
  34.            
  35.             instance_activate_object( ds_list_find_value( h_collision_list, i ) );
  36.             _n2 = ds_list_find_value( h_collision_list, i ).bbox_right;
  37.             if _n2 > _n _n = _n2;
  38.            
  39.         }
  40.            
  41.         x_target = _n;
  42.        
  43.     }
  44.    
  45. }
  46.        
  47. if x_speed > 0 and bool( collision_rectangle( bbox_right + x_slop, bbox_top, bbox_left + x_slop + x_speed, bbox_bottom, tmp_block, 0, 1 ) ) {
  48.        
  49.     _c = 0;
  50.     while _c != noone {
  51.            
  52.         _c = collision_rectangle( bbox_right + x_slop, bbox_top, bbox_left + x_slop + x_speed, bbox_bottom, tmp_block, 0, 1 );
  53.         if _c != noone {
  54.                
  55.             ds_list_add( h_collision_list, _c );
  56.             instance_deactivate_object( _c )
  57.                
  58.         }
  59.            
  60.     }
  61.        
  62.     //truncate x_speed to nearest obstacle if needed
  63.     if ds_list_size( h_collision_list ) > 0 {
  64.        
  65.         _n = x_target;
  66.         for ( i = 0; i < ds_list_size( h_collision_list ); i++ ) {
  67.            
  68.             instance_activate_object( ds_list_find_value( h_collision_list, i ) );
  69.             _n2 = ds_list_find_value( h_collision_list, i ).bbox_left;
  70.             if _n2 < _n _n = _n2;
  71.            
  72.         }
  73.            
  74.         x_target = _n;
  75.        
  76.     }
  77.        
  78. }
  79.  
  80. //resolve horizontal movement
  81. x = x_target div 1;
  82. x_slop = x_target mod 1;
  83.  
  84. if y_speed < 0 and bool( collision_rectangle( bbox_right, bbox_top + y_slop + y_speed, bbox_left, bbox_top + y_slop, tmp_block, 0, 1 ) ) {
  85.    
  86.     _c = 0;
  87.     while _c != noone {
  88.        
  89.         _c = collision_rectangle( bbox_right, bbox_top + y_slop + y_speed, bbox_left, bbox_top + y_slop, tmp_block, 0, 1 );
  90.         if _c != noone {
  91.            
  92.             ds_list_add( v_collision_list, _c );
  93.             instance_deactivate_object( _c );
  94.            
  95.         }
  96.        
  97.     }
  98.    
  99.     if ds_list_size( v_collision_list ) > 0 {
  100.        
  101.         _n = y_target;
  102.         for ( i = 0; i < ds_list_size( v_collision_list ); i++; ) {
  103.            
  104.             instance_activate_object( ds_list_find_value( v_collision_list, i ) );
  105.             _n2 = ds_list_find_value( h_collision_list, i ).bbox_bottom;
  106.             if _n2 > _n _n = _n2;
  107.            
  108.         }
  109.        
  110.         y_target = _n;
  111.        
  112.     }
  113.    
  114. }
  115.  
  116. if y_speed > 0 and bool( collision_rectangle( bbox_right, bbox_bottom + y_slop, bbox_left, bbox_bottom + y_slop + y_speed, tmp_block, 0, 1 ) ) {
  117.    
  118.     _c = 0;
  119.     while _c != noone {
  120.        
  121.         _c = collision_rectangle( bbox_right, bbox_bottom + y_slop, bbox_left, bbox_bottom + y_slop + y_speed, tmp_block, 0, 1 );
  122.         if _c != noone {
  123.            
  124.             ds_list_add( v_collision_list, _c );
  125.             instance_deactivate_object( _c );
  126.            
  127.         }
  128.        
  129.     }
  130.    
  131.     while _c != noone {
  132.        
  133.         _c = collision_rectangle( bbox_right, bbox_bottom + y_slop, bbox_left, bbox_bottom + y_slop + y_speed, tmp_platform, 0, 1 );
  134.         if _c != noone {
  135.            
  136.             ds_list_add( v_collision_list, _c );
  137.             instance_deactivate_object( _c );
  138.            
  139.         }
  140.        
  141.     }
  142.    
  143.     if ds_list_size( v_collision_list ) > 0 {
  144.        
  145.         _n = y_target;
  146.         for ( i = 0; i < ds_list_size( v_collision_list ); i++; ) {
  147.            
  148.             instance_activate_object( ds_list_find_value( v_collision_list, i ) );
  149.             _n2 = ds_list_find_value( h_collision_list, i ).bbox_bottom;
  150.             if _n2 < _n _n = _n2;
  151.            
  152.         }
  153.        
  154.         y_target = _n;
  155.        
  156.     }
  157.    
  158. }
  159.  
  160. //resolve vertical movement
  161. y = y_target div 1;
  162. y_slop = y_target mod 1;
  163.  
  164. //memory cleanup
  165. ds_list_destroy( h_collision_list );
  166. ds_list_destroy( v_collision_list );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement