Autor Tema: [wiz+others] jkeys.lib  (Leído 10998 veces)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12920
  • Karma: 378
[wiz+others] jkeys.lib
« en: Agosto 28, 2009, 03:17:05 am »
lib for abstaction of controls, for PC and wiz for now... (based on apagame project)

jkeys.lib

Código: [Seleccionar]
import "mod_key";
import "mod_joy";
import "mod_proc";

/* -------------------------------------------------------------------------- */

const
    _JKEY_UP        =  0 ;
    _JKEY_UPLEFT    =  1 ;
    _JKEY_LEFT      =  2 ;
    _JKEY_DOWNLEFT  =  3 ;
    _JKEY_DOWN      =  4 ;
    _JKEY_DOWNRIGHT =  5 ;
    _JKEY_RIGHT     =  6 ;
    _JKEY_UPRIGHT   =  7 ;
    _JKEY_MENU      =  8 ;
    _JKEY_SELECT    =  9 ;
    _JKEY_L         = 10 ;
    _JKEY_R         = 11 ;
    _JKEY_A         = 12 ;
    _JKEY_B         = 13 ;
    _JKEY_X         = 14 ;
    _JKEY_Y         = 15 ;
    _JKEY_VOLUP     = 16 ;
    _JKEY_VOLDOWN   = 17 ;
    _JKEY_CLICK     = 18 ;

    _JKEY_LAST      = 19 ;

end

/* -------------------------------------------------------------------------- */

#define jkeys_controler()    _jkeys_old_version=1;jkeys_init()

/* -------------------------------------------------------------------------- */

global
    int _jkeys_exit = 0;
    int _jkeys_old_version = 0;
    int jkeys[_JKEY_LAST];
    int jkeys_state[_JKEY_LAST];
end

/* -------------------------------------------------------------------------- */

function jkeys_set_default_keys()
begin
    jkeys[ _JKEY_UP        ] = _UP ;
    jkeys[ _JKEY_UPLEFT    ] = 0 ;
    jkeys[ _JKEY_LEFT      ] = _LEFT ;
    jkeys[ _JKEY_DOWNLEFT  ] = 0 ;
    jkeys[ _JKEY_DOWN      ] = _DOWN ;
    jkeys[ _JKEY_DOWNRIGHT ] = 0 ;
    jkeys[ _JKEY_RIGHT     ] = _RIGHT ;
    jkeys[ _JKEY_UPRIGHT   ] = 0 ;
    jkeys[ _JKEY_MENU      ] = _ESC ;
    jkeys[ _JKEY_SELECT    ] = _ENTER ;
    jkeys[ _JKEY_L         ] = 0 ;
    jkeys[ _JKEY_R         ] = 0 ;
    jkeys[ _JKEY_A         ] = _A ;
    jkeys[ _JKEY_B         ] = _D ;
    jkeys[ _JKEY_X         ] = _S ;
    jkeys[ _JKEY_Y         ] = _W ;
    jkeys[ _JKEY_VOLUP     ] = 0 ;
    jkeys[ _JKEY_VOLDOWN   ] = 0 ;
    jkeys[ _JKEY_CLICK     ] = 0 ;

end

/* -------------------------------------------------------------------------- */

process jkeys_init()
private
    i;
#if 0
    axis_x, axis_y;
