Valores por defecto para estructuras

Started by Windgate, November 02, 2009, 10:03:26 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

En Bennu 3D hay una serie de valores por defecto que pueden asignarse a estructuras relativamente complejas. Estoy creando un tipo de dato para especificar planetas y me encuentro con la siguiente complicación a la hora de especificar un "planeta por defecto", no me compila lo siguiente:

GLOBAL
_Pcolor blanco = ( 100 , 100 , 100 , 100 );
tp_planeta luna = ( 100 , 100 , 100 , 100 , 100 , blanco, blanco ); // ESTO ME DA ERROR
END

TYPE tp_planeta
int radio_fisico; // Especifica el radio del modelo esférico 3D que forma el cuerpo del planeta
int radio_luminico; // Especifica el radio de partículas de iluminación que rodea el planeta
int radio_orbita; // Especifica el radio orbital respecto de la escena
int min_emision; // Especifica la mínima emisión de partículas por segundo
int max_emision; // Especifica la máxima emisión de partículas por segundo
_Pcolor min_color; // Especifica el color mínimo de las partículas de emisión del planeta
_Pcolor max_color; // Especifica el color máximo de las partículas de emisión del planeta
END


Aclaro que _Pcolor según m8ee.h es una struc así:

type _PColor  //color
 float a,r,g,b;    
end;


Quizás sea mi desconocimiento el que me impide conseguir inicializar este tipo de estructuras, cualquier ayuda se agradece.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

Fácil: has declarado el tipo tp_planeta DESPUÉS de usarlo en una variable global, y seguro que has hecho el import de m8ee también despues de declarar la variable global que usa uno de sus tipos.

Pon el type y el import antes de las globals.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Windgate

El IMPORT "m8ee.h" lo hago al principio de eso estoy seguro, otra vez el maldito orden de TYPE y GLOBAL... Esto de programar 12 horas al día al final hace que se me vaya la pinza.

En cualquier caso inicializar por defecto un campo de un TYPE con el valor de una GLOBAL es algo que en muchos lenguajes tampoco se puede, pruebo a ver si funciona y te digo, gracias ;)
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

Es que DIV nos malacostumbró a no respetar el orden de declaración/uso de funciones y variables ;D
Por eso trato en mis códigos actuales de respetar las normas de C++ que me mostraron fugazmente en mi paso por la uni.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Windgate

Por ahora todo correcto, he usado unos defines para dar fácilmente valores a estructuras predefinidas para ciertos colores básicos:

#define def_gris (0,100,100,100)
#define def_blanco (0,255,255,255)
#define def_rojo (0,255,0,0)
#define def_rojo_claro (0,255,31,127)
#define def_verde (0,0,255,0)
#define def_verde_claro (0,31,255,127)
#define def_azul_claro (0,31,127,255)
#define def_azul (0,0,0,255)
#define def_negro (0,0,0,0)
#define def_amarillo (0,127,63,31)


Y con ellas declaro unas globales con info de cada planeta así:

// Planetas predefinidos
// radio_fisico, radio_luminico, radio_orbita, min_emision, max_emision, min_color, max_color, fader_color
// min_vida_emision, max_vida_emision, desviacion, min_tamano_emision, max_tamano_emision, segundos_orbita
tp_planeta g_sol = ( 200 , 300 , 4000 , 500 , 500 , def_blanco , def_blanco , def_amarillo ,
20 , 40 , 0 , 1000 , 1000 , 3600*24 );
tp_planeta g_luna = ( 200 , 200 , 3000 , 300 , 300 , def_blanco , def_blanco , def_negro ,
20 , 20 , 0 , 800 , 800 , 3600*24 );
tp_planeta g_marte = ( 200 , 200 , 5000 , 400 , 400 , def_blanco , def_blanco , def_rojo ,
20 , 20 , 0 , 400 , 400 , 360*24 ); // PRUEBA
tp_planeta g_jupiter = ( 1000 , 1100 , 10000 , 100 , 1000 , def_blanco , def_blanco , def_rojo_claro ,
100 , 100 , 10 , 4000 , 5000 , 3600*24 );


Problema resuelto, un placer como siempre xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es