[TOOL] FPGedit2013

Proyectos Completados.
Post Reply
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Re: [TOOL] FPGedit2013

Post by erkosone »

En unos minutos disponible para ver, creo que está estupendo, queda un poco feo que lo diga el autor pero vaya.. de verdad que me gusta como está quedando.



En cuanto pula un poco mas esta sección y vea como leches añadir el borrado de puntos de control empezaré con la nueva sección para.. bueno.. esto ya lo veréis cuando descarguéis el programa jeje.. no va a tener desperdicio, asegurado ;)
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Re: [TOOL] FPGedit2013

Post by erkosone »

Nueva ventanita para selección del formato de imagen al exportar mapas del FPG con el que se está trabajando..
You do not have the required permissions to view the files attached to this post.
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Re: [TOOL] FPGedit2013

Post by erkosone »

Bueno.. esto ya está terminado :D
He tenido dificultades para organizarlo todo de forma modular y no cometer el error de ofuscar el código con chapuzas.. y finalmente creo que lo he dejado lo suficientemente bien como para publicarlo.

En breve estará disponible, voy a realizar algunas operaciones de cosmetica al programa y listos.
User avatar
Dluk
Posts: 2423
Joined: Sun Jan 04, 2009 3:51 pm
Location: En el campo de batalla
Contact:

Re: [TOOL] FPGedit2013

Post by Dluk »

erkosone wrote:Bueno.. esto ya está terminado :D
He tenido dificultades para organizarlo todo de forma modular y no cometer el error de ofuscar el código con chapuzas.. y finalmente creo que lo he dejado lo suficientemente bien como para publicarlo.

En breve estará disponible, voy a realizar algunas operaciones de cosmetica al programa y listos.
¡Felicitaiyons! Al menos acá tenés un usuario esperando :D
Image
"El destino es como un juego... ¿No? Y ahora, esperas mi último movimiento"

Kain - Legacy of Kain: Soul Reaver
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Re: [TOOL] FPGedit2013

Post by erkosone »

Ya queda poco, ahora tendría que documentar su uso pero vaya.. es muy intuitivo y como todo va por eventos se puede seguir el source code de una forma muy sencilla, por poner un ejemplo para que se vea lo modularizado que está todo, esto es el código del proceso que hace de Explorador del archivo FPG :D


[Codebox=gemix file=Untitled.gemix]process FPG_explorer();
private
int container_;
int i;
int offset_x;
int offset_y;
int numMaps_;
string pwd_status = "YES";
string cmp_status = "YES";
int WAIT_FOR_SELECT_FILE_TO_LOAD = FALSE; // cuando se abre el OPEN_FILE de la egui esto se pone a true.. hasta que se cierra el OEPN_FILE.. cuando se cierre hay que cargar el archivo que indique la variable de ruta de la egui..
int counter_; // este contador se usa en el momento de cargar un FPG.. para contar las miniaturas que se crean en función de los mapas que contenga el FPG que se ha cargado..
int id_;
string str_ = ""; // usado en el parser de directorio y nombre de arhcivo en el momento de cargar un archivo desde disco..
int str_tokens_;
int str_len_;
string fileName_to_export_;
begin
id_fpg_explorer = ID;
graph = gui_new_form( 800, 300 );
gui_window_Set_position( 0,301 );
gui_set_title( "FPG Explorer", fnt_system_, -4 );


gui_new_menu( 30,32,"FPG", "NEW FPG*LOAD FPG*SAVE FPG*SAVE FPG AS*CLOSE FPG", "*" );
gui_new_menu( 90,32,"CONFIGURATION", "SET PWD PROTECTION*UNSET PWD PROTECTION*CHANGE PASSWORD..*SET COMPRESSION*UNSET COMRESSION*CHANGE ADD OFFSET..*SELECT EXPORT FORMAT..", "*" );
gui_new_menu( 150,32,"FILE", "SELECT ALL*UNSELECT ALL*DELETE SELECTED*EXPORT SELECTED", "*" );

gui_button( 540, 32, -1, 14, "ANIMATION", "open_Animation_", FNT_magenta );
gui_button( 610, 32, -1, 14, "C_POINT", "open_cpoint_", fnt_dark_green );

// marco superior donde muestro algunos datos..
gui_draw_form( 200,25,300,12,1 );
gui_write_label( fnt_dark_red, 220,32,3,"COMPRESSION [ ] PWD PROTECTION [ ]" );

// mini recuadro donde mostaré el número de SLOT actual para seguir añadiendo gráficos al fpg..
gui_draw_form( 740,25,45,12,1 );
gui_write_label( fnt_dark_red, 750, 32, 3, "#" );

