Azlier
Old World Ghost
- Reaction score
- 461
Yeah it's in case Zincies want to use AIDS structs.
Of course, requires AIDS.
Of course, requires AIDS.
JASS:
//! zinc
library AIDSZinc requires AIDS {
/*
AIDSZinc - by Azlier
Simply a Zinc AIDS struct. For you Zinc addicts.
Treated exactly like an AIDS struct, but must be implemented via
//! runtextmacro AIDSZinc()
instead of running the default AIDS textmacro.
How to import -
1) Import AIDS into your map.
2) Create a new trigger named AIDSZinc.
3) Convert the new trigger to Jass.
4) Replace all the code inside with this.
*/
//! textmacro AIDSZinc
// This magic line makes default methods get called which do nothing
// if the methods are otherwise undefined.
private static delegate AIDS_DEFAULT AIDS_DELEGATE=0;
//-----------------------------------------------------------------------
// Gotta know whether or not to destroy on deallocation...
private boolean AIDS_instanciated;
//-----------------------------------------------------------------------
static method operator[] (unit whichUnit) -> thistype {
return GetUnitId(whichUnit);
}
method operator unit () -> unit {
// Allows structVar.unit to return the unit.
return GetIndexUnit(this);
}
//-----------------------------------------------------------------------
method AIDS_addLock () {
AIDS_AddLock(this);
}
method AIDS_removeLock () {
AIDS_RemoveLock(this);
}
//-----------------------------------------------------------------------
private static method AIDS_onEnter () -> boolean{
// At this point, the unit might not have been assigned an index.
if (thistype.AIDS_filter(AIDS_GetEnteringIndexUnit())) {
// Flag it for destruction on deallocation.
thistype(AIDS_GetIndexOfEnteringUnit()).AIDS_instanciated=true;
// Can use inlining "Assigned" function now, as it must be assigned.
thistype(AIDS_GetIndexOfEnteringUnitAllocated()).AIDS_onCreate();
}
return false;
}
private static method AIDS_onEnterAllocated () -> boolean {
// At this point, the unit must have been assigned an index.
if (thistype.AIDS_filter(AIDS_GetEnteringIndexUnit())) {
// Flag it for destruction on deallocation. Slightly faster!
thistype(AIDS_GetIndexOfEnteringUnitAllocated()).AIDS_instanciated=true;
// Can use inlining "Assigned" function now, as it must be assigned.
thistype(AIDS_GetIndexOfEnteringUnitAllocated()).AIDS_onCreate();
}
return false;
}
private static method AIDS_onDeallocate () -> boolean {
if (thistype(AIDS_GetDecayingIndex()).AIDS_instanciated) {
thistype(AIDS_GetDecayingIndex()).AIDS_onDestroy();
// Unflag destruction on deallocation.
thistype(AIDS_GetDecayingIndex()).AIDS_instanciated=false;
}
return false;
}
//-----------------------------------------------------------------------
private static method onInit () {
AIDS_RegisterOnEnter(Filter(function thistype.AIDS_onEnter));
AIDS_RegisterOnEnterAllocated(Filter(function thistype.AIDS_onEnterAllocated));
AIDS_RegisterOnDeallocate(Filter(function thistype.AIDS_onDeallocate));
// Because I robbed you of your struct's onInit method.
thistype.AIDS_onInit();
}
//! endtextmacro
}
//! endzinc