Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// 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;
Advertisement
Add Comment
Please, Sign In to add comment