kingkingyyk3
Visitor (Welcome to the Jungle, Baby!)
- Reaction score
- 216
JASS:
////////////////////////////////////////
// ~TrigWrap v1.0.1~
// by kingking
//
// TrigWrap is a trigger wrapper
// that enables trigger recycling.
//
// Functions :
// call Trigger.create() -> Trigger
// call Trigger.getTriggering() -> Trigger
// set <vars>.event = whichEvent
// call <vars>.unregister()
// call <vars>.destroy()
// set <vars>.data = integer
// set <vars>.condition = conditionfunc
// set <vars>.action = code
// set <vars>.enable = true/false
// <vars>.data -> integer
// <vars>.trig -> trigger
//
// Precautions :
// Do not destroy the trigger manually,
// use .destroy() instead.
//
// Requires : Jasshelper 0.A.2.9 or newer, Event
/////////////////////////////////////
library TrigWrap requires Event
struct Trigger
private static hashtable hasht
trigger trig
EventReg eventReg
Event registeredEvent
static method create takes nothing returns thistype
local thistype this = thistype.allocate()
if this.trig == null then
set this.trig = CreateTrigger()
call SaveInteger(thistype.hasht,GetHandleId(this.trig),0,this)
else
call EnableTrigger(this.trig)
endif
return this
endmethod
static method getTriggering takes nothing returns thistype
return LoadInteger(thistype.hasht,GetHandleId(GetTriggeringTrigger()),0)
endmethod
method operator condition= takes conditionfunc func returns nothing
call TriggerAddCondition(this.trig,func)
endmethod
method operator action= takes code func returns nothing
call TriggerAddAction(this.trig,func)
endmethod
method operator data= takes integer data returns nothing
if this.eventReg != 0 then
set this.eventReg.data = data
endif
endmethod
method operator data takes nothing returns integer
return this.eventReg.data
endmethod
method operator enable= takes boolean flag returns nothing
if flag then
call EnableTrigger(this.trig)
else
call DisableTrigger(this.trig)
endif
endmethod
method operator event= takes Event whichEvent returns nothing
debug if this.registeredEvent > 0 then
debug call BJDebugMsg("TrigWrap error : Trying to register trigger to more than 1 events")
debug endif
set this.registeredEvent = whichEvent
set this.eventReg = whichEvent.register(this.trig)
endmethod
method unregister takes nothing returns nothing
call this.registeredEvent.unregister(this.trig)
set this.eventReg = 0
endmethod
method destroy takes nothing returns nothing
if this.registeredEvent > 0 then
call this.registeredEvent.unregister(this.trig)
endif
call DisableTrigger(this.trig)
call TriggerClearConditions(this.trig)
call TriggerClearActions(this.trig)
set this.eventReg = 0
set this.registeredEvent = 0
endmethod
static method onInit takes nothing returns nothing
set thistype.hasht = InitHashtable()
endmethod
endstruct
endlibrary