Sign in to follow this  
iraxef

Array of (object) handles with add_on array

Recommended Posts

Are there any existing examples of having an array of object handles (where these are C++ -exposed objects which are reference types in script)?

 

The array add_on has one example which uses the syntax: array<int>.  array<@> didn't seem to work.

 

I've seen examples that use a syntax like: MyObjectType@[].

 

But that didn't seem to work for me either. There must be existing examples out there.... ?

 

Thank you very much.

Share this post


Link to post
Share on other sites

The syntax for arrays of object handles is like this:

 

array<Object@> arrayOfHandles;

 

Alternatively if you've registered the array add-on as the default array type, i.e. with RegisterScriptArray(engine, true), you can use the following syntax:

 

Object@[] arrayOfHandles;

 

I've taken a note to add an explanation for this in the manual, thanks.

Share this post


Link to post
Share on other sites

No, that is not what I'm saying. There is no built-in array type.

 

 

You must register the array type, either with RegisterScriptArray() or by using your own implementation.

 

What I'm saying is that the second argument for RegisterScriptArray() tells the compiler if it should allow the syntax 'type[]' to declare the array types or just 'array<type>'.

 

 

Observe, the syntax 'type[]' for dynamic arrays will likely be deprecated sometime in the future (as I'll need it for static arrays).

Share this post


Link to post
Share on other sites

EDIT: Ahh, sorry. I just saw that you fixed exactly that issue lately.

(Related thread: http://www.gamedev.net/topic/650055-problem-with-array-of-handles/ )

That's what I get for not using the very latest revision. Cheers. smile.png

 

---

 

Hey,

I'm currently using AngelScript for a little game project and recently noticed a shortcoming in the ScriptArray Addon related to this topic:

I'm using an array of handles defined like so:
array<GameObject@> currentGroup;

Unfortunately, the 'find' method does not work on the array,

unless an equal-comparison operator is defined for the GameObject type.

int pos = currentGroup.find(@character);

I don't define any such operator, because I want to compare the object handles only by their address.

The expression (@character1 == @character2) works perfectly well, only the array-type does not support it.

 

It seems to me that the CScriptArray::Precache method must be changed to make that possible.

It's probably a small fix. But unfortunately, I don't know enough about AngelScripts internals to do it myself.

 

Any chance to see this fixed in the next revision?

 

Thank you. smile.png

Edited by TcShadowWalker

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this