Proper Syntax to declare "Type"

Tyrulan

Ultra Cool Member
Reaction score
37
What is the proper syntax to declare a type?

JASS:
type someFunc extends myFunc


Thanks.
 

Tyrulan

Ultra Cool Member
Reaction score
37
It's part of Zinc, which is downloaded as a part of NewGen.

I'm trying to declare a function pointer.
 

Romek

Super Moderator
Reaction score
963
It's used like that in Zinc.
In vJass, you'd use a function interface.
JASS:
// Decleration
function interface Name takes nothing returns nothing

// Example function
function Example takes nothing returns nothing
endfunction

// Within a function or method
local Name anothername = Name.Example


You can also declare your own variable types like that, but they can only extend primitive types IIRC.
JASS:
type text extends string

// Function/method:
local text name = "Hello" // (I THINK this is how you use something like this; I've never found a use for these)
 

Tyrulan

Ultra Cool Member
Reaction score
37
Here's my trigger I was making as a test for it. Maybe you can get an idea where I'm going with it.

JASS:
library Test

type TortureUnit extends TortureUnit
type HealFunc extends HealUnit

function TortureUnit takes unit u returns nothing
    call BJDebugMsg("Torturing Unit")
endfunction

function HealUnit takes unit u returns nothing
    call BJDebugMsg("Healing Unit")
endfunction

function AllyOrEnemy takes player p, unit u, TortureFunc c, HealFunc c2 returns nothing
    if (IsUnitAlly(u, p)) then
       // c.evaluate(u)
    else
       // c2.evaluate(u)
    endif

endfunction

function Conditions takes nothing returns boolean
    if (GetSpellAbilityId() == 'A004') then 
        return true
    endif
    return false
endfunction

function Actions takes nothing returns nothing    
    local unit caster = GetTriggerUnit()
    local unit target = GetSpellTargetUnit()
    call AllyOrEnemy (GetOwningPlayer(caster), target, TortureUnit, HealUnit)    
endfunction

//===========================================================================
function InitTrig_sandbox takes nothing returns nothing
    set gg_trg_sandbox = CreateTrigger(  )    
    call TriggerRegisterAnyUnitEventBJ(gg_trg_sandbox, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_sandbox, Condition(function Conditions))
    call TriggerAddAction( gg_trg_sandbox, function Actions )
endfunction

endlibrary
 

Nestharus

o-o
Reaction score
84
JASS:

type someFunc extends function(args) -> returnType;


JASS:

type hello extends function(unit) -> boolean;


extends is like extending in JASS. You extend the type function and you are creating a new type called hello (similar to JASS ideals).

The arguments are in the () like normal.


From here, you can create a new someFunc and set it to a function and from there call someFunc without knowing what it was, or even pass it (similar to interfaces : P).


The only issue is that it works fully off of trigger evaluations, so be careful, it'll slow you down. Ambiguous data comes at a price ;p.


Simplest that takes nothing returns nothing-
JASS:

type hi extends function()


; D


Here it is out of Zinc Manual-
JASS:

library Test
{
    //a function type with a single unit argument
    type onHitFunc extends function(unit);

    //a function type with two integer arguments that returns a boolean
    type evFunction extends function(itneger, integer) -> boolean;
}


I probably need to continue my guide, covering vJASS, cJASS, and Zinc : \.
 

Romek

Super Moderator
Reaction score
963
> Here's my trigger I was making as a test for it. Maybe you can get an idea where I'm going with it.
You would use Function Interfaces for something like that.
Simply change the 'type..' to 'function interface..'.
 

Nestharus

o-o
Reaction score
84
Those are function interfaces... they are just Zinc style.

His goal is using Zinc features rather than vJASS : D.


Oh yes, you do need wrappers around your zinc code

//!zinc
//!endzinc
 

Romek

Super Moderator
Reaction score
963
> Those are function interfaces... they are just Zinc style.
Yes, I know.

Though he clearly is not using Zinc in his code. I'm sure even you can see that.
 

Tyrulan

Ultra Cool Member
Reaction score
37
I'm not a pro with the Zinc wrappers. I thought there were more than just the two ie) importing files etc.

All I wanted was to have a function pointer. :p

I just keep getting syntax errors. :thdown:

EDIT:

Ooh got it to work. Thanks again guys.

By the way //!zinc and //!endzinc will not work.

It is:
JASS:
//! zinc
....
//! endzinc
 

Romek

Super Moderator
Reaction score
963
Zinc has different syntax to vJass. Read the Zinc Manual for more information.
 

Tyrulan

Ultra Cool Member
Reaction score
37
Mhm, yeah been looking at it. I took some code from it as a learning tool. Here's my completed trigger if you'd like to see it.

JASS:
//! zinc
 
 library Test
    {        
        type unitFunc extends function(unit);

        function TortureUnit(unit u)
        {
            debug BJDebugMsg(GetUnitName(u)+" is being tortured!");
            AddSpecialEffectTarget("Objects\\Spawnmodels\\Orc\\Orcblood\\BattrollBlood.mdl", u, "overhead");
        }

        function HealUnit(unit u)
        {          
            debug BJDebugMsg(GetUnitName(u)+" is being healed!");    
            SetWidgetLife(u, 1000);
        }
         
        function AllyEnemyFunctionPicker(player p, unit u, unitFunc Torture, unitFunc Heal)
        {            
            if (IsUnitAlly(u, p)) 
            {
                Heal.evaluate(u);
            } else 
            {
                Torture.evaluate(u);
            }

        }
        
        function spellIDMatch() -> boolean
        {            
            return (GetSpellAbilityId() == 'A004');
        }

        function test()
        {            
            unit target = GetSpellTargetUnit();                        
            AllyEnemyFunctionPicker( Player(0), target,  TortureUnit, HealUnit );
            
            /*Will torture the unit if it is an ally, or heal it otherwise.*/
        }            
        
        function onInit()
        {            
            trigger t = CreateTrigger();
            TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT);
            TriggerAddCondition(t, Condition(function spellIDMatch));
            TriggerAddAction(t, function test);                                
        }
    }
//! endzinc
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top