Skip to content

Latest commit

 

History

History
48 lines (45 loc) · 1.86 KB

CallForExamples.md

File metadata and controls

48 lines (45 loc) · 1.86 KB

Example of how to use the Unit::CallFor/CheckFor {#CallForExample}

In general, when using the CallFor* functions you need to supply a functor with a operator() which takes (usually) a Unit as it's argument and does something with it. A typical functor for that might look something like this:

struct MyFunctor
{
    explicit MyFunctor(int _a) : a(a) {}
    void operator()(Unit* unit) const { unit->RemoveAura(a, EFFECT_INDEX_1); };
    int a;
};

When the CallFor* is called it will go through all the Units (or something else) that the function name says that it will and call the operator() with the Unit it found as argument. Much like a loop looking like this:

void CallForEveryone(Functor f)
{
    for(int i = 0; i < AllUnits.Size(); ++i)
    {
        f(GetUnit(i));
    }
}

Bear in mind that this code is not something that represents how the API works, just an example for understanding how it all works.

Using the Unit::CallForAllControlledUnits {#CallForAllControlledUnitsExample}

A functor for Unit::CallForAllControlledUnits might look this. This specific one is used to change the speed at which units move, if the "main" Unit changes moving speed so should all his pets, minions etc:

struct SetSpeedRateHelper
{
    explicit SetSpeedRateHelper(UnitMoveType _mtype, bool _forced) : mtype(_mtype), forced(_forced) {}
    void operator()(Unit* unit) const { unit->UpdateSpeed(mtype, forced); }
    UnitMoveType mtype;
    bool forced;
};

Then you would use this one as follows:

CallForAllControlledUnits(SetSpeedRateHelper(mtype, forced),
                          CONTROLLED_PET | CONTROLLED_GUARDIANS | CONTROLLED_CHARM | CONTROLLED_MINIPET);

And it would call the operator() in the SetSpeedRateHelper with a given Unit for all the pets, guardians, charmed units and minipets.