#define xbox_connected // Checkt of de verbonden controller een xbox 360 controller is. // Eerst kijken of op dit ID wel een joystick is. global.isconnected = joystick_exists(global.xcontroller); if (global.isconnected == 1) { // Zo ja... // Er is een joystick aangesloten. Nu nog verifiëren if (joystick_axes(global.xcontroller) == 5) { // De xbox heeft 5 assen. 2 per joystick, en 1 voor de beide triggers. if (joystick_buttons(global.xcontroller) == 10) { // De xbox heeft vier knoppen. (ABXY, back en start, en indrukken joysticks) return true; } } } // Een van de bovenstaande condities niet waar? Dan is dit geen xbox controller. return false; #define xbox_dpad // Xbox 360 controller xpad controleren. pov = joystick_pov(global.xcontroller); // Input van dpad halen. if (pov !=-1) { // Als er wel input is... // De dpad werkt in graden die met de klok mee lopen. Die van GM lopen echter tegen de klok in. Even omzetten dus. pov = 360 - pov; pov +=90; pov = pov mod 360; } return pov; #define xbox_help /* Dit is een werkset om bijna alle input van een xbox 360 controller vlekkeloos uit te lezen. De xbox 360 controller heeft namelijk enkele verschillen waardoor een andere aanpak nodig is. Met deze werkset kun je de ABXY knoppen, de back en start knoppen, de linker en rechter bumper en het indrukken van de joysticks uitlezen. Ook kun je precies bekijken wat de positie is van de linker en rechter joystick. De linker en rechter triggers zijn ook uit te lezen, inclusief hoever ze zijn ingedrukt. Als laatste is ook de D-Pad uit te lezen. Dus nog even allemaal op een rijtje: - ABXY knoppen - Back en start knoppen - Linker en rechter bumper - Indrukken van joysticks. - Precieze locatie linker en rechter joystick. - De linker en rechter triggers en hoever zij zijn ingedrukt. - Het D-pad. Functies: Basis: xbox_init(); xbox_dpad(); xbox_connected(); xbox_help(); Buttons: xbox_button_x(); xbox_button_y(); xbox_button_a(); xbox_button_b(); xbox_bumper_left(); xbox_bumper_right(); xbox_back(); xbox_start(); xbox_joypress_left(); xbox_joypress_right(); Assen: Joysticks: xbox_joystickleft_x(); xbox_joystickleft_y(); xbox_joystickright_x(); xbox_joystickright_y(); Triggers: xbox_trigger_left(); xbox_trigger_right(); Notities: - Game Maker hanteert Directinput. Dit werkt zeer goed met de xbox controller, alleen heeft het een mankement, namelijk de triggers. Deze triggers hebben niet elk een eigen as, maar delen samen een as. Als de linker trigger wordt ingedrukt is de waarde van de as tussen de 0 en de 1, en bij de rechter trigger is dit ook tussen de 1 en de 0. Geen probleem, afzonderlijk worden de triggers perfect uitgelezen, maar als je beide triggers tegelijk indrukt wordt de een van de ander afgetrokken. Dus als je de rechter trigger helemaal indrukt en de linker voor de helft, dan is de waarde 0.5. Zie ook het example. - De d-pad detecteert slechts 8 richtingen. Is de D-pad niet ingedrukt, dan is de waarde -1. De return value is de richting in graden tegen de klok in, zoals game maker dit hanteert. - De grote xbox knop is niet uitleesbaar. - Met xbox_connected is te zien of de verbonden joystick een xbox 360 controller is. Hoe dit moet is in het example te zien. */ #define xbox_init // Eerst de goede controller uitzoeken... Als die er is. global.xcontroller = 2; // Eerst allebei de ID's langs... for(i=2; i>=1; i-=1) { // Zit er een joystick aan? if (joystick_exists(i)) { // Even testen of dit wel een xbox 360 controller is. global.xcontroller = i; if (xbox_connected()) { // Warempel! Dit is een xbox 360 controller! Dan hoeven we niet verder te zoeken. break; } } // Een van de bovenstaande condities was niet waar. Doorzoeken dus bij de volgende ID. } #define xbox_joystickleft_x // X positie van linker joystick teruggeven. Dit is tussen -1 (Helemaal links) en 1. (Helemaal rechts) return joystick_xpos(global.xcontroller); #define xbox_joystickleft_y // Y positie van linker joystick teruggeven. Dit is tussen -1 (Helemaal boven) en 1. (Helemaal beneden) return joystick_ypos(global.xcontroller); #define xbox_joystickright_x // X positie van rechter joystick teruggeven. Dit is tussen -1 (Helemaal links) en 1. (Helemaal rechts) return joystick_upos(global.xcontroller); #define xbox_joystickright_y // Y positie van rechter joystick teruggeven. Dit is tussen -1 (Helemaal boven) en 1. (Helemaal beneden) return joystick_rpos(global.xcontroller); #define xbox_trigger_right // Geeft terug hoe ver de rechter trigger is ingedrukt. Dit loopt tussen 0 (helemaal niet ingedrukt) en 1 (Helemaal ingedrukt) return abs(min(0,joystick_zpos(global.xcontroller))); #define xbox_trigger_left // Geeft terug hoe ver de linker trigger is ingedrukt. Dit loopt tussen 0 (helemaal niet ingedrukt) en 1 (Helemaal ingedrukt) return max(0,joystick_zpos(global.xcontroller)); #define xbox_button_x // Geeft terug of de x button is ingedrukt. return joystick_check_button(global.xcontroller,3); #define xbox_button_y // Geeft terug of de y button is ingedrukt. return joystick_check_button(global.xcontroller,4); #define xbox_button_a // Geeft terug of de a button is ingedrukt. return joystick_check_button(global.xcontroller,1); #define xbox_button_b // Geeftterug of de b button is ingedrukt. return joystick_check_button(global.xcontroller,2); #define xbox_bumper_left // Geeft terug of de linker bumper is ingedrukt. return joystick_check_button(global.xcontroller,5); #define xbox_bumper_right // Geeft terug of de rechter bumper is ingedrukt. return joystick_check_button(global.xcontroller,6); #define xbox_back // Geeft de button terug of de back button is ingedrukt. return joystick_check_button(global.xcontroller,7); #define xbox_start // Geeft terug of de start button is ingedrukt. return joystick_check_button(global.xcontroller,8); #define xbox_joypress_left // Geeft of de linker joystick is ingedrukt. return joystick_check_button(global.xcontroller,9); #define xbox_joypress_right // Geeft terug of de rechter joystick is ingedrukt. return joystick_check_button(global.xcontroller,10);