Bennu Game Development

Foros en Español => Sugerencias => Mensaje iniciado por: Windgate en Noviembre 02, 2009, 10:03:26 pm

Título: Valores por defecto para estructuras
Publicado por: Windgate en Noviembre 02, 2009, 10:03:26 pm
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:

Código: [Seleccionar]
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í:

Código: [Seleccionar]
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.
Título: Re: Valores por defecto para estructuras
Publicado por: Drumpi en Noviembre 03, 2009, 01:21:44 am
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.
Título: Re: Valores por defecto para estructuras
Publicado por: Windgate en Noviembre 03, 2009, 06:10:56 am
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 ;)
Título: Re: Valores por defecto para estructuras
Publicado por: Drumpi en Noviembre 03, 2009, 05:45:23 pm
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.
Título: Re: Valores por defecto para estructuras
Publicado por: Windgate en Noviembre 03, 2009, 07:47:38 pm
Por ahora todo correcto, he usado unos defines para dar fácilmente valores a estructuras predefinidas para ciertos colores básicos:

Código: [Seleccionar]
#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í:

Código: [Seleccionar]
// 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