Snippet AIDSZinc

Discussion in 'Systems and Snippets' started by Azlier, Feb 13, 2010.

  1. Azlier

    Azlier Old World Ghost

    Ratings:
    +461 / 0 / -0
    Yeah it's in case Zincies want to use AIDS structs.

    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
     
    • Like Like x 1
  2. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
    One day I'm making this a module anyway... :p
     
  3. the Immortal

    the Immortal I know, I know...

    Ratings:
    +51 / 0 / -0
    sadsadsadsad!
    SAD!

    Had to recode the whole system I'm using from Zinc to vJASS just to use these d.mn AIDS structs. And that happened like a few hours ago, ynow? -.-

    Jeeeez =/ that's unlucky!..
     
  4. Azlier

    Azlier Old World Ghost

    Ratings:
    +461 / 0 / -0
    >One day I'm making this a module anyway...

    Finish soon! Always talk about cool stuff you're going to make and then you go and mess with bytecode or something instead...
     
  5. SanKakU

    SanKakU Member

    Ratings:
    +21 / 0 / -0
    i don't understand the purpose of this resource. you say it's for zinc...if it's not a 'zinc version' of AIDS and it's just some code that makes you call different textmacro...i don't understand what the point of that is. did you forget to tell us something?
     
  6. Azlier

    Azlier Old World Ghost

    Ratings:
    +461 / 0 / -0
    You can't use the default AIDS textmacro in Zinc structs. This is simply an AIDS textmacro that does work in Zinc. Jesus4Lyf is going to support Zinc anyway, but for some reason he hasn't done it yet.
     
  7. Ghan

    Ghan Administrator - Servers are fun Staff Member

    Ratings:
    +773 / 0 / -0
    This is approved for now, but I suppose it will become deprecated as soon as Zinc is natively supported with AIDS.
     
    • Like Like x 1
  8. SanKakU

    SanKakU Member

    Ratings:
    +21 / 0 / -0
    zinc structs, huh? well ok, i guess that makes sense. can you link to some examples or post some sample code? i don't know much about zinc, to be honest. it seems pretty easy to understand, though.
     

Share This Page