Aunque en muchos casos será inevitable que aparezcan puntos cardinales en la descripción. De otro modo, si por ejemplo a lo lejos vemos un molino, sin más, podríamos tener que pasar por otros sitios antes de -por descarte- saber que la dirección que conduce a él es noroeste.
Para lugares sin referencias lejanas ni caminos, como un bosque cerrado, funcionará bien.
-Ahorra texto repetitivo en la descripción.
-Ahorra tener que escribir el comando salidas.
-Ahorra jugar a los coches de choque para buscar salidas.
Primero hice un par de diseños que se basaban en dibujar un centro y en torno a él las diversas ramas de las direcciones, una a una en función de que existieran esas salidas.
Pero finalmente he optado por poner un gráfico con la brújula entera, con todos los puntos cardinales, arriba y abajo, y entrar y salir; y oscurecer con PNG transparentes las salidas no disponibles. Es más sencillo y me permite cambiar los colores de la brújula editando un único gráfico.
Para ello creo una ventana gráfica nueva en un lateral: gg_ventana2, y aprovecho la librería NewFlags.h, que por otro lado voy a utilizar para más cosas.
La función que dibuja la brújula será llamada cada vez que se repinten los gráficos, al cambiar de localidad, o manualmente cuando un evento modifique las salidas.
[dibujabrujula i loc;
loc = location;
!dibujo la brújula entera:
glk_image_draw(gg_ventana2,GRAF_brujula_base,5,15);
!pongo a 0 los flags que almacenarán las salidas viables:
for(i=10:i<22:i++)ClearFlag(i);
!busco direcciones viables... y VISIBLES,
!parte de código copiado de la rutina de listado de salidas de la librería en español:
if(location~=TheDark)
objectloop (i in compass)
{
if (loc provides (i.door_dir) && metaclass (loc.(i.door_dir)) ~= nothing or string)
{
switch(i){!sw
nw_obj: setflag(15);
ne_obj: setflag(14);
sw_obj: setflag(17);
se_obj: setflag(16);
n_obj: setflag(10);
s_obj: setflag(11);
e_obj: setflag(12);
w_obj: setflag(13);
in_obj: setflag(18);
out_obj: setflag(19);
u_obj: setflag(20);
d_obj: setflag(21);
}!sw
}
}
!sombreo las direcciones no disponibles con diversos PNG trasnparentes
!ajustados a las formas de cada parte de la brújula:
for(i=10:i<22:i++){
if(Flagoff(i))switch (i){!sww
10: glk_image_draw(gg_ventana2,GRAF_brujula_sombra0,65,14);
11: glk_image_draw(gg_ventana2,GRAF_brujula_sombra0,65,94);
12: glk_image_draw(gg_ventana2,GRAF_brujula_sombra90,4,75);
13: glk_image_draw(gg_ventana2,GRAF_brujula_sombra90,84,75);
14: glk_image_draw(gg_ventana2,GRAF_brujula_sombra45,83,34);
15: glk_image_draw(gg_ventana2,GRAF_brujula_sombra135,25,34);
16: glk_image_draw(gg_ventana2,GRAF_brujula_sombra135,83,93);
17: glk_image_draw(gg_ventana2,GRAF_brujula_sombra45,25,91);
18: glk_image_draw(gg_ventana2,GRAF_brujula_sombracuad,162,95);
19: glk_image_draw(gg_ventana2,GRAF_brujula_sombracuad,162,132);
20: glk_image_draw(gg_ventana2,GRAF_brujula_sombracuad,162,16);
21: glk_image_draw(gg_ventana2,GRAF_brujula_sombracuad,162,55);
}!sww
}
rtrue;
];
No hay comentarios:
Publicar un comentario