Stockage de zones dans une table (paramétrage)

Section dédié à la gestion de ces caches un peu particulières...
bzh972
membre
membre
Profil GC
Membre: : Basic
Messages : 3
Enregistré le : lun. 14 nov. 2016 01:35

Stockage de zones dans une table (paramétrage)

dim. 14 mai 2017 17:48

Bonjour,

je voudrais créer une wherigo style jeu de l'oie sous Urwigo.
J'ai pour cela une variable var_numero_case qui contient le numéro de la case sur laquelle le joueur se trouve.
Ce que je voudrais pouvoir faire c'est paramétrer le numéro de la case suivante en fonction du résultat du dé.
Jusque là me direz-vous c'est simple, numero_case_suivante= numero_case + var_valeur_de
Là où mon histoire se complique, c'est que je ne souhaite activer que la zone de la case suivante et qu'au moment où c'est à elle d'entrer en jeu, du coup je voudrais pouvoir écrire une syntaxe du genre:

zone_case[(var_valeur_de + var_numero_case)].Active = true

Mes zones se nomment de façon originale zone_case_1, zone_case_2, etc...
J'ai d'abord essayé de recomposer le nom de la zone version chaine de caractère avec [[zone_case]]..(var_valeur_de + var_numero_case). Mais a priori impossible d'y coller la propriété .Active .
J'ai donc ensuite pensé créer une table locale que j'appelle zone_case:
local zone_case = {}
et dans le code généré par urwigo, j'ai remplacé tous les appels à zone_case_1 par zone_case[1], etc...
Mais ça ne fonctionne pas non plus. Pourtant d'un point de vue syntaxique, le zone_case[1].Active = true me paraît correct.
Je me suis ensuite dit que le problème venait de la portée de ma table zone_case. Je l'ai donc "intégrée" à ma cartouche (dans et avant .ZVariables = {... ) en utilisant la même syntaxe que les variables "classiques" créées directement dans Urwigo, mais sans succès.

Voilà si quelqu'un sait comment incorporer dans une table les différentes zones, pour ensuite pouvoir les appeler de façon paramétrée, je suis très preneur.
D'avance merci et félicitations pour les courageux qui m'ont lu jusqu'au bout.

Bonne journée

Bzh972
bzh972
membre
membre
Profil GC
Membre: : Basic
Messages : 3
Enregistré le : lun. 14 nov. 2016 01:35

Re: Stockage de zones dans une table (paramétrage)

dim. 14 mai 2017 17:53

Je me réponds, en partie seulement, à moi-même dans la foulée après avoir posé le problème.
Depuis j'ai presque réussi ce que je voulais mais pour je ne sais quelle raison, pas complètement.

J'ai donc profité de la déclaration de variables de la cartouche pour y ajouter ma table zone_case en calquant la déclaration automatique écrite par urwigo, et l'ai déplacée en amont de la déclaration des zones pour que la variable existe déjà au moment de la déclaration de zones.

-- Cartridge Variables --
zone_case = {}
var_valeur_de = 0
var_numero_case = 0
current_zone = _IrUC("\073\107\103\119\069\071\002\123\002\103\055\119")
_VgBMi = _IrUC("\108\054\060\060\093")
_7uJM = _IrUC("\108\054\060\060\093")
_BmVkw = _IrUC("\015\002\074\026\069\055\002\074\119\069\049")
_Edd1V = _IrUC("\108\054\060\060\093")
_zOyt = _IrUC("\108\054\060\060\093")
la_cartouche.ZVariables = {
zone_case = {},
var_valeur_de = 0,
var_numero_case = 0,
current_zone = _IrUC("\073\107\103\119\069\071\002\123\002\103\055\119"),
_VgBMi = _IrUC("\108\054\060\060\093"),
_7uJM = _IrUC("\108\054\060\060\093"),
_BmVkw = _IrUC("\015\002\074\026\069\055\002\074\119\069\049"),
_Edd1V = _IrUC("\108\054\060\060\093"),
_zOyt = _IrUC("\108\054\060\060\093")
}

Ensuite, je fais ça pour chaque zone:

zone_case_1 = Wherigo.Zone(la_cartouche)' rel='nofollow noopener noreferral' target='_blank' class='external-link'>Wherigo.Zone(la_cartouche)
zone_case_1.Id = "1ee40137-d59d-4e4a-b980-06acbdec718f"
zone_case_1.Name = _IrUC("\124\002\074\119\032\049")
zone_case_1.Description = ""
zone_case_1.Visible = true
zone_case_1.Media = img_chiffre_1
zone_case_1.Icon = img_chiffre_1
zone_case_1.Commands = {}
zone_case_1.DistanceRange = Distance(-1, "feet")
zone_case_1.ShowObjects = "OnEnter"
zone_case_1.ProximityRange = Distance(60, "meters")
zone_case_1.AllowSetPositionTo = false
zone_case_1.Active = false
zone_case_1.Points = {
ZonePoint(14.6209889747886, -61.0509294744633, 0),
ZonePoint(14.6209240910089, -61.0509683664999, 0),
ZonePoint(14.6208702374572, -61.050879853589, 0),
ZonePoint(14.6209545863877, -61.050826879953, 0)
}
zone_case_1.OriginalPoint = ZonePoint(14.6209344724106, -61.0509011436263, 0)
zone_case_1.DistanceRangeUOM = "Feet"
zone_case_1.ProximityRangeUOM = "Meters"
zone_case_1.OutOfRangeName = ""
zone_case_1.InRangeName = ""
zone_case[1] = zone_case_1

je ne fais en fait que rajouter la dernière ligne. Je ne sais pas pourquoi il est visiblement impossible de ne pas passer par l'étape zone_case_1 et de déclarer directement du style:
zone_case[1] = Wherigo.Zone(la_cartouche)
zone_case[1].Id = etc.....

J'ai essayé aussi zone_case[1]["Id"] mais pas mieux.

Enfin au moment de l'appel, cette fonction est maintenant acceptée:
zone_case[(var_valeur_de + var_numero_case)].Active = true
ce qui est un vrai plus par rapport à avant.

Du coup ça me permet a priori de faire ce que je voulais, c'est à dire paramétrer l'activation de la zone correspondant à la case suivante. Mais le passage par l'étape intermédiaire zone_case_1 me paraît un peu bizarre et j'aurais aimé m'en passer. Mais bon, c'est maintenant de l'ordre du détail. Si vous avez des idées je suis quand même bien sûr preneur. Merci

Retourner vers « Caches Wherigo »

Aller à ...

Annuaire

annuaire geocaching

Éditeur HTML

editeur HTML

 

Au total il y a 2 utilisateurs en ligne : 1 enregistré, 0 invisible et 1 invité
Membres : Bing [Bot]
Le record du nombre d’utilisateurs en ligne est de 607, le lun. 20 janv. 2020 20:53
94559 messages
7391 sujets
5306 membres
Le membre enregistré le plus récent est Axelinya.
Pas d’anniversaire à fêter aujourd’hui