Elevator Question

If you feel like you're up to the challenge of building your own Ages in Blender or 3ds Max, this is the place for you!

Re: Elevator Question

Postby Sirius » Sun Jun 26, 2022 3:29 am

Maroonroon wrote:Je ne sais pas si c'est dû à ### Python Glue ###, ou au micmac avec les espaces et tabulations, ou à une différence d'encodage, ou à 2 ou 3 de ces choses, mais c'est corrigé.

Oui, gérer les scripts avec des programmes différents risque de poser problème. Je préfère laisser Korman faire par simplicité, et dans ce cas rajouter toute la section "glue" n'est pas nécessaire vu que Korman s'en charge. Et vu que la syntaxe de Python repose sur les indentations, un mélange d'espaces et de tabulation peut causer des bugs, en effet.
Mais si tu as pu trouver un compromis pour que les deux programmes cohabitent, c'est le principal.

Maroonroon wrote:L'Exclude Region (subworld) de l'ascenseur est à nouveau active pas défaut, ainsi que celle (world) du rez-de-chaussée ; je ne peux donc pas entrer/sortir de l'ascenseur sans l'avoir fait bouger une 1ère fois.

Assure-toi de désactiver et réactiver ces régions avec les responders que le script te mets à disposition. Normalement le script appelle les bons responders au bon moment (y compris losque l'Âge est en train de charger) pour éviter ce genre de problème.
Par exemple, une barrière qui empêche de sortir de l'ascenseur doit être désactivée avec l'état 0 du responder 5, et réactivée avec l'état 1 de ce même responder.
Pour des barrières spécifiques à chaque étage : les barrières doivent toutes être réactivées lors des états 0 et 1 du responder 5 (ça t'assure que dès que l'ascenseur bouge tout est bloqué), et désactivées au cas par cas dans un des responders d'ID 6 (sachant que le premier responder d'ID 6 sera appelé au RDC, le deuxière responder appelé au premier étage, etc).
Regarde la manière dont les cubes verts sur le côté de l'ascenseur s'activent en fonction de l'étage où celui-ci est arrêté, tes exclude regions devront être activées/désactivées avec les mêmes responders.

Maroonroon wrote:2) J'active et désactive des visuels en fonction de l'étage actuel (activator 4 > responder > responder state > Enable/Disable > send to object), et ça fonctionne, sauf que l'état initial des visuels n'est pas chargé en fonction du SDL au chargement de l'Âge ; ils deviennent corrects lors d'un 1er changement d'étage.
(Pour mes ascenseurs ces activations/désactivations doivent techniquement être faites lors du clic sur un bouton.)

Pareil que précédemment - utilise les responders 5 et 6 pour envoyer ces messages, vu que c'est le script qui les gère. Ne passe pas directement par l'activator, celui-ci répond bêtement aux clics de l'utilisateur et ignore tout ce qui est lié au script, tel l'étage actuel.

Explication plus longue:
Show Spoiler


Maroonroon wrote:3) J'active et désactive également des boutons en fonction de l'étage actuel (à chacun est lié un node-tree avec un node Python File "xAgeSDLIntShowHide.py").
Pour les boutons qui sont dans la console de l'ascenseur, "xAgeSDLIntShowHide.py" est sans effet. (Des Enable/Disable également.)

Ce sont des boutons qui contrôlent l'ascenseur ? Ou bien qui se déplacement juste avec l'ascenseur lui-même ? Mon script gère automatiquement la désactivation/réactivation des boutons qui contrôlent l'ascenseur pour éviter certains problèmes, donc ça peut rentrer en conflit. Si ce sont des boutons qui ne sont pas gérés par le script, dans ce cas c'est peut être un bug avec la désactivation/réactivation de clickables dans un subworld, le moteur de jeu a l'air d'avoir du mal avec ça.

Maroonroon wrote:5) Quand on regarde la console, on peut déplacer l'avatar en avant avec la souris ou la flèche directionnelle du haut, et aussi à gauche et à droite avec les touches "virgule" et "point-virgule", sans sortir de la vue caméra de la console.

Hmm, oui. J'ai oublié de désactiver ça. Je regarderai comment on peut faire...


