Simple texttag leak question

Frozenhelfir

set Gwypaas = Guhveepaws
Reaction score
56
I remember reading somewhere that text tags don't leak if they don't have a permanent life span. I don't remember the source, or if it is credible. Basically what I'm after is "does this code leak?"

JASS:
static method MakeTextTag takes string s, real velocity, unit t, integer r, integer g, integer b returns texttag
        local texttag te = CreateTextTag()
        call SetTextTagText(te, s, 0.024)
        call SetTextTagPos(te, GetUnitX(t), GetUnitY(t), 0.00)
        call SetTextTagColor(te, r, g, b, 255)
        call SetTextTagVelocity(te, 0, velocity /*+(i*.01)*/ )
        call SetTextTagVisibility(te, true)
        call SetTextTagFadepoint(te, 1)
        call SetTextTagLifespan(te, 2)
        call SetTextTagPermanent(te, false)
        return te
    endmethod


Do I have to null the texttag at any point? The method only returns so I can null and destroy it later. Is this even necessary with the texttag not being permanent? Do I have to call DestroyTexttag() if the lifespan isn't permanent?
 

Bribe

vJass errors are legion
Reaction score
67
Yes, it is 100% advisable to null texttag pointers. You will need to use a global variable (or a parameter) to store the texttag to make sure that it doesn't leak.

You can also create a texttag locally for one player.
 

XeNiM666

I lurk for pizza
Reaction score
138
instead of a local texttag, why not use bj_lastCreatedTextTag (did i spell it right?), or is it just the same...?
 

Frozenhelfir

set Gwypaas = Guhveepaws
Reaction score
56
Yes, it is 100% advisable to null texttag pointers. You will need to use a global variable (or a parameter) to store the texttag to make sure that it doesn't leak.

You can also create a texttag locally for one player.

I'll probably just null it in that function since I don't need to manipulate it afterwards if I don't need to call DestroyTexttag(). If I understood correctly, I don't need to destroy it if the permanent flag is false? I know I may sound stupid by clarifying this again, but this will be a frequently used function.

instead of a local texttag, why not use bj_lastCreatedTextTag (did i spell it right?), or is it just the same...?

I am making a new texttag, using the last created one would cause texttag mess ups.
 

XeNiM666

I lurk for pizza
Reaction score
138
iirc, not really. as long as you initialize bj_lastCreatedTextTag = CreateTextTag()
I could be wrong though, then I have to recode.. :D
 

Frozenhelfir

set Gwypaas = Guhveepaws
Reaction score
56
Oh. I didn't think you meant it like that. I find that to be bad coding practice in at least my specific scenario. There is a small, albeit diminishing, amount of GUI and legacy code in my map that could manipulate the last created texttag in an unfavorable way. I would probably use a private global way before a public global, much less a global that is used a lot in GUI. Although correct GUI wouldn't screw with it, there is some really funky legacy code in my map :p. I've run into many problems because some (bad) legacy code was using those globals poorly. Using those globals may also cause that problem to happen in the future, and I'd rather avoid it. You gain the same amount of efficiency using a private global, and you avoid running into problems that globals tend to cause.
 

Bribe

vJass errors are legion
Reaction score
67
Well it is vJass, so:

JASS:
static texttag te
static method MakeTextTag takes string s, real velocity, unit t, integer r, integer g, integer b returns texttag
    set te = CreateTextTag()
    call SetTextTagText(te, s, 0.024)
    call SetTextTagPos(te, GetUnitX(t), GetUnitY(t), 0.00)
    call SetTextTagColor(te, r, g, b, 255)
    call SetTextTagVelocity(te, 0, velocity /*+(i*.01)*/ )
    call SetTextTagVisibility(te, true)
    call SetTextTagFadepoint(te, 1)
    call SetTextTagLifespan(te, 2)
    call SetTextTagPermanent(te, false)
    return te
endmethod
 

Solmyr

Ultra Cool Member
Reaction score
30
Do I have to null the texttag at any point? The method only returns so I can null and destroy it later. Is this even necessary with the texttag not being permanent? Do I have to call DestroyTexttag() if the lifespan isn't permanent?
You guessed right. You don't have to destroy text-tags that are not permanent and have a timed lifespan (i.e. the ones that you're creating). So your function doesn't even have to return the text-tag :)

Nulling them is not that necessary either, as the handle IDs of the text-tags will always be in the [0, 99] interval, but still, as Bribe said, it's 100% advisable.

Also, I recommend using cohadar's TextTag system.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top