Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Cdiscount : -30€ dès 300€ d’achat sur une sélection Apple
Voir le deal

 

 Rester figé sur une action, empêcher les autres actions.

Aller en bas 
2 participants
AuteurMessage
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptySam 30 Mar 2024 - 23:27

J'ai 2 persos qui vont faire une action ensemble. L'un appuie sur un bouton, je lance un timer, l'autre doit faire une autre action avant la fin du timer. Il faut que le premier reste à appuyer sans pouvoir bouger. Mais si je clique sur le sol par exemple, il se déplace, sans d'ailleurs la bonne anim de marche (puisqu'il n'est pas sur la bonne view). Il y a cette fonction StopMoving, mais ça ne marche pas, je ne vois même pas à quoi ça sert. La seule solution que je vois est de changer de perso jouable et empêcher de resélectionner le premier jusqu'à la fin du timer. Mais je voudrais éviter. Si quelqu'un a une idée...
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyDim 31 Mar 2024 - 8:34

Gob a écrit:
La seule solution que je vois est de changer de perso jouable et empêcher de resélectionner le premier jusqu'à la fin du timer. Mais je voudrais éviter. Si quelqu'un a une idée...

Avis, sur le plan du programme :
Si tu sais faire ça, c'est probablement la meilleure solution (à mon avis).
Ou bien une variante sur ce principe :
- Perso 1 appuie sur le timer
- Perso 1 est retiré de la scène
- Remplacer Perso 1 par une image fixe

Si -> Fin du timer OU Perso 2 effectue l'action
- Retirer l'image fixe de Perso 1
- Réinstaller Perso 1 dans la scène

J'ai pas testé, mais dans le principe (si c'est ce que je crois) ça permettrait de coder le tout dans le script de la scène.
Alors que l'autre principe (celui de bloquer le personnage pendant le timer) nécessiterait du code au niveau supérieur (script global), et par conséquent encombrerait sur toute la longueur du jeu alors que ça n'est utile qu'à une scène particulière.

Avis sur le plan du jeu :
Gob a écrit:
Mais si je clique sur le sol par exemple, il se déplace, sans d'ailleurs la bonne anim de marche (puisqu'il n'est pas sur la bonne view)

Si tu peux corriger ce problème de view, et interrompre le timer, alors ce serait pas vraiment problématique.

Sauf si c'est justifié par le scénario que le perso soit bloqué pendant le timer. Par exemple :
- Perso 1 met le doigt dans une prise électrique, le perso 2 doit aller au disjoncteur couper le courant.
- Perso 1 actionne l'ouverture d'une porte pour permettre au perso 2 de passer.

Donc sauf ce genre de chose, si tu bloques un personnage sans que ce soit cohérent dans le scénario, le joueur pourrait avoir l'impression d'être bloqué par un bug.
Ainsi tu lui laisses la liberté d'activer/désactiver le timer, et charge à lui de comprendre que pour résoudre la chose il doit laisser le perso 1 à cet endroit. (par conséquent tu es quitte de programmer le blocage)

Si c'est suivi d'un évènement qui permet la progression du perso 2, ça devrait être assez simple à comprendre normalement.

Autre option (si le scénario le permet)
Quand le perso 1 active le timer, tu permutes le perso jouable au perso 2.
Si le joueur reprends le contrôle du perso 1 -> ça interrompt le timer
Si le timer aboutit sans que le perso 2 ait terminé son action -> Reviens au perso 1, réinitialise la position du perso 2.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyDim 31 Mar 2024 - 14:17

Hello,

J'aimerais éviter de passer au player 2 automatiquement, mais s'il n'y a pas de moyen de bloquer le player 1...

Idéalement je voudrais bloquer le perso 1 jusqu'à la fin du Timer mais je ne sais pas comment faire.
Le remplacer par un objet fixe, oui, mais si je mets juste le perso 1 en transparent, on pourra le déplacer quand même. La solution pourrait être de faire à la place de l'objet fixe un perso fixe numéro 3, qui deviendrait player... Je vais peut être m'orienter par là...


Interrompre le timer, redonner sa view au perso 1 pour qu'il reprenne sa vie, je ne sais pas comment faire. Ni si c'est possible, de déclencher des actions suite à un clic sur le sol, sur un objet ou autre... Sauf sur le player 2. Ca risque d'être problématique de toute façon...
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyDim 31 Mar 2024 - 14:57

Tu devrais pouvoir utiliser ça :

https://adventuregamestudio.github.io/ags-manual/Character.html#characteron
Citation :
Character.on

Code:
int Character.on

Gets/sets whether the character is enabled and visible. This lets you disable any character anytime, including player character. When disabled a character will not be drawn on screen and not updated (not animating, not moving, etc). Disabled characters may still be modified and have their coordinates changed by setting their corresponding properties directly, and also moved to another room with ChangeRoom function.

Rooms have a property called "ShowPlayerCharacter", which is enabled by default. If this property is disabled, then player character will have their on property set to 0 when such room is loaded, and restored it to 1 when leaving that room.

J'ai pas cherché d'exemple, mais d'après la description :

Code:
cPerso_1.on = 0; //Bloque et masque le perso

cPerso_1.on = 1; //Active et affiche le perso

Selon cette doc, en procédant ainsi, la variable du personnage n'est pas détruite. Juste une interruption de l’affichage et des interaction du joueur avec ce personnage.
Dans tes scripts tu gardes tout moyens de consulter, modifier, déplacer le personnage, etc. Et tu le réactive quand tu voudras.

Une autre idée : Le mur invisible.
Quand le Perso 1 appuie sur le bouton et pendant que le timer est en route : tu modifie le Walkable Area de la pièce, pour qu'il soit bloqué à cet emplacement.
Quand le timer est terminé, tu rétablis le Walkable Area d'origine.

En gros ça pourrait juste être un mur invisible de quelques pixels. Il suffirait juste au début de l’interaction du bouton, de faire un walk to vers une coordonnée bien précise : là où tu modifie le walkable area

Les murs invisibles c'est un classique de game-design. T'es quitte de bidouiller l'afficha/non affichage, ou de scripter des trucs dans ton personnage.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyDim 31 Mar 2024 - 15:34

cPerso.on=0; Je ne connaissais pas cette fonction mais ça marche impec ! Je n'ai eu qu'à afficher un objet à la place. Excellent, merci. Ca me resservira sûrement. Bon week.
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyMar 2 Avr 2024 - 12:29

Super sourire

C'est pas pour pinailler, mais pour progresser dans la bonne compréhension du langage (et sa documentation)
Code:
cPerso.on
N'est pas une fonction, mais une propriété (héritée de l'objet Character)

Les objets de programmation (ou types) comportent des "propriétés" et des "méthodes".
- Les méthodes, c'est comme des fonctions liée à cet objet.
- Les propriétés, c'est plutôt comme des variables liées à cet objet.

Une différence, c'est par exemple que tu peux aussi lire/vérifier sa valeur (si c'est 1 ou 2).
Dans le cas d'une méthode (fonction) ce serait un peu différent : elle devrait s'exécuter, puis éventuellement tu pourrais lire/vérifier son résultat (si elle retourne quelque chose).

Et ici par exemple, il faut que tu changes sa valeur pour que ça produise un effet dans le jeu.
Si jamais tu oublies ça et confonds ces 2 notions, un jour il pourrait peut-être t'arriver d'écrire ça :
Code:
cPerso.on(true);
Et ça te produirait un bug avec un message du style "cPerso.on is not a function".. Il te faudra corriger par :
Code:
cPerso.on = 1;

Je ne sais pas si cette propriété accepte uniquement comme valeur 0 ou 1
ou si ça peut aussi tolérer true / false (c'est pas dit dans la doc)

Pour ma part, quand j'ai commencé à comprendre ces principes de base des langage POO (Programation Orientée Objet) ça m'a beaucoup débloqué. ça m'as mis plus à l'aise pour fouiller dans la documentation. Quand je cherche comment faire quelque chose, ça me permet de concentrer la recherche parce que je sais quels objets sont impliqués.
Là par exemple, faut savoir que cPerso est une instance de l'objet Character, donc j'ouvre la page de doc Character et je regarde la liste de ses methodes pour voir ce qu'il peut faire, ou la liste de ses propriétés pour voir ce que je peux utiliser.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyJeu 4 Avr 2024 - 14:05

... Je m'aperçois que cette solution n'est pas si adaptée. Quand mon perso est à zéro, donc ni affiché, ni actif à priori, si je clique sur une zone (objet, hotspot, perso) sur laquelle une action est prévue avec ce perso, le jeu bloque, plus de curseur... Ce n'est pas intéressant de désactiver toutes ces zones pendant le laps de temps... Retour à la case départ.

Sauf si je fais de l'objet transitoire un perso... Il faut que je teste.
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyJeu 4 Avr 2024 - 16:01

Tu ne devais pas basculer le contrôle (par le joueur) sur le perso n° 2 ?
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyJeu 4 Avr 2024 - 17:33

Je préfère éviter cet artifice dans ce cas.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyJeu 4 Avr 2024 - 20:51

Le coup du perso transitoire ne marche pas, pour des raisons d'inventaire et de sélection du deuxième perso qui ne fonctionne plus.

Et la solution, qui ne me convient qu'à moitié, de basculer sur le deuxième perso ne fonctionne pas non plus. Tout cela est merdique...
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyVen 5 Avr 2024 - 5:27

Pour résumer, au départ tu demande comment bloquer cPerso1 sur place, et comme plan B basculer au cPerso2 le temps du timer.
Si je résumer, en fait les deux options options ne te conviennent pas.

Du coups la solution ce serait celle-ci :
Citation :
Avis sur le plan du jeu :
Gob a écrit:
Mais si je clique sur le sol par exemple, il se déplace, sans d'ailleurs la bonne anim de marche (puisqu'il n'est pas sur la bonne view)

Si tu peux corriger ce problème de view, et interrompre le timer, alors ce serait pas vraiment problématique.

C'est à dire, faire confiance au joueur pour comprendre comment résoudre ce puzzle, en laissant de lui-même cPerso1 sur le bouton pendant le timer.
Donc ce qu'il faudrait résoudre :
- Rétablir la View normale de cPerso1
-> lorsque le timer est terminé
-> si le joueur déplace cPero1 avant ce delai
-> si le joueur active autre chose avec cPerso1 avant ce délai

J'ai une idée pour le résoudre dans le cas d'un clic sur une zone (objet, hotspot..) mais pour la fin du timer ou le déplacement simple (walk to) il me faudrait investiguer...
Confirme moi si cette solution conviendrait.

Sinon l'autre option resterait de bloquer cPerso1, d'une façon ou d'une autre. Mais j'ai aucun élément pour savoir ce qui conviens ou pas (je suis dans l'abstraction).
Il y a l'idée que l'action sur le bouton modifie la walkable area qui se rétablirait à la fin du timer ou résolution de l'énigme.

Ou bien, tel que j'imagine (dans un point & clic) devoir collaborer entre 2 persos pour mener une action coordonnée :
C'est pas le cPerso1 qui devrait appuyer sur le bouton, mais le cPerso2. Pour ce faire, le joueur devrait lui demander de le faire via un dialogue. Du genre : "Appuie sur le bouton, je vais essayer un truc."
Le cPerso2 s’exécute, et relâche à la fin du timer : ou provoquer un cutscene à la fin du timer pour rétablir la situation initiale.

Dans les 2 cas, côté script, il faudrait trouver le moyen de capter l'event de fin du timer.
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyVen 5 Avr 2024 - 5:56

Je pose ça là (on verra après)

https://adventuregamestudio.github.io/ags-manual/EventTypes.html#room-events
Citation :
Repeatedly execute

Code:
function room_RepExec()

Occurs repeatedly on every game cycle, at a frequency defined by the game speed (for example if game speed is 40, then this event will occur 40 times per second, about every 25 milliseconds). This event is a equivalent of a global repeatedly_execute callback, as repeatedly_execute is not run in room scripts.

https://adventuregamestudio.github.io/ags-manual/Globalfunctions_General.html#istimerexpired
Citation :
IsTimerExpired
Code:

bool IsTimerExpired(int timer_id)

Checks whether the timer TIMER_ID has expired. If the timeout set with SetTimer has elapsed, returns true. Otherwise, returns false.

Note that this function will only return true once - after that, the timer is placed into an OFF state where it will always return false until restarted.

Example:

Code:
if (IsTimerExpired(1)) {
    Display("Timer 1 expired");
}

will display a message when timer 1 expires.

See also: SetTimer

Il faudrait combiner les deux, et probablement créer 2 variables pour contrôler la situation
- (globale) pour la résolution de l'énigme, par défaut à false : elle devrait être globale s'il n'y a pas lieu de reproduire la manœuvre du bouton à chaque fois qu'on passe dans cette room.
- (locale) lorsque le perso qui actionne le bouton est sensé être bloqué. Par défaut à false, passé à true lorsqu'il active le bouton et que le timer est lancé.

Brouillon de code (il manque surement des choses)
Code:
bool bDoorOpen = false;

bool bPersoStop = false;

function room_RepExec(){
   
   if (bDoorOpen == false) {
   
      if (bPersoStop == true && IsTimerExpired(1)) {
         //Rétablir la view de cPerso
         // ...
         
         bPersoStop = false;
      }
   
   }
}
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyVen 5 Avr 2024 - 7:50

Je n'ai pas de problème avec la fin du timer, tout reprend sa place.
Ce que je voudrais, c'est que le perso1 reste en position pré appuyage de bouton, et que cliquer ailleurs ne produise pas d'effet. Si ce n'est pas possible, peut être, en effet, qu'il reprenne sa view de marche et qu'il aille agir ailleurs... Mais, si je dois mettre une variable sur chaque zone pour détecter qu'il était en timer pour remettre la view, c'est jouable bien que galère (il y a beaucoup de zones et 2 persos, et l'action bouton timer fonctionne dans les 2 sens, avec les 2 persos). Et surtout, [u]est ce qu'on peut détecter qu'on a cliqué sur le sol ?

Passer automatiquement au deuxième perso, et empêcher de reselectionner l'autre est une solution que j'ai déjà utilisé précédemment mais je voudrais éviter dans ce cas. D'ailleurs j'ai essayé hier, ça pose d'autres problèmes.

Non, idéalement, c'est le blocage du perso sélectionné en train d'appuyer sur le bouton qui m'intéresserait. Le code on=0 paraissait bien, mais on a l'impression qu'ils ont oublié le cas où on cliquerait sur une zone. Ou alors j'utilise ça et je teste la variable à chaque zone... Lourd car mon jeu est en 16/9 et on peut cliquer sur beaucoup de zones. Je vais peut être repartir là dessus.
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyVen 5 Avr 2024 - 9:00

Gob a écrit:
Mais, si je dois mettre une variable sur chaque zone pour détecter qu'il était en timer pour remettre la view, c'est jouable bien que galère (..)
Non, il n'y aurait qu'une seule variable (ou 2) pour le tout.

Gob a écrit:
Le code on=0 paraissait bien, mais on a l'impression qu'ils ont oublié le cas où on cliquerait sur une zone.

Si c'est que ça, alors ça pourrait être simple.

Dans les fonctions d’interaction de zone il s'agirait d'ajouter la vérification que on == 1
Ou plus simple : terminer la fonction si on == 0

Par exemple, avec un code de l'autre topic :
Code:
function cSecret_UseInv() {
   
   if(player.on == 0) {
      return false; //termine la fonction
   }
   
   if (cGob1.ActiveInventory == iPerro && D06G1In==1) {
      if(D06EntreeTruculo==false) {
         cGob1.FaceDirection(eDirectionDown);
      }
      if(D06EntreeTruculo==true) {
         cGob1.Walk(699, 410, eBlock,eWalkableAreas);
         cGob1.FaceDirection(eDirectionRight);

         if (D06SecretaireInterview==0) {
            D06SecretaireInterview=1;
            D06Reportage=D06Reportage+1;
         }
      }
   }

   if ((cGob2.ActiveInventory == iBloc)&&(D06G2In==1)) {
      if(D06EntreeTruculo==false) {
         cGob2.FaceDirection(eDirectionDown);
      }
      if(D06EntreeTruculo==true) {
         cGob2.Walk(673, 422, eBlock,eWalkableAreas);
         cGob2.FaceDirection(eDirectionRight);

         if (D06SecretaireDessin==0)   {
            D06SecretaireDessin=1;
            D06Reportage=D06Reportage+1;
         }
      }
   }
   else {
      JSP(player.ActiveInventory);
   }
}

Après, je sais pas si c'est plus judicieux de faire return false; ou juste return;
À priori les 2 fonctionnent, possiblement pareil. Mais c'est possible que return false; ait pour effet (en plus) de considérer l'action comme "non-faisaible" (bloquer complètement l'action)

Test-le seulement sur une zone pour l'instant, pour voir si ça fonctionne.

Et ensuite vois s'il se produit quelque chose si tu interagis avec quelque chose où tu n'as pas scripté d’interaction.
-> s'il y a un problème avec les zones/actions non-scriptés alors il faudrait intervenir dans les events global, et dans ce cas là ça ne sera pas nécessaire de faire dans le détail de chaque zone/objet scripté.

Enfin je crois. Dans l'autre cas, il faudrait le faire pour les 2 : global et local (à la room)
Et il s'agira de le faire unique pour player, et pas particulièrement pour cPerso1, cPerso2. Faut juste vérifier le cas pour le personnage actuellement joué.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyVen 5 Avr 2024 - 12:50

Hello, oui ça fonctionne, indispensable pour toutes les zones où il y a une interaction, plus quand c'est une interaction d'objet. Donc c'est un peu lourd, pour l'instant 18 zones. Mais ça marche.
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyVen 5 Avr 2024 - 13:07

Et du coups, est-ce qu'il y a besoin de résoudre quelque chose pour les zones non-scriptées ? Walk-to etc ?

S'il n'y a pas besoin alors t'as juste à coller ça, au début de chaque fonctions (zones)
Code:
  if(player.on == 0) {
      return false; //termine la fonction
  }

C'est peut-être fastidieux à faire, mais sinon pour l'exécution du code c'est pas lourd. Au contraire, ça skip tout le reste.

En fait, ce serait seulement pour les zones qui impliqueraient au personnage de se déplacer (jusqu'à la zone/objet). Et tu peux parfaire la chose en ajoutant un court dialogue :
Code:
  if(player.on == 0) {
      player.Say("Je ne peux pas y aller, j'ai la main sur le bouton...");
      return false; //termine la fonction
  }
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyVen 5 Avr 2024 - 13:08

Citation :
S'il n'y a pas besoin alors t'as juste à coller ça, au début de chaque fonctions (zones)
-> seulement pour les zones de la Room où se trouve le bouton.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyVen 5 Avr 2024 - 15:09

Oui ça fonctionne comme ça mais j'étudie une solution plus pratique, dans

function do_room_action

Je te dirais ce que j'ai retenu.

Je ne peux pas rajouter de texte là, il faudrait que je fasse parler le bonhomme dans sa position.
Revenir en haut Aller en bas
Clique
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Clique


Nombre de messages : 106

Date d'inscription : 11/05/2022


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptySam 6 Avr 2024 - 7:02

Mais oui, c'est vrai.. Désolé..
Mais c'était aussi pour dire que quelque chose pourrait s'ajouter (au besoin).

J'ai parcouru un peu la doc, pour voir s'il y avait autre chose que la propriété "on", mais j'ai pas trouvé. Il semble qu'à la base c'est censé servir pour virer facilement des personnages non-joueur des scènes, dans le cours du jeu. Et ça inclue les personnages par le fait (hérité du type Character).
ça expliquerait pourquoi l'effet est aussi radical : ça bloque ET enlève le personnage de l'affichage en même temps.

Pour la méthode stopMoving si ça ne fonctionne pas comme tu l'entendais, c'est parce que ça sert uniquement à interrompre un mouvement en cours. Ce n'est pas conçu pour bloquer.

J'ai aussi trouvé ces propriétés : Hotspot.Enabled, Region.Enabled
Qui me semblent similaires à Character.on pour facilement retirer un Hotspot, fermer une Region en cours de jeu.
Mais ça sera pas utilisable dans notre cas, dans la mesure où il y a deux personnages en scène. Il ne faut bloquer les zones que pour le personnage sur le bouton quand le timer est en cours. Et pendant ce temps, les zones doivent rester accessibles à l'autre personnage.

J'ai rien trouvé d'autre.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. EmptyDim 7 Avr 2024 - 20:31

Voilà la solution, qui à priori fonctionne. D'abord virer le clic gauche si le player est on=0. Puis virer les actions dans l'inventaire:

Code:

function do_room_action(MouseButton button)
{
  if (GetLocationType(mouse.x, mouse.y) != eLocationNothing)
  {
    // clicked on something
    if (player.ActiveInventory == null)
    {
      if (button == check_reversed(eMouseLeft))
      
      {
        // left click to interact with target
        if(player.on != 0 || Character.GetAtScreenXY(mouse.x, mouse.y) == cGob1 || Character.GetAtScreenXY(mouse.x, mouse.y) == cGob2)
      {  
        Room.ProcessClick(mouse.x, mouse.y, eModeInteract);
      }  
      }
      else
      {
        // right click to look at target
        Room.ProcessClick(mouse.x, mouse.y, eModeLookat);
      }
    }
    else
    {
      if (button == check_reversed(eMouseLeft))
      {
        // left click to use inventory on target
        Room.ProcessClick(mouse.x, mouse.y, eModeUseinv);
      }
      else
      {
        // right click to deselect inventory item
        player.ActiveInventory = null;
      }
    }
  }
  else
  {
    // click on nothing
    if (player.ActiveInventory == null)
    {
      // left click to walk
      Room.ProcessClick(mouse.x, mouse.y, eModeWalkto);
    }
    else
    {
      // right click to deselect inventory item
      player.ActiveInventory = null;
    }
  }
}


function do_inventory_action(MouseButton button, InventoryItem* item)
{
  if (button == check_reversed(eMouseLeftInv))
  {
    if (player.ActiveInventory == null)
    {
      if (item.GetProperty("InstantUse") == true)
      {
        // left click to instant use (if property is set)
        item.RunInteraction(eModeInteract);
      }
      else
      {
        // left click to set active inventory item
     if (player.on !=0 || Character.GetAtScreenXY(mouse.x, mouse.y)==cGob1 || Character.GetAtScreenXY(mouse.x, mouse.y)==cGob2)
     {
       player.ActiveInventory = item;
     }
     }
     }
    else if (item.ID != player.ActiveInventory.ID)
    {
      // left click to use active inventory on another item
      item.RunInteraction(eModeUseinv);
    }
    else
    {
      // left click item on itself to deselect it
      player.ActiveInventory = null;
    }
  }
  else
  {
    // right click to look at inventory item
    if (player.on !=0 || Character.GetAtScreenXY(mouse.x, mouse.y)==cGob1 || Character.GetAtScreenXY(mouse.x, mouse.y)==cGob2)
   {   item.RunInteraction(eModeLookat);
   }
  }
}



Revenir en haut Aller en bas
Contenu sponsorisé





Rester figé sur une action, empêcher les autres actions. Empty
MessageSujet: Re: Rester figé sur une action, empêcher les autres actions.   Rester figé sur une action, empêcher les autres actions. Empty

Revenir en haut Aller en bas
 
Rester figé sur une action, empêcher les autres actions.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Empêcher le joueur de passer un dialogue
» Action dans l'inventaire
» [résolu] Comment empécher clic de souris pendant une séquence de jeu ?
» [résolu]Position du personnage lors d'actions
» Répéter une action...

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: