Ok alors je suis allé voir à quoi ressemblait le template en question (je n'avais plus AGS sur mon pc). En ce qui concerne ton premier problème c'est effectivement dans le repeatedly_execute du script "TwoClickHandler" :
- Code:
-
function repeatedly_execute()
{
if (!gInventoryBar.Visible && mouse.y <= INVENTORY_POPUP_POSITION)
{
gInventoryBar.Visible = true;
}
Ce que ça dit c'est que quand la coordonnée y de la souris sera inférieure ou égale à la valeur de INVENTORY_POPUP_POSITION (par défaut définie sur 7 dans le
header) alors l'inventaire devient visible.
Pour le fait que le menu ne disparaît pas quand tu appuies à nouveau sur la touche Espace, cela doit venir d'ici, au début de la fonction on_key_press du GlobalScript :
- Code:
-
function on_key_press(eKeyCode keycode)
{
if (IsGamePaused()) keycode = 0;
Là en gros ça désactive le clavier quand le jeu est en pause. J'en déduis donc que tu as du régler ton GUI sur "Pause Game when shown" (j'avais oublié cette possibilité).
La solution : Dans le repeatedly_execute du premier script ("TwoClickHandler"), tu peux ajouter ça au tout début :
- Code:
-
function repeatedly_execute()
{
if (IsGamePaused()){
}
return;
En faisant ça, tout ce que tu mettras à l'intérieur de cette fonction sera exécuté :
- Que le jeu soit en pause ou non pour tout ce que tu mettras au dessus de cette condition.
- Si et seulement si le jeu est en pause pour tout ce que tu mettras entre les accolades de cette condition.
- Si et seulement si le jeu
n'est pas en pause pour tout ce qui se trouve en dessous de "return;" (les lignes pré-codées, donc).
Ainsi, la commande rendant l'inventaire visible étant placée en dessous de ce "return;", elle ne sera plus appelée lorsque tu seras dans le menu pause et l'inventaire ne s'affichera donc plus.
Ensuite tu peux faire pareil en modifiant légèrement la fonction on_key_press du GlobalScript comme suit :
- Code:
-
function on_key_press(eKeyCode keycode)
{
if (keycode == eKeySpace){
if (gPause.Visible) gPause.Visible = false;
else {
gInventoryBar.Visible = false;
gPause.Visible = true;
}
}
if (IsGamePaused()) {
//remplace "keycode = 0" par ces accolades
}
return;
//Les commandes par défaut sont à laisser en dessous
De cette manière, comme vu précédemment, ton code devrait s'exécuter que le jeu soit en pause ou non, tout en laissant les autres touches ne fonctionner que si le jeu n'est pas en pause.
Edit : J'ai modifié la proposition de
@Kitai après coup, car je me suis rendu compte qu'en l'état, la barre d'inventaire risquait d'apparaître une fraction de seconde sans raison valable au moment où le joueur quitte la pause, ce qui n'aurait pas fait très propre.
C'est vrai que le piège avec les templates, c'est que ça peut être tentant quand on débute pour se faciliter la tâche, mais le problème c'est que dès que l'on veut un tant soit peu personnaliser le moteur, on entre en conflit avec tout ce qui a été programmé par quelqu'un avant et qu'il n'est pas forcément aisé de déchiffrer. Surtout ici où le code est réparti sur deux scripts. Après ça peut être aussi une source d'inspiration de se pencher sur la manière dont le template à été programmé...
Bref, j'espère avoir été assez clair, n'hésite pas à nous dire ce que ça donne.