Can you use GetTriggerWidget much any longer ? :S

Komaqtion

You can change this now in User CP.
Reaction score
469
Ok, so I was just about to do a benchmark on how much faster GetTriggerWidget is than e.g GetTriggerUnit but then I remembered, you can't convert widget to unit (Can you ?)...

So, I was just wondering why, or when you use GetTriggerWidget ? (If anyone uses it anymore :S)

Also, is there a limit to how much you can use GetTriggerWidget at one time ? :S

As this code doesn't show "Test B" if I execute the loops 10000 times... So I set it to 8000 and it works for both :S

JASS:
library Benchmark initializer OnInit
    ///////////////////////////////////////////////
    // Native declarations for stopwatch natives //
    //  - Requires no modified common.j import   //
    ///////////////////////////////////////////////
    native StopWatchCreate  takes nothing returns integer
    native StopWatchMark    takes integer stopwatch returns real
    native StopWatchDestroy takes integer stopwatch returns nothing
    
    /////////////////////////
    // Benchmarking script //
    /////////////////////////
    
    // Initialisation
    globals
    endglobals
    
    private function Init takes nothing returns nothing
    endfunction
    
    // Tests
    globals
    private constant string TITLE_A="Test A Name"

    private constant string TITLE_B="Test B Name"
    
    endglobals
    
    private function OnEsc takes nothing returns nothing
        local integer sw
        local integer i
        local widget u = null
        
        set i=0
        set sw=StopWatchCreate()
        loop
            set i=i+1
            set u = GetTriggerUnit() // x10 - 10,000 executions altogether.
            set u = null
            exitwhen i==8000
        endloop
        call BJDebugMsg(TITLE_A+": "+R2S(StopWatchMark(sw)*100))
        call StopWatchDestroy(sw)
        
        set i=0
        set sw=StopWatchCreate()
        loop
            set i=i+1
            set u = GetTriggerWidget()
            set u = null
            exitwhen i==8000
        endloop
        call BJDebugMsg(TITLE_B+": "+R2S(StopWatchMark(sw)*100))
        call StopWatchDestroy(sw)
    endfunction
    
    ///////////////////////////////
    // Registers the OnEsc event //
    ///////////////////////////////
    private function OnInit takes nothing returns nothing
        local trigger t=CreateTrigger()
        call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER)
        call TriggerAddAction(t,function OnEsc)
        call Init()
    endfunction
endlibrary


Btw, GetTriggerWidget seems to be a tiny bit faster...
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
Yep. But using GetTriggerWidget is pretty pointless for units, because you can't use unit natives. You may use Widget2Unit, but the result will worse than GetTriggerUnit. :banghead:
 

Komaqtion

You can change this now in User CP.
Reaction score
469
Yep. But using GetTriggerWidget is pretty pointless for units, because you can't use unit natives. You may use Widget2Unit, but the result will worse than GetTriggerUnit.

Hehe, yeah I thought so XD

Get the life of the triggering unit?: [LJASS]GetWidgetLife(GetTriggerWidget())[/LJASS]
I'd say it's useless for units. :p

Yeah...

The benchmark template is written with exec/eval to counter that problem about the bench not completing. ;)

What do you mean ? :S
 

Jesus4Lyf

Good Idea™
Reaction score
397
What do you mean ? :S
Warcraft III has a thread limit, as in only so much you can do (like ever had an infinite loop?) before the current function will just terminate itself. If you call a function with .execute() or .evaluate(), the contents will not count towards the current thread limit. It starts a new thread. Hence why the benchmark template is the way it is with .execute()/.evaluate(). :)
 

Azlier

Old World Ghost
Reaction score
461
.evaluate isn't exactly guaranteed to start new threads, sadly.

It's important to do benchmarks in separate threads.
 

Grundy

Ultra Cool Member
Reaction score
35
I don't know if it's any faster or not but I still use widget if i don't need any specific "unit" functions like if i want to get/set hp, damage a target, or get/set x & y position, all those things can be done to widgets.
 

Azlier

Old World Ghost
Reaction score
461
There's no such thing as SetWidgetX/Y.
 

Troll-Brain

You can change this now in User CP.
Reaction score
85
.evaluate isn't exactly guaranteed to start new threads, sadly.

It's important to do benchmarks in separate threads.

Just with methods and not functions (as you know), because it doesn't evaluate if the method is above, it's a JassHelper "feature" :D
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top