Advertisement

Variant function parameters

Started by October 04, 2012 07:52 PM
3 comments, last by WitchLord 12 years, 1 month ago
Hey all,
In Unity 3D you can call any function from another object with a function like:
gameObject.SendMessage ("ApplyDamage", 5.0);

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:
gameObject.SendMessage ("ApplyDamage", 5.0, 12, "hit!", object );

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:
import int timer from "mymodule"

Cheers
KAG DEVLOG: http://kagdev.tumblr.com/
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

void SendMessage(array<any> parameters)

yes looks silly but accepts unlimited parameters :D
Advertisement
It would be possible to register multiple versions of the SendMessage method that take different numbers of the variable argument type. 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 (CScriptHandle add-on). 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 prototype game engine 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.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

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.

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.
KAG DEVLOG: http://kagdev.tumblr.com/
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.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

This topic is closed to new replies.

Advertisement