Optimizing a trigger (Mainly leaks)

averes

New Member
Reaction score
17
So I've been trying to make this trigger where a unit/structure grows in size after its built, it works fine and is MUI, but I imagine the way I have it set up creates massive amounts of leaks.... So is there any way to minimize the amount of leaks in these triggers? (It's all based on timers which I can't really think of a way to easily destroy and keep the trigger working) Eitherway, here the triggers.

JASS:
function Trig_Grow_Conditions takes nothing returns boolean
    return GetUnitTypeId(GetConstructedStructure()) == udg_Grow1
endfunction

function Trig_Grow_Actions takes nothing returns nothing
    call GroupAddUnitSimple( GetConstructedStructure(), udg_GrowTowers )
    call growTower(GetConstructedStructure())
endfunction

//===========================================================================
function InitTrig_Grow takes nothing returns nothing
    set gg_trg_Grow = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Grow, EVENT_PLAYER_UNIT_CONSTRUCT_FINISH )
    call TriggerAddCondition( gg_trg_Grow, Condition( function Trig_Grow_Conditions ) )
    call TriggerAddAction( gg_trg_Grow, function Trig_Grow_Actions )
endfunction


JASS:
library toGrow uses ABC
    struct growing
        unit g
        real size
        real time
        integer place
    endstruct

    function checkGrow takes real t returns boolean
        local real tmp = ModuloReal(t,20)
        
        if(tmp == 0) then
            return true
        endif
        return false
    endfunction
    
    function toGROW takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local growing data = GetTimerStructA(t)
        if ( GetTimeOfDay() <= 18.00  and GetTimeOfDay() >= 6.00) then
            set data.time = data.time + 10
            call DisplayTextToForce(GetPlayersAll(),"THIS IS WORK? Time =" + R2S(data.time))
            call SetUnitScalePercent(data.g,data.time,data.time,data.time)
            if(checkGrow(data.time) == true) then
                set data.g = ReplaceUnitBJ( data.g, udg_GrowArray[data.place], bj_UNIT_STATE_METHOD_DEFAULTS )
                set data.place = data.place + 1
            endif
            call ClearTimerStructA(t)
            call SetTimerStructA(t,data)
        else
        endif
    endfunction
    
    function growTower takes unit d returns nothing

        local timer t = CreateTimer()
        local growing data = growing.create()
        
        set data.g = d
        set data.size = 0
        set data.time = 0
        set data.place = 1
        call SetTimerStructA(t,data)
        
        call TimerStart(t,10,true,function toGROW)
    endfunction
endlibrary


I made it a library mainly for learning purposes... I think atleast it could be done the same way without a library.
 

Jazradel

Helping people do more by doing less.
Reaction score
102
JASS:
library TimerLib
	globals
	    private timer array TIMERS
	    private integer TIMERS_N = 0
	endglobals
    
    function NewTimer takes nothing returns timer  
    	if (TIMERS_N==0) then  
    		return CreateTimer()  
    	endif  
    	set TIMERS_N = TIMERS_N - 1 
    	return TIMERS[TIMERS_N] 
    endfunction 
    
    function ReleaseTimer takes timer t returns nothing  
    	call PauseTimer(t)  
    	set TIMERS[TIMERS_N] = t 
    	set TIMERS_N = TIMERS_N + 1 
    endfunction
endlibrary

Use a library like that and replace CreateTimer with NewTimer. It prevents several bugs that can occur with timers.

There's no need to do this:
call ClearTimerStructA(t)
call SetTimerStructA(t,data)
Once a struct is attached, it's always attached.

You can also right checkGrow slightly better.
JASS:
    function checkGrow takes real t returns boolean
        return ModuloReal(t,20) == 0
    endfunction

Try looking at the function ReplaceUnitBJ and see if you can remove the extra BJ function call.
 
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