[I7] Gérer deux fenêtres

Pour discuter des langages que nous utilisons pour réaliser nos jeux : problèmes, solutions, suggestions...

Modérateurs: Stormi, Otto Grimwald

[I7] Gérer deux fenêtres

Messagepar BadChevreuil le Lun Avr 28, 2014 6:08 pm

Bonjour à tous,

la dernière fois Azathoth m'a dit qu'il cherchait comment gérer 2 fenêtres dans la fenêtre de jeu. Après avoir bidouillé j'ai réussi à gérer une fenêtre supérieure qui affiche une image correspondant au lieu où vous vous trouvez, ainsi qu'une fenêtre latérale qui affiche le texte que vous souhaitez. Je sais pas si c'était vraiment utile de poster ça là, mais bon, si ça peut être utile à quelqu'un, servez-vous ! D'ailleurs si vous avez des suggestions pour raccourcir le code, je suis preneur.

Spoiler ! :
"Double fenêtre" by Thibault D.

Include Flexible Windows by Jon Ingold. [C'est la seule extension nécessaire. L'extension "Location images" vous permet aussi de gérer une image liée à un lieu, mais ne permet d'ouvrir qu'une seule fenêtre.]

Figure 1 is the file "jungle.jpg". [La liste des figures nécessaires.]
Jungle is a room.

[La fenêtre latérale :]


The side-window is a text-buffer g-window spawned by the main-window. [Vous pouvez toujours appliquer des propriétés, telles qu'un fond de couleur à la fenêtre ici.]

The measurement of the side-window is 30. [Modifiable, bien entendu.]

A window-drawing rule for the side-window (this is the construct inventory rule):
move focus to side-window, clearing the window;
say "[line break]Tapis dans les feuillages, vous guettez les cacatoès sauvages.";
return to main screen.

Every turn when the side-window is g-present: follow the window-drawing rules for the side-window.

[La fenêtre supérieure :]

The graphics-window is a graphics g-window spawned by the main-window. The position of the graphics-window is g-placeabove.

The current image is a figure-name that varies.

Before looking when the player is in Jungle:
depict Figure 1.

To depict (f - a figure-name):
now the current image is f;
follow the window-drawing rules for the graphics-window.

Window-drawing rule for the graphics-window (this is the draw scaled image rule):
if graphics-window is g-unpresent, rule fails;
clear the graphics-window;
draw scaled copy of current image in graphics-window.

When play begins:
open up the graphics-window;
open up the side-window.

To draw scaled copy of (f - a figure-name) in (g - a g-window):
(- DrawScaled({f}, {g}); -) .

Include (-

! Doing scaling calculations in I6 lets us handle bigger numbers

[ GetImageSize curimg index result;
result = glk_image_get_info( ResourceIDsOfFigures-->curimg, gg_arguments, gg_arguments+WORDSIZE);
return gg_arguments-->index;
];

[ DrawScaled figure g w_total h_total graph_height graph_width w_offset h_offset;
graph_height = WindowSize(g, 1);
graph_width = gg_arguments-->0;
w_total = GetImageSize(figure, 0);
h_total = gg_arguments-->1;

if (graph_height - h_total < 0) ! if the image won't fit, find the scaling factor
{
w_total = (graph_height * w_total)/h_total;
h_total = graph_height;

}

if (graph_width - w_total < 0)
{
h_total = (graph_width * h_total)/w_total;
w_total = graph_width;
}

w_offset = (graph_width - w_total)/2; if (w_offset < 0) w_offset = 0;
h_offset = (graph_height - h_total)/2; if (h_offset < 0) h_offset = 0;

glk_image_draw_scaled(g.ref_number, ResourceIDsOfFigures-->figure, w_offset, h_offset, w_total, h_total);
];

-) .


En situation, ça donne ça : (l'image est en 2000x400 ça là, ce sont a priori les dimensions optimales)

Spoiler ! :
Image
BadChevreuil
Sorcier du culte
 
Messages: 4
Inscription: Dim Sep 08, 2013 9:34 pm

Re: [I7] Gérer deux fenêtres

Messagepar StephaneF le Ven Fév 02, 2018 11:48 am

Je remonte ce topic s'il y a des gens à qui ça peut servir :)
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 545
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: [I7] Gérer deux fenêtres

Messagepar Natrium le Sam Fév 03, 2018 3:12 am

Je précise que ce n'est valable que pour 6G60, au cas où.

Avec 6L, c'est plus facile car l'extension Simple Graphical Window utilise maintenant Flexible Windows, donc on peut avoir la fenêtre d'image plus d'autres fenêtres de texte sans avoir à tout coder.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1165
Inscription: Mar Oct 04, 2011 11:18 pm

Re: [I7] Gérer deux fenêtres

Messagepar StephaneF le Sam Fév 03, 2018 7:42 am

Je vais fonder un site dissident entièrement dédié à 6G60, je pense.
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 545
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron