• Advertisement
Sign in to follow this  

Variant function parameters

This topic is 1932 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hey all,
In Unity 3D you can call any function from another object with a function like:
[i]gameObject.SendMessage ("ApplyDamage", 5.0);[/i]

This would be very useful for me, however I don't know how to make variant parameters. Cause in Unity you can specify whatever you want in the parameters like:
[i]gameObject.SendMessage ("ApplyDamage", 5.0, 12, "hit!", object );[/i]

Any way to do this in angelscript? Or maybe fake it?

Another question, how long until we have shared module variables? So we could do it like with functions say:
[i]import int timer from "mymodule"[/i]

[i]Cheers[/i]

Share this post


Link to post
Share on other sites
Advertisement
unity uses javascript.
javascript is a dynamic language. maybe the most!

Function prototype should be know during compile time for static typed languages.

what you want is not possible. i bet it will never will possible.

you can do something like this
[CODE]
void SendMessage(array<any> parameters)
[/CODE]
yes looks silly but accepts unlimited parameters :D

Share this post


Link to post
Share on other sites
It would be possible to register multiple versions of the SendMessage method that take different numbers of the [url="http://www.angelcode.com/angelscript/sdk/docs/manual/doc_adv_var_type.html"]variable argument type[/url]. In a future version of AngelScript I would also like to add support for ..., i.e. variable number of arguments in registered functions, but I'm not sure when I'll get to that.

Currently however, I prefer having a single version of the method that takes a variable handle ([url="http://www.angelcode.com/angelscript/sdk/docs/manual/doc_addon_handle.html"]CScriptHandle add-on[/url]). The handle can then refer to an object holding all the information needed for the message.

If you're interested you can have a look can have a look at my [url="http://www.angelcode.com/projectx/"]prototype game engine[/url] to see how I implemented the SendMessage routine.





I currently don't have any firm plans as to when shared global variables in the modules will be implemented. It will probably not be ready this year though. Edited by Andreas Jonsson

Share this post


Link to post
Share on other sites
Thanks for the replies.
Unity also uses C# and it works somehow.

I've seen the handle as message usage in the Game sample. It isn't that convenient because every function you want to call must have a CScriptHandle parameter. I'd like to call anything from any module or script object.

[quote]I currently don't have any firm plans as to when shared global variables in the modules will be implemented. It will probably not be ready this year though.[/quote]

Ahh, is it hard to do? I might have an idea how to hack it myself.

Share this post


Link to post
Share on other sites
If you just want to allow shared variables but don't care about controlling who can share what, then it shouldn't be too difficult to hack. The global variables are stored in the modules as instances of asCGlobalProperty in the symbol table scriptGlobals. The asCGlobalProperty is a reference counted object, so it should in theory just be a matter of finding the global variable and insert a reference to it in the module that will share it.

The reason I haven't done this already is that I want to allow control over who can share what, and that will require a lot more changes.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement