signal_misc.prg
import "mod_proc";
/* ---------------------------------- */
local
saved_status ;
end
/* ---------------------------------- */
function save_state_and_signal( int pid, int sig )
begin
if ( sig >= S_TREE )
sig -= S_TREE;
end
if ( sig >= S_FORCE )
sig -= S_FORCE;
end
if ( !pid )
while ( pid = get_id(ALL_PROCESS) )
if ( pid != id && pid != father )
pid.saved_status = get_status( pid );
signal( pid, S_FORCE + sig );
end
end
else
if ( pid != father )
pid.saved_status = get_status( pid );
signal( pid, S_FORCE + sig );
end
end
end
/* ---------------------------------- */
function restore_state( int pid )
begin
if ( !pid )
while ( pid = get_id(ALL_PROCESS) )
if ( pid.saved_status > 0 && pid != id && pid != father )
pid.reserved.status = pid.saved_status;
pid.saved_status = 0;
end
end
else
if ( pid.saved_status > 0 && pid != father )
pid.reserved.status = pid.saved_status;
pid.saved_status = 0;
end
end
end
/* ---------------------------------- */
save_state_and_signal( int pid, int sig ) es igual a un signal, salvo que guarda el estado actual de cada proceso.
restore_state( int pid ) restaura el proceso/s indicado al estado antes de save_state_and_signal
es una estupides gigante, pero vi que muchos se complican con esto.
He añadido al wiki este código, ahora bien, no se si está todo correctamente explicado, a ver si Sandman y josebita pueden revisar la "english grammar".
http://wiki.bennugd.org/index.php?title=Global_signals
Antes de ponerlo en la wiki, al compilar he visto varios problemas :
- pid ya esta declarado
function restore_state( int pid )
private
pid;
- S_TREE y S_FORCE no me los reconoce, que debería ir aquí ?
Anda, es verdad, eso me pasa por meter código sin probar :(.
A ve Spinter, en mod_proc tenemos definidas estas constantes
INT S_KILL = 0
INT S_WAKEUP = 1
INT S_SLEEP = 2
INT S_FREEZE = 3
INT S_KILL_TREE = 100
INT S_WAKEUP_TREE = 101
INT S_SLEEP_TREE = 102
INT S_FREEZE_TREE = 103
INT S_KILL_FORCE = 50
INT S_WAKEUP_FORCE = 51
INT S_SLEEP_FORCE = 52
INT S_FREEZE_FORCE = 53
INT S_KILL_TREE_FORCE = 150
INT S_WAKEUP_TREE_FORCE = 151
INT S_SLEEP_TREE_FORCE = 152
INT S_FREEZE_TREE_FORCE = 153
INT S_DFL = 0
INT S_IGN = 1
INT ALL_PROCESS = 0
¿Hay que insertar dos nuevas, o hay que cambiar por alguna de estas?
Gracias de antemano, en cuanto lo sepa lo cambio en la wiki.
es cierto
#define S_FORCE 50
#define S_TREE 100
copialo de nuevo y probalo.
confío en tí :D.
Subido de nuevo al wiki.
probalo please...
fixeado!
vamos a ver que me aclare, ciertas discusiones que me han mandado por aqui y el tema es viejaco asi que resumiendo:
¿Con este codigo le podemos mandar señales a procesos que ya esten congelados??
Quote from: Futublock on September 26, 2011, 09:35:37 PM
vamos a ver que me aclare, ciertas discusiones que me han mandado por aqui y el tema es viejaco asi que resumiendo:
¿Con este codigo le podemos mandar señales a procesos que ya esten congelados??
si se pueden mandar señales a los congelados ... son la unica manera de descongelarlos xD
vale, entonces me he explicado mal, lo que quiero es cambiar el valor de una variable dentro de un proceso congelado...
a ver... las signals van a todo proceso, no importa el estado que este tenga... un signal le cambia el estado a un proceso... y no solo afecta a los que estan corriendo...
para cambiar las variables de un proceso, tenes que hacer idproceso.variable... eso creo que ya lo sabes.
ups
me ahorraré comentarios hasta que no tenga claro que es lo que me falla, que ya estoy liando la pita ;D
Hola Splinter! Revivo este post debido a la búsqueda que realicé por todo el foro en busca de como pausar un juego, sin hacerlo directamente del main (antes existía al parecer la función signal_all para este fin), es decir, desde un proceso "menu pausa" que cito a continuación:
Process Menu_salida()
Private
int id_txt[1];
int id_cursor;
int n;
End
Begin
save_state_and_signal(0,s_sleep); // Freezes all processes.
id_txt[0]=Write(fnt_titulos,300,100,4,"Volver");
id_txt[1]=Write(fnt_titulos,300,150,4,"Salir");
id_cursor=Cursor(300,100,fpg_hud,18,100,150,50);
Loop
If (id_cursor.y == 100 and key(_enter))
While (key(_enter)) Frame; End
From n=0 to 1;
Delete_text(id_txt[n]);
End
restore_state(0); // restore all processes
Break;
End
If (id_cursor.y == 150 and key(_enter))
While (key(_enter)) Frame; End
Exit();
End
Frame;
End
End
Lo que sucede acá es que. habiendo usado las funciones que creaste, la cual la primera anda bien, al restaurar el estado inicial de todos los procesos, sucede que pareciera que hace un s_kill, porque me desaparecen todos menos el main, quedando a la vista solamente el fondo del mapa con los puntajes solos, sin el personaje, ni el hud, nada. ¿Alguien encontró este tipo de error? ¿Que estaré haciendo mal?
codigo completo por favor... yo no veo nada mal en tu codigo...
link: borrado
claro, el problema es que estabas usando un codigo viejo... igual habia algun detalle que corregir en la funcion, volve al indice, bajate la nueva funcion y probalo.
Quote from: DCelso on February 15, 2010, 10:00:04 AM
He añadido al wiki este código, ahora bien, no se si está todo correctamente explicado, a ver si Sandman y josebita pueden revisar la "english grammar".
http://wiki.bennugd.org/index.php?title=Global_signals
hay que corregir la wiki.
Outlaw, el juego esta muy bueno, me enganche jugando un rato, hasta llegar donde esta un lobo o algo asi... :)
Mil gracias por tu ayuda! Entonces el nuevo código está al principio de este post si mal no entiendo...
Y gracias también por haberlo jugado y que encima te haya enganchado! :) (En la ultima pantalla de la demo, hay un lobo, el asunto es que hay que usar un cuchillo, que se encuentra en cierto lugar...) Me faltan unos detalles para terminar esta versión, espero subirla lo antes posible, por supuesto karmazo para vos!
agarre el cuchillo, claro que si, lo que no se es como usarlo... tampoco me puse a revisar el codigo...
pero me gusta el trabajo que estas llevando... felicitaciones!
Es que sois unos artistas, por suerte me baje el juego esta mañana antes de salir de casa, asi que voy a ver si lo encuentro y probar el juego, ya que me estais haciendo babear de curiosidad ;D
Gracias Splinter creeme que me pone mas las pilas para terminarlo... Free te cuento que estoy por subir la demo completa en estos dias, por lo tanto les recomiendo jueguen a esa version, ya que a la que subi ahora le faltan dialogos por ejemplo... De todas maneras gracias por el interes!
Esta muy chulo el juego, yo si encontré el cuchillo :) Pero el perro todavia no muere. Muy buenos gráficos.
Por cierto te comento un bug:
La primera vez que jugue he ido por arriba, entre los arvoles, al pasar el primer mapa se salio.
La segunda vez que jugue, fui por el camino y ya salio el texto, en este caso si paso al segundo mapa, deduzco que ha sido por no activarse el texto en la primera partida.
Quote from: FreeYourMind on September 28, 2011, 08:29:11 PM
entre los arvoles
Mis ojoooooooooooooooooooooooooooooooos xDDDDD
Gracias Free por tu aporte, la verdad tendré que revisarlo a ese bug, nunca lo había visto, pero por eso testean los juegos no? jajaja! Estoy por subir la versión demo completa, ese error lo corregiré después, tengo los ojos cuadrados ya! ;)
si, bueno, cuando estaba con el lobo, lo deje trabajo entre unas piedras o algo asi... y luego yo me fui por el camino que va para abajo y se salio el juego, yo supuse que era intencional, que ahi terminaba el demo...
Exacto, termina ahi la demo, lo que pasaba con esa versión es que faltaba agregar una pantalla más que explica lo que sucede cuando se toma ese camino...en la versión que subí ayer ahora si está todo completo...gracias por jugarlo!