Ich habe ein Problem mit einem Vector innerhalb einer Struct.
hier ist mein Code:
// spieler.h
#define index skill1
typedef struct
{
VECTOR* sp_ziel;
} SP_DATEN;
ENTITY* eSpieler[3];
SP_DATEN sp_daten[3];
in der SP_DATEN wird eine Position gespeichert, zu der die Spieler-Entity laufen soll.
//game.c
eSpieler[0] = ent_create("cbabe.mdl",vector(0,0,0), pl_spieler);
sp_daten[0].sp_ziel = vector(300,100,-5);
spieler[0] wird erstellt und ziel[0] wird gesetzt.
in der Spieler-function ist dann folgendes:
//spieler.c
void pl_spieler()
{
pl_spieler_init();
while(1)
{
pl_laufeZumZiel(my.index);
if(pl_zielErreicht(my.index) == 1)
{
pl_sucheZiel(my.index);
}
wait(1);
}
}
und die Function pl_laufeZumZiel:
void pl_laufeZumZiel(var ind)
{
while (sp_daten[ind].sp_ziel == NULL) { wait(1); }
vec_set(vecTemp, sp_daten[ind].sp_ziel);
deb_print("sp_daten[0].sp_ziel"); //Debugging aus dem "RUDI"-Workshop
deb_print(vecTemp.x);
deb_print(vecTemp.y);
vec_sub(vecTemp,my.x);
vec_to_angle(my.pan,vecTemp);
my.tilt = 0;
c_move(my,vector(5*time_step,0,0),nullvector,GLIDE | IGNORE_PASSABLE);
}
Und nun das Problem:
erst dreht sich die Entity ganz brav in die Ziel-Richtung, läuft...
aber nach genau 64 Frames wird sp_daten[ind].sp_ziel verändert. Y wird auf 0 gesetzt, X auf ein Wert zwischen 0 und 0.300
acklog.txt
frm(1) = Ball erstellt!
frm(1) = Spieler erstellt!
frm(2) = sp_daten[0].sp_ziel
frm(2) = 300
frm(2) = 100
...
frm(64) = sp_daten[0].sp_ziel
frm(64) = 300
frm(64) = 100
frm(65) = sp_daten[0].sp_ziel // :-((
frm(65) = 0.156
frm(65) = 0
Wenn ich die c_move... auskommentiere, bleiben die Werte laut deb_print in Ordnung.
Wo mache ich Was falsch?