key_event (libreria de eventos down y up)

Started by SplinterGU, July 01, 2010, 10:58:16 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

key_event.lib

#ifndef __KEY_EVENT_LIB
#define __KEY_EVENT_LIB

import "mod_key";
import "mod_proc";

global
   _key_use = 0;
   _key_state[127][1];
end

#define _key_pressed    0
#define _key_down       1
#define _key_up         2

global
   int _key_event_exit = 0;
end

process _key_init()
private
   i;
   pid;
begin
   signal_action( s_kill, s_ign );
   signal( type _key_init, s_kill );
   signal_action( s_kill, s_dfl );

   priority = 999999;

   loop
       _key_use ^= 1;
       for ( i = 0; i < 127; i++ )
           _key_state[ i ][ _key_use ] = key( i );
       end
       frame;
   end

onexit:
   if ( !_key_event_exit ) _key_init(); end

end

function _key_exit()
begin
   _key_event_exit = 1;
   signal( type _key_init, s_kill );
end

#define _key(k,ev) ((ev==_key_down)?(  _key_state[ k ][ _key_use ] && !_key_state[ k ][ _key_use ^ 1 ] ): \
                   (ev==_key_up  )?( !_key_state[ k ][ _key_use ] &&  _key_state[ k ][ _key_use ^ 1 ] ): \
                   ( _key_state[ k ][ _key_use ]))
#endif


key_event_test.prg

import "mod_video";
import "mod_text";

#include "key_event.lib";

private
a,b,c;
begin

   _key_init();

   write_int(0,0,0,0,&a);
   write_int(0,0,10,0,&b);
   write_int(0,0,20,0,&c);

   while( !_key( _ESC, _key_pressed ) )

       a = _key( _5, _key_down );
       b = _key( _5, _key_up );
       c = _key( _5, _key_pressed );

       frame;
   end

   _key_exit();

end


Solo necesita usarlo, como se usa en el ejemplo "key_event_test.prg".

el ejemplo detecta los eventos de la tecla _5 y de _ESC para salir.

es importante hacer _key_init(); para iniciar el modulo, y _key_exit(); para finalizarlo.

nota adicional: el controlador funciona en prioridad 1000 999999, si alguien usara _key en alguna funcion con prioridad superior, debe modificar la prioridad del controlador en el fuente key_event.lib y ponerle un valor mas alto.

se cambia a prioridad a 999999, se toma la sugerencia de windgate de usar onexit para evitar tener que cargarla cada vez que se hace un let_me_alone, y para eso se modifican algunas cosas internamente.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita


panreyes


SplinterGU

fixeado, error demasiado estupido...

gracias Free por insistir en que no te funcionaba (karma).

Saludos
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)


FreeYourMind

Tienes un error en el código, no es getid( type _key_init ) pero si get_id( type _key_init ).

SplinterGU

si, es cierto, lo que pasa que probe en mi pc y luego edite el post...

ya lo corrijo, gracias de nuevo
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Estoy usando esta lib, aparte de esta he usado tambien la de mapeo para la Wiz.
Púes inexplicablemente, y ya lo he mirado y revisado varias veces, no se porque, pero la Wiz no responde a ningun boton  :(

Alguien ha puesto las 2 en un juego para la Wiz ?

Help please  :-\

Drumpi

Yo sólo he usado la mod_joy para gp2x/wiz y no he tenido problemas. De hecho, cojo el código que tengo del Echo y le hago un par de cambios y me va de miedo (tengo todo controlado desde un include, su respectivo .h y algunas variables/constantes que están el el prg principal, que no deberían). Los cambios se deben a que como en Echo no uso todos los botones, pues no todos están mapeados.
Lo malo es que ahora no puedo ponerme a explicar su funcionamiento (no sólo por el tiempo, esta vez).
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)

DCelso

Simplemente decir: karmón. Esto abre muchísimas posibilidades.
Monstruos Diabólicos

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

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind


SplinterGU

Quote from: FreeYourMind on July 14, 2010, 06:37:47 PM
Estoy usando esta lib, aparte de esta he usado tambien la de mapeo para la Wiz.
Púes inexplicablemente, y ya lo he mirado y revisado varias veces, no se porque, pero la Wiz no responde a ningun boton  :(

Alguien ha puesto las 2 en un juego para la Wiz ?

Help please  :-\

este modulo es para teclas, wiz no tiene teclas tiene joys y botones de joys.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

updateado el modulo, para mejorar la forma de detectar si esta ya corriendo el controlador.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2