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.
I made it a library mainly for learning purposes... I think atleast it could be done the same way without a library.
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.