Posté le: 16/06/08 17:19 Sujet du message: TextTagBar - Barre de Progression en Texte Flottant
Nom de la fonction : TextTagBar Créateur : Rhadamante
Fonctions requises : aucune
Code :
Jass:
//==========================================================================================
// Barre de Progression en Texte Flottant
//==========================================================================================
// valeur = celle de la progression de la barre
// 0 < valeur <= max
// max = la valeur maximum de la barre
// 1 < max < 62 à moins de vouloir une barre sur plusieurs lignes (si size = 10)
// u = l'unité au dessus de laquelle la barre est affichée
// xOffset = pour décaler la barre par rapport au centre, laissez à 0 pour la laisser centrée
// zOffset = la hauteur à laquelle le texte est affiché
// size = la taille de la police (correspond au paramètre "font" dans l'action en GUI)
// transparency = la transparence de la barre en %, à 100% elle est invisible
// 0.0 <= transparency <= 100.0
// color1 = couleur des barres qui se remplissent, mettre le code couleur "|cxxxxxxxx" sans la dernière balise
// ex : "|c0000FF00" pour du vert
// color2 = couleur de fond de la barre, mettre le code couleur "|cxxxxxxxx" sans la dernière balise
// ex : "|c00FFFFFF" pour du blanc
// mettre "rien" ou "vide" pour ne pas mettre de fond à votre barre
// lifespan = la durée de vie de la barre
// 0.0 < lifespan < pas de limite
function TextTagBar takes integer valeur, integer max, unit u, real xOffset, real zOffset, real size, real transparency, string color1, string color2, real lifespan returns nothing
local integer i = 0
local texttag bar = CreateTextTag()
local string s = ""
// le texte de la barre, mets des barres de color1 en fonction de valeur, puis des barres de color2 jusqu'au max
loop
exitwhen i >= max
set i = i + 1
if valeur > 0 then
set s = s + color1 + "l|r"
set valeur = valeur - 1
elseif color2 != "rien" and color2 != "vide" then
set s = s + color2 + "l|r"
endif
endloop
call SetTextTagText(bar, s, size * 0.023 / 10)
call SetTextTagPos(bar, GetUnitX(u) - (3 * max) + xOffset, GetUnitY(u), zOffset) // on enlève (3*max) au x pour centrer à peu prés la barre en fonction de sa longueur
call SetTextTagColor(bar, 255, 255, 255, R2I((100.0-transparency) * 2.55))
call SetTextTagFadepoint(bar, lifespan) // pour que la superposition et le dernier texttag soit jolis (facultatif ?)
call SetTextTagLifespan(bar, lifespan + 0.5) // un peu plus longtemps que la valeur prévu pour la transition
call SetTextTagPermanent(bar, false)
set bar = null
endfunction
La même sans utiliser d'unité, mais en spécifiant directement les coordonnées :
Secret:
Jass:
//==========================================================================================
// Barre de Progression en Texte Flottant
//==========================================================================================
// valeur = celle de la progression de la barre
// 0 < valeur <= max
// max = la valeur maximum de la barre
// 1 < max < 62 à moins de vouloir une barre sur plusieurs lignes (si size = 10)
// x = abscisse du point au dessus duquel la barre s'affiche
// y = ordonnée du point au dessus duquel la barre s'affiche
// zOffset = la hauteur à laquelle le texte est affiché
// size = la taille de la police (correspond au paramètre "font" dans l'action en GUI)
// transparency = la transparence de la barre en %, à 100% elle est invisible
// 0.0 <= transparency <= 100.0
// color1 = couleur des barres qui se remplissent, mettre le code couleur "|cxxxxxxxx" sans la dernière balise
// ex : "|c0000FF00" pour du vert
// color2 = couleur de fond de la barre, mettre le code couleur "|cxxxxxxxx" sans la dernière balise
// ex : "|00FFFFFF" pour du blanc
// lifespan = la durée de vie de la barre
// 0.0 < lifespan < pas de limite
function TextTagBar takes integer valeur, integer max, real x, real y, real zOffset, real size, real transparency, string color1, string color2, real lifespan returns nothing
local integer i = 0
local texttag bar = CreateTextTag()
local string s
// le texte de la barre, mets des barres de color1 en fonction de valeur, puis des barres de color2 jusqu'au max
loop
exitwhen i >= max
set i = i + 1
if valeur > 0 then
set s = s + color1 + "l|r"
set valeur = valeur - 1
else
set s = s + color2 + "l|r"
endif
endloop
call SetTextTagText(bar, s, size * 0.023 / 10)
call SetTextTagPos(bar, x - (3 * max), y, zOffset) // on enlève (3*max) au x pour centrer à peu prés la barre en fonction de sa longueur
call SetTextTagColor(bar, 255, 255, 255, R2I((100.0-transparency) * 2.55))
call SetTextTagFadepoint(bar, lifespan) // pour que la superposition et le dernier texttag soit jolis (facultatif ?)
call SetTextTagLifespan(bar, lifespan + 0.5) // un peu plus longtemps que la valeur prévu pour la transition
call SetTextTagPermanent(bar, false)
set bar = null
endfunction
Utilisation : Permet d'afficher au dessus d'une unité une barre de progression en texte flottant ---> Télécharger la map d'exemple
La Fonction doit être appelée périodiquement, et pour que la barre reste affichée vous devez spécifier une lifespan égale à cette période. S'il elle est trop courte, la barre clignotera, s'il elle est trop longue, ça ne servira à rien, puisque les barres se superposeront.
Un exemple d'utilisation pour afficher un revenu quelconque :
Secret:
Gui:
Trigger:
Income
Evénements
Temps - Every 1.00 seconds of game time
Conditions
(Scierie is alive) Egal à TRUE
Actions
-------- Le compteur pour notre barre de progression et pour le revenu -------- Set BoisProduit = (BoisProduit + 1) -------- Affichage de la barre de progression de la génération du revenu -------- Custom script: call TextTagBar(udg_BoisProduit, 15, udg_Scierie, 0.0, 50.0, 10.0, 0.0,"|c000000FF" ,"|c00FF0000", 1.0) -------- Dés que la barre est complète, notre revenu est généré --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
BoisProduit Supérieur ou égal à 15
Alors - Actions
Joueur - Set Joueur 1 (Rouge) Bois actuel to ((Joueur 1 (Rouge) Bois actuel) + 15) Set BoisProduit = 0
Sinon - Actions
Copyright : Libre, citez-moi si vous voulez me faire plaisir
Remarques : aucune _________________
Dernière édition par Rhadamante le 26/10/08 21:44; édité 9 fois
Inscrit le: 22 Nov 2007 Messages: 677 Sujets: 27 Spécialité en worldedit: Jamais sortir ses projets ?
Posté le: 17/06/08 03:40 Sujet du message:
C'est dommage de ne pas avoir mit la couleur en argument. (un string , les gens arriveront a se débrouillé pour générer leur couleur en hexa) _________________
Brissou de Mourièssou Créateur de sorts, depuis 1936.
Inscrit le: 30 Aoû 2007 Messages: 1510 Sujets: 26 Spécialité en worldedit: Développer des jeux vidéos pour le fun, donc world edit c'est comme faire une addition. Médailles: 2 (En savoir plus...)
Posté le: 17/06/08 09:28 Sujet du message:
Oui et d'ailleurs tu peux améliorer ta fonction en ouvrant la balise couleur au début et en la fermant avant de mettre les barres blanches. On retrouve ce système dans une map de Blizzou (me souvient plus du nom :/, celle avec tous les mni-jeux et un td ..) _________________
Merci de vos suggestions, je la modifierais (j'avais pas pensé à mettre un string comme argument pour la couleur ) et je rajouterais un exemple plus parlant (et plus utile qu'une barre de vie...).
edit : c'est fait, j'ai aussi rajouté l'argument xOffset au cas où on voudrait décaler la barre horizontalement _________________
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum