Ich finde es seither sehr unschön, dass man bei Entities, welche per ent_create() dynamisch erstellt werden, 1 Frame zu warten hat, ehe man die min_x/ max_x (nach einem c_setminmax() Aufruf oder (NARROW | FAT))
ändern kann. Insbesondere ist dies bei Projektilen, Raketen und ähnlichen Dingen unschön, was sich besonders bei niedrigen Frameraten bemerkbar macht. Workarounds (wie ein verspätetes Setzen der Bounding Box Dimensionen und 1-Frame lange c_trace Kollision) sind daher gelegentlich notwendig.
Im Handbuch fand ich unter dem Eintrag zu "min_x" folgenden Hinweis, an welchen ich mich noch grob erinnern konnte:
Bei Versionen unter 7.84, warten Sie einen Frame (wait(1)) nach Erstellen der Entity, ehe Sie die Bounding-Box setzen.
Heißt das aber, dass dieses Verhalten nach 7.84 nicht mehr eintreten sollte, das heißt dass ein Code der Form
void rocket_init()
{
//c_setminmax(my);
my.eflags |= NARROW | FAT;
vec_set(my.min_x,vector(-8,-4,-4));
vec_set(my.max_x,vector(24,4,4));
}
void rocket_create()
{
you = ent_create("rocket.mdl",nullvector,rocket_init);
...
}
die Bounding Box der Rakete ohne ein "wait(1)" tatsächlich manipulieren sollte?
Wenn ja, wo liegt der Fehler (ein Setzen von collision_mode = 2; bewirkt nichts)?