Gracias por los animos Oscar, la verdad es que si.. estos juegos aunque simples en gameplay son bastante complicados en diseño..
Mira tu el diseño del proceso mouse.. y por que lo tengo bien estructurado y modularizado en papel antes.. pero manda webos XD.. tengo que hacer un montón de operaciones para no solapar las listas enlazadas de varios items..
process raton();
private
int id_; // nodo inicial al que se le hace click..
int fila;
int columna;
int celda;
int celdaAnterior;
int xx;
int yy;
int IdNewNodo;
int id2_; // cuando cambio de celda guardo aquí el ID de un posible nodo que pueda estár ocupando la nueva celda..
int buffer;
begin
id_mouse = id;
graph = map_new( 2,2,1,1,0 );
visible = false;
write(0,200,10,3,&estado);
loop
x = mouse.x;
y = mouse.y;
switch(estado)
// estado inicial..
case 0:
id_ = overlap( type nodo );
if(mouse.left)
if( id_ )
buffer = get_id(type nodo);
while(buffer)
if(buffer.graph == id_.graph)
buffer.ant = null;
buffer.sig = null;
signal(buffer, s_kill);
end
buffer = get_id(type nodo);
end
estado = 10;
else
estado = 20;
end
end
end
// es extremo o intermedio?
case 10:
if(id_.estado == EXTREMO)
// está sin linkar?
if(id_.sig == null && id_.ant == null)
estado = 30;
else
borrarListaEnlazada( id_ );
estado = 30;
end
else
estado = 40;
end
end
// esperar a que se suelte el mouse..
case 20:
if(!mouse.left)
estado = 0;
end
end
// He hecho chick en extremo..
case 30:
fila = (y - 20) / 40;
columna = (x - 20) / 40;
celda = ( fila * 9 ) + columna;
celdaAnterior = celda;
estado = 50;
end
// He hecho click en un intermedio..
case 40:
// eliminar esta lista..
borrarListaEnlazada( id_ );
estado = 20;
end
// si cambio de celda..
case 50:
fila = (y - 20) / 40;
columna = (x - 20) / 40;
celda = ( ( fila ) * 9 ) + columna;
if(!mouse.left)
estado = 0;
end
if(estado == 50)
if(celda != celdaAnterior)
id2_ = overlap(type nodo);
if(id2_)
estado = 70;
else
estado = 60;
end
end
end
end
// Crear nodo intermedio..
case 60:
IdNewNodo = nodo(-1,-1,-1);
IdNewNodo.x = 40 + (columna * 40);
IdNewNodo.y = 40 + (fila * 40);
IdNewNodo.ant = id_;
id_.sig = IdNewNodo;
celdaAnterior = celda;
id_ = IdNewNodo;
estado = 50;
end
// celda ocupada.. es extremo o intermedio?
case 70:
if(id2_.estado == EXTREMO)
// es del mismo color que el primer nodo de mi lista?
buffer = id_;
while(buffer.ant != null)
buffer = buffer.ant;
end
if(buffer.graph == id_.graph)
// es la otra punta de mi color?
if(id2_.sig == null && id2_.ant == null)
id_.sig = id2_;
id2_.ant = id_;
estado = 20;
else
// soy idiota y estoy intentando conectar el final y el inicio con la misma bola..
estado = 90;
end
else
estado = 90;
end
else
estado = 80;
end
end
// eliminar su lista..
case 80:
borrarListaEnlazada( id2_ );
estado = 60;
end
// eliminar mi lista..
case 90:
borrarListaEnlazada( id_ );
estado = 20;
end
end
screen_draw_text(0, "FILA: " + itoa(fila),3,10,10,0);
screen_draw_text(0, "COLUMNA: " + itoa(columna),3,60,10,0);
screen_draw_text(0, "CELDA: " + itoa(celda),3,130,10,0);
screen_draw_graphic(f_main, 3, X, Y, -100, 0);
frame;
end
end
Ya casi me funciona, pero me estoy volviendo tarumba XD.. menos mal que gemix tiene cosas como get_id() y collision a pixelPerfect comparando con un vector 'XY', sin eso ya nativo la locura se dispara y se vuelve demasiado compleja.. y menos mal que gemix tiene la función
SIGNAL_SET_BEHAVIOUR(id_, s_kill, s_behaviour_ignore); para protejer objetos y poder trabajar un poco mas a saco sin tanta comprobación..
La verdad es que el lenguaje está muy bien, todas estas cosas ayudan mucho a no tener que construirselas uno mismo.. realmente Gemix tiene cositas que sirven para juegos complicados, me gusta
SUGERENCIAS PARA DivGO:SIGNAL_SET_BEHAVIOUR();
COLLISION( int X, int Y, type process_type );
COLLISION( int X, int Y, int process_id );
Estas funciones le vienen muy bien a DivGO Amaka, es posible que las puedas añadir? estoy haciendo el diseño en Gemix por que el código será 99% compatible y así voy mas rápido, pero en cuanto el motor base funcione bien me gustaría escribir el código tal cual para DivGO sin tener que hacerme yo las funciones, puedes añadirlas? son realmente utiles