Maroonroon wrote:Edit 2:
Pour la 1ère partie du 3) on m'a donné une piste pour changer la couleur d'un material, mais que ce soit pour changer la couleur d'un material (bouton off = noir, l'ascenseur n'est pas à l'étage actuel ; bouton on = rouge, l’ascenseur est à l'étage actuel), ou que ce soit pour changer l'opacité des deux textures d'un material (au début, l'ascenseur n'est pas à l'étage actuel : opacité 100% pour le noir et 0% pour le rouge ; à la fin, l’ascenseur est à l'étage actuel : 0% pour le noir et 100% pour le rouge), ça ne fonctionne pas ; ça reste tout le temps noir, que je fasse Unwrap ou non.

J'ai jamais touché aux animations de materials vu que je sais que c'est pas simple :lol: Si tu veux vraiment je peux tenter de voir comment ça fonctionne, mais très souvent les gens font juste une copie du bouton avec une couleur différente et activent ou désactivent un visuel ou l'autre.
User avatar
Sirius
 
Posts: 1506
Joined: Mon Jul 26, 2010 4:46 am
Location: France

Re: Elevator Question

Postby Maroonroon » Sun Jun 26, 2022 5:26 am

Sirius wrote:
Maroonroon wrote:Je ne sais pas si c'est dû à ### Python Glue ###, ou au micmac avec les espaces et tabulations, ou à une différence d'encodage, ou à 2 ou 3 de ces choses, mais c'est corrigé.

Oui, gérer les scripts avec des programmes différents risque de poser problème. Je préfère laisser Korman faire par simplicité, et dans ce cas rajouter toute la section "glue" n'est pas nécessaire vu que Korman s'en charge. Et vu que la syntaxe de Python repose sur les indentations, un mélange d'espaces et de tabulation peut causer des bugs, en effet.
Mais si tu as pu trouver un compromis pour que les deux programmes cohabitent, c'est le principal.

Eh bien je suis revenu à UruTweak pour le SDL et Notepad++ pour le Python.
J'espère que la section "glue" n'est pas un truc qui sera mis à jour, car si dans le cas d'une gestion des scripts par Korman il peut la mettre à jour plus ou moins facilement et au bon moment, dans le cas d'une gestion manuelle des scripts ce n'est pas le cas (il faudrait en 1er lieu que je sache qu'il y a une mise à jour à faire).
Pour l'instant ça à l'air d'aller à ce niveau là.

Sirius wrote:
Maroonroon wrote:L'Exclude Region (subworld) de l'ascenseur est à nouveau active pas défaut, ainsi que celle (world) du rez-de-chaussée ; je ne peux donc pas entrer/sortir de l'ascenseur sans l'avoir fait bouger une 1ère fois.

Assure-toi de désactiver et réactiver ces régions avec les responders que le script te mets à disposition. Normalement le script appelle les bons responders au bon moment (y compris lorsque l'Âge est en train de charger) pour éviter ce genre de problème.
Par exemple, une barrière qui empêche de sortir de l'ascenseur doit être désactivée avec l'état 0 du responder 5, et réactivée avec l'état 1 de ce même responder.
Pour des barrières spécifiques à chaque étage : les barrières doivent toutes être réactivées lors des états 0 et 1 du responder 5 (ça t'assure que dès que l'ascenseur bouge tout est bloqué), et désactivées au cas par cas dans un des responders d'ID 6 (sachant que le premier responder d'ID 6 sera appelé au RDC, le deuxième responder appelé au premier étage, etc).
Regarde la manière dont les cubes verts sur le côté de l'ascenseur s'activent en fonction de l'étage où celui-ci est arrêté, tes exclude regions devront être activées/désactivées avec les mêmes responders.

J'utilise bien les responders 5 et 6.
J'ai fais le tour de tous mes ascenseurs actuels et à venir, et a priori le fait de mettre les ascenseurs à des étages différents de ceux auxquels ont a accès au début ne devrait pas être gênant.
Par contre les Excludes Regions de l'Elevator2 sont de simples colliders (planes) peut-être me faut-il les mettre en véritables Excludes Regions (cubes)...

Sirius wrote:
Maroonroon wrote:2) J'active et désactive des visuels en fonction de l'étage actuel (activator 4 > responder > responder state > Enable/Disable > send to object), et ça fonctionne, sauf que l'état initial des visuels n'est pas chargé en fonction du SDL au chargement de l'Âge ; ils deviennent corrects lors d'un 1er changement d'étage.
(Pour mes ascenseurs ces activations/désactivations doivent techniquement être faites lors du clic sur un bouton.)

Pareil que précédemment - utilise les responders 5 et 6 pour envoyer ces messages, vu que c'est le script qui les gère. Ne passe pas directement par l'activator, celui-ci répond bêtement aux clics de l'utilisateur et ignore tout ce qui est lié au script, tel l'étage actuel.

Le problème ici c'est que ces changement de visuels doivent être faits avant que l'ascenseur ne bouge (lors du clic).
En gros :
1) J'active un aimant à l'étage où je veux aller (l'ascenseur ne bouge pas car l'aimant de l'étage actuel est encore actif),
2) je désactive l'aimant de l'étage actuel,
3) et seulement à ce moment là l'ascenseur est attiré par l'aimant de l'étage où je veux aller et commence à bouger.
Bon là pour le coup, comme l’ascenseur est animé dès le clic, les trois sont faits en même temps (lors du clic).
En occurrence xAgeSDLIntShowHide.py fonctionne très bien (même si c'est peut-être plus lourd pour le jeu).

Sirius wrote:
Maroonroon wrote:3) J'active et désactive également des boutons en fonction de l'étage actuel (à chacun est lié un node-tree avec un node Python File "xAgeSDLIntShowHide.py").
Pour les boutons qui sont dans la console de l'ascenseur, "xAgeSDLIntShowHide.py" est sans effet. (Des Enable/Disable également.)

Ce sont des boutons qui contrôlent l'ascenseur ? Ou bien qui se déplacement juste avec l'ascenseur lui-même ? Mon script gère automatiquement la désactivation/réactivation des boutons qui contrôlent l'ascenseur pour éviter certains problèmes, donc ça peut rentrer en conflit. Si ce sont des boutons qui ne sont pas gérés par le script, dans ce cas c'est peut être un bug avec la désactivation/réactivation de clickables dans un subworld, le moteur de jeu a l'air d'avoir du mal avec ça.

Sirius wrote:
Maroonroon wrote:Edit 2:
Pour la 1ère partie du 3) on m'a donné une piste pour changer la couleur d'un material, mais que ce soit pour changer la couleur d'un material (bouton off = noir, l'ascenseur n'est pas à l'étage actuel ; bouton on = rouge, l’ascenseur est à l'étage actuel), ou que ce soit pour changer l'opacité des deux textures d'un material (au début, l'ascenseur n'est pas à l'étage actuel : opacité 100% pour le noir et 0% pour le rouge ; à la fin, l’ascenseur est à l'étage actuel : 0% pour le noir et 100% pour le rouge), ça ne fonctionne pas ; ça reste tout le temps noir, que je fasse Unwrap ou non.

J'ai jamais touché aux animations de materials vu que je sais que c'est pas simple :lol: Si tu veux vraiment je peux tenter de voir comment ça fonctionne, mais très souvent les gens font juste une copie du bouton avec une couleur différente et activent ou désactivent un visuel ou l'autre.

Oui, ce sont bien les boutons qui contrôlent l'ascenseur.
Je voudrais qu'un équivalent de tes "cubes verts sur le côté de l'ascenseur" se fasse sur le bouton qui correspond à l'étage auquel il vient d'arriver, mais je pense qu'il y a effectivement un conflit avec ton script.
J'ai essayé d'utiliser Enable/Disable mais ça ne fonctionnait pas ; je n'y connais rien en Python mais j'ai pensé que tu utilisais probablement un équivalent au node Enable/Disable et qu'il y avait conflit, du coup j'ai utilisé xAgeSDLIntShowHide.py à la place mais même résultat.
Donc je me suis dis qu'au lieu d'utiliser une copie du bouton avec une couleur différente et d'activer/désactiver un visuel ou l'autre (ce que je faisais), je pouvais essayer de n'utiliser qu'un seul bouton (et supprimer sa copie) et changer la couleur de son material (Material>Diffuse), ou sa texture (Texture>Plasma Layer Options>Opacity), mais tu connais le résultat.

Guild of Writers Wiki : Voir KormanAnimations (Texture (Layer) Animations > Opacity ou Color (RGB)) et KormanLogic Nodes (Animation Messages)


Sirius wrote:
Maroonroon wrote:5) Quand on regarde la console, on peut déplacer l'avatar en avant avec la souris ou la flèche directionnelle du haut, et aussi à gauche et à droite avec les touches "virgule" et "point-virgule", sans sortir de la vue caméra de la console.

Hmm, oui. J'ai oublié de désactiver ça. Je regarderai comment on peut faire...

Bon là c'était plus pour "chipoter" :lol: ça n'est pas un vrai problème ; si ça reste comme ça ce n'est pas grave. :)
User avatar
Maroonroon
 
Posts: 219
Joined: Sun Jul 06, 2014 5:03 pm
Location: France

Re: Elevator Question

Postby Maroonroon » Mon Jun 27, 2022 3:33 pm

Je viens de voir qu'un "Use Mist" (Material > Options) s'était activé sur mon material rouge des boutons de la console, pour je ne sais quelle raison. :evil:
Le désactiver fait que je parviens à afficher/masquer les boutons de la console via xAgeSDLIntShowHide.py (j'en suis donc revenu à utiliser une copie du bouton avec une couleur différente et d'activer/désactiver un visuel ou l'autre).
Donc ça y est, tout fonctionne pour mon Elevator2 ! 8-)

Edit :
Eh bien non.
Je fais monter l’ascenseur au niveau 7, retourne au Relto et reviens dans l'Âge, l'ascenseur est à nouveau au niveau 1 (les boutons rouge sont ceux du niveau 7 et l'aimant activé aussi), les Excludes Regions sont à nouveau toutes actives et la console n'est cliquable qu'après un 1er changement d'étage...
Je ne comprends pas pourquoi ça n'est pas sauvegardé (les autres choses de l'Âge le sont) alors que dans l'Âge Elevator tout est sauvegardé sans problème. :?
User avatar
Maroonroon
 
Posts: 219
Joined: Sun Jul 06, 2014 5:03 pm
Location: France

Re: Elevator Question

Postby Sirius » Tue Jun 28, 2022 10:37 am

Maroonroon wrote:Le désactiver fait que je parviens à afficher/masquer les boutons de la console via xAgeSDLIntShowHide.py

Tant mieux ! :)

Maroonroon wrote:Je ne comprends pas pourquoi ça n'est pas sauvegardé (les autres choses de l'Âge le sont) alors que dans l'Âge Elevator tout est sauvegardé sans problème. :?

Vérifie si tu as un message d'erreur dans le fichier log de python. Si il n'y a rien d'anormal dans le log, tu peux m'envoyer le fichier blend via message privé et je jetterai un coup d'oeil à ce qui peut poser problème, si tu veux.
User avatar
Sirius
 
Posts: 1506
Joined: Mon Jul 26, 2010 4:46 am
Location: France

Re: Elevator Question

Postby Maroonroon » Sun Jul 17, 2022 4:57 am

Par moment je me déteste... Encore une erreur d'inattention ! :oops:

En éditant une copie de "elevElevator.py" pour en faire mon "StiltHouse01Elevator.py", j'ai remplacé dans le script (via Notepad++) "elevElevator" par "StiltHouse01Elevator" ; et va savoir comment je m'y suis pris, j'ai remplacé également l'un des "animElevator" par "animStiltHouse01Elevator" sans le vouloir... :roll:

Plus de problème de sauvegarde ; l'Elevator2 est OK ! :)
(Note : Les "ExcludesRegions" fonctionnent même en étant de "simples colliders" (planes).)

Je vais convertir à nouveau l'Elevator1 pour utiliser tes scripts en espérant que ça règlera le problème de collision des murs de la cage d'ascenseur.

Merci encore Sirius. 8-)

Edit: Ça y est, la collision de la cage de L'Elevator1 fonctionne enfin correctement malgré son accès à 360°, et ce grâce à tes scripts + xAgeSDLIntShowHide.py ! 8-)
User avatar
Maroonroon
 
Posts: 219
Joined: Sun Jul 06, 2014 5:03 pm
Location: France

Re: Elevator Question

Postby Maroonroon » Sat Dec 03, 2022 9:02 am

Dis-moi, y-a t'il actuellement un moyen de forcer un "QuitConsole" lorsqu'on clique sur l'un des boutons de la console en question ?
C'est pour les boutons qui font bouger les ascenseurs, car j'ai mis des Cameras qui pointent sur eux pendant leur animation...

J'ai ajouté 2 nodes Camera (1 en "Pop Camera" pour la ConsoleCamera et 1 en "Push Camera" pour une autre Camera), mais la bascule 1ère/3ème personne et le zoom (molette de la souris) ne sont plus possible et les boutons de la console peuvent être cliqués car le ClickableBlocker n'est pas remis autour des boutons, même en ajoutant un node AnimationCommand pour le faire ; je suis obligé de faire reculer un peu l'avatar afin que le ClickableBlocker soit remis autour des boutons et que la bascule 1ère/3ème personne et le zoom soient à nouveau possible.

Par exemple, quand l'Elevator2 va, la 1ère fois uniquement, de l'étage le plus haut à celui le plus bas, ça donne ça pour l'instant (les textures, appliquées sans effort, sont provisoires et l'ensemble n'est pas encore "meublé" ni réellement éclairé) :
Show Spoiler

Pour les fois suivantes cette séquence Camera est remplacée par une simple Camera fixée dans l'ascenseur.
Il y a juste ce problème pour quitter correctement la console.

Pour l'instant j'utilise en fonction du bouton qui a été cliqué :
- "GlobalAnimations_District_[Gender]WalkBack.prp",
- "GlobalAnimations_District_[Gender]StepRight.prp"
- ou "Cleft_District_[Gender]TurnRight180.prp",
ce qui oblige le joueur à déplacer l'avatar (et donc possiblement à reculer) si il veut utiliser à nouveau la console, ce qui peut faire l'affaire en attendant mais ce n'est quand même vraiment pas super.
User avatar
Maroonroon
 
Posts: 219
Joined: Sun Jul 06, 2014 5:03 pm
Location: France

Re: Elevator Question

Postby Sirius » Sun Dec 11, 2022 5:16 am

Ok, j'ai inclu la nouvelle version dans le même zip que pour le bracelet. Désormais, utiliser la flèche haut ou les touches de déplacement latéral quittent correctement la vue console. Tu peux désormais spécifier une variable SDL qui, lorsqu'elle change, forcera la sortie de la vue console. J'ai rajouté un node qui permet d'attendre avant de déplacer l'ascenseur. Normalement ça devrait tout couvrir :)
User avatar
Sirius
 
Posts: 1506
Joined: Mon Jul 26, 2010 4:46 am
Location: France

Re: Elevator Question

Postby Maroonroon » Thu Dec 15, 2022 9:24 am

Impeccable, merci beaucoup ! 8-)

Edit:
J'ai un petit soucis ; maintenant que les ascenseurs disposent d'un TimedCallback, pour que je puisse jouer des sons et activer/désactiver des objets avant que les ascenseurs ne bougent, j'ai mis un TimedCallback pour la porte de la tour puisque c'est le même procédé.

Au clic sur le bouton (ascenseurs) ou à l'entrée dans la région (porte), je :
- joue le son du détecteur de bracelet,
- joue le son d'activation d'un aimant (pour les ascenseurs j'active le visuel de l'aimant correspondant),
- joue le son de désactivation d'un autre aimant et désactive le visuel de l'aimant correspondant,
- déplace l'acsenseur ou ouvre la porte.

Pour la porte, à la sortie de la région, je :
- joue le son d'activation d'un aimant et active le visuel de l'aimant correspondant,
- joue le son de désactivation d'un autre aimant,
- ferme la porte.

Pour les ascenseurs c'est ok ; pour la porte aussi, sauf que si j'entre et ressort de la région avant que la porte ne s'ouvre, elle s'ouvre, se referme et s'ouvre à nouveau.
Si j'entre à nouveau et ressort de la région avant que la porte ne se referme, la porte se referme et s'ouvre à nouveau.
Si j'entre à nouveau dans la région et attend que la porte se referme, la porte se referme et s'ouvre à nouveau ; puis se referme quand je sors de la région.
Le résultat est d'ailleurs le même sans TimedCallback si je met "CallBack: End" dans les nodes "Sound".
Pour l'instant j'enlève donc le TimedCallback et met "Callback: (None)" dans les nodes "Sound", mais forcément tout est lancé en même temps.

NodeTree Show Spoiler
User avatar
Maroonroon
 
Posts: 219
Joined: Sun Jul 06, 2014 5:03 pm
Location: France

Re: Elevator Question

Postby Maroonroon » Wed Feb 22, 2023 1:42 pm

Salut. :)
Dis-moi, où en es-tu?
User avatar
Maroonroon
 
Posts: 219
Joined: Sun Jul 06, 2014 5:03 pm
Location: France

Re: Elevator Question

Postby Sirius » Sun Mar 05, 2023 9:13 am

Honnêtement je ne sais pas, j'ai du mal à lire les nodetrees dans tes images...

J'ai déjà eu des problèmes lorsque je demande au jeu de jouer une animation qui est déjà en train d'être jouée, mais jusqu'ici dans le fichier d'exemple que je t'ai donné les portes s'ouvrent et se ferment correctement même si l'avatar quitte la région avant son ouverture complète. Je n'utilisais pas de callback cependant.
User avatar
Sirius
 
Posts: 1506
Joined: Mon Jul 26, 2010 4:46 am
Location: France

PreviousNext

Return to Building

Who is online

Users browsing this forum: No registered users and 0 guests

cron