1
0
Fork 0
forked from fte/fteqw

Added frametime global.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3528 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2010-04-09 10:50:14 +00:00
parent e07f5976b5
commit 57c75a4ce7

View file

@ -153,6 +153,7 @@ typedef enum
\ \
/*These are pointers to the csqc's globals.*/ \ /*These are pointers to the csqc's globals.*/ \
globalfloat(svtime, "time"); /*float Written before entering most qc functions*/ \ globalfloat(svtime, "time"); /*float Written before entering most qc functions*/ \
globalfloat(frametime, "frametime"); /*float Written before entering most qc functions*/ \
globalfloat(cltime, "cltime"); /*float Written before entering most qc functions*/ \ globalfloat(cltime, "cltime"); /*float Written before entering most qc functions*/ \
globalentity(self, "self"); /*entity Written before entering most qc functions*/ \ globalentity(self, "self"); /*entity Written before entering most qc functions*/ \
globalentity(other, "other"); /*entity Written before entering most qc functions*/ \ globalentity(other, "other"); /*entity Written before entering most qc functions*/ \
@ -1759,6 +1760,12 @@ static void PF_cs_PrecacheModel(progfuncs_t *prinst, struct globalvars_s *pr_glo
char *modelname = PR_GetStringOfs(prinst, OFS_PARM0); char *modelname = PR_GetStringOfs(prinst, OFS_PARM0);
int i; int i;
if (!*modelname)
{
G_FLOAT(OFS_RETURN) = 0;
return;
}
for (i = 1; i < MAX_MODELS; i++) //Make sure that the server specified model is loaded.. for (i = 1; i < MAX_MODELS; i++) //Make sure that the server specified model is loaded..
{ {
if (!*cl.model_name[i]) if (!*cl.model_name[i])
@ -3549,13 +3556,16 @@ static void PF_skel_create (progfuncs_t *prinst, struct globalvars_s *pr_globals
//float(float skel, entity ent, float modelindex, float retainfrac, float firstbone, float lastbone) skel_get_numbones (FTE_CSQC_SKELETONOBJECTS) //float(float skel, entity ent, float modelindex, float retainfrac, float firstbone, float lastbone) skel_get_numbones (FTE_CSQC_SKELETONOBJECTS)
static void PF_skel_build(progfuncs_t *prinst, struct globalvars_s *pr_globals) static void PF_skel_build(progfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
#define MAX_BONES 256
int skelidx = G_FLOAT(OFS_PARM0); int skelidx = G_FLOAT(OFS_PARM0);
csqcedict_t *ent = (csqcedict_t*)G_EDICT(prinst, OFS_PARM1); csqcedict_t *ent = (csqcedict_t*)G_EDICT(prinst, OFS_PARM1);
int midx = G_FLOAT(OFS_PARM2); int midx = G_FLOAT(OFS_PARM2);
int retainfrac = G_FLOAT(OFS_PARM3); float retainfrac = G_FLOAT(OFS_PARM3);
int firstbone = G_FLOAT(OFS_PARM4)-1; int firstbone = G_FLOAT(OFS_PARM4)-1;
int lastbone = G_FLOAT(OFS_PARM5)-1; int lastbone = G_FLOAT(OFS_PARM5)-1;
float addition = 1?G_FLOAT(OFS_PARM6):1-retainfrac;
int i, j;
int numbones; int numbones;
framestate_t fstate; framestate_t fstate;
skelobject_t *skelobj; skelobject_t *skelobj;
@ -3591,16 +3601,45 @@ static void PF_skel_build(progfuncs_t *prinst, struct globalvars_s *pr_globals)
if (firstbone < 0) if (firstbone < 0)
firstbone = 0; firstbone = 0;
if (retainfrac >= 1) if (retainfrac == 0 && addition == 1)
{ {
//retain everything... /*replace everything*/
} Mod_GetBoneRelations(model, firstbone, lastbone, &fstate, skelobj->bonematrix);
else if (retainfrac>0)
{
//codeme
} }
else else
Mod_GetBoneRelations(model, firstbone, lastbone, &fstate, skelobj->bonematrix); {
if (retainfrac != 1)
{
//rescale the existing bones
for (i = firstbone; i < lastbone; i++)
{
for (j = 0; j < 12; j++)
skelobj->bonematrix[i*12+j] *= retainfrac;
}
}
if (addition == 1)
{
//just add
float relationsbuf[MAX_BONES*12];
Mod_GetBoneRelations(model, firstbone, lastbone, &fstate, relationsbuf);
for (i = firstbone; i < lastbone; i++)
{
for (j = 0; j < 12; j++)
skelobj->bonematrix[i*12+j] += relationsbuf[i*12+j];
}
}
else if (addition)
{
//add+scale
float relationsbuf[MAX_BONES*12];
Mod_GetBoneRelations(model, firstbone, lastbone, &fstate, relationsbuf);
for (i = firstbone; i < lastbone; i++)
{
for (j = 0; j < 12; j++)
skelobj->bonematrix[i*12+j] += addition*relationsbuf[i*12+j];
}
}
}
G_FLOAT(OFS_RETURN) = (skelobj - skelobjects) + 1; G_FLOAT(OFS_RETURN) = (skelobj - skelobjects) + 1;
} }
@ -5730,6 +5769,9 @@ qboolean CSQC_DrawView(void)
CL_CalcClientTime(); CL_CalcClientTime();
if (csqcg.frametime)
*csqcg.frametime = host_frametime;
#ifdef USEODE #ifdef USEODE
while(1) while(1)
{ {