gui_draw_form( 10,40,775,240,0 ); // region donde se muestran las miniaturas..
define_Region( 3, x+10, y+40, 775, 240); // redefinición de la region para mostrar las miniaturas..

loop
if(onDrag)
offset_x = x+10;
offset_y = y+40;
define_region( 3, offset_x, offset_y, 775, 240 ); // redefinición de la region para mostrar los mapas..
end

if(eventListener != null)
//..................................................................................
// reescanear el número de mapas que contiene el FPG..
// este evento lo lanzan los procesos FILE_ITEM_ cuando añaden su miniatura al fpg..
if(eventListener == "update_numMaps_")
numMaps_ = FPG_GET_NUMMAPS(fpg_works.id_);
end
//..................................................................................
// gestión del menu FPG..
if( gui_menu_event_from( "FPG" ) );
i = gui_menu_get_option( "FPG" );
switch(i)
case 1:
// NEW FPG.. una vez seleccionado el nuevo archivo este proceso recibirá el evento "new_fpg_has_created_"..
if(!WINDOW_FPG_NEW_)
FPG_explorer_SUB_new_fpg();
end
end
case 2:
// LOAD FPG..
if(!WINDOW_OPEN_FILE)
OPEN_FILE(200, 150, "fpg", father);
WAIT_FOR_SELECT_FILE_TO_LOAD = true;
end
end
case 3:
// SAVE FPG..
if(fpg_works.id_ != -1)
fpg_save( fpg_works.id_, FPG_WORKS.fullpath + fpg_works.name );
end
end
case 4:
// SAVE FPG AS..
if(!WINDOW_FPG_SAVE_AS_)
if(fpg_works.id_ != -1)
FPG_explorer_SUB_save_fpg_as();
end
end
end
case 5:
// CLOSE FPG..
gui_draw_form( 10,40,775,240,0 );
signal( type FPG_MAP_ITEM_, s_kill );
clear_fpg_data();
end
end
end
//..................................................................................
// gestión del menu CONFIGURATION
if( gui_menu_event_from( "CONFIGURATION" ) );
i = gui_menu_get_option( "CONFIGURATION" );
switch(i)
case 1:
// set password protection..
fpg_works.password = fpg_password_;
end
case 2:
// delete password protection..
fpg_works.password = "";
end
case 3:
// Change password..
if(!WINDOW_CHANGE_PASSWORD_)
FPG_explorer_SUB_change_password();
end
end
case 4:
// set compresion..
fpg_works.compression = 1;
end
case 5:
// unset compresion..
fpg_works.compression = 0;
end
case 6:
// Change ADD offset..
if(!WINDOW_CHANGE_ADD_OFFSET_)
FPG_explorer_SUB_change_ADD_offset();
end
end
case 7:
// Select EXPORT format..
if(!WINDOW_SELECT_EXPORT_FORMAT_)
FPG_explorer_SUB_select_export_format();
end
end
end
end
//..................................................................................
// gestion del menu FILE..
if( gui_menu_event_from( "FILE" ) )
i = gui_menu_get_option( "FILE" );
switch(i)
case 1:
// Select all..
id_ = get_id( type FPG_MAP_ITEM_ );
while(id_)
id_.estado = 2;
id_ = get_id( type FPG_MAP_ITEM_ );
end
end
case 2:
// UNselect all..
id_ = get_id( type FPG_MAP_ITEM_ );
while(id_)
id_.estado = 4;
id_ = get_id( type FPG_MAP_ITEM_ );
end
end
case 3:
// DELETE selected..
id_ = get_id( type FPG_MAP_ITEM_ );
while(id_)
if( id_.estado == 2 )
FPG_UNLOAD_MAP( FPG_WORKS.id_, id_.FPG_MAP_POS_ );
signal( id_, s_kill );
end
id_ = get_id( type FPG_MAP_ITEM_ );
end
end
case 4:
// EXPORT selected..
id_ = get_id( type FPG_MAP_ITEM_ );
while(id_)
if( id_.estado == 2 )
fileName_to_export_ = strGetToken( map_get_name( FPG_WORKS.ID_, id_.FPG_MAP_POS_ ), ".", 1 );
switch( IMAGE_EXPORT_FORMAT_ )
case img_format_map:
fileName_to_export_ += ".map";
end
case img_format_bmp:
fileName_to_export_ += ".bmp";
end
case img_format_jpeg:
fileName_to_export_ += ".jpg";
end
case img_format_png:
fileName_to_export_ += ".png";
end
case img_format_tga:
fileName_to_export_ += ".tga";
end
end

if(IMAGE_EXPORT_COMPRESION_)
IMAGE_SAVE( FPG_WORKS.ID_, id_.FPG_MAP_POS_, fileName_to_export_, IMAGE_EXPORT_FORMAT_, 1 );
else
IMAGE_SAVE( FPG_WORKS.ID_, id_.FPG_MAP_POS_, fileName_to_export_, IMAGE_EXPORT_FORMAT_ );
end
end
id_ = get_id( type FPG_MAP_ITEM_ );
end
end
end

