/* Zaero Camera */ #include "g_local.h" void zCam_SetLocalCopy(struct edict_s *player, char *s); void zCam_TrackEntity(struct edict_s *player, struct edict_s *track, qboolean playerVisiable, qboolean playerOffset) { if(player->client == NULL) return; // not a true player player->client->zCameraTrack = track; // set the player view stuff... player->movetype = MOVETYPE_FREEZE; player->client->ps.gunindex = 0; player->client->ps.fov = 90; VectorSet(player->client->zCameraOffset, 0, 0, 0); // if invisible, turn off model, etc if(playerVisiable) { edict_t *e = NULL; player->client->zCameraLocalEntity = e = G_Spawn(); e->classname = "VisorCopy"; e->owner = player; e->movetype = MOVETYPE_NONE; e->solid = SOLID_BBOX; e->s.skinnum = player->s.skinnum; e->s.modelindex = player->s.modelindex; e->s.modelindex2 = player->s.modelindex2; VectorCopy(player->mins, e->mins); VectorCopy(player->maxs, e->maxs); VectorCopy (player->s.origin, e->s.origin); VectorCopy (player->s.angles, e->s.angles); VectorCopy (player->s.old_origin, e->s.old_origin); e->s.frame = player->s.frame; e->s.effects = player->s.effects; player->svflags |= SVF_NOCLIENT; // so that no one can see our real model gi.linkentity(e); } else { player->client->zCameraLocalEntity = NULL; // to do } } void zCam_Stop(struct edict_s *player) { if(player->client == NULL) { return; // not a true player } player->client->zCameraTrack = NULL; // set the player view stuff... player->movetype = MOVETYPE_WALK; player->client->ps.gunindex = gi.modelindex(player->client->pers.weapon->view_model); // if invisible, turn on model, etc if(player->client->zCameraLocalEntity) { G_FreeEdict(player->client->zCameraLocalEntity); player->client->zCameraLocalEntity = NULL; player->svflags &= ~SVF_NOCLIENT; } else { // todo } } char *getSkinModel(char *s, char *buffer) { char *cp; strcpy(buffer, "players/"); cp = buffer + strlen(buffer); while(*s && *s != '/') { *cp = *s; cp++; s++; } strcpy(cp, "/tris.md2"); return buffer; } char *getSkinName(char *s, char *buffer) { strcpy(buffer, "players/"); strcat(buffer, s); strcat(buffer, ".pcx"); return buffer; } void zCam_SetLocalCopy(struct edict_s *player, char *s) { // char model[255]; if(player->client->zCameraLocalEntity) { /* player->client->zCameraLocalEntity->s.modelindex = gi.modelindex(getSkinModel(s, model)); player->client->zCameraLocalEntity->s.renderfx |= RF_CUSTOMSKIN; player->client->zCameraLocalEntity->s.skinnum = gi.imageindex(getSkinName(s, model)); */ player->client->zCameraLocalEntity->s.modelindex = gi.modelindex("models/objects/gibs/head2/tris.md2"); } }