Dimenticare icon

Controller code

Dimenticare | PRO | 09/24/16 04:14:57 PM UTC | 0 ⭐ | 10469 👁️ | Never ⏰ | []
Game Maker |

0 B

|

None

|

0 👍

/

0 👎

/// I apologize in advance.
 
game_has_focus=window_has_focus();
var t_io_start=get_timer();
if (game_has_focus){
    WW=window_get_width()-OFFSET;
    HH=window_get_height();
    MOUSE_X=(window_mouse_get_x()/WW)*W;
    MOUSE_Y=(window_mouse_get_y()/HH)*H;
    
    // Shift input to previous input
    
    var lastL=ls_angle;
    var lastR=rs_angle;
    var lastInput=hasInput;
    var lastLM=ls_magnitude;
    var lastRM=rs_magnitude;
    var lastRSX=rs_x;
    var lastRSY=rs_y;
    var lastLSX=ls_x;
    var lastLSY=ls_y;
    
    last_up=up;
    last_down=down;
    last_left=left;
    last_right=right;
    last_a=a;
    last_b=b;
    last_x=x;
    last_y=y;
    last_l=l;
    last_r=r;
    last_l2=l2;
    last_r2=r2;
    last_ls=ls;
    last_rs=rs;
    last_rup=rup;
    last_rdown=rdown;
    last_rleft=rleft;
    last_rright=rright;
    last_pup=pup;
    last_pdown=pdown;
    last_pleft=pleft;
    last_pright=pright;
    last_start=start;
    last_select=select;
    
    last_interact=interact;
    last_back=back;
    last_pause=pause;
    last_run=run;
    last_jump=jump;
    last_sneak=sneak;
    
    if (gamepad_is_connected(0)){
        // If controller, gather raw input first. Can't be done all in one call because different buttons have
        // different functions to check them.
        ls_x=gamepad_axis_value(0, gp_axislh);
        ls_y=gamepad_axis_value(0, gp_axislv);
        rs_x=gamepad_axis_value(0, gp_axisrh);
        rs_y=gamepad_axis_value(0, gp_axisrv);
    
        a=gamepad_button_check(0, gp_face1);
        b=gamepad_button_check(0, gp_face2);
        x=gamepad_button_check(0, gp_face3);
        y=gamepad_button_check(0, gp_face4);
        start=gamepad_button_check(0, gp_start);
        select=gamepad_button_check(0, gp_select);
        l=gamepad_button_check(0, gp_shoulderlb);
        r=gamepad_button_check(0, gp_shoulderrb);
        l2=gamepad_button_check(0, gp_shoulderl);
        r2=gamepad_button_check(0, gp_shoulderr);
        ls=gamepad_button_check(0, gp_stickl);
        rs=gamepad_button_check(0, gp_stickr);
        pup=gamepad_button_check(0, gp_padu);
        pdown=gamepad_button_check(0, gp_padd);
        pleft=gamepad_button_check(0, gp_padl);
        pright=gamepad_button_check(0, gp_padr);
    } else {
        // The keyboard can gather exact input directly from the keyboard, since all button checks are the same
        ls_x=0;
        ls_y=0;
        rs_x=0;
        rs_y=0;
        a=false;
        b=false;
        x=false;
        y=false;
        start=false;
        select=false;
        l=false;
        r=false;
        l2=false;
        r2=false;
        ls=false;
        rs=false;
        pup=false;
        pdown=false;
        pleft=false;
        pright=false;
    }
    // Combine with keyboard input
    ls_x=ls_x-keyboard_check_direct(ord('A'))+keyboard_check_direct(ord('D'));
    ls_y=ls_y-keyboard_check_direct(ord('W'))+keyboard_check_direct(ord('S'));
    rs_x=rs_x+clamp((MOUSE_X-W/2)/16, -1, 1);
    rs_y=rs_y+clamp((MOUSE_Y-H/2)/16, -1, 1);
    
    up=MatchCardinalDirection(ls_angle, ls_y, Directions.north);
    down=MatchCardinalDirection(ls_angle, ls_y, Directions.south);
    left=MatchCardinalDirection(ls_angle, ls_x, Directions.west);
    right=MatchCardinalDirection(ls_angle, ls_x, Directions.east);
    a=mouse_check_button(mb_left)||keyboard_check_direct(vk_enter)||a;
    b=mouse_check_button(mb_right)||b;
    x=keyboard_check_direct(ord('R'))||x;
    y=keyboard_check_direct(vk_space)||y;
    
    start=keyboard_check_direct(vk_escape)||start;
    select=keyboard_check_direct(vk_backspace)||keyboard_check_direct(vk_delete)||select;
    l=keyboard_check_direct(vk_lcontrol)||l;
    r=keyboard_check_direct(vk_rcontrol)||r;
    l2=keyboard_check_direct(vk_lshift)||l2;
    r2=keyboard_check_direct(vk_rshift)||r2;
    ls=(keyboard_check_direct(vk_lalt)||mouse_check_button(mb_middle))||ls;
    rs=keyboard_check_direct(vk_ralt)||rs;
    
    l3=mouse_wheel_up();
    r3=mouse_wheel_down();
    
    with (World){
        if (!cursor_is_free&&mode==GameModes.play){
            centerCursor();
        }
    }
    
    if (invert_y)
        rs_y=-rs_y;
    if (invert_x)
        rs_x=-rs_x;
    
    ls_angle=GetStickAngle(ls_x, ls_y);
    ls_magnitude=GetStickMagnitude(ls_x, ls_y);
    up=MatchCardinalDirection(ls_angle, ls_magnitude, Directions.north);
    down=MatchCardinalDirection(ls_angle, ls_magnitude, Directions.south);
    left=MatchCardinalDirection(ls_angle, ls_magnitude, Directions.west);
    right=MatchCardinalDirection(ls_angle, ls_magnitude, Directions.east);
    
    rs_angle=GetStickAngle(rs_x, rs_y);
    rs_magnitude=GetStickMagnitude(rs_x, rs_y);
    rup=MatchCardinalDirection(rs_angle, rs_magnitude, Directions.north);
    rdown=MatchCardinalDirection(rs_angle, rs_magnitude, Directions.south);
    rleft=MatchCardinalDirection(rs_angle, rs_magnitude, Directions.west);
    rright=MatchCardinalDirection(rs_angle, rs_magnitude, Directions.east);
    
    pup=pup||keyboard_check_direct(vk_up);
    pdown=pdown||keyboard_check_direct(vk_down);
    pleft=pleft||keyboard_check_direct(vk_left);
    pright=pright||keyboard_check_direct(vk_right);
    
    if (abs(ls_x)<0.1)
        ls_x=0;
    if (abs(ls_y)<0.1)
        ls_y=0;
    if (abs(rs_x)<0.1)
        rs_x=0;
    if (abs(rs_y)<0.1)
        rs_y=0;
    
    // Change in stick angles
    d_rs_angle=(rs_angle-lastR+360) mod 360;
    d_ls_angle=(ls_angle-lastL+360) mod 360;
    d_ls_magnitude=ls_magnitude-lastLM;
    d_rs_magnitude=rs_magnitude-lastRM;
    
    // Update change input
    hasInput=(up||down||left||right);
    pressInput=((!lastInput)&&hasInput);
    releaseInput=(lastInput&&(!hasInput));
    
    press_up=(!last_up)&&up;
    press_down=(!last_down)&&down;
    press_left=(!last_left)&&left;
    press_right=(!last_right)&&right;
    press_a=(!last_a)&&a;
    press_b=(!last_b)&&b;
    press_x=(!last_x)&&x;
    press_y=(!last_y)&&y;
    press_l=(!last_l)&&l;
    press_r=(!last_r)&&r;
    press_l2=(!last_l2)&&l2;
    press_r2=(!last_r2)&&r2;
    press_ls=(!last_ls)&&ls;
    press_rs=(!last_rs)&&rs;
    press_rup=(!last_rup)&&rup;
    press_rdown=(!last_rdown)&&rdown;
    press_rleft=(!last_rleft)&&rleft;
    press_rright=(!last_rright)&&rright;
    press_pup=(!last_pup)&&pup;
    press_pdown=(!last_rdown)&&pdown;
    press_pleft=(!last_pleft)&&pleft;
    press_pright=(!last_pright)&&pright;
    press_start=(!last_start)&&start;
    press_select=(!last_select)&&select;
    
    release_up=last_up&&(!up);
    release_down=last_down&&(!down);
    release_left=last_left&&(!left);
    release_right=last_right&&(!right);
    release_a=last_a&&(!a);
    release_b=last_b&&(!b);
    release_x=last_x&&(!x);
    release_y=last_y&&(!y);
    release_l=last_l&&(!l);
    release_r=last_r&&(!r);
    release_l2=last_l2&&(!l2);
    release_r2=last_r2&&(!r2);
    release_ls=last_ls&&(!ls);
    release_rs=last_rs&&(!rs);
    release_rup=last_rup&&(!rup);
    release_rdown=last_rdown&&(!rdown);
    release_rleft=last_rleft&&(!rleft);
    release_rright=last_rright&&(!rright);
    release_pup=last_pup&&(!pup);
    release_pdown=last_pdown&&(!pdown);
    release_pleft=last_pleft&&(!pleft);
    release_pright=last_pright&&(!pright);
    release_start=last_start&&(!start);
    release_select=last_select&&(!select);
    
    // Update common terms
    interact=a;
    back=b||select;
    pause=x||start;
    run=l2;
    jump=y;
    sneak=r2;
    
    press_interact=(!last_interact)&&interact;
    press_back=(!last_back)&&back;
    press_pause=(!last_pause)&&pause;
    press_run=(!last_run)&&run;
    press_jump=(!last_jump)&&jump;
    press_sneak=(!last_sneak)&&sneak;
    
    release_interact=last_interact&&(!interact);
    release_back=last_back&&(!back);
    release_pause=last_pause&&(!pause);
    release_run=last_run&&(!run);
    release_jump=last_jump&&(!jump);
    release_sneak=last_sneak&&(!sneak);
    
    // if you do this for any other buttons, implement it here.
    if (press_b){
        dur_b=0;
    } else {
        dur_b++;
    }
    
    with (World){
        if (keyboard_check_pressed(vk_f1)){
            // quick-open the Help file in Inventory
        } else if (keyboard_check_pressed(vk_f2)){
            if (mode!=GameModes.play){
                mode=GameModes.play;
                Player.show=true;
                Camera.pov=Controller.reserved_pov;
                editor_selection_clear();
                if (Controller.b){  // hopefully "b" will never be used for another command
                    Player.x=Camera.x;  // at the same time, since it's generally only used
                    Player.y=Camera.y;  // for "go back" anyway
                    Player.z=max(0, Camera.z-25);
                    Player.direction=Camera.direction;
                    Player.pitch=Camera.pitch;
                }
            } else {
                Player.show=false;
                mode=GameModes.edit_object;
                Controller.reserved_pov=Camera.pov;
                Camera.pov=Misc.cam_free;
                if (Camera.pov==Misc.cam_first){
                    Camera.x=Player.x;
                    Camera.y=Player.y;
                    Camera.z=Player.z+25;
                    Camera.direction=Player.direction;
                    Camera.pitch=Player.pitch;
                    
                }
            }
        } if (keyboard_check_pressed(vk_f3)){
            if (debug&&mode!=GameModes.play){
                    // toggle camera
                    if (Camera.pov==Misc.cam_free)
                        Camera.pov=Misc.cam_edit_top;
                    else
                        Camera.pov=Misc.cam_free;
            }
        } else if (keyboard_check_direct(vk_tab)){
            if (mode==GameModes.play){
                mode=GameModes.console;
            } else if (mode==GameModes.console){
                mode=GameModes.play;
            }
        }
        // f4 is used for the debug stats overlay
        // f5 is for a few things in the Object editor
    }
}
 
World.time_io=get_timer()-t_io_start;
World.t_time_io+=World.time_io;

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