Skip to content
Snippets Groups Projects
  • Auke Kok's avatar
    ad884f23
    New timer design. · ad884f23
    Auke Kok authored
    I could honestly not make much sense of the timer implementation
    that was here. Instead I've implemented the type of timer algorithm
    that I've used before, and tested it instead.
    
    The concept is extremely simple: all timers are put in an ordered
    list. We check every server tick if any of the timers have
    elapsed, and execute the function associated with this timer.
    
    We know that many timers by themselves cause new timers to be
    added to this list, so we iterate *backwards* over the timer
    list. This means that new timers being added while timers are
    being executed, can never be executed in the same function pass,
    as they are always appended to the table *after* the end of
    the table, which we will never reach in the current pass over
    all the table elements.
    
    We switch time keeping to minetest.get_us_time(). dtime is
    likely unreliable and we have our own high-res timer that we
    can fix if it is indeed broken. This removes the need to do
    any sort of time keeping.
    ad884f23
    History
    New timer design.
    Auke Kok authored
    I could honestly not make much sense of the timer implementation
    that was here. Instead I've implemented the type of timer algorithm
    that I've used before, and tested it instead.
    
    The concept is extremely simple: all timers are put in an ordered
    list. We check every server tick if any of the timers have
    elapsed, and execute the function associated with this timer.
    
    We know that many timers by themselves cause new timers to be
    added to this list, so we iterate *backwards* over the timer
    list. This means that new timers being added while timers are
    being executed, can never be executed in the same function pass,
    as they are always appended to the table *after* the end of
    the table, which we will never reach in the current pass over
    all the table elements.
    
    We switch time keeping to minetest.get_us_time(). dtime is
    likely unreliable and we have our own high-res timer that we
    can fix if it is indeed broken. This removes the need to do
    any sort of time keeping.