ARCADE FOREVER

[Proyecto] AdvMenu+, Modificando el codigo fuente del Advmenu

« Older   Newer »
  Share  
view post Posted on 15/8/2012, 04:13     +1   -1
Avatar

NOVEL

Group:
Member
Posts:
37
Reputation:
0

Status:


dasdae y grave si no fuera que los agentes no podía jugar con estos cambios en lo que has hecho gracias por lo que hizo con el código fuente de la edad avdmenu
 
Top
view post Posted on 15/8/2012, 16:50     +1   -1
Avatar

V.I.P.

Group:
Usuarios AFFA
Posts:
526
Reputation:
+10

Status:


Hola , os dejo un video para que veais como va el tema del history.dat ;) y de la seleccion de los grupos, si si se que no sale todo, he ido a lo facil esta tarde, y he usado una copia adaptada del menu Help, mi idea era reutilizar tu lista de juegos row/grid¿?¿, pero me pondre a ello mas tarde, todo lo que me puedas ayudar te lo agradezco, como usar el listado para introducirle las lineas que tiene el history.dat de cada juego , como quitar los signos de fin de linea o linea vacia [] etc...





Te cuelgo del diff donde siempre, solo que esta guarrete , si lo quieres probar pon el history.dat en el mismo sitio que el advmenup.

http://code.google.com/p/groovyarcade/down...&q=#makechanges


Me he dado cuenta que voy muy rapido en el video, no es para engañar , solo que no me di cuenta, teneis el diff para comprobarlo.

Saludos.

Edited by ves - 15/8/2012, 18:11
 
Top
view post Posted on 15/8/2012, 20:37     +1   -1
Avatar

V.I.P.

Group:
Usuarios AFFA
Posts:
526
Reputation:
+10

Status:


Hola , pues ya los signos de fin de linea y separaciones solucionado, ya solo falta el poder desplazarse por el listado mostrado, daesdae si sabes como hacerlo de forma rapidita dimelo, y no melio .

Aaa y para terminar, cuando se pulse f11 saldra un menu como el de agregar los juegos a los grupos, pero este sera para mostrar el History.dat o el Mameinfo.dat, hay mas ficheros de este tipo??

Saludos.
 
Top
daesdae
view post Posted on 15/8/2012, 21:07     +1   -1




Hola, ves, pues parece que hoy toca videos, jejeje, estoy subiendo uno, a ver si veis cositas jejeje

Curioso, la idea que tenia para el history era la misma que la tuya, usar el algoritmo del listado y el grid (scroll).
Quizas una forma meter todo el texto en un string y separarlo por lineas (segun el tamaño de la ventana del history) en un array, de esa forma cada linea seria lo que en el listado un juego, luego solo hay que mirar que variables usa el listado y el scroll.
Ahora mismo estoy roto/matao/cansado el calor y que me he pasado toda la puñetera tarde para hacer el video y estoy pelin mosqueado porque la podia haber dedicado a implementar lo de la rotacion/vertical.
Bueno ya para mañana. A ver si termina de subir ...
 
Top
daesdae
view post Posted on 15/8/2012, 21:36     +1   -1




cositas ...



el retrovicio2.amp
SPOILER (click to view)
####################################
# Adaptacion del "Layout para MALA - Retrovicio 2º aniversario" de Lord Hiryu
#
# daesdae
######################################################

# FONDO
#########
background_image_path Retrovicio2.png
background_color 083b7e 083b7e 1

# HELP
########
help_image_path none

# START
#########
start_image_path intro-retrovicio.mng

# LISTADO
###########
list_pos_size "21 158 472 531"
list_font_path amiga4ever-pro2.ttf
list_font_size 20
list_font_color 8f8b51
list_font_select_color f0c413
list_rows 11
list_align center

# SCROLL - BARRA DE DESPLAZAMIENTO VERTICAL
###########################################
scroll_pos_size none
scroll_color

# IMAGENES DE JUEGO SELECCIONADO
##################################
win_snaps 530 264 469 308
win_color none

# MENU
########
menu_title_color 83b1cb 2789bf
menu_font_color 83b1cb 2789bf
menu_font_select_color f0c413 2789bf

# BARRAS DE INFORMACION/TEXTO
###############################

#barra info 1 - Emulador
bar_info_1 "665 55 348 22"
bar_info_1_font Arial-Bold.ttf
bar_info_1_color f8c107
bar_info_1_text "%­name%"
bar_info_1_align left