end
//..................................................................................
// crear un nuevo archivo fpg en memoria..
if(eventListener == "new_fpg_has_created_") // se crea un nuevo fpg en memoria..
gui_draw_form( 10,40,775,240,1 ); // pinto un form balnco para que el atontao del user vea que ha creado algo xD..
clear_fpg_data(); // limpio el registro de lo que hubiera del antiguo fpg.. implica descargar el fpg actual..
fpg_works.id_ = fpg_new(); // creo el nuevo fpg..
fpg_save( fpg_works.id_, fpg_works.name ); // esto no guarda nada por que el fpg está vacio.. cosas de gemix XD.. pero debería guardar el archivo..
numMaps_ = load_fpg_from_disk(); // esto no carga nada por que el fpg estaba vacio cuando se ha intentado guardar en disco.. mas cosas estupendas XD..
end
//..................................................................................
// abrir el visor de animaciones..
if(eventListener == "open_Animation_")
if(WINDOW_ANIMATE_SPRITES_ == false)
FPG_EXPLORER_SUB_ANIMATE_SPRITES();
end
end
//..................................................................................
// abrir el cpoint manager..
if(eventListener == "open_cpoint_")
if(!WINDOW_CPOINT_MANAGER_)
id_ = get_id( type FPG_MAP_ITEM_ );
while(id_)
if( id_.estado == 2 )
FPG_explorer_SUB_cpoint_manager( id_.FPG_MAP_POS_ );
id_ = false;
else
id_ = get_id( type FPG_MAP_ITEM_ );
end
end
end
end
//..................................................................................


eventListener = null;
end


// cargar un archivo desde disco..
if(WAIT_FOR_SELECT_FILE_TO_LOAD == true) // se ha abierto el explorador de archivos de la egui para cargar un FPG..
if(!exists( type OPEN_FILE )) // cuando el explorador se cierre..
if(_egui_route_browser_file_ != "null") // si hay algo que cargar..
gui_draw_form( 10,40,775,240,1 ); // hago saber al user que ahora se ha cargado algo cambiando el color del form a blanco..
clear_fpg_data(); // descargo y limpio registros actuales..
//fpg_save( fpg_works.id_, fpg_works.name );

// parser del direcotrio y el nombre del archivo por separado..
str_ = _egui_route_browser_file_; // uso a str_ como buffer..
str_tokens_ = strtokencount( str_, "\" ); // miro cuentos tokens hay.. los tokens son la profundidad en directorios y el nombre del arhcivo..
fpg_works.name = strGetToken( str_, "\", str_Tokens_ ); // extraigo una copia del ultimo token.. osea.. el nombre del archivo..
str_len_ = strlen( fpg_works.name ); // calculos el número de chars del nombre del archivo..
strdel(str_, 0, str_len_); // ahora si.. le borro los chars por el final que contienen el nombre del archivo..
fpg_works.fullpath = str_; // asigno el parseo del directorio a la información del fpg..
numMaps_ = load_fpg_from_disk(); // cargo el FPG que me indica la egui..
// creo las miniaturas de los mapas que contenga el fpg cargado..
for(counter_=1; counter_<999; counter_++)
if( map_exists( fpg_works.id_, counter_ ) )
FPG_MAP_ITEM_( counter_, Fpg_Explorer_miniature_slot_ );
Fpg_Explorer_miniature_slot_ ++;
FPG_ADD_POSITION_ = counter_ + 1; // coloco el cursor de adición en la posición siguiente a este gráfico..
end
end
_egui_route_browser_file_ = "null";
WAIT_FOR_SELECT_FILE_TO_LOAD = false; // reseteo esta movida..
end
end
end




if( gui_is_window_focus() )
// control de scroll de las miniaturas..
if( mouse_on_region(3) )
if(mouse.wheelup)
if(offset_y_fpg_ > 0)
offset_y_fpg_ -=50;
end
end
if(mouse.wheeldown)
if( numMaps_ > 7)
if( offset_y_fpg_ < (numMaps_/7) * 100);
offset_y_fpg_ +=100;
end
end
end
end
// actualizar los cartelitos que muestran la selección de pasword y compresión..
if(fpg_works.compression > 0)
CMP_STATUS = "YES";
else
CMP_STATUS = "NO";
end
if(fpg_works.password != "")
PWD_STATUS = "YES";
else
PWD_STATUS = "NO";
end

end

SCREEN_DRAW_TEXT( fnt_blue, itoa(FPG_ADD_POSITION_), 5, x+778, y+32, z-1, 0,100,100,0,0,0,0,0);
SCREEN_DRAW_TEXT( fnt_red, CMP_STATUS, 4, x+307, y+32, z-1, 0,100,100,0,0,0,0,region);
SCREEN_DRAW_TEXT( fnt_red, PWD_STATUS, 4, x+469, y+32, z-1, 0,100,100,0,0,0,0,region);
frame;
end
end[/Codebox]



Yo creo que de un vistazo rápido se entiende perfectamente que sucede cuando se recibe un evento de la EGUI ;)
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Re: [TOOL] FPGedit2013

Post by erkosone »

AÑADIDOS:
- Ahora el programa es como un programa mas de windows, mediante la EGUI se puede agarrar por la barra superior de arrastre del programa y moverlo por el escritorio :D
- Añadido botón MINIMIZAR.
- Añadido botón MAXIMIZAR.
- Añadido botón CLOSE.
- Añadido sistema clásico de windows para cambiar entre fullscreen/windowed [ ALT + ENTER ].

Estos controles no son exclusivos del FpgEditor 2013, son ya nativos para todo lo que se haga con la EGUI 2.8 8-)
Funcionan a la perfección :)
User avatar
DIV2lover
Posts: 218
Joined: Wed Apr 25, 2012 6:48 pm
Contact:

Re: [TOOL] FPGedit2013

Post by DIV2lover »

¿Cuando vamos a poder descargarlo para probarlo, aunque no esté completo?
Espero que pronto
User avatar
SimulatorOne
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona
Contact:

Re: [TOOL] FPGedit2013

Post by SimulatorOne »

eso eso :)

Espero ver un tutorial de usos.
sobre todo el control/editor de puntos de control...

como añadir maps, extraer...etc
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Re: [TOOL] FPGedit2013

Post by erkosone »

Hola Div2Lover, lo tengo preparado para publicar cuando salga la nueva Beta de Gemix junto con algunas cosas mas y así estos días puedo debugearlo bien y mirar si tiene bug´s o cosas raras, por ahora funciona bastante bien :)

@SimulatorOne: El programa vendrá con manual en vídeo donde explico todos los apartados del programa y como se usan, sobre el tema de los puntos de control quizá cueste acostumbrarse un poco al principio por que en Gemix el sistema ha cambiado respecto a Div/Div2 ya que ahora no es posible setear un punto si no existe, primero hay que crear el punto y cuando está creado ya se puede ajustar, el manejo es bastante sencillo, basicamente seleccionas un gráfico del fpg y le das al botón de puntos de control, con los cursores del teclado puedes moverlo, con los controles de zoom puedes ampliarlo, y para que se vea bien el cursor que indica en que posición está el punto de control justo debajo de la ventana de visualización del gráfico hay un control tipo "slider" "una barrita de ajuste" que ajusta el alpha del gráfico, esto es por si coincide el color del cursor con el color del gráfico y no se diferencia bien.. se le baja un poco el alpha y el cursor se aprecia perfectamente, simplemente agarras con el mouse el cursor y lo pones donde tu quieras.

El funcionamiento es bastante sencillo.
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Re: [TOOL] FPGedit2013

Post by erkosone »

AVANCES:
- Soporte para hacer un 'rebuild folder' con algoritmo de ordenación inteligente especialmente diseñado para crear animaciones en base a una colección de sprites extensa.


Explicación:
- Esto no es ni mas ni menos que la puñetera cosa que hace windows/macOS/linux cuando ordena los archivos de un folder alfabéticamente.. si tenemos una colección de imágenes exportadas de un archivo gif o un archivo AVI sucede que el sistema operativo es tonto.. y las coloca en este orden:

filename_1.png
filename_11.png
filename_2.png
filename_3.png

En definitiva.. el sistema operativo ordena bien los archivos, pero en realidad existe el problema de que al añadirlos a un FPG se añaden en función del nombre.. y ese orden no es el correcto..
Que hace el botón que he añadido al FPGEditor2013?
- Simplemente carga la estructura del directorio y mediante un simple algoritmo comienza a renombrar los archivos con formateo al final del namefile.. osea.. lo que antes era: filename_1.png ahora pasa a ser: filename_0000000001.png

Lo que hace exactamente es crear una lista de ceros antes del ultimo número comenzando por el final del nombre del archivo, de esta forma el resultado de añadir los archivos es el correcto y pasa a ser este:
filename_0000000001.png
filename_0000000002.png
filename_0000000003.png
filename_0000000011.png

Esto ayuda enormenete y nos ahorrará un valioso tiempo cuando añadamos cientos de imágenes a un archivo FPG las cuales hayan sido exportadas con algún programa chapucero que no haya formateado los nombres de archivo..

WIP..
Post Reply

Return to “Proyectos Full”