Posté le: 18/06/08 11:28 Sujet du message: TextTagDamage / TextTagMessage - Dégât en Texte Flottant
Nom des fonctions : TextTagDamage et TextTagMessage Créateur : Rhadamante
Fonctions requises : aucune
Code :
Jass:
//==========================================================================================
// Texte de dégâts en Texte Flottant
//==========================================================================================
// degat = les dégats pris
// u = l'unité au dessus de laquelle la barre est affichée
// xOffset = pour décaler horizontalement le texte affiché
// laissez à 0.0 pour garder le texte centré
// zOffset = la hauteur à laquelle le texte est affiché
// valeur moyenne = 50.0
// speed = vitesse de déplacement du texte
// valeur moyenne = 64.0
// angle = angle selon lequel le texte se déplace, en degré
// vers le haut = 90.0
// 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
// lifespan = la durée de vie de la barre
// 0.0 < lifespan < pas de limite
// bonne valeur = 0.5 à 1.0
// color = la couleur des dégâts
// "|c00FFFFFF" = blanc, "|c00FF0000" = rouge
function TextTagDamage takes real degat, unit u, real xOffset, real zOffset, real speed, real angle, real size, real transparency, real lifespan, string color returns nothing
local texttag tag = CreateTextTag()
local string s
set s = color + I2S(R2I(degat)) + "|r" // les dégâts convertis en entier (sinon on afficherais 55.26 :/ ) et en couleur
set speed = speed * 0.071 / 128
set angle = angle * bj_DEGTORAD
call SetTextTagText(tag, s, size * 0.0023)
call SetTextTagPos(tag, GetUnitX(u) - 10 + xOffset, GetUnitY(u), zOffset) // on enlève 10 au x pour centrer à peu prés le tag sur l'unité
call SetTextTagVelocity(tag, speed * Cos(angle), speed * Sin(angle))
call SetTextTagColor(tag, 255, 255, 255, R2I((100.0-transparency) * 2.55))
call SetTextTagFadepoint(tag, lifespan - 0.25) // pour que le texte disparaisse en fondu
call SetTextTagLifespan(tag, lifespan) // la durée de vie du texte, fondu compris
call SetTextTagPermanent(tag, false)
set tag = null
endfunction
Une version plus générique où vous entrez vous même le texte à afficher, si vous voulez refaire un texte flottant à la manière de "Raté !" ou n'importe quoi d'autre.
Secret:
Jass:
//==========================================================================================
// Texte quelconque en Texte Flottant
//==========================================================================================
// text = le texte à afficher (s'il est trop long il risque de ne pas être centré)
// u = l'unité au dessus de laquelle la barre est affichée
// xOffset = pour décaler horizontalement le texte affiché
// laissez à 0.0 pour garder le texte centré
// zOffset = la hauteur à laquelle le texte est affiché
// valeur moyenne = 50.0
// speed = vitesse de déplacement du texte
// valeur moyenne = 64.0
// angle = angle selon lequel le texte se déplace, en degré
// vers le haut = 90.0
// 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
// lifespan = la durée de vie de la barre
// 0.0 < lifespan < pas de limite
// bonne valeur = 0.5 à 1.0
function TextTagMessage takes string text, unit u, real xOffset, real zOffset, real speed, real angle, real size, real transparency, real lifespan returns nothing
local texttag tag = CreateTextTag()
set speed = speed * 0.071 / 128
set angle = angle * bj_DEGTORAD
call SetTextTagText(tag, text, size * 0.0023)
call SetTextTagPos(tag, GetUnitX(u) - 10 + xOffset, GetUnitY(u), zOffset) // on enlève 10 au x pour centrer à peu prés le tag sur l'unité
call SetTextTagVelocity(tag, speed * Cos(angle), speed * Sin(angle))
call SetTextTagColor(tag, 255, 255, 255, R2I((100.0-transparency) * 2.55))
call SetTextTagFadepoint(tag, lifespan - 0.25) // pour que le texte disparaisse en fondu
call SetTextTagLifespan(tag, lifespan) // la durée de vie du texte, fondu compris
call SetTextTagPermanent(tag, false)
set tag = null
endfunction
Utilisation : Sert à afficher un réel (des dégâts ou des soins à la base) un peu à la manière du Coup critique, c'est à dire un texte flottant coloré qui se déplace dans une direction en fondu
Copyright : Libre
Remarques : aucune _________________
Dernière édition par Rhadamante le 21/06/08 21:24; édité 4 fois
"0.071 / 128 " Pourquoi ne pas le calculé directement , je ne crois pas que sa gênera , sinon ont peut peut-être simplifié le calcul.
Le résultat c'est 0,0005546875, y'a un peu beaucoup de chiffres après la virgule, et puis c'est la formule utilisé dans la BJ, je me suis moyennement posé la question. Mais, petit test in-game :
Utiliser directement la valeur donne un résultat très approximatif. Je laisse le calcul.
Darkfeyt a écrit:
"bj_DEGTORAD" Ont peut le remplacer directement par sa valeur , voir mieux une valeur plus précise si ce n'est pas très précis.
C'est tout ce qu'il y a de plus précis. J'ai essayé en calculant directement, puis avec la constant, le résultat est le même. Quand il y a déjà une constant je vois pas l'utilité de la remplacer.
Darkfeyt a écrit:
"local string s = "" " Pourquoi lui donnée une valeur par défaut ?
Un oubli, à la base je mettais s = "|c00", et comme c'est débile et compliqué, et comme j'suis moi aussi débile, je l'ai laissé vide...
Darkfeyt a écrit:
Tu crée certaine variable local alors que tu ne t'en sert pas après de certain argument.
Par exemple vel et speed , au lieu de crée vel tu pourait faire:
set speed = speed * 0.071 / 128
Et changer tout les vel par speed.
Exact, c'est parce que je suis parti de la BJ pour déterminer la Velocity, et que j'ai manqué de rigueur.
J'arrange tout ce qui doit l'être. _________________
Dernière édition par Rhadamante le 19/06/08 19:44; édité 1 fois
Il y a comme même des variable inutile.
Tu pourrait complètement te passé des xvel et yvel:
call SetTextTagVelocity(tag, speed * Cos(angle) , speed * Sin(angle))
J'aime pas me répéter mais :
Rhadamante a écrit:
Exact, c'est parce que je suis parti de la BJ pour déterminer la Velocity, et que j'ai manqué de rigueur.
Exact, c'est parce que je suis parti de la BJ [...], et que j'ai manqué de rigueur.
Keitaro_Ura a écrit:
fonction qui peut s'avérer très utile, merci =)
Je t'en prie, c'est fait pour ça. En même temps tout ce que j'ai fait c'est faisable en GUI , c'est juste plus optimisé et moins lourd. _________________
Inscrit le: 06 Juin 2008 Messages: 634 Sujets: 38 Spécialité en worldedit: Manger des pommes à la sauce Jass.
Posté le: 20/08/08 19:52 Sujet du message:
Tu pourrais, pour plus de précision, régler :
Le temps de fondu
Le décalage en X (au lieu de -10 tu peux régler direct sur xOffset)
Dans ce cas le code donnerai cela
Jass:
//si fondu = 0 , pas de fondu
//si fondu = 1.00 , fondu de 1 seconde
//si xOffset = 10 : 2 a 4 caractères
//si xOffest = 20 : 6 a 8 caractères
//On pourrait même faire un calcul dans le déclo pour le nombre de caractères ... ect ...
function TextTagDamage takes real degat, unit u, real xOffset, real zOffset, real speed, real angle, real size, real transparency, real lifespan, real fondu, string color returns nothing
local texttag tag = CreateTextTag()
local string s
set s = color + I2S(R2I(degat)) + "|r" // les dégâts convertis en entier (sinon on afficherais 55.26 :/ ) et en couleur
set speed = speed * 0.071 / 128
set angle = angle * bj_DEGTORAD
call SetTextTagText(tag, s, size * 0.0023)
call SetTextTagPos(tag, GetUnitX(u) - 10 + xOffset, GetUnitY(u), zOffset) // on enlève 10 au x pour centrer à peu prés le tag sur l'unité
call SetTextTagVelocity(tag, speed * Cos(angle), speed * Sin(angle))
call SetTextTagColor(tag, 255, 255, 255, R2I((100.0-transparency) * 2.55))
call SetTextTagFadepoint(tag, lifespan - fondu) // pour que le texte disparaisse en fondu
call SetTextTagLifespan(tag, lifespan) // la durée de vie du texte, fondu compris
call SetTextTagPermanent(tag, false)
set tag = null
endfunction
Et , (j'ai pas essayé) normalement ca marche ! _________________
Tu pourrais, pour plus de précision, régler :
Le temps de fondu
Le décalage en X (au lieu de -10 tu peux régler direct sur xOffset)
C'est rajouter un argument pour presque rien. En prenant exemple sur les dégâts affiché par les coups critiques, enlever 0.25 me parait suffisant.
Ensuite pour l'Offset en X, sachant que la fonction affiche des dégâts à la base de 6 à 8 caractères ça représente des dégâts monstrueux non, enlever 10 est là aussi suffisant.
En gros, j'ai la flemme d'y toucher et de l'éditer pour l'instant, j'suis sur d'autres choses.
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