000
05.07.2002, 17:12
TTJ
|
Moin !
Ich versuche gerade für mein kleines Projekt ein neues Entity zu erstellen.
http://www.planethalflife.com/ttj/galileo/
Man kann im Spiel mit Hilfe von +camin/+camout den Abstand der Kamera zum Spieler verändern. Ich würde das aber lieber über einen point entity machen damit ich beim Level designen mehr Kontrolle über die Kamera habe.
Folgende Idee: Ich benutze z.B. einen trigger_once welcher mein neues entity env_camera ansteuert. Die Funktion des Entities muß nur die cvar cam_idealdist auf dem im env_camera angegebenen Wert ändern.
Der fgd-code sieht so aus:
@PointClass base(Targetname) = env_camera : "Camera Distance" [ distance(string) : "Camera distance" : "250" ]
Ich hab allerdings noch nie ein HL Point entity gecodet, deshalb ein paar Fragen. Geht das so überhaupt ? Wie lese ich der Wert aus dem env_camera entity aus und wie kann ich dann am besten den Wert an die cvar cam_idealdist übergeben ? Wo kommt der Code für point entities hin ???
--
Level"TTJ"Design
http://www.planethalflife.com/ttj
|
|
Profil || Suche
|
001
06.07.2002, 10:53
Rockefeller
|
Das Problem ist: Entities sind serverside, die ganzen Renderinggeschichten, also auch die Cams, sind Clientside. Du musst also ne Message vom Server zum Client schicken mit den neuen Werten für Cam, und das ganze dann am Client auslesen.
--
|
|
Profil || Suche
|
002
06.07.2002, 11:23
TTJ
|
Habs fast hinbekommen :)
Die Idee mit dem point entity war nicht so dolle ich habs jetzt mit einem modifizierten trigger_multiple hinbekommen:
-------fgd eintrag---------------- @SolidClass base(Trigger) = trigger_zoom : "Trigger: Change cam distance" [ wait(integer) : "Delay before reset" : 10 distance(integer): "Camera distance" : 250 ] -------mein code----------------- class CTriggerZoom : public CBaseTrigger { public: void Spawn( void ); void ChangeDistance( CBaseEntity *pOther ); };
LINK_ENTITY_TO_CLASS( trigger_zoom, CTriggerZoom );
void CTriggerZoom :: Spawn( void ) { InitTrigger();
SetTouch( ChangeDistance ); }
void CTriggerZoom :: ChangeDistance( CBaseEntity *pOther ) { SERVER_COMMAND("cam_idealdist 100\n"); }
Funktioniert wunderbar allerdings gefällt mir der Code überhaupt nicht da ich zur zeit für jede Kameraeinstellung einen veränderten trigger_zoom benutzen muß. Weiß den keiner wie ich den Wert der in meinem trigger_zoom eingetragen wird auslesen kann ?? Außerdem krieg ich die Eingabe ohne den server_command makro nicht hin. Weiß irgendjemand wie ich die funktion g_engfuncs.pfnServerCommand ohne den makro ansteuern muß ???
--
Level"TTJ"Design
http://www.planethalflife.com/ttj
|
|
Profil || Suche
|
003
06.07.2002, 12:30
Archangel
|
-------fgd eintrag---------------- @SolidClass base(Trigger) = trigger_zoom : "Trigger: Change cam distance" [ wait(integer) : "Delay before reset" : 10 distance(integer): "Camera distance" : 250 ]
class CTriggerZoom : public CBaseTrigger { public: void Spawn(void); void KeyValue(KeyValueData *); void ChangeDistance(CBaseEntity *); private: int distance; };
LINK_ENTITY_TO_CLASS( trigger_zoom, CTriggerZoom )
void CTriggerZoom::Spawn(void) { InitTrigger(); SetTouch(ChangeDistance); }
void CTriggerZoom::KeyValue(KeyValueData *pkvd) { if(FStrEq(pkvd->szName, "distance")) { distance = atoi(pkvd->szValue); pkvd->fHandled = TRUE; } else CBaseTrigger::KeyValue(pkvd); }
void CTriggerZoom::ChangeDistance(CBaseEntity *pOther) { SERVER_COMMAND(UTIL_VarArgs("cam_idealdist %d\n", distance)); // es gibt da iirc noch ne (g_engfuncs ?) funktion, die ein client command ausführt, der muss allerdings ein edict_t pointer übergeben werden (pOther->edict()) }
bin gerade zu faul ins hlsdk zu gucken, also keine garantie, dass es funktioniert
--
Mar 01 01:10:13 <voice> jo Mar 01 01:10:40 <voice> bis dann ^^ Mar 01 01:11:20 <Archangel> jo **** ENDING LOGGING AT Tue Mar 1 01:58:13 2005
|
|
Profil || Suche
|
004
06.07.2002, 14:41
TTJ
|
Danke für das Grundgerüst ! Habs jetzt hinbekommen :)
Übrigens hattest du recht es funktionierte nicht gleich.
--
Level"TTJ"Design
http://www.planethalflife.com/ttj
|
|
Profil || Suche
|