System Timer Ticker

Reaction score
91
> to let me know if it's finished....
Why the hell would you need such a thing? Execute everything you want before destroying the struct and returning true.
 

Jesus4Lyf

Good Idea™
Reaction score
397
Doom-Angel, do you mean have the function that calls TT_Start wait until it returns true, which is when the timer has stopped executing? This is indeed possible. But TT does not do it. In fact, no systems do. It's a bad idea for many reasons. Instead, please add the code you'd like to be executed after TT finishes in the "return true" clause of the attached code. Before return true. :)

Hope that helps.

Edit: You could write a simple struct just containing a boolean set to false by default, attach that with your code, and set it to true when the timer returns true. From the code calling TT_Start, you can then do...
JASS:
loop
exitwhen struct.boolean==true
call TriggerSleepAction(0.0)
endloop

... after TT_Start. This is a terrible way to code and you should do what I suggested above instead. :)
 

Doom-Angel

Jass User (Just started using NewGen)
Reaction score
167
Thank you Jesus (i feel very religious right now :p)
i think i know what to do now +Rep
 

Doom-Angel

Jass User (Just started using NewGen)
Reaction score
167
if i use:
JASS:
function TT_Action takes nothing returns boolean
//actions.....
     if(Check()) then
          call TT_Start(TT_Action,Data)
          return true
     endif
     return false
endfunction

would it work without any lags or other types of errors?
 

wraithseeker

Tired.
Reaction score
122
make sure check is a local boolean and remove the brackets away when you return true, it means the timer has stopped.

Returning false means continue on.
 

Doom-Angel

Jass User (Just started using NewGen)
Reaction score
167
^ that's my point - when it ends i want it to start over with a different period (depending on the condition of course)
so using it like this is ok right?
 

Cohadar

master of fugue
Reaction score
209
JASS:

//===========================================================================
//  Proves that TT is fully self-reentrant system 
//  no matter what start function you use and no matter in what order.
//===========================================================================
scope TTReentranceTest initializer Init

globals
    private constant integer RUNS_BY_TT = 1
    private constant integer RUNS_BY_TTEX = 2
    
    private constant real MESSAGE_PERIOD = 1.0
endglobals

//===========================================================================
private struct Data
    integer runtype
    integer ticks
    real period
    
    static method create takes integer runtype, real duration returns Data
        local Data data = Data.allocate()
        set data.runtype = runtype

        if runtype == RUNS_BY_TT then
            set data.period = TT_PERIOD
            set data.ticks = R2I(duration/TT_PERIOD)
        else
            // create random period for TT_StartEx
            set data.period = GetRandomReal(0.02, 0.2) 
            set data.ticks = R2I(duration/data.period)
        endif
        
        return data
    endmethod
    
    private method onDestroy takes nothing returns nothing
        if .runtype == RUNS_BY_TT then
            call BJDebugMsg("TT_Start")
        else
            call BJDebugMsg("TT_StartEx")
        endif
    endmethod
endstruct


//===========================================================================
private function Periodic takes nothing returns boolean
    local Data data = TT_GetData()
    
    set data.ticks = data.ticks - 1
    if data.ticks < 0 then
        call data.destroy()
        // randomly choose next reentrance type
        set data = Data.create(GetRandomInt(RUNS_BY_TT, RUNS_BY_TTEX), MESSAGE_PERIOD)
        if data.runtype == RUNS_BY_TT then
            call TT_Start(function Periodic, data)
        else
            call TT_StartEx(function Periodic, data, data.period)
        endif
        return true
    else
        return false
    endif
endfunction

//===========================================================================
private function Actions takes nothing returns nothing
    call TT_Start(function Periodic, Data.create(RUNS_BY_TT, MESSAGE_PERIOD))
endfunction

//===========================================================================
private function Init takes nothing returns nothing
    local trigger trig = CreateTrigger()
    call TriggerRegisterTimerEvent(trig, 1.0, false)
    call TriggerAddAction( trig, function Actions )
endfunction

endscope
 
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