125 lines
2.8 KiB
C
125 lines
2.8 KiB
C
|
/*
|
||
|
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");
|
||
|
}
|
||
|
}
|