ent_create(STRING* filename, VECTOR* position, function);
ent_createlocal(STRING* filename, VECTOR* position, function);
Erzeugt eine Modell-, Sprite- oder Map-Entity im gerade laufenden
Level. Wird meist zum Generieren von Geschossen oder Explosionen
benutzt, aber auch zum Erzeugen von Player-Entities in einem Multiplayer-Game.
Die angegebene Funktion wird unmittelbar nach dem Erzeugen
gestartet, wobei der
MY-Pointer auf die erstellte Entity gesetzt
ist, und
YOU auf die Erzeugende (wenn es
eine gibt).
Die Anweisung liefert einen Pointer, der zum Setzen weiterer Entity-Parameter
verwendet werden kann, an die erzeugte Entity zurück
Ent_create
erzeugt eine globale Entity
auf dem Server und allen
angeschlossenen Clients. Die Entity-Funktion läuft auf dem Server.
Ent_createlocal
erzeugt die Entity lediglich auf dem lokalen Rechner. Eine lokale
Entity wird nicht auf den Server übertragen und ist somit auf anderen
Clients nicht sichtbar. Die lokale Entity-Funktion läuft nur auf
dem lokalen Computer. Lokale Entities können für komplexe Partikeleffekte, Spieler-Waffen
und ähnliches verwendet werden. In einem Single-Player Spiel verhalten sich
beide Anweisungen gleich.
Parameter:
filename - Dateiname der zu erstellenden Entity
im wmb-, hmp-, mdl-, pcx-, bmp-, tga- oder dds-Format oder NULL zum Erstellen
einer Dummy-Entity.
position
- Position, an der die Entity erstellt werden soll.
function
- Funktion, die die Entity ausführen soll, oder NULL für keine Aktion.
Rückgabewert:
Pointer auf
die erstellte Entity.
Modifiziert:
hit (wenn preload_mode auf 7 oder höher ist).
Geschwindigkeit:
Langsam mitt Zugriff auf die Hard-Disc, wenn die Entity-Datei in diesem Level nicht verwendet wurde, ansonsten mittel.
Bemerkungen:
-
Ein Level muss geladen sein, damit Level-Entities erzeugt werden können. ent_create Funktionen können also nicht direkt bei Spielstart auf dem Klienten aufgerufen werden, bevor dieser mit dem Server
verbunden ist. In einem Multiplayer-System warten Sie nach level_load und session_connect bis dplay_status auf 6 oder höher steht, ehe Sie Entities erzeugen.
- Das Erzeugen einer Map-Entity generiert nur die Entity selbst,
eventuell vorhandenen Sub-Entities werden nicht erstellt.
- Beim Erstellen einer Terrain-Entity, läuft die Entity-Aktion bereits ehe das Terrain im Level platziert ist. Dies ermöglicht es der Aktion, die Skalierung des Terrains, die später nicht geändert werden kann, zu setzen.
-
Die Action einer lokalen Entity läuft nur auf dem erstellenden PC. Lokale
Entities führen Kollisionserkennung durch,
sind für globale Entities aber passable, da sie auf dem Server nicht existieren.
-
In einem Single-Player-System wird die Entity-Funktion sofort mit
dem Erstellen der Entity gestartet. In Multiplayer Spielen werden
Entity-Funktionen durch Übermittlung vom Server
ausgelöst, was bis zu 0.5 Sekunden dauern kann.
- Auf einem Single-Player-System, wird die Entity-Funktion sofort gestartet nachdem die Entity erstellt wurde. Auf Multiplayer-Systemen werden Entity-Funktionen normalerweise nur auf dem Server gestartet (sofern dplay_localfunction nicht gesetzt ist)
-
Auf einem Single-Player-System ist das Handle
der Entity (
(►handle()-Anweisung)
direkt nach dem Erstellen gültig. In Multiplayer-Systemen dagegen
kann es bis zu 0.5 Sekunden dauern, bis die Entity auf allen
angeschlossenen PCs erzeugt wurde und das Handle gültig
wird. Die Variable client_id kann abgefragt werden solange bis das Handle gültig wird: (client_id != dplay_id) wait(1);. Während dieser Zeit kann
das Handle nicht benutzt und Entity-Skills können
nicht gesendet werden (► send_skill()).
-
Zum Beschleunigen des Erstellens weiterer Entities
wird die Entity-Datei in einem internen Cache gespeichert.
Dieser Cache wird durch level_load geleert.
- Ist der Modus preload_mode gesetzt, werden Entity-Mesch und -Texturen sofort nach ent_create erstellt. Ansonsten werden Mesh und Texturen nur dann erstellt, wenn die Entity zum ersten mal gesehen wird und dies kann, wenn es für viele Entities geschieht zu einer kleinen Verzögerung führen. Ist preload_mode auf 7 gesetzt, wird auch die Umgebungsbeleuchtung erstellt. Dies verlangt einen internen c_trace-Aufruf und verändert das hit-Struct.
- Dummy-Entities (beispielsweise für dynamische Lichter)
lassen sich erstellen, indem NULL als Dateiname übergeben wird. Eine Dummy-Entity hat sämtliche Entity-Parameter ist aber immer unsichtbar und passable.
- A7.70 Vordefinierte primitive Entities lassen sich mit den folgenden Kommandos erstellen:
ent_create(CUBE_MDL,...) erstellt ein 16x16x16 Würfelmodell ohne Skin;
ent_create(SPHERE_MDL,...) erstellt ein Kugelmodell mit einem Durchmesser von 16 Quants.
ent_create(SHADOW_DDS,...) erstellt ein 128x128 grosses, transparentes DDS-Sprite mit einem dunklen Punkt im Zentrum.
Dateien mit demselben Namen im Pfad überschreiben die Primitives.
- Die Entity kann per ent_remove wieder entfernt werden.
Beispiel:
you = ent_create ("flash.pcx", temp, flash_action);
Siehe auch:
ENTITIES, ent_morph, ent_purge, ent_preload, ent_remove, ent_createlayer, level_load, preload_mode
► Aktuelle Version Online