#endif
begin
    signal_action( s_kill, s_ign );
    signal( type jkeys_init, s_kill );
    signal_action( s_kill, s_dfl );

    priority = 999999;

    loop
        for ( i = 0; i < _JKEY_LAST; i++ )
            if ( jkeys[i] )
                jkeys_state[i] = key( jkeys[i] );
            else
                jkeys_state[i] = 0;
            end
        end

        switch ( os_id )
            case    OS_GP2X_WIZ, OS_CAANOO: /* Wiz */
                    jkeys_state[ _JKEY_UP        ] |= joy_getbutton( 0, _JKEY_UP        );
                    jkeys_state[ _JKEY_UPLEFT    ] |= joy_getbutton( 0, _JKEY_UPLEFT    );
                    jkeys_state[ _JKEY_LEFT      ] |= joy_getbutton( 0, _JKEY_LEFT      );
                    jkeys_state[ _JKEY_DOWNLEFT  ] |= joy_getbutton( 0, _JKEY_DOWNLEFT  );
                    jkeys_state[ _JKEY_DOWN      ] |= joy_getbutton( 0, _JKEY_DOWN      );
                    jkeys_state[ _JKEY_DOWNRIGHT ] |= joy_getbutton( 0, _JKEY_DOWNRIGHT );
                    jkeys_state[ _JKEY_RIGHT     ] |= joy_getbutton( 0, _JKEY_RIGHT     );
                    jkeys_state[ _JKEY_UPRIGHT   ] |= joy_getbutton( 0, _JKEY_UPRIGHT   );
                    jkeys_state[ _JKEY_MENU      ] |= joy_getbutton( 0, _JKEY_MENU      );
                    jkeys_state[ _JKEY_SELECT    ] |= joy_getbutton( 0, _JKEY_SELECT    );
                    jkeys_state[ _JKEY_L         ] |= joy_getbutton( 0, _JKEY_L         );
                    jkeys_state[ _JKEY_R         ] |= joy_getbutton( 0, _JKEY_R         );
                    jkeys_state[ _JKEY_A         ] |= joy_getbutton( 0, _JKEY_A         );
                    jkeys_state[ _JKEY_B         ] |= joy_getbutton( 0, _JKEY_B         );
                    jkeys_state[ _JKEY_X         ] |= joy_getbutton( 0, _JKEY_X         );
                    jkeys_state[ _JKEY_Y         ] |= joy_getbutton( 0, _JKEY_Y         );
                    jkeys_state[ _JKEY_VOLUP     ] |= joy_getbutton( 0, _JKEY_VOLUP     );
                    jkeys_state[ _JKEY_VOLDOWN   ] |= joy_getbutton( 0, _JKEY_VOLDOWN   );
                    jkeys_state[ _JKEY_CLICK     ] |= joy_getbutton( 0, _JKEY_CLICK     );

                    jkeys_state[ _JKEY_UP        ] |= jkeys_state[ _JKEY_UPLEFT    ] | jkeys_state[ _JKEY_UPRIGHT   ] ;
                    jkeys_state[ _JKEY_DOWN      ] |= jkeys_state[ _JKEY_DOWNRIGHT ] | jkeys_state[ _JKEY_DOWNLEFT  ] ;
                    jkeys_state[ _JKEY_LEFT      ] |= jkeys_state[ _JKEY_UPLEFT    ] | jkeys_state[ _JKEY_DOWNLEFT  ] ;
                    jkeys_state[ _JKEY_RIGHT     ] |= jkeys_state[ _JKEY_UPRIGHT   ] | jkeys_state[ _JKEY_DOWNRIGHT ] ;
            end

#if 0
            case    OS_CAANOO: /* Caanoo */

                    axis_x = joy_getaxis( 2, 0 );
                    axis_y = joy_getaxis( 2, 1 );

                    jkeys_state[ _JKEY_UP        ] |= ( axis_y < -16384 );
                    jkeys_state[ _JKEY_UPLEFT    ] |= ( axis_y < -16384 ) && ( axis_x < -16384 );
                    jkeys_state[ _JKEY_LEFT      ] |=                        ( axis_x < -16384 );
                    jkeys_state[ _JKEY_DOWNLEFT  ] |= ( axis_y >  16384 ) && ( axis_x < -16384 );
                    jkeys_state[ _JKEY_DOWN      ] |= ( axis_y >  16384 );
                    jkeys_state[ _JKEY_DOWNRIGHT ] |= ( axis_y >  16384 ) && ( axis_x > 16384 );
                    jkeys_state[ _JKEY_RIGHT     ] |=                        ( axis_x > 16384 );
                    jkeys_state[ _JKEY_UPRIGHT   ] |= ( axis_y < -16384 ) && ( axis_x > 16384 );
                    jkeys_state[ _JKEY_MENU      ] |= joy_getbutton( 0, _JKEY_MENU      );
                    jkeys_state[ _JKEY_SELECT    ] |= joy_getbutton( 0, _JKEY_SELECT    );
                    jkeys_state[ _JKEY_L         ] |= joy_getbutton( 0, _JKEY_L         );
                    jkeys_state[ _JKEY_R         ] |= joy_getbutton( 0, _JKEY_R         );
                    jkeys_state[ _JKEY_A         ] |= joy_getbutton( 0, _JKEY_A         );
                    jkeys_state[ _JKEY_B         ] |= joy_getbutton( 0, _JKEY_B         );
                    jkeys_state[ _JKEY_X         ] |= joy_getbutton( 0, _JKEY_X         );
                    jkeys_state[ _JKEY_Y         ] |= joy_getbutton( 0, _JKEY_Y         );
                    jkeys_state[ _JKEY_VOLUP     ] |= joy_getbutton( 0, _JKEY_VOLUP     );
                    jkeys_state[ _JKEY_VOLDOWN   ] |= joy_getbutton( 0, _JKEY_VOLDOWN   );
                    jkeys_state[ _JKEY_CLICK     ] |= joy_getbutton( 0, _JKEY_CLICK     );

                    jkeys_state[ _JKEY_UP        ] |= jkeys_state[ _JKEY_UPLEFT    ] | jkeys_state[ _JKEY_UPRIGHT   ] ;
                    jkeys_state[ _JKEY_DOWN      ] |= jkeys_state[ _JKEY_DOWNRIGHT ] | jkeys_state[ _JKEY_DOWNLEFT  ] ;
                    jkeys_state[ _JKEY_LEFT      ] |= jkeys_state[ _JKEY_UPLEFT    ] | jkeys_state[ _JKEY_DOWNLEFT  ] ;
                    jkeys_state[ _JKEY_RIGHT     ] |= jkeys_state[ _JKEY_UPRIGHT   ] | jkeys_state[ _JKEY_DOWNRIGHT ] ;
            end
