Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 Scrolling Down/Up pour dialogue

Aller en bas 
AuteurMessage
CookiewooD
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
avatar

Nombre de messages : 38

Age : 29

Localisation : Gard

Date d'inscription : 18/09/2018


MessageSujet: Scrolling Down/Up pour dialogue   Ven 19 Oct 2018 - 7:49

Bonjour à tous sourire

J'ai l'impression que je commence à rentrer dans les trucs un peu plus complexe, héhé langue

Je voudrais créer des boutons pour scroller les options de dialogues (ma fenêtre par défaut est assez haute pour contenir environ 4 lignes mais parfois, il y en a plus que 4 et donc ça dépasse, il faut bien pouvoir scroller via un bouton ou juste la molette).
J'ai fait des recherches là dessus ces derniers jours avant de venir vous embêter sur les forum anglophone etc... mais ce n'est pas toujours très clair ou pas très à jour.

De ce que j'ai compris, il y a 2 solutions pour créer ce genre de bouton.

1. Passer par un module "abstauber" mais de ce que j'ai lu, il est assez complexe à prendre en main.
2. Créer une zone de custom dialogue, le manuel explique assez bien comment le faire et au moment d'expliquer comment faire les fleches de scroll le manuel ouvre la fonction et dit "Tapez ce que vous voulez ici" LOL Je ne suis pas beaucoup plus avancé donc...

