Dimenticare

Controller code

Sep 24th, 2016
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /// I apologize in advance.
  2.  
  3. game_has_focus=window_has_focus();
  4. var t_io_start=get_timer();
  5. if (game_has_focus){
  6.     WW=window_get_width()-OFFSET;
  7.     HH=window_get_height();
  8.     MOUSE_X=(window_mouse_get_x()/WW)*W;
  9.     MOUSE_Y=(window_mouse_get_y()/HH)*H;
  10.    
  11.     // Shift input to previous input
  12.    
  13.     var lastL=ls_angle;
  14.     var lastR=rs_angle;
  15.     var lastInput=hasInput;
  16.     var lastLM=ls_magnitude;
  17.     var lastRM=rs_magnitude;
  18.     var lastRSX=rs_x;
  19.     var lastRSY=rs_y;
  20.     var lastLSX=ls_x;
  21.     var lastLSY=ls_y;
  22.    
  23.     last_up=up;
  24.     last_down=down;
  25.     last_left=left;
  26.     last_right=right;
  27.     last_a=a;
  28.     last_b=b;
  29.     last_x=x;
  30.     last_y=y;
  31.     last_l=l;
  32.     last_r=r;
  33.     last_l2=l2;
  34.     last_r2=r2;
  35.     last_ls=ls;
  36.     last_rs=rs;
  37.     last_rup=rup;
  38.     last_rdown=rdown;
  39.     last_rleft=rleft;
  40.     last_rright=rright;
  41.     last_pup=pup;
  42.     last_pdown=pdown;
  43.     last_pleft=pleft;
  44.     last_pright=pright;
  45.     last_start=start;
  46.     last_select=select;
  47.    
  48.     last_interact=interact;
  49.     last_back=back;
  50.     last_pause=pause;
  51.     last_run=run;
  52.     last_jump=jump;
  53.     last_sneak=sneak;
  54.    
  55.     if (gamepad_is_connected(0)){
  56.         // If controller, gather raw input first. Can't be done all in one call because different buttons have
  57.         // different functions to check them.
  58.         ls_x=gamepad_axis_value(0, gp_axislh);
  59.         ls_y=gamepad_axis_value(0, gp_axislv);
  60.         rs_x=gamepad_axis_value(0, gp_axisrh);
  61.         rs_y=gamepad_axis_value(0, gp_axisrv);
  62.    
  63.         a=gamepad_button_check(0, gp_face1);
  64.         b=gamepad_button_check(0, gp_face2);
  65.         x=gamepad_button_check(0, gp_face3);
  66.         y=gamepad_button_check(0, gp_face4);
  67.         start=gamepad_button_check(0, gp_start);
  68.         select=gamepad_button_check(0, gp_select);
  69.         l=gamepad_button_check(0, gp_shoulderlb);
  70.         r=gamepad_button_check(0, gp_shoulderrb);
  71.         l2=gamepad_button_check(0, gp_shoulderl);
  72.         r2=gamepad_button_check(0, gp_shoulderr);
  73.         ls=gamepad_button_check(0, gp_stickl);
  74.         rs=gamepad_button_check(0, gp_stickr);
  75.         pup=gamepad_button_check(0, gp_padu);
  76.         pdown=gamepad_button_check(0, gp_padd);
  77.         pleft=gamepad_button_check(0, gp_padl);
  78.         pright=gamepad_button_check(0, gp_padr);
  79.     } else {
  80.         // The keyboard can gather exact input directly from the keyboard, since all button checks are the same
  81.         ls_x=0;
  82.         ls_y=0;
  83.         rs_x=0;
  84.         rs_y=0;
  85.         a=false;
  86.         b=false;
  87.         x=false;
  88.         y=false;
  89.         start=false;
  90.         select=false;
  91.         l=false;
  92.         r=false;
  93.         l2=false;
  94.         r2=false;
  95.         ls=false;
  96.         rs=false;
  97.         pup=false;
  98.         pdown=false;
  99.         pleft=false;
  100.         pright=false;
  101.     }
  102.     // Combine with keyboard input
  103.     ls_x=ls_x-keyboard_check_direct(ord('A'))+keyboard_check_direct(ord('D'));
  104.     ls_y=ls_y-keyboard_check_direct(ord('W'))+keyboard_check_direct(ord('S'));
  105.     rs_x=rs_x+clamp((MOUSE_X-W/2)/16, -1, 1);
  106.     rs_y=rs_y+clamp((MOUSE_Y-H/2)/16, -1, 1);
  107.    
  108.     up=MatchCardinalDirection(ls_angle, ls_y, Directions.north);
  109.     down=MatchCardinalDirection(ls_angle, ls_y, Directions.south);
  110.     left=MatchCardinalDirection(ls_angle, ls_x, Directions.west);
  111.     right=MatchCardinalDirection(ls_angle, ls_x, Directions.east);
  112.     a=mouse_check_button(mb_left)||keyboard_check_direct(vk_enter)||a;
  113.     b=mouse_check_button(mb_right)||b;
  114.     x=keyboard_check_direct(ord('R'))||x;
  115.     y=keyboard_check_direct(vk_space)||y;
  116.    
  117.     start=keyboard_check_direct(vk_escape)||start;
  118.     select=keyboard_check_direct(vk_backspace)||keyboard_check_direct(vk_delete)||select;
  119.     l=keyboard_check_direct(vk_lcontrol)||l;
  120.     r=keyboard_check_direct(vk_rcontrol)||r;
  121.     l2=keyboard_check_direct(vk_lshift)||l2;
  122.     r2=keyboard_check_direct(vk_rshift)||r2;
  123.     ls=(keyboard_check_direct(vk_lalt)||mouse_check_button(mb_middle))||ls;
  124.     rs=keyboard_check_direct(vk_ralt)||rs;
  125.    
  126.     l3=mouse_wheel_up();
  127.     r3=mouse_wheel_down();
  128.    
  129.     with (World){
  130.         if (!cursor_is_free&&mode==GameModes.play){
  131.             centerCursor();
  132.         }
  133.     }
  134.    
  135.     if (invert_y)
  136.         rs_y=-rs_y;
  137.     if (invert_x)
  138.         rs_x=-rs_x;
  139.    
  140.     ls_angle=GetStickAngle(ls_x, ls_y);
  141.     ls_magnitude=GetStickMagnitude(ls_x, ls_y);
  142.     up=MatchCardinalDirection(ls_angle, ls_magnitude, Directions.north);
  143.     down=MatchCardinalDirection(ls_angle, ls_magnitude, Directions.south);
  144.     left=MatchCardinalDirection(ls_angle, ls_magnitude, Directions.west);
  145.     right=MatchCardinalDirection(ls_angle, ls_magnitude, Directions.east);
  146.    
  147.     rs_angle=GetStickAngle(rs_x, rs_y);
  148.     rs_magnitude=GetStickMagnitude(rs_x, rs_y);
  149.     rup=MatchCardinalDirection(rs_angle, rs_magnitude, Directions.north);
  150.     rdown=MatchCardinalDirection(rs_angle, rs_magnitude, Directions.south);
  151.     rleft=MatchCardinalDirection(rs_angle, rs_magnitude, Directions.west);
  152.     rright=MatchCardinalDirection(rs_angle, rs_magnitude, Directions.east);
  153.    
  154.     pup=pup||keyboard_check_direct(vk_up);
  155.     pdown=pdown||keyboard_check_direct(vk_down);
  156.     pleft=pleft||keyboard_check_direct(vk_left);
  157.     pright=pright||keyboard_check_direct(vk_right);
  158.    
  159.     if (abs(ls_x)<0.1)
  160.         ls_x=0;
  161.     if (abs(ls_y)<0.1)
  162.         ls_y=0;
  163.     if (abs(rs_x)<0.1)
  164.         rs_x=0;
  165.     if (abs(rs_y)<0.1)
  166.         rs_y=0;
  167.    
  168.     // Change in stick angles
  169.     d_rs_angle=(rs_angle-lastR+360) mod 360;
  170.     d_ls_angle=(ls_angle-lastL+360) mod 360;
  171.     d_ls_magnitude=ls_magnitude-lastLM;
  172.     d_rs_magnitude=rs_magnitude-lastRM;
  173.    
  174.     // Update change input
  175.     hasInput=(up||down||left||right);
  176.     pressInput=((!lastInput)&&hasInput);
  177.     releaseInput=(lastInput&&(!hasInput));
  178.    
  179.     press_up=(!last_up)&&up;
  180.     press_down=(!last_down)&&down;
  181.     press_left=(!last_left)&&left;
  182.     press_right=(!last_right)&&right;
  183.     press_a=(!last_a)&&a;
  184.     press_b=(!last_b)&&b;
  185.     press_x=(!last_x)&&x;
  186.     press_y=(!last_y)&&y;
  187.     press_l=(!last_l)&&l;
  188.     press_r=(!last_r)&&r;
  189.     press_l2=(!last_l2)&&l2;
  190.     press_r2=(!last_r2)&&r2;
  191.     press_ls=(!last_ls)&&ls;
  192.     press_rs=(!last_rs)&&rs;
  193.     press_rup=(!last_rup)&&rup;
  194.     press_rdown=(!last_rdown)&&rdown;
  195.     press_rleft=(!last_rleft)&&rleft;
  196.     press_rright=(!last_rright)&&rright;
  197.     press_pup=(!last_pup)&&pup;
  198.     press_pdown=(!last_rdown)&&pdown;
  199.     press_pleft=(!last_pleft)&&pleft;
  200.     press_pright=(!last_pright)&&pright;
  201.     press_start=(!last_start)&&start;
  202.     press_select=(!last_select)&&select;
  203.    
  204.     release_up=last_up&&(!up);
  205.     release_down=last_down&&(!down);
  206.     release_left=last_left&&(!left);
  207.     release_right=last_right&&(!right);
  208.     release_a=last_a&&(!a);
  209.     release_b=last_b&&(!b);
  210.     release_x=last_x&&(!x);
  211.     release_y=last_y&&(!y);
  212.     release_l=last_l&&(!l);
  213.     release_r=last_r&&(!r);
  214.     release_l2=last_l2&&(!l2);
  215.     release_r2=last_r2&&(!r2);
  216.     release_ls=last_ls&&(!ls);
  217.     release_rs=last_rs&&(!rs);
  218.     release_rup=last_rup&&(!rup);
  219.     release_rdown=last_rdown&&(!rdown);
  220.     release_rleft=last_rleft&&(!rleft);
  221.     release_rright=last_rright&&(!rright);
  222.     release_pup=last_pup&&(!pup);
  223.     release_pdown=last_pdown&&(!pdown);
  224.     release_pleft=last_pleft&&(!pleft);
  225.     release_pright=last_pright&&(!pright);
  226.     release_start=last_start&&(!start);
  227.     release_select=last_select&&(!select);
  228.    
  229.     // Update common terms
  230.     interact=a;
  231.     back=b||select;
  232.     pause=x||start;
  233.     run=l2;
  234.     jump=y;
  235.     sneak=r2;
  236.    
  237.     press_interact=(!last_interact)&&interact;
  238.     press_back=(!last_back)&&back;
  239.     press_pause=(!last_pause)&&pause;
  240.     press_run=(!last_run)&&run;
  241.     press_jump=(!last_jump)&&jump;
  242.     press_sneak=(!last_sneak)&&sneak;
  243.    
  244.     release_interact=last_interact&&(!interact);
  245.     release_back=last_back&&(!back);
  246.     release_pause=last_pause&&(!pause);
  247.     release_run=last_run&&(!run);
  248.     release_jump=last_jump&&(!jump);
  249.     release_sneak=last_sneak&&(!sneak);
  250.    
  251.     // if you do this for any other buttons, implement it here.
  252.     if (press_b){
  253.         dur_b=0;
  254.     } else {
  255.         dur_b++;
  256.     }
  257.    
  258.     with (World){
  259.         if (keyboard_check_pressed(vk_f1)){
  260.             // quick-open the Help file in Inventory
  261.         } else if (keyboard_check_pressed(vk_f2)){
  262.             if (mode!=GameModes.play){
  263.                 mode=GameModes.play;
  264.                 Player.show=true;
  265.                 Camera.pov=Controller.reserved_pov;
  266.                 editor_selection_clear();
  267.                 if (Controller.b){  // hopefully "b" will never be used for another command
  268.                     Player.x=Camera.x;  // at the same time, since it's generally only used
  269.                     Player.y=Camera.y;  // for "go back" anyway
  270.                     Player.z=max(0, Camera.z-25);
  271.                     Player.direction=Camera.direction;
  272.                     Player.pitch=Camera.pitch;
  273.                 }
  274.             } else {
  275.                 Player.show=false;
  276.                 mode=GameModes.edit_object;
  277.                 Controller.reserved_pov=Camera.pov;
  278.                 Camera.pov=Misc.cam_free;
  279.                 if (Camera.pov==Misc.cam_first){
  280.                     Camera.x=Player.x;
  281.                     Camera.y=Player.y;
  282.                     Camera.z=Player.z+25;
  283.                     Camera.direction=Player.direction;
  284.                     Camera.pitch=Player.pitch;
  285.                    
  286.                 }
  287.             }
  288.         } if (keyboard_check_pressed(vk_f3)){
  289.             if (debug&&mode!=GameModes.play){
  290.                     // toggle camera
  291.                     if (Camera.pov==Misc.cam_free)
  292.                         Camera.pov=Misc.cam_edit_top;
  293.                     else
  294.                         Camera.pov=Misc.cam_free;
  295.             }
  296.         } else if (keyboard_check_direct(vk_tab)){
  297.             if (mode==GameModes.play){
  298.                 mode=GameModes.console;
  299.             } else if (mode==GameModes.console){
  300.                 mode=GameModes.play;
  301.             }
  302.         }
  303.         // f4 is used for the debug stats overlay
  304.         // f5 is for a few things in the Object editor
  305.     }
  306. }
  307.  
  308. World.time_io=get_timer()-t_io_start;
  309. World.t_time_io+=World.time_io;
Advertisement
Add Comment
Please, Sign In to add comment