Jump to content

  • Log In with Google      Sign In   
  • Create Account


#ActualSoulSharer

Posted 15 June 2013 - 03:03 AM

Hello friends,

I'm working on a game that requires intensive scripting (adventure game) and I experience some difficulties dealing with global properties.

It would be great if someone could help a fellow indie developer. Thanks.

 

Problem #1 (Solved - see below)

 

The problem is that in the example provided here: documentation link, we see that:

// Variables that should be accessible through the script.
CObject *g_object = 0;

// A function to register the global properties. 
void RegisterProperties(asIScriptEngine *engine)
{
 // Register variable where the script can store a handle to a CObject type. 
    // Assumes that the CObject type has been registered with the engine already as a reference type.
    r = engine->RegisterGlobalProperty("CObject @g_object", &g_object); assert( r >= 0 );
}

However it doesn't seem to work for me sad.png. I do it like this:

int r = 0;

GraphicsObject* go = ((GraphicsObject*)GetEntity("mooseCloth"));
r = engine->RegisterGlobalProperty("GraphicsObject @mooseCloth", &go); SE_ASSERT( r >= 0 );

go = ((GraphicsObject*)GetEntity("topCloth"));
r = engine->RegisterGlobalProperty("GraphicsObject @topCloth", &go); SE_ASSERT( r >= 0 );

go = ((GraphicsObject*)GetEntity("mooseHead"));
r = engine->RegisterGlobalProperty("GraphicsObject @mooseHead", &go); SE_ASSERT( r >= 0 );

Everything compiles without errors, but when I access this objects from script all of them point to the latest declaration "mooseHead". So for example if I go

topCloth.DoStuff();

instead of accessing topCloth it interferes with mooseHead. mellow.png

What am I doing wrong here?

 

One thing though, getting rid of this "@" for script variable declaration and "&" for passing the pointer to the object seems to solve that problem. But I'm not sure if it is a good way to go and if there any pitfall involved?

 

 

Problem #2 (Solved, see Andreas answer)

 

I want to declare a variable in a scope of module, so that when the game scene gets destroyed all the global variables are destroyed with it. However I didn't find a way to do that. There is a thing  CompileGlobalVar() but it doesn't allow me to pass the pointer to an object and there is no other function to do so (as far as I see), so I'm confused at that point. sad.png

There is no ability to destroy/unregister a global variable in the asIScriptEngine as well.

 

Thanks.

Yaroslav.


#4SoulSharer

Posted 13 June 2013 - 12:25 PM

Hello friends,

I'm working on a game that requires intensive scripting (adventure game) and I experience some difficulties dealing with global properties.

It would be great if someone could help a fellow indie developer. Thanks.

 

Problem #1 (Solved - see below)

 

The problem is that in the example provided here: documentation link, we see that:



// Variables that should be accessible through the script.
CObject *g_object = 0;

// A function to register the global properties. 
void RegisterProperties(asIScriptEngine *engine)
{
 // Register variable where the script can store a handle to a CObject type. 
    // Assumes that the CObject type has been registered with the engine already as a reference type.
    r = engine->RegisterGlobalProperty("CObject @g_object", &g_object); assert( r >= 0 );
}

However it doesn't seem to work for me sad.png. I do it like this:



int r = 0;

GraphicsObject* go = ((GraphicsObject*)GetEntity("mooseCloth"));
r = engine->RegisterGlobalProperty("GraphicsObject @mooseCloth", &go); SE_ASSERT( r >= 0 );

go = ((GraphicsObject*)GetEntity("topCloth"));
r = engine->RegisterGlobalProperty("GraphicsObject @topCloth", &go); SE_ASSERT( r >= 0 );

go = ((GraphicsObject*)GetEntity("mooseHead"));
r = engine->RegisterGlobalProperty("GraphicsObject @mooseHead", &go); SE_ASSERT( r >= 0 );

Everything compiles without errors, but when I access this objects from script all of them point to the latest declaration "mooseHead". So for example if I go



topCloth.DoStuff();

instead of accessing topCloth it interferes with mooseHead. mellow.png

What am I doing wrong here?

 

One thing though, getting rid of this "@" for script variable declaration and "&" for passing the pointer to the object seems to solve that problem. But I'm not sure if it is a good way to go and if there any pitfall involved?

 

 

Problem #2

 

I want to declare a variable in a scope of module, so that when the game scene gets destroyed all the global variables are destroyed with it. However I didn't find a way to do that. There is a thing  CompileGlobalVar() but it doesn't allow me to pass the pointer to an object and there is no other function to do so (as far as I see), so I'm confused at that point. sad.png

There is no ability to destroy/unregister a global variable in the asIScriptEngine as well.

 

Thanks.

Yaroslav.


#3SoulSharer

Posted 13 June 2013 - 06:20 AM

Hello friends,

I'm working on a game that requires intensive scripting (adventure game) and I experience some difficulties dealing with global properties.

It would be great if someone could help a fellow indie developer. Thanks.

 

Problem #1

 

The problem is that in the example provided here: documentation link, we see that:

// Variables that should be accessible through the script.
CObject *g_object = 0;

// A function to register the global properties. 
void RegisterProperties(asIScriptEngine *engine)
{
 // Register variable where the script can store a handle to a CObject type. 
    // Assumes that the CObject type has been registered with the engine already as a reference type.
    r = engine->RegisterGlobalProperty("CObject @g_object", &g_object); assert( r >= 0 );
}

However it doesn't seem to work for me sad.png. I do it like this:

int r = 0;

GraphicsObject* go = ((GraphicsObject*)GetEntity("mooseCloth"));
r = engine->RegisterGlobalProperty("GraphicsObject @mooseCloth", &go); SE_ASSERT( r >= 0 );

go = ((GraphicsObject*)GetEntity("topCloth"));
r = engine->RegisterGlobalProperty("GraphicsObject @topCloth", &go); SE_ASSERT( r >= 0 );

go = ((GraphicsObject*)GetEntity("mooseHead"));
r = engine->RegisterGlobalProperty("GraphicsObject @mooseHead", &go); SE_ASSERT( r >= 0 );

Everything compiles without errors, but when I access this objects from script all of them point to the latest declaration "mooseHead". So for example if I go

topCloth.DoStuff();

instead of accessing topCloth it interferes with mooseHead. mellow.png

What am I doing wrong here?

 

One thing though, getting rid of this "@" for script variable declaration and "&" for passing the pointer to the object seems to solve that problem. But I'm not sure if it is a good way to go and if there any pitfall involved?

 

 

Problem #2

 

I want to declare a variable in a scope of module, so that when the game scene gets destroyed all the global variables are destroyed with it. However I didn't find a way to do that. There is a thing  CompileGlobalVar() but it doesn't allow me to pass the pointer to an object and there is no other function to do so (as far as I see), so I'm confused at that point. sad.png

There is no ability to destroy/unregister a global variable in the asIScriptEngine as well.

 

Thanks.

Yaroslav.


#2SoulSharer

Posted 13 June 2013 - 05:10 AM

Hello friends,

I'm working on a game that requires intensive scripting (adventure game) and I experience some difficulties dealing with global properties.

It would be great if someone could help a fellow indie developer. Thanks.

 

Problem #1

 

The problem is that in the example provided here: documentation link, we see that:





// Variables that should be accessible through the script.
CObject *g_object = 0;

// A function to register the global properties. 
void RegisterProperties(asIScriptEngine *engine)
{
 // Register variable where the script can store a handle to a CObject type. 
    // Assumes that the CObject type has been registered with the engine already as a reference type.
    r = engine->RegisterGlobalProperty("CObject @g_object", &g_object); assert( r >= 0 );
}

However it doesn't seem to work for me sad.png. I do it like this:





int r = 0;

GraphicsObject* go = ((GraphicsObject*)GetEntity("mooseCloth"));
r = engine->RegisterGlobalProperty("GraphicsObject @mooseCloth", &go); SE_ASSERT( r >= 0 );

go = ((GraphicsObject*)GetEntity("topCloth"));
r = engine->RegisterGlobalProperty("GraphicsObject @topCloth", &go); SE_ASSERT( r >= 0 );

go = ((GraphicsObject*)GetEntity("mooseHead"));
r = engine->RegisterGlobalProperty("GraphicsObject @mooseHead", &go); SE_ASSERT( r >= 0 );

Everything compiles without errors, but when I access this objects from script all of them point to the latest declaration "mooseHead". So for example if I go





topCloth.DoStuff();

instead of accessing topCloth it interferes with mooseHead. mellow.png

What am I doing wrong here?

 

One thing though, getting rid of this "@" for script variable declaration and "&" for passing the pointer to the object seems to solve that problem. But I'm not sure if it is a good way to go and if there any pitfall involved?

 

 

Problem #2

 

I want to declare a variable in a scope of module, so that when the game scene gets destroyed all the global variables are destroyed with it. However I didn't find a way to do that. There is a thing  CompileGlobalVar() but it doesn't allow me to pass the pointer to an object and there is no other function to do so (as far as I see), so I'm confused at that point. sad.png

There is no ability to destroy/unregister a global variable in the asIScriptEngine as well.

 

Thanks.

Yaroslav.


#1SoulSharer

Posted 12 June 2013 - 03:33 AM

Hello friends,

I'm working on a game that requires intensive scripting (adventure game) and I experience some difficulties dealing with global properties.

It would be great if someone could help a fellow indie developer. Thanks.

 

Problem #1

 

The problem is that in the example provided here: documentation link, we see that:

// Variables that should be accessible through the script.
CObject *g_object = 0;

// A function to register the global properties. 
void RegisterProperties(asIScriptEngine *engine)
{
 // Register variable where the script can store a handle to a CObject type. 
    // Assumes that the CObject type has been registered with the engine already as a reference type.
    r = engine->RegisterGlobalProperty("CObject @g_object", &g_object); assert( r >= 0 );
}

However it doesn't seem to work for me :(. I do it like this:

int r = 0;

GraphicsObject* go = ((GraphicsObject*)GetEntity("mooseCloth"));
r = engine->RegisterGlobalProperty("GraphicsObject @mooseCloth", &go); SE_ASSERT( r >= 0 );

go = ((GraphicsObject*)GetEntity("topCloth"));
r = engine->RegisterGlobalProperty("GraphicsObject @topCloth", &go); SE_ASSERT( r >= 0 );

go = ((GraphicsObject*)GetEntity("mooseHead"));
r = engine->RegisterGlobalProperty("GraphicsObject @mooseHead", &go); SE_ASSERT( r >= 0 );

Everything compiles without errors, but when I access this objects from script all of them point to the latest declaration "mooseHead". So for example if I go

topCloth.DoStuff();

instead of accessing topCloth it interferes with mooseHead. mellow.png 

What am I doing wrong here?

 

One thing though, getting rid of this "@" for script variable declaration and "&" for passing the pointer to the object seems to solve that problem. But I'm not sure if it is a good way to go and if there any pitfall involved?

 

 

Problem #2

 

I want to declare a variable in a scope of module, so that when the game scene gets destroyed all the global variables are destroyed with it. However I didn't find a way to do that. There is a thing  CompileGlobalVar() but it doesn't allow me to pass the pointer to an object and there is no other function to do so (as far as I see), so I'm confused at that point. sad.png

There is no ability to destroy/unregister a global variable in the asIScriptEngine as well.

 

Thanks.

Yaroslav.


PARTNERS