Gryphon_de Posted November 15, 2011 Posted November 15, 2011 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.
frustum Posted November 15, 2011 Posted November 15, 2011 You should pass a pointer: return Unigine::Variable(Unigine::TypeInfo(Unigine::TypeID<A*>(),&a);
Gryphon_de Posted November 15, 2011 Author Posted November 15, 2011 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 * // ]
Gryphon_de Posted November 15, 2011 Author Posted November 15, 2011 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; } };
frustum Posted November 15, 2011 Posted November 15, 2011 return Unigine::Variable(Unigine::TypeInfo(Unigine::TypeID<A*>()),&a);
sergey.zadvorniy Posted August 22, 2013 Posted August 22, 2013 return Unigine::Variable(Unigine::TypeInfo(Unigine::TypeID<A*>()),&a); In latest SDK this doesn't work anymore. Variable constructor has been changed.
frustum Posted August 22, 2013 Posted August 22, 2013 Pass an "Interpreter::get()" parameter as a first argument of Variable constructor: return Unigine::Variable(Unigine::Interpreter::get(),Unigine::TypeInfo(Unigine::TypeID<A*>()),&a);
Recommended Posts