#endif
        end

        frame;
    end

onexit:
    if ( !_jkeys_exit && !_jkeys_old_version ) jkeys_init(); end

end

/* -------------------------------------------------------------------------- */

function jkeys_exit()
begin
    _jkeys_exit = 1;
    signal( type jkeys_init, s_kill );
end

/* -------------------------------------------------------------------------- */


Sample of use....

Código: [Seleccionar]
import "mod_video";
import "mod_map";
import "mod_proc";
import "mod_screen";
import "mod_say";

#include "jkeys.lib"

BEGIN

    jkeys_set_default_keys();
    jkeys_init();

    set_mode(320,240,8);

    graph = map_new(32,32,8);
    map_clear(0,graph,rgb(128,0,0));

    x = 160;
    y = 120;

    repeat
        IF (jkeys_state[_JKEY_UP   ] && y > 0        ) y-=4; end
IF (jkeys_state[_JKEY_DOWN ] && y < 240 - 16 ) y+=4; end
        IF (jkeys_state[_JKEY_LEFT ] && x > 0        ) x-=4; end
IF (jkeys_state[_JKEY_RIGHT] && x < 320 - 16 ) x+=4; end

        if(jkeys_state[_JKEY_A]) map_clear(0,graph,rgb(128,0,0)); end
        if(jkeys_state[_JKEY_B]) map_clear(0,graph,rgb(0,128,0)); end
        if(jkeys_state[_JKEY_X]) map_clear(0,graph,rgb(0,0,128)); end
        if(jkeys_state[_JKEY_Y]) map_clear(0,graph,rgb(128,128,128)); end
        if(jkeys_state[_JKEY_SELECT]) map_clear(0,graph,rgb(255,255,255)); end

        FRAME;
    until(jkeys_state[_JKEY_MENU])

    let_me_alone();

    jkeys_exit();

END
« última modificación: Noviembre 22, 2010, 01:53:28 am por SplinterGU »
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

  • Administrator
  • *****
  • Mensajes: 4039
  • Karma: 257
    • BennuGD Mobile Worklog