#barra info 2 - Fabricante y año
bar_info_2 "530 600 469 12"
bar_info_2_font amiga4ever-pro2.ttf
bar_info_2_color 83b1cb
bar_info_2_text "%­manufacturer%, %­year%"
bar_info_2_align center

#barra info 3 - Juego de Juegos
bar_info_3 "530 630 469 14"
bar_info_3_font amiga4ever-pro2.ttf
bar_info_3_color f8c107
bar_info_3_text "All Games: %­selected% of %­games%"
bar_info_3_align center


y mañana rotacion/layout en vertical. :woot:

A ver ese layout de la Donkey en vertical que anda por ahí ... fisch

Salu2
 
Top
view post Posted on 15/8/2012, 22:08     +1   -1
Avatar

V.I.P.

Group:
MODERADORES
Posts:
3,003
Reputation:
+10

Status:


Ohhhh que puta caña!!! Se le puede poner la intro también a cada skin.....un mundo lleno de posibilidades!!!!
 
Web Contacts  Top
daesdae
view post Posted on 16/8/2012, 07:54     +1   -1




QUOTE (Lord Hiryu @ 15/8/2012, 23:08) 
Ohhhh que puta caña!!! Se le puede poner la intro también a cada skin.....un mundo lleno de posibilidades!!!!

https://arcadeforever.forumfree.it/?t=54665004 fisch jeje, ya sé, no hace falta que digas nada, tiempo ... tiempo

bueno pues eso, video en formato mng antes de cada emulador y lo de la imagen/video de ayuda tambien. Posiblemente haya sido lo mas facil de implementar de lo que llevo con esto. Tan solo una llamadita a una funcion int_clip pasandole la ruta al video y poco mas :woot: güay, pero a mi me va el latigo y he mirado que hacia el int_clip y en ná tendremos animaciones, el caso es si esas animaciones tendran soporte para transparencias o no, creo que en video ni de coña, aunque por el codigo siempre que pinta algo me tropiezo con cosas jugando constantemente con el canal alpha de los png, colores y demas, a si que me agarro a esa esperanza.

Mas, ahhhhh, que convertir cualquier tipo de video (avi, wmv, ...) en mng que lee el advmenu y advmame lo tengo controlado, ufff, que paliza el otro dia prueba que te prueba y lee que te lee...
Me falta mirar como se crean desde cero con el gimp (fotograma a fotograma) para meterle transparencias y tal a ver si hay suerte...
Bueno, todo esto lo contaré mas tarde, ahora voy a por VES jejeje

----------------------------------
VESSSSSSSSSS, diff descagado pero ni porbado ni visto el codigo,... :unsure:

Coñe, lo de la confirmacion de los grupos se ve chulo, a la saca. Y buen primer intento con el history por algun lado hay que empezar y ya que esta por ahi el run_help(...) pues se le hace un apaño para probar.
Te cuento un poco para que vayas dandole al tema ...

HISTORY
=======

Dos funciones principales, draw_history_scroll(...) que pinta el scroll/grid en una posicion y con un tamaño y tres argumentos para el "cuadradito que se desplaza"
pos -> posicion del cuadradito, empieza con pos = 0 luego 1, 2 ....
delta -> creo que son el numero de lineas por pagina, siempre constante
max -> numero total de lineas, tambien siempre constante
Vamos que cada vez que cambies de linea o de pagina hay que llamar a esta funcion con la nueva posicion

CODE
// pinta el grid/scroll
void draw_history_scroll(int x, int y, int dx, int dy, int pos, int delta, int max)
{
       if (max <= 1)
               return;

       if (pos >= max)
               pos = max - 1;
       if (pos + delta > max)
               delta = max - pos;

       int y0 = pos * (dy-dx-1) / (max-1);
       int y1 = dx + (pos+delta-1) * (dy-dx-1) / (max-1);

       int_clear_alpha(x, y, dx, dy, COLOR_MENU_GRID.background);
       int_clear_alpha(x, y+y0, dx, y1-y0+1, COLOR_MENU_GRID.foreground);
}


y draw_history_line(...) que pinta una linea en la posicion que le indiques
selected es un booleano que indica si la linea a pintar es la seleccionada o no
Pues a esta hay que llamarla cada vez que quieres pintar una linea