J'ai essayé d'opter pour la solution 2, ça à l'air de fonctionner niveau "mise en place" des dialogues options. La disposition semble correct mais les options ne sont pas clickable, le GUI que j'avais crée à maintenant complètement disparue (j'imagine que j'ai besoin de l'appeler de nouveau mais où ?) Mais surtout, je bloque toujours sur les flèches de défilement...

Y a-t-il, à votre connaissance, un moyen "facile" de créer ces flèches de défilement ?

Ci-joint le code de ma zone de dialogue custom.

Code:
function dialog_request(int param)
{
 
}

function dialog_options_get_dimensions(DialogOptionsRenderingInfo*info)
{
// Créer une zone d'options de dialogue 200x200 à (50,100)
   info.X = 442;
   info.Y = 840;
   info.Width = 1035;
   info.Height = 140;
  
   // Placer l'analyseur de texte en bas (si activé)
   info.ParserTextBoxX = 1477;
   info.ParserTextBoxY = 980;
   info.ParserTextBoxWidth = 1035;
}

function dialog_options_render(DialogOptionsRenderingInfo*info)
{
// Effacer la zone jaune
   info.Surface.Clear (0);
   int i = 1, ypos = 0;
   // Rendre toutes les options activées
   while (i <= info.DialogToRender.OptionCount)
   {
     if (info.DialogToRender.GetOptionState (i) == eOptionOn)
     {
       if (info.ActiveOptionID == i) info.Surface.DrawingColor = 0;
       else info.Surface.DrawingColor = 4;
       info.Surface.DrawStringWrapped (5, ypos, info.Width - 10, eFontfntDefault, eAlignLeft, info.DialogToRender.GetOptionText (i));
       ypos += GetTextHeight (info.DialogToRender.GetOptionText (i), eFontfntDefault, info.Width - 10);
     }
   i ++;
   }
}

function dialog_options_get_active (DialogOptionsRenderingInfo * info)
 {
   int i = 1, ypos = 0;
   // Trouver l'option qui correspond à l'endroit où le joueur a cliqué
   while (i <= info.DialogToRender.OptionCount)
   {
     if (info.DialogToRender.GetOptionState (i) == eOptionOn)
     {
       ypos += GetTextHeight (info.DialogToRender.GetOptionText (i), eFontfntDefault, info.Width - 10);
       if ((mouse.y - info.Y) <ypos)
       {
         info.ActiveOptionID = i;
         return;
       }
     }
   i ++;
   }
 }

 function dialog_options_mouse_click (DialogOptionsRenderingInfo *, MouseButton button)
 {
 
 }

Merci d'avance, et surtout hésitez pas à me le dire si je vous harcèle trop de question rougit
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1526

Age : 29

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: Scrolling Down/Up pour dialogue   Ven 19 Oct 2018 - 17:33

@CookiewooD a écrit:

J'ai l'impression que je commence à rentrer dans les trucs un peu plus complexe, héhé langue

Ah, en effet il y a un bond là ^^. Mais avant toute chose, il y a une raison particulière qui t'as poussé à choisir un affichage personnalisé de options de dialogue plutôt que d'utiliser le système de base ? Parce que ça ne va pas te simplifier la tâche à mon avis. Enfin tu as certainement une bonne raison, mais je préfère en avoir le cœur net pour être sûr qu'il n'y a pas une solution plus simple (et à titre personnel j'y vois plus clair quand j'ai une vue d'ensemble de ce qui est visé).

@CookiewooD a écrit:
J'ai fait des recherches là dessus ces derniers jours avant de venir vous embêter sur les forum anglophone etc...
Tu ne nous embête pas.

@CookiewooD a écrit:
et surtout hésitez pas à me le dire si je vous harcèle trop de question  rougit
Ben du coup non. ^^
(Tu remarqueras qu'on n'est pas trop étouffé par les sollicitations en ce moment clin d'oeil )

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2632

Date d'inscription : 01/08/2006


MessageSujet: Re: Scrolling Down/Up pour dialogue   Ven 19 Oct 2018 - 18:12

Salut !

Je pense que gérer le scrolling sur un dialogue personnalisé consiste "simplement" à décaler les coordonnées y dans dialog_options_render (fonction utilisée pour (re-)dessiner le dialogue à l'écran régulièrement).

Si tu as une molette sur ta souris/ton pad, je t'invite à tester ça :
Code:
int differenceHauteurs = 0; // vaudra hauteur de la fenetre GUI - hauteur totale du texte des options
int decalageY = 0; // pixels de decalage vers le haut pour le texte des options

function dialog_request(int param)
{
 
}

function dialog_options_get_dimensions(DialogOptionsRenderingInfo *info)
{
// Créer une zone d'options de dialogue 200x200 à (50,100)
   info.X = 442;
   info.Y = 840;
   info.Width = 1035;
   info.Height = 140;
  
   // Placer l'analyseur de texte en bas (si activé)
   info.ParserTextBoxX = 1477;
   info.ParserTextBoxY = 980;
   info.ParserTextBoxWidth = 1035;
}

function dialog_options_render(DialogOptionsRenderingInfo *info)
{
// Effacer la zone jaune
   info.Surface.Clear (0);
   int i = 1, ypos = 0 - decalageY; // la premiere option s'affiche a 0 - decalageY
   // Rendre toutes les options activées
   while (i <= info.DialogToRender.OptionCount)
   {
     if (info.DialogToRender.GetOptionState (i) == eOptionOn)
     {
       if (info.ActiveOptionID == i) info.Surface.DrawingColor = 0;
       else info.Surface.DrawingColor = 4;
       info.Surface.DrawStringWrapped (5, ypos, info.Width - 10, eFontfntDefault, eAlignLeft, info.DialogToRender.GetOptionText (i));
       ypos += GetTextHeight (info.DialogToRender.GetOptionText (i), eFontfntDefault, info.Width - 10);
     }
   i ++;
   }
   differenceHauteurs = (ypos + decalageY) - info.Height; // ypos vaut maintenant la hauteur totale des options (-decalageY)
}

function dialog_options_get_active (DialogOptionsRenderingInfo * info)
 {
   int i = 1, ypos = 0 - decalageY; // prends en compte le decalage ici aussi
   // Trouver l'option qui correspond à l'endroit où le joueur a cliqué
   while (i <= info.DialogToRender.OptionCount)
   {
     if (info.DialogToRender.GetOptionState (i) == eOptionOn)
     {
       ypos += GetTextHeight (info.DialogToRender.GetOptionText (i), eFontfntDefault, info.Width - 10);
       if ((mouse.y - info.Y) <ypos)
       {
         info.ActiveOptionID = i;
         return;
       }
     }
   i ++;
   }
 }

 function dialog_options_mouse_click (DialogOptionsRenderingInfo *info, MouseButton button)
 {
     if (button == eMouseWheelSouth && differenceHauteurs > 0 && decalageY < differenceHauteurs)
        decalageY++; // molette bas : on monte le texte si fenetre pas assez haute et si decalage max pas encore atteint
     else if (button == eMouseWheelNorth && differenceHauteurs > 0 && decalageY > 0)
        decalageY--; // molette haut : on descend le texte si fenetre pas assez haute et s'il reste du texte qui depasse par le haut
}

NOTE IMPORTANTE : d'après l'aide, ça ne marchera pas si tu utilises la molette en survolant une option de dialogue

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
CookiewooD
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
avatar

Nombre de messages : 38

Age : 29

Localisation : Gard

Date d'inscription : 18/09/2018


MessageSujet: Re: Scrolling Down/Up pour dialogue   Lun 22 Oct 2018 - 7:49

Hello all, j’espère que vous avez passé un bon WE sourire

@valoulef a écrit:
il y a une raison particulière qui t'as poussé à choisir un affichage personnalisé de options de dialogue plutôt que d'utiliser le système de base ?

J'avais l'impression que c'était le seul moyen pour pouvoir scroller ou ajouter des flèches de défilement dans le cas où j'ai plus de 4 options de dialogues. Mais si je me trompe et qu'il y a un moyen "plus simple" avec le système de base surtout n'hésite pas à m'en parler ou me rediriger vers le bon tuto sourire

Kitai, j'ai tenté ta solution, les options de dialogue sont bien disposée là où je les attends mais ne sont pas clickable et la GUI de dialogue (gdial) que j'avais crée a disparu (il faut certainement l'appeler quelque part mais je ne sais pas où). Le fond est noir opaque.

Peut-être que je me casse la tête pour pas grand chose et qu'il y a un moyen plus efficace de faire des flèches de défilement sur une autre base que celle que j'avais initialement choisi ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2632

Date d'inscription : 01/08/2006


MessageSujet: Re: Scrolling Down/Up pour dialogue   Lun 22 Oct 2018 - 17:04

En répondant à ton message j'ai confondu "dialogue" et "inventaire" l'espace d'un instant, du coup je me disais que la solution était toute trouvée : utiliser ScrollUp et ScrollDown ! confus

J'ai très peu utilisé les dialogues sous AGS, donc j'avoue que je sais pas trop les méthodes disponibles. En attendant, si personne ne connaît de solution évidente, je pourrais ouvrir mon AGS poussiéreux (ou même installer la dernière mouture !) et tester la méthode des dialogues personnalisés sourire

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1526

Age : 29

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: Scrolling Down/Up pour dialogue   Lun 22 Oct 2018 - 17:37

@CookiewooD a écrit:

J'avais l'impression que c'était le seul moyen pour pouvoir scroller ou ajouter des flèches de défilement dans le cas où j'ai plus de 4 options de dialogues. Mais si je me trompe et qu'il y a un moyen "plus simple" avec le système de base surtout n'hésite pas à m'en parler ou me rediriger vers le bon tuto sourire

Normalement, en laissant tout par défaut tu peux facilement avoir une grosse dizaine d'options de dialogue (en se basant sur les paramètres par défaut du template LW_BASS en terme de définition et de taille de police de caractères), sans besoin de scroller. La hauteur de l'interface s'adapte automatiquement au nombre d'options affichées. Tu as testé ? Si ça ne fonctionne pas je veux bien voir une capture d'écran pour comprendre pourquoi (éventuellement en mp si tu ne veux pas dévoiler l'apparence de ton jeu).

Edit : Ok, je crois avoir compris d'où venait ton problème. Tu as assigné un GUI dans le paramètre "Use GUI for dialog options" du General Settings ? Vu ce que tu décris il semblerait que oui (je n'avais pas pensé à ça). Est-ce nécessaire ? Si tu laisse le paramètre à 0 alors tu auras une interface sur fond noir qui affichera les options de dialogue, en adaptant sa hauteur au nombre d'options dans la limite de la hauteur de l'écran dans le jeu. Si toutefois tu tiens à avoir une interface personnalisée pour l'affichage des options (pour mettre un arrière plan personnalisé, ou pour définir une position ou des dimensions différentes de celles proposées pas défaut par exemple), il y probablement moyen de coder un truc sans passer par l'usine à gaz de "l'affichage personnalisé des options de dialogue" pour que la taille de ton GUI s'adapte automatiquement à la hauteur que requiert le nombre d'option. Ceci n'est que spéculation et je me pencherai sur la question en cas de besoin mais avant tout la balle est dans ton camp pour nous dire ce que tu préfères (et notamment si simplement l'option par défaut te convient finalement ou non). clin d'oeil

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
CookiewooD
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
avatar

Nombre de messages : 38

Age : 29

Localisation : Gard

Date d'inscription : 18/09/2018


MessageSujet: Re: Scrolling Down/Up pour dialogue   Mar 23 Oct 2018 - 7:42

Coucou !

Pas de souci Kitai, effectivement, je rageais de voir qu'il y avait un moyen très simple pour scroller dans l'inventaire et pas les dialogues xD Je comprends ta confusion sourire

Valoulef, effectivement, j'ai mis une GUI personnalisée dans les general settings. Comme c'est un projet à 3, je ne peux pas prendre cette décisions seule et je pense que mes collègues vont pas aimer l'idée d'un simple fond noir... triste Si pas moyen de scroller dans la boite de dialogue, la solution de la GUI personnalisé qui s'agrandi automatiquement en fonction du nombre d'option, ça me va bien par contre ! Pas de souci pour dévoiler un peu le jeu. Voilà à quoi ressemble la boite de dialogue lorsque je dépasse les 4 options de dial sourire

Merci beaucoup les gars sourire
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1316

Date d'inscription : 10/05/2012


MessageSujet: Re: Scrolling Down/Up pour dialogue   Mar 23 Oct 2018 - 9:29

Faut que je pense à regarder comment j'avais géré ça.

Une solution de facilité, c'est de ne jamais dépasser les 4 options de dialogues, et si tu en as plus tu met une option de dialogue genre :

"Parlons d'autre chose."
"Changeons de sujet."
"Pour revenir à ce dont nous parlions..."
etc.
qui change les options disponibles. langue

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
Arlann
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 221

Date d'inscription : 06/04/2016


MessageSujet: Re: Scrolling Down/Up pour dialogue   Mar 23 Oct 2018 - 12:14

Salut,
Petite question juste pour être sûr et évacuer cette hypothèse :
Est-ce que le GUI utilisé pour afficher les dialogues est bien une fenêtre de texte personnalisée ?
Si c'est le cas sa taille devrait s'adapter en fonction du nombre de lignes de dialogues.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
CookiewooD
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
avatar

Nombre de messages : 38

Age : 29

Localisation : Gard

Date d'inscription : 18/09/2018


MessageSujet: Re: Scrolling Down/Up pour dialogue   Mar 23 Oct 2018 - 12:33

Yop sourire

Oui Billbis, j'avais pensé à cette solution si vraiment je n'y arrivais pas sourire

Arlann, je crois que tu met le doigt sur quelque chose, j'ai fait une simple "GUI" et non pas une "New text windows GUI"...
La solution de la boite qui s'adapte en fonction du nombre d'option pourrait faire l'affaire je pense si vraiment le scrolling s'avère compliqué.

Si je dis pas de bêtises, ce genre de fenêtre se personnalise graphiquement avec des espèces de "bloc" graphiques (les corners, barre horizontale, barre verticale) qui sont ensuite démultipliés autant de fois que nécessaire en fonction du nombre d'option de dialogue possible ?

Désolé si j'utilise des termes de profanes xD
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Arlann
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 221

Date d'inscription : 06/04/2016


MessageSujet: Re: Scrolling Down/Up pour dialogue   Mar 23 Oct 2018 - 13:00

@CookiewooD a écrit:

Si je dis pas de bêtises, ce genre de fenêtre se personnalise graphiquement avec des espèces de "bloc" graphiques (les corners, barre horizontale, barre verticale) qui sont ensuite démultipliés autant de fois que nécessaire en fonction du nombre d'option de dialogue possible ?

Exactement.

Sinon tu peux envisager de garder un GUI normal et adapter sa taille par le script en fonction de tes besoins de dialogues. Il suffirait de créer une fonction qui compte le nombre de propositions activées, puis redimensionner ton GUI et changer son image de fond.

C'est plus compliqué pour les flèches de défilement mais cela doit être possible en customisant l'interface intégralement, mais je ne m'y suis jamais penché...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1526

Age : 29

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: Scrolling Down/Up pour dialogue   Mar 23 Oct 2018 - 13:44

@CookiewooD tu semble préférer malgré tout le fait de pouvoir scroller ? Parce que ça doit être réalisable quand même hein, mais je me disais qu'avoir une interface qui s'adapte automatiquement, en plus d'être plus simple en terme de programmation, me semble plus ergonomique pour le joueur qui peut voir toutes les options d'un coup d’œil.

L'idée d'@Arlann d'utiliser un "TextWindowGUI" me semble bonne. À l'époque où je me penchais là dessus je n'avais rien compris à ce système, mais ça semble effectivement assez bien adapté à ton problème en fait. Ce tuto (en anglais mais ce n'est pas très important) devrait t'aider à le mettre en place en conservant ton interface (vu que tu sembles avoir compris le principe, peut-être même que tu pourras t'en passer) :



