Jump to content

[SOLVED] Instance of ExternClass as a Variable?


photo

Recommended Posts

Posted

class A
{
 int i;
public:
 A( int _i ) : i( _i ) { }
 inline Unigine::Variable GetI() { return Unigine::Variable( i ); }
};

ExternClass<A>* aClass = MakeExternClass<A>();
aClass->addConstructor<int>( "0" );
aClass->addFunction( "GetI", &A::GetI );
Interpreter::addExternClass( "A", aClass );

class B
{
 A a;
public:
 A( int _i ) : a( _i ) { }
 inline Unigine::Variable GetA() { return Unigine::Variable( a ); } // error C2440:
	// '<function-style-cast>' : cannot convert from 'A' to 'Unigine::Variable'
};

 

How can I agregate A instance in B class and plug they into UnigineScript? They are both extern.

Posted

You should pass a pointer:

return Unigine::Variable(Unigine::TypeInfo(Unigine::TypeID<A*>(),&a);

Posted
inline Unigine::Variable GetA() { return Unigine::Variable( Unigine::TypeInfo( Unigine::TypeID<A*>(), &a ) ); }
// error C2665:
// 'Unigine::TypeInfo::TypeInfo' : none of the 3 overloads could convert all the argument types
//  could be 'Unigine::TypeInfo::TypeInfo(int,const char *)
//  while trying to match the argument list '(Unigine::TypeID<Type>, A *)'
//	with
//	[
//   	Type=A *
//	]

Posted

Well, it's actually

 

class A
{
 int i;

 public:
 A( int _i ) : i( _i ) { }

 Unigine::Variable GetI() { return Unigine::Variable( i ); }
};

class B
{
 A a;

public:
 A( int _i ) : a( _i ) { }

 Unigine::Variable GetA() { return Unigine::Variable( Unigine::TypeInfo( Unigine::TypeID<A*>(), &a ) ); }
 // error C2665:
 // 'Unigine::TypeInfo::TypeInfo' : none of the 3 overloads could convert all the argument types
 //  could be 'Unigine::TypeInfo::TypeInfo(int,const char *)
 //  while trying to match the argument list '(Unigine::TypeID<Type>, A *)'
 //  with
 //  [
 //	Type=A *
 //  ]
};

class CustomPlugin : public Unigine::Plugin
{
public:
 CustomPlugin() { }
 virtual ~CustomPlugin() { }

 virtual int init()
 {
ExternClass<A>* aClass = MakeExternClass<A>();
aClass->addConstructor<int>( "0" );
aClass->addFunction( "GetI", &A::GetI );
Interpreter::addExternClass( "A", aClass );

ExternClass<B>* bClass = MakeExternClass<B>();
bClass->addConstructor<int>( "0" );
bClass->addFunction( "GetA", &B::GetA );
Interpreter::addExternClass( "B", bClass );

return 1;
 }

 virtual int shutdown() { return 1; }
};

Posted

return Unigine::Variable(Unigine::TypeInfo(Unigine::TypeID<A*>()),&a);

  • 1 year later...
Posted

return Unigine::Variable(Unigine::TypeInfo(Unigine::TypeID<A*>()),&a);

In latest SDK this doesn't work anymore. Variable constructor has been changed.

Posted

Pass an "Interpreter::get()" parameter as a first argument of Variable constructor:

return Unigine::Variable(Unigine::Interpreter::get(),Unigine::TypeInfo(Unigine::TypeID<A*>()),&a);
×
×
  • Create New...