CODE
//pinta una linea
void draw_history_line(const string& slinea, int x, int y, int dx, bool selected)
{
       string s = slinea;
       bool in = false;
       
       int ident = int_font_dx_get()/4; //margen izquierdo
       if (ident < 2) ident = 2;

       int_color color = selected ? COLOR_MENU_SELECT : COLOR_MENU_NORMAL;
       int_color color_first = selected ? COLOR_MENU_TAG_SELECT : COLOR_MENU_TAG;
       int_color color_in = selected ? COLOR_MENU_HIDDEN_SELECT : COLOR_MENU_HIDDEN;
       
       int_clear_alpha(x, y, ident, int_font_dy_get(), color.background);
       int_put_special_alpha(in, x + ident, y, dx - ident, s, color_first, color_in, color);
}


copypastea

Bueno, te cuento, el listado no es mas que un algoritmo que va pintando juego por juego aumentando la posicion en la coordenada y ...
Parto de que estamos en el run_history(...). pues a pintar

Por paginas:

tendras que crear unas cuantas variables y currarte el bucle para pintar linea a linea la primera pagina,
tras esto pintar el scroll con pas = 0, una vez pintado, aumentarle en uno para que la proxima vez pinte el cuadradito
una posicion mas abajo.
vale, ya tenemos la primera pagina, pues ahora habra que llamar alguna funcion que nos controle los eventos del teclado
del tipo key = even_tralala(...), por el codigo hay muchos, mira alguno de como funciona para el menu o el grupo...
luego vendra el swich(key) con los casos para segun la tecla que se ha pulsado haga una u otra cosa,
que se ha pulsado flecha-abajo pues incrementar, por ejemplo, una variable en la que guardas la posicion de la linea seleccionada y lo que tenga que hacer, y vuelve a pintar la nueva pagina.
Porque claro todo esto tendrá que estar dendro de otro bucle, por ejemplo un do, un while ... :wacko: jejeje, jejeje, jejeje

La cosa podria ir asín, mas o menos a grandisimos rasgos

CODE
void draw_history(...) {

int pos_select = 0;
int salto_linea = ...
int lineas_totales, lineas_por_pagina
pos = 0;
delta = creo que es lineas_por_pagina
max = lineas_totales
string texto_linea = "";

do {

       for(linea_0 -> ultima_linea_pagina) {
               texto_linea = recoger de alguna forma
               draw_linea(pos_size, texto_linea, selected)
               y += salto_linea
               i++
       }
       draw_scroll(pos_size, pos, delta, max)
       pos++

       
       key = run_event_...(...)
       swich(key)
       case .........
       
}while(pos_select = lineas_totales)
       
}

juasssssss, ...... , jejeje, la parte de los eventos no se si iria ahí, si el do esta bien hecho o lo que sea, pero vamos, esa es la idea.

Ves, las primeras funciones que hay en el menu.cc van sobre todo esto de pintar el scroll y el listado, ademas hay varios de manejo de strings y tal... poco a poco, sin estrés... a currarse el algoritmo que eso es muy de pascual ;)


Ale, a pasar la mañana con mi sobrinita. A ver como me cuida hoy, que la ultima vez no me dejó ganarla a nada <_<

Salu2
 
Top
view post Posted on 16/8/2012, 09:39     +1   -1
Avatar

V.I.P.

Group:
Usuarios AFFA
Posts:
526
Reputation:
+10

Status:


Gracias , cuando puedo me pongo a mirarlo, esta genial las implementaciones de videos etc.. que le estas haciendo a los skin :D .

Os dejo diff y video , de la implementacion del menu History.dat y Mameinfo.dat , ahora sale un menu para elegir cual quereis ver, eso si recordar que el mameinfo.dat solo funciona con las roms originales y no con los clones, ya que en el dat, solo estan catalogadas las roms parent.

http://code.google.com/p/groovyarcade/down...&q=#makechanges




Os parece bien el menu para ver el history/mameinfo o mejor dejar solo una tecla para que salga directo el history o mameinfo??


Saludos.


 
Top
Rockman
view post Posted on 16/8/2012, 13:12     +1   -1




Para Daesdae:

¿La implementación de rotación/layouts que tienes pensado hacer, implica tener activadas este tipo de opciones del advancemenu original?:

5.2.5 display_orientation
Selects the desired orientation of the screen.

