Using engine_getvar()

Posted By: Shadow969

Using engine_getvar() - 08/26/07 15:39

Hi, can someone explain me the correct way of using engine_getvar()?

Code:
long typ;
my.material = engine_getvar("mat_model",&typ);


after using it MY entity turns black if it's a model, or gets a dark texture if it's a terrain. i guess my code is completely wrong
Posted By: Shadow969

Re: Using engine_getvar() - 08/26/07 16:14

Nevermind, i found the right way, thanks to Uhrwerk

Code:
long typ;
my.material = *((MATERIAL**)engine_getvar("mat_model",&typ));


Posted By: jcl

Re: Using engine_getvar() - 08/27/07 09:41

Yes. For the predefined engine variables, you'll get not the variable itself, but a pointer to it.
Posted By: hack-panther

Re: Using engine_getvar() - 10/31/07 09:55

Ich habe zu der Funktion auch eine Frage und möchte kein extra Thema dazu eröffnen:

Ich kann mit folgender Zeile ein Integer auslesen,
dessen Name in IntName_Str gespeichert ist:
Code:
long varType;
*((int*)engine_getvar((IntName_Str->chars), &varType))



Aber wenn es ein Integer-Array ist, gibt es einen Crash...

Kann man mit der Funktion keine Integer-Arrays auslesen
oder muss ich was an der Zeile ändern???

Bitte um Hilfe...

MfG
Hack-Panther
Posted By: jcl

Re: Using engine_getvar() - 11/01/07 10:29

Sie bekommen hier einen Pointer auf einen Pointer, denn ein Array und ein Pointer sind dasselbe unter C/C++.

Falls das nicht weiterhilft: Können Sie ein kurzes Code-Beispiel posten, mit einem Integer-Array? engine_getvar kann mit Sicherheit auch arrays zurückliefern, aber vielleicht liegt das Problem anderswo.
Posted By: hack-panther

Re: Using engine_getvar() - 11/01/07 21:51

Pointer auf einen Pointer heißt also (int**)?

Aber ich bekomme es immer noch nicht hin.

Ein Beispiel:
Code:

int IntArray[#5];
function test
{
int IntArray[1]=123;
long varType;
int i=0;

i=*((int**)(engine_getvar(("IntArray[1]", &varType)));
}



Das gibt einen Crash...

Dann dachte ich mir, dass er vielleicht nur den kompletten Array zurückliefert und habe weiter rum exprimentiert:

Code:
*((int**)(engine_getvar(("IntArray", &varType))); //Ohne Array-Index klappt es und es wird 0 zurückgeliefert. 



Code:
*((int**)(engine_getvar(("IntArray", &varType)))[1]; //wieder Crash



Wie funktioniert es denn jetzt richtig?....
Posted By: jcl

Re: Using engine_getvar() - 11/02/07 10:24

Alle 3 Beispiele sind falsch. Richtig wäre z.B.

i = ((int*)(engine_getvar("IntArray", &varType)))[1];

Aber Ihre Funktion wird sowieso immer 0 liefern. Warum, das lasse ich hier mal wieder als kleine Denksportaufgabe stehen .
Posted By: hack-panther

Re: Using engine_getvar() - 11/02/07 20:19

Jaaa gut....
Sie meinen wohl weil ich mich im Beispielcode verschrieben habe. ( int IntArray[1]=123; )

In meinem Projekt klappt es aber nun...

Da war ich ja nah dran mit meiner Lösung,
aber das mit dem Poiter vom Pointer usw. muss ich wohl noch was üben...

Vielen dank...

[Edit] Aber multidimensionale Arrays gehen mit engine_getvar nicht oder?
Wenn ich z.B. schreibe:
i = ((int*)(engine_getvar("IntArray", &varType)))[1][1];
kommt bei mit die Fehlermeldung "dimension of array error"...
© 2024 lite-C Forums