1 // ------------------------------------
3 // ------------------------------------
4 // Modulo de efectos climaticos
6 // En memoria de mi querido padre
7 // Copyright (c) 2002, Kronoman
8 // ------------------------------------
16 static CLIMA_P clima_p
[MAX_CLIMA_P
]; // contenedor de particulas
17 static int clima_cant
= 0; // cantidad de particulas 0..MAX_CLIMA_P
19 // auxiliar que reinicia una particula individual
22 // i es el indice de la particula
23 static void reinit_clima_part(BITMAP
*bmp
, int c
, int t
, int d
, int i
)
26 int minx
= 50, miny
= 50 , maxx
= 100 , maxy
= 150; // velocidades minimas y maximas
32 // iniciar coordenadas de las particulas y direccion
33 clima_p
[i
].y
= itofix( rand_ex(0, bmp
->h
) );
34 clima_p
[i
].x
= itofix( rand_ex(0, bmp
->w
) );
40 c2
= rand_ex(200, 255);
41 clima_p
[i
].col
= makecol(0,128,c2
); // tonos de azul
50 c2
= rand_ex(192, 255);
51 clima_p
[i
].col
= makecol(c2
,c2
,c2
); // tono de gris
52 clima_p
[i
].r
= rand_ex(1,5); // radio
59 default: // error, el tipo no existe, no poner clima
65 // velocidad de particulas
66 clima_p
[i
].dx
= ftofix( (float)rand_ex(minx
, maxx
) / 10.0);
67 clima_p
[i
].dy
= ftofix( (float)rand_ex(miny
, maxy
) / 10.0);
69 // si hay que ir a la izquierda...
70 if (d
== 0) clima_p
[i
].dx
= fixmul(clima_p
[i
].dx
, itofix(-1)); // a la izquierda
74 // Inicializa el clima
76 // bmp = bitmap de buffer
77 // c = cantidad de particulas
78 // t = tipo: 0 = lluvia, 1 = nieve, etc
79 // d = direccion de caida: 0 = izquierda, 1 = derecha
81 void init_clima(BITMAP
*bmp
, int c
, int t
, int d
)
84 if (c
< 1 || c
> MAX_CLIMA_P
)
91 for (i
=0; i
< c
; i
++)
93 reinit_clima_part(bmp
, c
, t
, d
, i
);
102 // bmp = bitmap de uso
103 void mover_clima(BITMAP
*bmp
)
106 for (i
=0; i
< clima_cant
; i
++)
109 clima_p
[i
].x
= fixadd(clima_p
[i
].x
, clima_p
[i
].dx
);
110 clima_p
[i
].y
= fixadd(clima_p
[i
].y
, clima_p
[i
].dy
);
111 // reiniciar particula si se sale
112 if (clima_p
[i
].x
< 0 || fixtoi(clima_p
[i
].x
) > bmp
->w
||
113 clima_p
[i
].y
< 0 || fixtoi(clima_p
[i
].y
) > bmp
->h
)
115 reinit_clima_part(bmp
, clima_cant
, clima_p
[i
].t
, clima_p
[i
].d
, i
);
123 // bmp = bitmap de uso
124 void dibuja_clima(BITMAP
*bmp
)
127 for (i
=0; i
< clima_cant
; i
++)
129 switch (clima_p
[i
].t
)
133 if (nivel_detalle
> 9)
135 drawing_mode(DRAW_MODE_TRANS
, NULL
, 0,0); // lluvia transparente, cool!
137 fixtoi(clima_p
[i
].x
),
138 fixtoi(clima_p
[i
].y
),
139 fixtoi(fixadd(clima_p
[i
].x
, clima_p
[i
].dx
)),
140 fixtoi(fixadd(clima_p
[i
].y
, clima_p
[i
].dy
)),
141 fixtoi(clima_p
[i
].x
),
142 fixtoi(clima_p
[i
].y
)+(rand()%4)+1,
149 fixtoi(clima_p
[i
].x
),
150 fixtoi(clima_p
[i
].y
),
151 fixtoi(fixadd(clima_p
[i
].x
, clima_p
[i
].dx
)),
152 fixtoi(fixadd(clima_p
[i
].y
, clima_p
[i
].dy
)),
159 fixtoi(clima_p
[i
].x
),
160 fixtoi(clima_p
[i
].y
),
165 default: // error, el tipo no existe, no dibujar