pXent_settype (ENTITY* entity, var type, var hull )

Registriert bzw. löscht eine Entity aus dem Physiksystem. Sobald sie registriert ist, wird die Entity vom Physiksystem kontrolliert und ein "PhysX Actor" wird erstellt (die Entity-Gruppen-ID wird automatisch auf 1 gesetzt). Nach dem Löschen der Registrierung wird der Actor gelöscht und die Entity nicht mehr von der Physik kontrolliert.

Parameter:

entity Entity-Pointer, der registriert bzw. gelöscht werden soll, oder NULL wenn das Level registriert wird.
type PH_STATIC = registriert die Entiy als statisches Hindernis.
PH_RIGID = registriert die Entity als dynamischen, starren Körper, der sich bewegen kann (nur Modell-Entities).
PH_CHAR = registriert die Entity als einen Charaktersteuerer (nur Modell-Entities).
0 = löscht die Registrierung der Entity aus dem Physiksystem.unregister the entity from the physics ystem.
hull PH_BOX - Rechteckige, als Box geformte Hülle.
PH_SPHERE - Runde Hülle.
PH_CAPSULE - Zylindrische Kollisionshülle mit einer Halbkugel oben und unten.
PH_POLY
- Polygonale Hülle, nur für statische (PH_STATIC) Actors.
PH_CONVEX - Einfache polygonale Hülle für dynamische Actors - maximal 256 Polygone.
PH_TERRAIN - Höhenmap; PH_POLY - funktioniert oftmals besser für Terrain.
PH_PLANE - Grundebene bei der Position z=0.
Add PH_MODIFIED zum Wieder-Registrieren einer geänderten PH_POLY- oder PH_CONVEX -Hülle.

Rückgabewerte:

Bei Erfolg, gegenwärtige Anzahl von PhysX-Actors, ansonsten 0.

Bemerkungen:

Geschwindigkeit:

Langsam

Beispiel 1:

ENTITY* myCrate;
// ...
// on startup
myCrate = ent_create( "crate.mdl", nullvector, any_function );
pXent_settype( myCrate, PH_RIGID, PH_BOX ); 
pXent_settype( myCrate, 0, 0 );
// ...
// during gameplay let's have fun with a crate:
var position;
pXent_settype( myCrate, PH_RIGID, PH_BOX );
position= myCrate.x; // this will give you an approximate position
//myCrate.x = position + 10; // this won't work!
pXent_settype( myCrate, 0, 0 );
myCrate.x = position + 10; // unregistered - now we can change the position

pXent_settype( myCrate, PH_RIGID, PH_BOX ); // restart from new position

Beispiel 2:

function f_ball()
{
  VECTOR vKick;
  vec_set(vKick,vector(300,0,100));
  pXent_settype(my, PH_RIGID, 1);
  pXent_setfriction(my, 100);
  pXent_setelasticity(my, 10);
  vec_rotate(vKick,camera.pan);
  pXent_addvelcentral(my, vKick);
}

function on_mouse_right_event()
{
  while (mouse_left) {wait (1);}
  ENTITY* ball = ent_create ("explosion.mdl", camera.x, f_ball);
  set(ball,PASSABLE);
}

Siehe auch:

pXent_addshape, pXent_removeshape