Je suis un peu déçu j'avais envie de faire du code. ^^ Du coup peut-être que je vais quand même essayer de réfléchir à cette histoire de scrolling. langue

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1316

Date d'inscription : 10/05/2012


MessageSujet: Re: Scrolling Down/Up pour dialogue   Mar 23 Oct 2018 - 14:15

Y'a l'air d'avoir un module tout pret aussi :
http://www.adventuregamestudio.co.uk/forums/index.php?topic=27930

Faut peut-être comprendre un minimum l'anglais pour le configurer ?

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2632

Date d'inscription : 01/08/2006


MessageSujet: Re: Scrolling Down/Up pour dialogue   Mar 23 Oct 2018 - 15:04

EDIT : exemple de code complet en bas du message

@CookiewooD a écrit:
Kitai, j'ai tenté ta solution, les options de dialogue sont bien disposée là où je les attends mais ne sont pas clickable et la GUI de dialogue (gdial) que j'avais crée a disparu (il faut certainement l'appeler quelque part mais je ne sais pas où). Le fond est noir opaque.
Bon, il se trouve que la documentation en ligne est un peu dépassée, il y a eu quelques changements concernant les dialogues personnalisés : http://www.adventuregamestudio.co.uk/forums/index.php?topic=52499.msg636523561#msg636523561

Donc en gros tu peux reprendre exactement le code que j'ai posté plus haut, juste en remplaçant dialog_options_get_active par dialog_options_repexec et en ajoutant ça tout au début de la fonction dialog_options_mouse_click :
Code:
if (info.ActiveOptionID > 0)
        info.RunActiveOption();

Comme tu le dis par contre, il faut aussi manuellement afficher gdial. L'astuce, c'est de rendre le fond de la surface de dessin du dialogue personnalisé transparent. Pour ça, il suffit d'enlever le 0 dans info.Surface.Clear (0); et ça dessinera un fond transparent plutôt qu'un fond noir.
Ensuite, tu peux mettre gdial.Visible = true; tout au début de la fonction dialog_options_render (assure-toi bien que gdial a les mêmes coordonnées et la même taille que ce que tu indiques pour info dans dialog_options_get_dimensions). Pour le moment, gdial resterait affiché "pour toujours" une fois que tu as lancé un dialogue (c'est-à-dire même après que le dialogue finit). Je te suggère donc d'ajouter ça tout au début de la fonction dialog_options_mouse_click :
Code:
if (mouse.y >= info.Y && mouse.y <= info.Y + info.Height && mouse.x >= info.X && mouse.x <= info.X + info.Width)
    gdial.Visible = false;

Voilà, avec tout ça ça devrait le faire, je pense. Évidemment pour le moment ça gère le défilement par molette seulement, mais tu peux ajouter des boutons sur ton GUI si tu veux pour jouer avec decalageY.

EDIT : voilà le script que j'ai utilisé pour mes tests. Je l'ai ajouté dans un fichier script séparé (mais ça marcherait aussi dans le Global Script) et j'ai utilisé un jeu de résolution 320x200. Mon interface gGui1 a les mêmes dimensions et positionnement que info (230x40px, left: 0, top: 100) et ne contient aucun bouton ni rien.
Code:
int differenceHauteurs = 0; // vaudra hauteur de la fenetre GUI - hauteur totale du texte des options
int decalageY = 0; // pixels de decalage vers le haut pour le texte des options
 
function dialog_request(int param)
{
 
}
 
function dialog_options_get_dimensions(DialogOptionsRenderingInfo *info)
{
// Créer une zone d'options de dialogue 200x200 à (50,100)
   info.X = 0;
   info.Y = 100;
   info.Width = 230;
   info.Height = 40;
}
 
function dialog_options_render(DialogOptionsRenderingInfo *info)
{
   gGui1.Visible = true;
   info.Surface.Clear ();
   int i = 1, ypos = 0 - decalageY; // la premiere option s'affiche a 0 - decalageY
   // Rendre toutes les options activées
   while (i <= info.DialogToRender.OptionCount)
   {
     if (info.DialogToRender.GetOptionState (i) == eOptionOn)
     {
       if (info.ActiveOptionID == i) info.Surface.DrawingColor = 14;
       else info.Surface.DrawingColor = 4;
       info.Surface.DrawStringWrapped (5, ypos, info.Width - 30, eFontFont0, eAlignLeft, info.DialogToRender.GetOptionText (i));
       ypos += GetTextHeight (info.DialogToRender.GetOptionText (i), eFontFont0, info.Width - 30);
     }
   i ++;
   }
   // Dessin des boutons UP et DOWN
   info.Surface.DrawingColor = 30;
   info.Surface.DrawRectangle(205, 5, 215, 15);
   info.Surface.DrawRectangle(205, 25, 215, 35);
   info.Surface.DrawingColor = 0;
   info.Surface.DrawString(207,  7, eFontFont0, "^");
   info.Surface.DrawString(207, 27, eFontFont0, "v");
   differenceHauteurs = (ypos + decalageY) - info.Height; // ypos vaut maintenant la hauteur totale des options (-decalageY)
}
 
function dialog_options_repexec(DialogOptionsRenderingInfo *info)
 {
   info.ActiveOptionID = 0;
   if (mouse.y < info.Y || mouse.y >= info.Y + info.Height ||
        mouse.x < info.X || mouse.x >= info.X + info.Width)
    {
        return; // return if the mouse is outside UI bounds
    }
   int i = 1, ypos = 0 - decalageY; // prends en compte le decalage ici aussi
   // Trouver l'option qui correspond à l'endroit où le joueur a cliqué
   while (i <= info.DialogToRender.OptionCount)
   {
     if (info.DialogToRender.GetOptionState (i) == eOptionOn)
     {
       ypos += GetTextHeight (info.DialogToRender.GetOptionText (i), eFontFont0, info.Width - 30);
       if ((mouse.y - info.Y) <ypos)
       {
         info.ActiveOptionID = i;
         return;
       }
     }
   i ++;
   }
 }
 
 function dialog_options_key_press(DialogOptionsRenderingInfo *info, eKeyCode keycode)
{
    if (keycode == eKeyUpArrow && differenceHauteurs > 0 && decalageY < differenceHauteurs)
        decalageY += 5; // touche haut : on monte le texte si fenetre pas assez haute et si decalage max pas encore atteint
    else if (keycode == eKeyDownArrow && differenceHauteurs > 0 && decalageY > 0)
       decalageY -= 5; // touche bas : on descend le texte si fenetre pas assez haute et s'il reste du texte qui depasse par le haut
        
}
 
 function dialog_options_mouse_click (DialogOptionsRenderingInfo *info, MouseButton button)
 {
    // Si souris est à droite des options de dialogue (au-dessus des boutons ^ / v)
    if (mouse.x-info.X >= 200 && mouse.x-info.X <= 220) {
      if (mouse.y-info.Y >= 0 && mouse.y-info.Y <= 20)
        decalageY -= (differenceHauteurs > 0 && decalageY > 0) * 5; // UP
      else
        decalageY += (differenceHauteurs > 0 && decalageY < differenceHauteurs) * 5; // DOWN
      if (decalageY < 0)
        decalageY = 0;
    }
    else if (info.ActiveOptionID > 0){ // Clic sur une option : lance la & efface gGui1
        info.RunActiveOption();
        gGui1.Visible = false;
    }
}

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !


Dernière édition par Kitai le Mar 23 Oct 2018 - 15:44, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
CookiewooD
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?
avatar

Nombre de messages : 38

Age : 29

Localisation : Gard

Date d'inscription : 18/09/2018


MessageSujet: Re: Scrolling Down/Up pour dialogue   Mar 23 Oct 2018 - 15:22

Pouah, tellement de solution qui s'ouvrent tout d'un coup sourire

Merci beaucoup ! j'vais explorer tout ça et voir avec les collègues ce qu'elles préfèrent. Valoulef, tu marque un point, c'est vrai que c'est agréable d'avoir toute les options d'un coup d'oeil, je sais pas pourquoi je fais une fixette sur le scrolling.

Je vous tiens au courant .

Merciiiiiiii
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Scrolling Down/Up pour dialogue   

Revenir en haut Aller en bas
 
Scrolling Down/Up pour dialogue
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Fin de l'association UDE/Ankama pour Wakfu TCG
» CaC pour bi-élément feu/terre
» xp pour panda air
» Pano pvp pour un panda air tutufié lvl 165
» help pour mon stuff panda multi 110

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: