Hola a todos, quisiera recrear la técnica de clonar un proceso y ponerlo desplazado para adelantar las colisiones producidas en esa posición desplazada y resulta que con collision(0) (devuelve el id de cualquier tipo de proceso con el que colisione) necesito saber el tipo de proceso con el que he colisionado.
Eh mi caso:
Begin
	set_mode(256,165,32);
	set_fps(25,0);
	person(50,50);
	ceiling(50,20);
	Ground(50,80);
    while (!key(_esc)) 
		frame;
	end
	let_me_alone();
End
process person (x,y)
public
   int id_collision;
begin
    graph = new_map(20,20,32);
    map_clear(0,graph,RGB(255,0,0));
    mirror(x,y,0,-4);
    write_var(0,100,50,0,id_collision);
    while (!key(_esc))
        if (key(_up) and (id_collision == 0) ) y--;end        
        if (key(_down)) y++;end        
        if (key(_left)) x--;end        
        if (key(_right)) x++;end        
        Frame;
	end
	unload_map(0,graph);
end
process  Ceiling(x,y)
begin
    graph = new_map(20,20,32);
    map_clear(0,graph,RGB(255,255,0));
    while (!key(_esc))
        Frame;
	end
	unload_map(0,graph);
end
process  Ground(x,y)
begin
    graph = new_map(20,20,32);
    map_clear(0,graph,RGB(0,0,255));
    while (!key(_esc))
        Frame;
	end
	unload_map(0,graph);
end
process mirror (x,y,desp_x,desp_y)
private
    person id_father;
    int id_collision;
begin
    alpha = 150;
    id_father = father;
    while (!key(_esc))
        graph = id_father.graph;
        x = id_father.x+desp_x;
        y = id_father.y+desp_y;
        id_collision = collision(0);
        while (id_collision)
            id_collision = collision(0);
            if (id_collision != id_father)
                id_father.id_collision = id_collision;
            end
            id_collision = collision(0);
        end
        Frame;
	end
end
Ahora no se distinguir entre el proceso ceiling y el proceso ground. Así que si chocamos con el cuadrado azul ya no nos deja subir con la flecha hacia arriba. Y solo quiero que pase contra el cuardado amarillo.
En la línea del proceso person
        if (key(_up) and (id_collision == 0) ) y--;end        
necesitaría poner algo como 
        if (key(_up) and (get_type(id_collision) != ceiling) ) y--;end        
Sabeis como se puede obtener el tipo de un proceso o que otra alternativa hay?
Gracias de antemano.
			
			
			
				LOCAL
   int proc_type;
#define _PROC_AAA    1
#define _PROC_BBB    2
process AAA
begin
   proc_type = _PROC_AAA;
end
process BBB
begin
   proc_type = _PROC_BBB;
end
...
pcol = colision(....);
... exists(pcol) ...
...
if ... pcol.proc_type ...
			
			
			
				Gracias :D, 
estaba pensando en hacer eso mismo que casualidad.
Pero ¿no existe algo como lo que hace la función collision? cuando le pasas como parámetro type proceso1.
			
			
			
				No existe
			
			
			
				en teoria, en vez de usar los defines, podes hacer
proc_type = type AAA;
proc_type = type BBB;
type XXX, devuelve un valor numerico que identifica el tipo de proceso, pero no hay ningun valor en las variables del proceso que almacenen eso, y tampoco una funcion que lo devuelva... creo que estos valores se mantienen y se corresponden en el compilador como en el interprete, deberia revisar, de ser asi, seria interesante una funcion que devuelva ese valor numerico y que pueda ser comparado con un "type XXX"
Voy a anotarlo, para ver si es posible hacerlo...