display_orientation (flip_xy | mirror_x | mirror_y)*

Options:
mirror_x Mirror in the horizontal direction.
mirror_y Mirror in the vertical direction.
flip_xy Swap the x and y axes.

¿Me refiero que si los layouts se adaptaran según tengas activadas alguna combinación de estas opciones?

En mi caso concreto, para que la imagen vertical me salga en el sentido correcto, tengo esta opción activada en advmenup:
display_orientation flip_xy mirror y

Pero claro quiza otra gente solo tiene el flip_xy puesto, por lo que los layouts deberían adaptarse a estas opciones. Y en caso que no se quieran los layouts, se pueda salir al listado vertical normal de advmenup.
Para mi sería la opción mas "profesional", lo que desconozco si conlleva demasiado trabajo.
Tan solo doy mi humilde opinión, ya vosotros haceis lo que creais correcto. Faltaría más. :)

Para Ves:
Para la implemetación del mameinfo, podrías dejar las dos opciones. Hacerlo a traves de menú como se ve en el video, o asignar un evento para que se pueda también desde una tecla directamente. Así tendrás a todo el mundo contento.
Por cierto el tema del filtrado de los juegos verticales desde advmenu ya lo teneis implementado con estas versiones que vais trabajando verdad? En la versión que va incluida en GroovyArcade aun no filtra bien el listado de verticales. Si seleccionas verticales, no sale ni uno en la lista. Pero leyendo este "extenso" hilo, me parecio leer, que ya tenias controlado el tema del actual mame.xml.
PD: Ves cuando puedas pásate por el foro "oficial" de GA. ;) Gracias.

Saludos.
 
Top
view post Posted on 17/8/2012, 08:44     +1   -1
Avatar

V.I.P.

Group:
Usuarios AFFA
Posts:
526
Reputation:
+10

Status:


Hola Rockman, efectivamente no esta implementado todos estos parches en GroovyArcade, ya llegara para la siguiente version, ahora despues me paso por el post de GroovyArcade.

Otra cosita que he implementado ,pero no se si os gustara, sobre todo a ti daesdae , ya que es tu creacion, es implementar que muestre siempre en que grupo esta el juego seleccionado, sabemos que si el juego esta en algun grupo como Favoritos etc.. se muestra arriba a la derecha, pero si no esta en ningun grupo como undefined/All Game no muestra nada, lo he modificado para que si no esta en ningun grupo siempre Muestre All Games, que te parece?

Y ahora a ver lo que me comentastes ayer, lo que es la recogida de datos lineas etc de los dat ya estan implementado en el diff o advmenu que tengo solo tendria que hacer el listado, a ver si me aclaro y sino te pido ayuda.

Para terminar cuando revises el codigo quiero que me digas todo lo que esta mal o si se podria hacer de una forma mejor, asi aprendo mucho mas, vale?

Saludos.
 
Top
daesdae
view post Posted on 17/8/2012, 10:31     +1   -1




Rockman, que tal?, madre mia, que gustazo leerte, te expresas muy bien además comentas, preguntas y sugieres.... oleeee
Muchisimas gracias, de verdad que es un placer leer sin tener que estar descifrando. A ver si por mi parte voy aprendiendo ...

"display_orientation flip_xy mirror y" pues Sí, y cualquier otra covinacion con mirror_x ...
pero cuando me ponga a ello, ayer me tomé el día libre para jugar con el Gimp, y hoy ... hoy jejeje

HOY, LISTADO A LO MALA (variables para espacion entre lineas ..., inclinacion ...) hasta donde llege

QUOTE (ves @ 17/8/2012, 09:44) 
Otra cosita que he implementado ,pero no se si os gustara, sobre todo a ti daesdae , ya que es tu creacion, es implementar que muestre siempre en que grupo esta el juego seleccionado, sabemos que si el juego esta en algun grupo como Favoritos etc.. se muestra arriba a la derecha, pero si no esta en ningun grupo como undefined/All Game no muestra nada, lo he modificado para que si no esta en ningun grupo siempre Muestre All Games, que te parece?

Perfecto, Ves, en nada y menos iba a modificar lo de los tags de las barras info para añadir a que grupo y typo pertenece el juego seleccionado y mirar que otros datos se pueden sacar del xml para poner mas tags, así como modificar el description que muestra el nombre del emulador / nombre de la rom (separarlo en dos)
Asique, cojonudisisisisimo. Otro ole pa'ti (voy a tener que sacar un scores con los oles que os voy dando, jejeje)