Re: [wiz+others] jkeys.lib
« Respuesta #1 en: Agosto 30, 2009, 04:18:00 pm »
Esto estaría muy bien en el wiki. Hay que contar un poco la vida, pero estaría muy bien. Lo subiría yo mismo, pero ya sabeis: exámenes  :(

Jurk

  • Newbie
  • *
  • Mensajes: 38
  • Karma: 0
Re: [wiz+others] jkeys.lib
« Respuesta #2 en: Octubre 26, 2009, 11:44:16 pm »
Estoy intentando integrar este codigo con el mio, para hacerlo funcionar... y no lo consigo

no se porque, pero no tengo la constante OS_GP2X_WIZ por ningun lado... me hechais una manita?

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12920
  • Karma: 378
Re: [wiz+others] jkeys.lib
« Respuesta #3 en: Octubre 26, 2009, 11:56:23 pm »
no debes tener de las ultimas versiones...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6402
  • Karma: 164
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: [wiz+others] jkeys.lib
« Respuesta #4 en: Octubre 27, 2009, 01:36:22 am »
Pregunta relámpago:
¿El valor de las constantes es el valor que devuelve el "mando" de WIZ cuando se pulsa cada boton? espero que sí, porque coincidirían a la perfección con GP2X y sería un ahorro de código (sobre todo teniendo en cuenta que GP2X podría hacer uso de sus 16 direcciones).
¿Y qué botón es _JKEY_LAST?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12920
  • Karma: 378
Re: [wiz+others] jkeys.lib
« Respuesta #5 en: Octubre 27, 2009, 02:07:47 am »
son los valores que devuelve, si...

_JKEY_LAST es una constante que indica que los valores menores a dicha constante son valores validos de botones.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

gecko

  • Hero Member
  • *****
  • Mensajes: 811
  • Karma: 47
    • Torres Baldi Studio
Re: [wiz+others] jkeys.lib
« Respuesta #6 en: Enero 27, 2010, 08:24:27 pm »
de donde la puedo descargar?

o viene ya incluida en la ultima version de bennu?
Torres Baldi Studio
http://torresbaldi.com

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12920
  • Karma: 378
Re: [wiz+others] jkeys.lib
« Respuesta #7 en: Enero 28, 2010, 12:27:52 am »
q cosa?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

gecko

  • Hero Member
  • *****
  • Mensajes: 811
  • Karma: 47
    • Torres Baldi Studio
Re: [wiz+others] jkeys.lib
« Respuesta #8 en: Enero 28, 2010, 01:00:17 am »
...pense que era una especie de modulo o algo asi para bennu, por eso pedia la descarga.

entonces con crear yo el archivo jkeys.lib con el codigo que publicaste alcanza?

EDITO: Gracias, funciona perfecto!
« última modificación: Enero 28, 2010, 02:16:38 am por gecko »
Torres Baldi Studio
http://torresbaldi.com

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6402
  • Karma: 164
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: [wiz+others] jkeys.lib
« Respuesta #9 en: Enero 28, 2010, 02:15:09 am »
Ya viene de serie, es la mod_joy.
La jkeys.lib es el primer código que ha puesto, símplemente es para definir las constantes para tu código y eso.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

gecko

  • Hero Member
  • *****
  • Mensajes: 811
  • Karma: 47
    • Torres Baldi Studio
Re: [wiz+others] jkeys.lib
« Respuesta #10 en: Enero 28, 2010, 02:18:05 am »
si, justo edite el mensaje anterior.

No conocia los archivos .lib

Son practicos, definen sus propias variables y todo.

Muchas gracias!
Torres Baldi Studio
http://torresbaldi.com

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12920
  • Karma: 378
Re: [wiz+others] jkeys.lib
« Respuesta #11 en: Noviembre 22, 2010, 01:52:40 am »
tomada sugerencia de windgate sobre uso de onexit, se adapta la lib para poder aprovechar el onexit.

se agrega prioridad 999999 al controlador.
se agrega funcion jkeys_exit() y jkeys_controler pasa a llamarse jkeys_init() (tambien se mantiene compatibilidad con la vieja jkeys_controler, si se usa jkeys_controler(), la nueva funcionalidad no trabaja)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

  • Hero Member
  • *****
  • Mensajes: 3708
  • Karma: 181
Re: [wiz+others] jkeys.lib
« Respuesta #12 en: Noviembre 22, 2010, 04:50:58 pm »
y se podría añadir soporte para key_down, key_pressed y key_up añadiendo la otra lib que hiciste, splinter?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12920
  • Karma: 378
Re: [wiz+others] jkeys.lib
« Respuesta #13 en: Noviembre 22, 2010, 09:55:24 pm »
añadiendo no, pero se podria adaptar el codigo a esta.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

  • Hero Member
  • *****
  • Mensajes: 2930
  • Karma: 124
    • TRINIT Asociación de Informáticos de Zaragoza
Re: [wiz+others] jkeys.lib
« Respuesta #14 en: Noviembre 23, 2010, 02:04:41 pm »
Lo del key_down, key_pressed y compañía lo veo algo indispensable después de haberlo usado xD

Y una lib para entrada de texto por teclado también, yo tengo una por ahí en un .prg que va de lujo...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es