• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.
  • Create a faction for Warcraft 3 and enter Hive's 19th Techtree Contest: Co-Op Commanders! Click here to enter!
  • Create a void inspired texture for Warcraft 3 and enter Hive's 34th Texturing Contest: Void! Click here to enter!
  • The Hive's 21st Texturing Contest: Upgrade is now concluded, time to vote for your favourite set of icons! Click here to vote!

Utilities Library

Level 18
Joined
Jan 21, 2006
Messages
2,552
Utilities Library by Berb

This is a really basic library based on a concept that was mentioned in the forums by azlier I believe. It takes advantage of the vJass struct syntax, using the struct recycling system in order to grab global and timer handles without having to ever destroy a timer.

JASS:
library UtilityLib
//##################################################################################################
//# ________________________________________________________________________________________________
//#
//#     U T I L I T I E S                                                                   v 1.0
//#                     by Berb
//#
//# ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
//##################################################################################################
/***************************
 * Description:
 * ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
 *  This library uses the built-in recycling system used for structs (global arrays) to produce a
 *  basic syntax in order to take advantage of this and eliminate some of the problems that can 
 *  arise when these types of handles are created and destroyed. Instead they will merely be 
 *  recycled using very basic vJass syntax.
 *
 *  s_timer
 *  ================================================================================================
 *          static method create( )         -> This will allocate a global array from the stack 
 *                                          encapsulated in a struct, so that the recycling is 
 *                                          handled by the vJass syntax conversion.
 *
 *          method destroy( )               -> This will cause a timer to be recycled; basically
 *                                          it will simply pause the timer and ready it for the
 *                                          next time it needs to be used.
 *
 *  s_group
 *  ================================================================================================
 *          static method create( )         -> This will allocate a global array from the stack
 *                                          encapsulated in a struct, similar to s_timer.create( ).
 *
 *          method destroy( )               -> This will recycle the group for further use, similar
 *                                          to s_timer's .destroy( ) static method.
 *
 ***************************************************************************************************/


// Implementation:
//      local s_group g = s_group.create()
//      
//          // Now you can reference your group as "g.group".
//          call GroupEnumUnitsInRange(g.group, 0, 0, 500, null)
//          call ForGroup(g.group, function DoNothing) //you get the point
//
//          // Remember you need to destroy the group when you're done with it.
//          call g.destroy( )
//  
 
struct s_group
    group       group
    
    method onDestroy takes nothing returns nothing
        call GroupClear(group)
    
    endmethod
    static method create takes nothing returns thistype
        local thistype g=allocate( )
        if g.group==null then               
            set g.group=CreateGroup( )
        endif
        return g
        
    endmethod
endstruct

// Implementation:
//      local s_timer t = s_timer.create()
//          
//          // Now you can reference your timer as "t.timer"
//          call TimerStart(t.timer, 0, false, null)
//          call TriggerSleepAction(0)
//
//          // Remember you need to destroy the timer when you're done with it.
//          call t.destroy( )
//

struct s_timer
    timer       timer

    method onDestroy takes nothing returns nothing
        call PauseTimer(timer)
    
    endmethod
    static method create takes nothing returns thistype
        local thistype t=allocate( )
        if t.timer==null then
            set t.timer=CreateTimer( )
        endif
        return t
        
    endmethod
endstruct



endlibrary
 
Level 18
Joined
Jan 21, 2006
Messages
2,552
Your library looks identical to TriggerHappy's library... not to mention it even has the same name. I suppose this isn't very useful, then, the thread can probably be closed.
 
Top