QUOTE
Y ahora a ver lo que me comentastes ayer, lo que es la recogida de datos lineas etc de los dat ya estan implementado en el diff o advmenu que tengo solo tendria que hacer el listado, a ver si me aclaro y sino te pido ayuda.

Oer, pues ya casi lo tienes macho, a mi me parece mas jodido el pillar las lineas que el bucle para pintarlas, bueno la parte de la espera a que pulses una tecla (event_wait(true o false) o algo así) supongo que dé algun problema, no lo he mirado muy bien.

Pero nada, sin prisas que aun queda minimo una semanita ¿OK?

QUOTE
Para terminar cuando revises el codigo quiero que me digas todo lo que esta mal o si se podria hacer de una forma mejor, asi aprendo mucho mas, vale?

Pues eso, tengo previsto acabar mis cosas, revisarlas y probar todo lo que lleves hecho hasta entonces, por lo que, en principio el proximo finde.
Si funciona es que está de puta madre, nennn jejeje
Pero estoy abierto a sugerencias. ¿OK?

-----------------------------------------------------------------------
Y ahora, lo mio:

Pues resulta que ayer con todo el tema del history de Ves en la cabeza y lo de pintar el listado, me ha picado el gusanillo y aunque tenia previsto currarme hoy lo del vertical, lo dejo para mas tarde y le voy a dar caña guapa al listado.
Esto lo tenia previsto para la siguiente de la siguiente version :lol: que tengo planeado hasta ... pero me he dicho, coñe el unico interes que tengo en esto de toquetear el codigo es pasarmelo bien, por lo tanto al lio. (ya sé, mi concepto de diversion es pelin extraño, jejeje)

Ves, ojo que pretendo ir programando y poniendo por aquí lo que voy haciendo, en realidad es una chorrada (eso espero).
Tengo todo el dia para mi y ni un puto duro, tengo cafe, donetes, 12 cervezas enfiando y muchisimas ganas, ahhh y la discografia completa de Pink Floyd, ole for my!!!!.
A ver lo que sale...

Me dá que voy a pasar mas tiempo por aquí posteando que programando, bueno, no hay prisas.

Listado a lo MALA - Capitulo 00 - La Intro:
Fácil de explicar este apartado, implementar que se pinte donde se le dice (aunque parece que ya lo hace, no es así, lo cuento luego), espacio entre lineas, transformaciones (inclinacion, ...) lo que me de tiempo y el cerebro ;)

continuará...
 
Top
view post Posted on 17/8/2012, 11:30     +1   -1
Avatar

V.I.P.

Group:
Usuarios AFFA
Posts:
526
Reputation:
+10

Status:


Hola, daesdae , espero prontito tu diff eeee, oye pensabas que no estaba implementada la rutina para optener el listado del history o maminfo????¿?¿?¿ no era una imagen, si te fijas bien en el video veras que iras pasando por cada juego viendo su history y mameinfo, eso ha sido lo mas facil, ya que use la rutina de help para quitar todo el menu y añadir el texto , esta mañana estoy mirando como hacer el listado y de momento no me aclaro nada nada nada joer que complicado es esto, luego intentare seguir , cualquier sugerencia/ayuda es buena eeee jejeej

Si quieres te modifico o creo una nueva función para sacar solo el emu ya que estuve mirando las todas para el all game y se ande para.


Te dejo el programa que hice primero en c++ para despues implementarlo en advmenu, lo compilas y su funcionamiento es el siguiente, ./programa history.dat o mame.info mas ROM a mostrar, osease asi

./a.out history.dat toki o ./a.out mameinfo.dat toki (se que no hace falte que te lo explique pero si alguien lo quiere probar ya sabe como.

Codigo.

SPOILER (click to view)
QUOTE
#include <iostream>
#include <fstream>
#include <string>
using namespace std;


int main (int argc , char *argv[]) {

string line;

ifstream myfile (argv[1]);//("history.dat");
string inicio = "$info=";
string fin = "$end";
string web = "http://www.arcade-history.com";
string temporal ="";
string etiqueta = argv[1];

//asignamos comodines para coincidencia etc..
string busca = argv[2];

if(etiqueta == "mameinfo.dat"){
temporal = "="+busca;//+",";
}else
temporal = "="+busca+",";

busca = temporal;
string busca2 = argv[2];
temporal = ","+busca2+",";
busca2 = temporal;


//abrir fichero optener line comparar imprimir etc..

if (myfile.is_open())
{
while ( myfile.good() )
{

getline (myfile,line);
string whitespaces (" \t\f\v\n\r\0"); //(" \t\f\v\n\r");
size_t found;
found=line.find_last_not_of(whitespaces);
if (found!=string::npos)
line.erase(found+1);
else
line.clear();

if (line.find(inicio) != string::npos)
if(line.find(busca) != string::npos || line.find(busca2) != string::npos)

{
if(line.find(inicio) == string::npos)

cout << line << endl;


while (line.find(fin) == string::npos )
{
//cout << line << endl;

getline (myfile,line);

string whitespaces (" \t\f\v\n\r\0"); //(" \t\f\v\n\r");
size_t found;
found=line.find_last_not_of(whitespaces);
if (found!=string::npos)
line.erase(found+1);
else
line.clear();

if(line.find(web) == string::npos)
if(line.find("$bio") == string::npos)
if(line.find(fin) == string::npos)
if(line.find("$mame") == string::npos)

//- TECHNICAL - - TRIVIA - - SOURCE - - TIPS AND TRICKS - - STAFF - - SCORING -
//- PORTS - PARA CAMBIAR LOS COLORES

cout << line << endl;



}
myfile.close();
break;
}
}

myfile.close();
}

else cout << "Unable to open file";

}


Edited by ves - 17/8/2012, 13:16
 
Top
daesdae
view post Posted on 17/8/2012, 12:54     +1   -1




Ufff, Ves ahora estoy con el listado, a ver si esto te ayuda, aunque lo primero que voy a contar no te hace mucha falta.

Listado a lo MALA - Capitulo 01:
- ¿Actualmente pinta el listado donde le indicamos?, pues si y no.

Lo primero de todo, explicar como va esto de pintar el listado:

Pues no es mas que un bucle que va cogiendo el nombre de los juegos y los pinta en las coordenadas que le decimos.
Pero antes de este bucle pinta tal en tal, calcula todas las posiciones de las lineas (nombres de los juegos), de la siguiente forma.

0.- Saco a una función el bucle for que calcula la pos_size ya que estaba ahí mal metido entre todo el código y siempre que se pueda todo debe ir en funciones.
Como para poner nombres soy como soy a esta función la llamo "calculo_listado(...)" y queda así:
CODE
void calculo_listado_0(struct cell_t* int_map, int rown, int list_x, int list_y, int list_dx, int list_dy, int name_dy)
{
       int cell_x = list_x;
       int cell_y = list_y;
       int cell_dx = list_dx;
       int cell_dy = list_dy / rown;
       
       for(int r=0;r<rown;++r) {
               
               int_map[r].x = cell_x;
               int_map[r].y = cell_y + (cell_dy - name_dy) / 2; //posicion del texto
               int_map[r].dx = cell_dx;
               int_map[r].dy = name_dy;

               cell_y += cell_dy;
       }

}
donde:
imp_map es una "colección" de las pos_size de las lineas
rown -> numero de juegos a mostrar
list_x, list_y, list_dx, list_dy -> son la pos_size del listado
name_dy -> es el tamaño de la fuente en 'y' (altura)

OK, ya tenemos la función fuera de la de pinta esto , ahora lo otro y luego lo de mas ayá...

Crear la colección de pos_size de todas las lineas/juegos a mostrar:

1.- creamos una estructura que guarda la posición y tamaño de una linea, llamada cell_t (esta ya bien hecha, la culpa del nombre no es mía ;) )
CODE
struct cell_t {
       int x;
       int y;
       int dx;
       int dy;
};


2.- ahora en la función de pinta esto y lo otro ... creamos la "colección" de pos_size de las lineas/juegos
CODE
struct cell_t* int_map = new cell_t[rown];

y la llamada a la función de nuestro algoritmo que rellenará int_map con las pos_size de cada linea:
CODE
calculo_listado_0(int_map, 9, 100, 100, 400, 500, 24);


para acceder a los datos de int_map, por ejemplo la coordenada 'y' del nombre del tercer juego del listado, sería:
CODE
int_map[2].y


