Entities

Entities sind die dynamischen Objekte, die Akteure, Monster, Fahrzeuge und andere Dinge, die sich in unsererr Spiele-Welt bewegen können. Zusätzlich zu den Parametern, die im Entity-Eigenschaftenpanel des WED eingestellt werden können, gibt es noch eine ganze Reihe weiterer Eigenschaften, die über Funktionen gesetzt, ausgewertet oder verändert werden können. Diese Eigenschaften beeinflussen das Aussehen der Entities, ihre Reaktionen auf gewisse Ereignisse und ihr Bewegungs- und Kollisionsverhalten. Einen Überblick erhalten Sie unter Entity Types.

Entities können auf drei verschiedene Arten erzeugt werden:

Im Level plazierte oder erzeugte Entities heissen Level-Entities, skript-definierte Entities sind entweder dem Bildschirm-Vordergrund zugeordnet (View-Entities) oder befinden sich im Hintergrund des Levels (Sky-Entities). View-Entities sind sind auch dann sichtbar, wenn gar kein Level geladen ist und ´überleben´Levelveränderungen. Sie lassen sich zum Darstellen von 3D-Elementen des User-Interfaces verwendenm, beispielsweise ein sich drehender Kompaß oder ein Lenkrad. Hier eine kleine Liste mit den Hauptunterschieden zwischen Level- View- oder Sky-Entities:

 
Level-Entities
View-Entities
Sky-Entities
Entitity-Typen Model, map, sprite, terrain Model, sprite Model, sprite
Erstellt mit WED, ent_create ENTITY* struct, ent_createlayer ENTITY* struct, ent_createlayer
Benutzt für Actors, Vehikel, Vegetation 3D-Panel-Elemente Sky, Hintergrund, Horizont
Gerendert im Level Bildschirmvordergrund Level-Hintergrund
Aktiv wenn INVISIBLE-Flag nicht gesetzt SHOW-Flag gesetzt (flags2) SHOW -Flag gesetzt (flags2)
Entfernt durch level_load, ent_remove ent_remove, level_load* ent_remove, level_load*
Events Kollision & Maus nur Maus keine
Reihenfolge der Sichtbarkeit View-Abstand Layer Layer, View-Abstand
Koordinaten Welt-Koordinaten View-Koordinaten View-Position, Welt-Drehung
* Layer-Entities, die nach dem Laden des Levels erstellt wurden, müssen bei Levelwechsel entfernt werden.

View-Entities werden folgendermaßen definiert:

ENTITY* name = { . . . }

Innerhalb der Definition kann jedweder Entity-Parameter oder jedes Flag als Initialwert gegeben werden. Der layer-Parameter bestimmt die Renderreihenfolge. Der Parameter client_id verbindet die Entitiy mit einem bestimmten View von dem sie ihre Arc- und Aspect-Parameter, sowie die Clip-Grenzen und das Render-Target nimmt. Per Default ist die Entity mit dem camera-View verknüpft.

Beispiel:

ENTITY* compass_panel =
{
  type = "compass.mdl";
  layer = 2; // display above panels with layer 1
  flags2 = SHOW; // visible on screen from the start
x = 100; // place 100 quants ahead of the view y = -50; // 50 to the right z = 0; // and center vertically }

Sky-Entities werden folgendermaßen definiert:

ENTITY* name = { ...  flags2 = SKY..; }

Definiert eine Sky-Textur, ein Sky-Sprite oder -Modell mit dem gegebenen Namen. Sky-Texturen werden auf alle Sky-Oberflächen im Level gemappt. Sky-Modelle werden um die Kamera herum zentriert, so dass sie Sky-Texturen, aber auch Levelelemente, je nach deren Abstand zur Kamera, bedecken können. Sky-Entities lassen sich in unbegrenzter Anzahl kombinieren. Wie bei den View-Entities wird die Reihenfolge des Zeichnens vom Layer-Parameter bestimmt. Von Level-Licht und Nebel sind sie nicht betroffen.

Sky-Entities werden, je nach den in der Definition gegebenen Flags, entweder dome-, cylinder- oder cube-gemappt. Ist kein solches Flag gesetzt, wird die Sky-Entity in den Levelhintergrund an gegebener x y z-Position gerendert. Auf diese Weise lassen sich Sonne, Mond oder andere Himmelsobjekte auf den Sky zeichnen.  LC  In lite-C werden Sky-Entities auf dieselbe Weise wie View-Entities definiert, nur dass ihr SKY-Flag gesetzt ist.

In einem Level ohne Map-Geometrie (Blocks) ist ein Sky, den sie im Skript aktivieren automatisch im Hintergrund sichtbar. In einem Level mit Map-Geometry (Blocks) ist der Sky nur dann sichtbar, wenn ein Block mit einer Sky-Oberfläche sichtbar ist. Wenn Sie diverse Sky-Layer benutzen, achten Sie darauf, jedweden Sky-Layer, der von anderen intransparenten Layers verdeckt ist abzuschalten und desaktivieren Sie auch die Hintergrundfarbe (sky_color). Damit vermeiden Sie unnötiges Rendern und halten die Framerate hoch.

Beispiel (lite-C):

ENTITY* skycube =
{
  type = "skycube+6.tga"; // the image for a backdrop scene
  flags2 = SKY | CUBE | SHOW; // sky cube, visible
}

Beispiel (C-Script):

SKY skycube =
{
  type = "skycube+6.tga"; // the image for a backdrop scene
  flags = CUBE | SHOW; // sky cube, visible
}

Siehe auch:

Entities, ent_create, ent_createlayer, ent_preload, ent_purge, CUBE, DOME, SCENE

 

► Aktuelle Version Online