¿como va la cosa? Ves, aun quieres que cuente cositas, jejeje. ufff, si como me temía, paso mas tiempo escribiendo que programando, ainsss.
No os atragantéis y perdonadme, please.

Y todo esto, para nada, porque estamos en las mismas, lo único que he hecho es sacar el algoritmo de calculo a una función. :woot: todo sigue funcionando igual que antes.
Pero ahora los cambios serán mucho mas fáciles ...

jejeje, me parto de mi mismo.

Bueno, retomo la pregunta del principio:
- ¿Actualmente pinta el listado donde le indicamos?, pues si y no.
Para pintar el listado le pasamos su posición, tamaño y numero de juegos a mostrar, y con esto el automáticamente calcula el espacio entre lineas y los centra en el listado.
Conclusión: muy bonito pero el primer juego no le pinta en las coordenadas x e y del listado, esto es una jodienda a la hora de crear el layout si se pretende que los nombres de los juegos aparezcan en una posición determinada.
Por lo que creamos y le pasamos una nueva variable, que mas tarde cojera de alguna forma del archivo de configuración de layouts, space_y que es la "Line distance" en el MALA.
Pues con esto la función calculo_listado(tralala queda así de simple:
CODE
void calculo_listado_2(struct cell_t* int_map, int rown, int list_x, int list_y, int list_dx, int list_dy, int name_dy, int space_y)
{
       int cell_x = list_x;
       int cell_y = list_y;
       int cell_dx = list_dx;
       int cell_dy = name_dy;

       
       for(int r=0;r<rown;++r) {
               int_map[r].x = cell_x;
               int_map[r].y = cell_y;
               int_map[r].dx = cell_dx;
               int_map[r].dy = name_dy;

               cell_y += cell_dy + space_y;
       }
}
y la llamada:
calculo_listado_0(int_map, 9, 100, 100, 400, 500, 24, 20);


Ahora sí, ahora ya podemos escoger donde exactamente queremos los nombres, piruleta pal'neneeeeeee

--------------------- aFoto comparativa antes-despues y con el Mala -------------------

Bueno, el Mala tiene muchos mas parámetros básicos como "Line height" que en nuestro caso seria el alto de la linea (dy de cell_t), pero eso lo calculo automáticamente mas tarde, lo único que habría que hacer es decirle a int_map[r].dy = alto_de_la_linea, pero paso de momento...

A por lo mas chulo: Listado a lo MALA - Capitulo 01: Transformaciones: Inclinación/diagonal[/color]
que ya tengo prácticamente hecho pero me voy a por una cervecita ...

continuará... hasta que pete el servidor o me echen del foro a patadas, jejeje
Ufff, y pensar que esto que he hecho es una tontuna
Si me pusiese a escribir las movidas de los colores con su transparencia, y ... amos-amos.


Edited by daesdae - 8/9/2012, 14:04
 
Top
daesdae
view post Posted on 17/8/2012, 14:02     +1   -1




Listado a lo MALA - Capitulo 02: Transformaciones - Inclinacion/diagonal

Esto consiste en ir moviendo una determinada cantidad cada juego, por ejemplo, para diagonal = 10, el segundo juego aparece 10pixels mas a la derecha que el primero y así de simple, por lo que a nuestra funciones le debemos pasar esa nueva variable,

¡¡¡Bueeeeeeeeeeeno, pario la abuela!!! una mas, dice!!!!

CODE
calculo_listado_3(int_map, 9, 100, 100, 400, 500, 32, 20, 10);

void calculo_listado_3(struct cell_t* int_map, int rown, int list_x, int list_y, int list_dx, int list_dy, int name_dy, int space_y, int diagonal)
{
       int cell_x = list_x;
       int cell_y = list_y;
       int cell_dx = list_dx;
       int cell_dy = name_dy;
       
       for(int r=0;r<rown;++r) {
               int_map[r].x = cell_x + diagonal * r;
               int_map[r].y = cell_y;
               int_map[r].dx = cell_dx;
               int_map[r].dy = name_dy;

               cell_y += cell_dy + space_y;
       }
}

Para diagonal = 0 le muetra normal, > 0 inclinado pa' un lado y < 0 pa'l otro :lol:

Pero que pasa, pues que si mueves las lineas a la derecha o la izquierda se salen del area del listado.
El Mala lo que hace es recortar la anchura de la linea la cantidad (diagonal * (rown - 1)), con esto:

CODE
calculo_listado_4(int_map, 9, win_x, win_y, win_dx, win_dy, name_dy, 20, -10);

void calculo_listado_4(struct cell_t* int_map, int rown, int list_x, int list_y, int list_dx, int list_dy, int name_dy, int space_y, int diagonal)
{
       //posicion y tamaño inicial de la linea
       int cell_x = list_x;
       int cell_y = list_y;
       int cell_dx = list_dx;
       int cell_dy = name_dy;

       // espacio que va a recortar del largo de la celda/linea
       int space_diagonal_x = abs(diagonal * (rown - 1));
       // si diagonal es negativo la posicion en x de la primera linea debe estar mas a la derecha
       if(diagonal < 0) cell_x = cell_x + space_diagonal_x;
                       
       for(int r=0;r<rown;++r) {
               int_map[r].x = cell_x + diagonal * r;
               int_map[r].y = cell_y;
               int_map[r].dx = cell_dx - space_diagonal_x;
               int_map[r].dy = name_dy;

               cell_y += cell_dy + space_y;
       }
}


Ale, facil y para toda la family, ya podemos poner los nombres de los juegos del listado en unas coordenadas determinadas y si nos rota ponerle inclinado al estilo Mala.

-------------------- aFoto comparativa ------------------

Bueno, pues ahora vendría el ponerlos formando una curva, pero paso a decirle al listado que lo que quiero es un listado de varias columnas (esto es del advmenu, creo que el Mala no lo tiene), lo cual permitiria, por ejemplo si le pasasemos "rown=1" y "coln=3" un listado en HORIZONTAL, oooooooole ¿tiene el mala eso, ehhh, lo tiene, lo tiene? jejeje

continuara... depues de papear, quizas la siesta, pero continuará... y no es una amenaza :shifty:

Edited by daesdae - 8/9/2012, 14:05
 
Top
daesdae
view post Posted on 17/8/2012, 20:18     +1   -1




Ufff, pedazo siestón me he echado y es que tres cervezas carrefurer congeladas es lo que tiene. :huh:

Listado no tanto a lo MALA - Capitulo 03: Varias columnas y filas (listado en horizontal):

Pues dos nuevos argumentos coln (numero de columnas) y space_x (espacio entre columnas)

CODE
calculo_listado_5(int_map, 2, 9, 100, 100, 400, 500, 32, 4, 20, 0);

void calculo_listado_5(struct cell_t* int_map, int coln, int rown, int list_x, int list_y, int list_dx, int list_dy, int name_dy, int space_x, int space_y, int diagonal)
{
       int cell_x = list_x;
       int cell_y = list_y;
       int cell_dx = (list_dx - space_x) / coln;
       int cell_dy = name_dy;

       // espacio que va a restar del largo de la celda
       int space_diagonal_x = abs(diagonal * (rown - 1));
       // si diagonal es negativo la posicion en x de la primera linea debe estar mas a la derecha
       if(diagonal < 0) cell_x = cell_x + space_diagonal_x;
       
       for(int r=0;r<rown;++r) {
               for(int c=0;c<coln;++c) {
                       unsigned i = r * coln + c;
                       int_map[i].x = cell_x + diagonal * r + (cell_dx + space_x) * c;
                       int_map[i].y = cell_y;
                       int_map[i].dx = cell_dx - space_diagonal_x;
                       int_map[i].dy = name_dy;
               }
               cell_y += cell_dy + space_y;
       }
}


La inclinación también funciona, no le veo la practica pero ahí está.
Quizás lo mejor de todo esto es que si le pasamos coln=3 y rown=1 tenemos el listado en horizontal y con la flecha derecha (->) y flecha izquierda (<-) nos movemos por ellos. :woot:

------------- aFotos, aFotos --------------------------------------------

Y con esto, paso a tratar de parar el juego seleccionado, osea decirle que linea va a ser la seleccionada y no se mueva de ahí.
Esto me temo que me va a llevar bastante mas tiempo, no tiene nada que ver con el algoritmo que he hecho y ufff veo que hace una liada con posición_relativa, posición_base, ... bueno al lío que aun me quedan cervezas y ganas.

Bueno, mejor paso a poner las aFotos y luego me lío con "frenar el seleccionado"

continuará...

Edited by daesdae - 8/9/2012, 14:05
 
Top
647 replies since 8/9/2009, 21:56   30307 views
  Share