06 Apr 2010
This commit is contained in:
parent
432fa48d5d
commit
a2af66a059
|
@ -190,7 +190,6 @@ int HUD_Redraw( float flTime, int state )
|
|||
|
||||
void HUD_UpdateEntityVars( edict_t *ent, const entity_state_t *state, const entity_state_t *prev )
|
||||
{
|
||||
int i;
|
||||
float m_fLerp;
|
||||
|
||||
if( state->ed_type == ED_CLIENT && state->ed_flags & ESF_NO_PREDICTION )
|
||||
|
@ -247,6 +246,8 @@ void HUD_UpdateEntityVars( edict_t *ent, const entity_state_t *state, const enti
|
|||
// monster's steps will be interpolated on render-side
|
||||
ent->v.origin = state->origin;
|
||||
ent->v.angles = state->angles;
|
||||
ent->v.oldorigin = prev->origin; // used for lerp 'monster view'
|
||||
ent->v.oldangles = prev->angles; // used for lerp 'monster view'
|
||||
break;
|
||||
default:
|
||||
ent->v.angles = LerpAngle( prev->angles, state->angles, m_fLerp );
|
||||
|
@ -260,32 +261,26 @@ void HUD_UpdateEntityVars( edict_t *ent, const entity_state_t *state, const enti
|
|||
ent->v.rendercolor = LerpPoint( prev->rendercolor, state->rendercolor, m_fLerp );
|
||||
ent->v.renderamt = LerpPoint( prev->renderamt, state->renderamt, m_fLerp );
|
||||
|
||||
// auto-animation uses v.frame for hold ending frame
|
||||
if(!( ent->v.effects & EF_ANIMATE ))
|
||||
if( ent->v.animtime )
|
||||
{
|
||||
if( ent->v.animtime )
|
||||
{
|
||||
// use normal studio lerping
|
||||
ent->v.frame = state->frame;
|
||||
}
|
||||
else
|
||||
{
|
||||
// sprite frames will be interpolated in other place
|
||||
ent->v.frame = Q_rint( state->frame );
|
||||
}
|
||||
// use normal studio lerping
|
||||
ent->v.frame = state->frame;
|
||||
}
|
||||
else
|
||||
{
|
||||
// round sprite and brushmodel frames
|
||||
ent->v.frame = Q_rint( state->frame );
|
||||
}
|
||||
|
||||
switch( state->ed_type )
|
||||
{
|
||||
case ED_CLIENT:
|
||||
for( i = 0; i < 3; i++ )
|
||||
{
|
||||
ent->v.punchangle[i] = LerpAngle( prev->punch_angles[i], state->punch_angles[i], m_fLerp);
|
||||
ent->v.viewangles[i] = LerpAngle( prev->viewangles[i], state->viewangles[i], m_fLerp);
|
||||
ent->v.view_ofs[i] = LerpAngle( prev->viewoffset[i], state->viewoffset[i], m_fLerp);
|
||||
}
|
||||
ent->v.punchangle = LerpAngle( prev->punch_angles, state->punch_angles, m_fLerp );
|
||||
ent->v.viewangles = LerpAngle( prev->viewangles, state->viewangles, m_fLerp );
|
||||
ent->v.view_ofs = LerpPoint( prev->viewoffset, state->viewoffset, m_fLerp );
|
||||
|
||||
if( prev->fov < 90 && state->fov == 90 ) ent->v.fov = state->fov; // fov is reset, so don't lerping
|
||||
if( prev->fov != 90.0f && state->fov == 90.0f )
|
||||
ent->v.fov = state->fov; // fov is reset, so don't lerping
|
||||
else ent->v.fov = LerpPoint( prev->fov, state->fov, m_fLerp );
|
||||
ent->v.maxspeed = state->maxspeed;
|
||||
|
||||
|
@ -334,17 +329,15 @@ void HUD_UpdateEntityVars( edict_t *ent, const entity_state_t *state, const enti
|
|||
break;
|
||||
}
|
||||
|
||||
for( i = 0; i < MAXSTUDIOBLENDS; i++ )
|
||||
{
|
||||
ent->v.blending[i] = LerpByte( prev->blending[i], state->blending[i], m_fLerp );
|
||||
}
|
||||
int i;
|
||||
|
||||
// copy blendings
|
||||
for( i = 0; i < MAXSTUDIOBLENDS; i++ )
|
||||
ent->v.blending[i] = state->blending[i];
|
||||
|
||||
// copy controllers
|
||||
for( i = 0; i < MAXSTUDIOCONTROLLERS; i++ )
|
||||
{
|
||||
if( abs( prev->controller[i] - state->controller[i] ) > 128 )
|
||||
ent->v.controller[i] = state->controller[i];
|
||||
else ent->v.controller[i] = LerpByte( prev->controller[i], state->controller[i], m_fLerp );
|
||||
}
|
||||
ent->v.controller[i] = state->controller[i];
|
||||
|
||||
// g-cont. moved here because we may needs apply null scale to skyportal
|
||||
if( ent->v.scale == 0.0f ) ent->v.scale = 1.0f;
|
||||
|
|
|
@ -595,14 +595,19 @@ void V_CalcCameraRefdef( ref_params_t *pparams )
|
|||
if( viewentity )
|
||||
{
|
||||
dstudiohdr_t *viewmonster = (dstudiohdr_t *)GetModelPtr( viewentity );
|
||||
float m_fLerp = GetLerpFrac();
|
||||
|
||||
v_origin = viewentity->v.origin;
|
||||
if( viewentity->v.movetype == MOVETYPE_STEP )
|
||||
v_origin = LerpPoint( viewentity->v.oldorigin, viewentity->v.origin, m_fLerp );
|
||||
else v_origin = viewentity->v.origin; // already interpolated
|
||||
|
||||
// calc monster view if supposed
|
||||
if( gHUD.viewFlags & MONSTER_VIEW && viewmonster )
|
||||
v_origin += viewmonster->eyeposition;
|
||||
|
||||
v_angles = viewentity->v.angles;
|
||||
if( viewentity->v.movetype == MOVETYPE_STEP )
|
||||
v_angles = LerpAngle( viewentity->v.oldangles, viewentity->v.angles, m_fLerp );
|
||||
else v_angles = viewentity->v.angles; // already interpolated
|
||||
|
||||
if( gHUD.viewFlags & INVERSE_X ) // inverse X coordinate
|
||||
v_angles[0] = -v_angles[0];
|
||||
|
@ -615,19 +620,24 @@ void V_CalcCameraRefdef( ref_params_t *pparams )
|
|||
}
|
||||
else if( GetEntityByIndex( pparams->viewentity ) != GetLocalPlayer( ))
|
||||
{
|
||||
// this is a viewentity sets with SET_VIEW builtin
|
||||
// this is a viewentity which sets by SET_VIEW builtin
|
||||
edict_t *viewentity = GetEntityByIndex( pparams->viewentity );
|
||||
if( viewentity )
|
||||
{
|
||||
dstudiohdr_t *viewmonster = (dstudiohdr_t *)GetModelPtr( viewentity );
|
||||
float m_fLerp = GetLerpFrac();
|
||||
|
||||
v_origin = viewentity->v.origin;
|
||||
if( viewentity->v.movetype == MOVETYPE_STEP )
|
||||
v_origin = LerpPoint( viewentity->v.oldorigin, viewentity->v.origin, m_fLerp );
|
||||
else v_origin = viewentity->v.origin; // already interpolated
|
||||
|
||||
// calc monster view if supposed
|
||||
if( viewentity->v.flags & FL_MONSTER && viewmonster )
|
||||
v_origin += viewmonster->eyeposition;
|
||||
|
||||
v_angles = viewentity->v.angles;
|
||||
if( viewentity->v.movetype == MOVETYPE_STEP )
|
||||
v_angles = LerpAngle( viewentity->v.oldangles, viewentity->v.angles, m_fLerp );
|
||||
else v_angles = viewentity->v.angles; // already interpolated
|
||||
|
||||
if( viewentity->v.flags & FL_PROJECTILE ) // inverse X coordinate
|
||||
v_angles[0] = -v_angles[0];
|
||||
|
|
|
@ -158,13 +158,13 @@
|
|||
#define EF_ROTATE (1<<8) // rotate bonus item
|
||||
#define EF_MINLIGHT (1<<9) // allways have some light (viewmodel)
|
||||
#define EF_FULLBRIGHT (1<<10) // completely ignore light values
|
||||
#define EF_ANIMATE (1<<11) // do client animate (ignore v.frame)
|
||||
#define EF_STUDIOLAMBERT (1<<11) // use alternative studiomodels lighting
|
||||
#define EF_NOSHADOW (1<<12) // ignore shadow for this entity
|
||||
#define EF_PLANARSHADOW (1<<13) // use fast planarshadow method instead of shadow casters
|
||||
#define EF_OCCLUSIONTEST (1<<14) // use occlusion test for this entity (e.g. glares)
|
||||
#define EF_LASERSPOT (1<<15) // tempentity laserspot at attachment #1 from player or npc
|
||||
#define EF_NOMIRRORS (1<<16) // entity won't reflecting in mirrors
|
||||
#define EF_ONLYMIRRORS (1<<17) // entity will be drawing only in mirrors
|
||||
#define EF_NOREFLECT (1<<16) // entity won't reflecting in mirrors
|
||||
#define EF_REFLECTONLY (1<<17) // entity will be drawing only in mirrors
|
||||
|
||||
// The explosion effect has some flags to control performance/aesthetic features:
|
||||
#define TE_EXPLFLAG_NONE 0 // all flags clear makes default Half-Life explosion
|
||||
|
|
|
@ -29,6 +29,7 @@ typedef struct entvars_s
|
|||
vec3_t movedir;
|
||||
|
||||
vec3_t angles; // ENG [all], NET [all]
|
||||
vec3_t oldangles; // ENG [all], NET [all]
|
||||
vec3_t avelocity; // angular velocity (degrees per second)
|
||||
vec3_t punchangle; // NET [player], auto-decaying view angle adjustment
|
||||
vec3_t viewangles; // NET [player], viewing angle (old name was v_angle)
|
||||
|
|
|
@ -42,7 +42,7 @@ struct tempent_s
|
|||
{
|
||||
int flags;
|
||||
float die;
|
||||
float m_flFrameMax;
|
||||
float m_flFrameMax; // this is also animtime for studiomodels
|
||||
float x, y;
|
||||
vec3_t m_vecVelocity; // tent velocity
|
||||
vec3_t m_vecAvelocity; // tent avelocity
|
||||
|
|
|
@ -1836,12 +1836,12 @@ static void pfnWeaponAnim( int iAnim, int body, float framerate )
|
|||
{
|
||||
edict_t *viewmodel = &clgame.viewent;
|
||||
|
||||
viewmodel->v.sequence = iAnim;
|
||||
viewmodel->v.body = body;
|
||||
viewmodel->v.animtime = clgame.globals->time; // start immediately
|
||||
viewmodel->v.framerate = framerate;
|
||||
viewmodel->v.effects |= EF_ANIMATE;
|
||||
viewmodel->v.frame = -1; // force to start new sequence
|
||||
viewmodel->v.sequence = iAnim;
|
||||
viewmodel->v.frame = 0.0f;
|
||||
viewmodel->v.scale = 1.0f;
|
||||
viewmodel->v.body = body;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -747,8 +747,6 @@ void Host_InitCommon( const int argc, const char **argv )
|
|||
|
||||
Host_InitEvents();
|
||||
|
||||
sys_sharedstrings = Cvar_Get( "sys_sharedstrings", "0", CVAR_SYSTEMINFO, "hl1 strings or stringtable" );
|
||||
|
||||
FS_LoadGameInfo( NULL );
|
||||
Image_Init( GI->texmode, -1 );
|
||||
|
||||
|
@ -855,6 +853,7 @@ void Host_Init( const int argc, const char **argv )
|
|||
Cmd_AddCommand ( "net_error", Net_Error_f, "send network bad message from random place");
|
||||
}
|
||||
|
||||
sys_sharedstrings = Cvar_Get( "sys_sharedstrings", "0", CVAR_INIT|CVAR_ARCHIVE, "hl1 compatible strings" );
|
||||
host_cheats = Cvar_Get( "sv_cheats", "1", CVAR_SYSTEMINFO, "allow cheat variables to enable" );
|
||||
host_minfps = Cvar_Get( "host_minfps", "10", CVAR_ARCHIVE, "host fps lower limit" );
|
||||
host_maxfps = Cvar_Get( "host_maxfps", "100", CVAR_ARCHIVE, "host fps upper limit" );
|
||||
|
@ -863,7 +862,7 @@ void Host_Init( const int argc, const char **argv )
|
|||
host_registered = Cvar_Get( "registered", "1", CVAR_SYSTEMINFO, "indicate shareware version of game" );
|
||||
timescale = Cvar_Get( "timescale", "1.0", 0, "slow-mo timescale" );
|
||||
|
||||
s = va("^1Xash %g ^3%s", GI->version, buildstring );
|
||||
s = va( "^1Xash %g ^3%s", GI->version, buildstring );
|
||||
Cvar_Get( "version", s, CVAR_INIT, "engine current version" );
|
||||
|
||||
NET_Init();
|
||||
|
|
|
@ -238,7 +238,7 @@ UI_PlayerSetup_Ownerdraw
|
|||
static void UI_PlayerSetup_Ownerdraw( void *self )
|
||||
{
|
||||
menuCommon_s *item = (menuCommon_s *)self;
|
||||
float realtime = uiStatic.realTime * 0.001f;
|
||||
float realtime = uiStatic.realTime * 0.001f;
|
||||
|
||||
// draw the background
|
||||
UI_FillRect( item->x, item->y, item->width, item->height, uiPromptBgColor );
|
||||
|
@ -249,7 +249,6 @@ static void UI_PlayerSetup_Ownerdraw( void *self )
|
|||
V_ClearScene();
|
||||
|
||||
// update renderer timings
|
||||
uiPlayerSetup.ent.v.animtime = realtime;
|
||||
uiPlayerSetup.refdef.time = realtime;
|
||||
uiPlayerSetup.refdef.frametime = cls.frametime;
|
||||
|
||||
|
@ -395,12 +394,13 @@ static void UI_PlayerSetup_Init( void )
|
|||
uiPlayerSetup.refdef.flags = RDF_NOWORLDMODEL;
|
||||
|
||||
uiPlayerSetup.ent.serialnumber = MAX_EDICTS - 1;
|
||||
uiPlayerSetup.ent.v.animtime = uiStatic.realTime * 0.001f; // start animation
|
||||
uiPlayerSetup.ent.v.sequence = 1;
|
||||
uiPlayerSetup.ent.v.scale = 1.0f;
|
||||
uiPlayerSetup.ent.v.frame = -1.0f;
|
||||
uiPlayerSetup.ent.v.frame = 0.0f;
|
||||
uiPlayerSetup.ent.v.framerate = 1.0f;
|
||||
uiPlayerSetup.ent.v.modelindex = MAX_MODELS - 1;
|
||||
uiPlayerSetup.ent.v.effects |= (EF_ANIMATE|EF_FULLBRIGHT);
|
||||
uiPlayerSetup.ent.v.effects |= EF_FULLBRIGHT;
|
||||
uiPlayerSetup.ent.v.controller[0] = 127;
|
||||
uiPlayerSetup.ent.v.controller[1] = 127;
|
||||
uiPlayerSetup.ent.v.controller[2] = 127;
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
*/
|
||||
#define Matrix3x3_LoadIdentity( mat ) Matrix3x3_Copy( mat, matrix3x3_identity )
|
||||
|
||||
static const matrix3x3 matrix3x3_identity =
|
||||
static matrix3x3 matrix3x3_identity =
|
||||
{
|
||||
{ 1, 0, 0 }, // PITCH [forward]
|
||||
{ 0, 1, 0 }, // YAW [right]
|
||||
|
@ -282,7 +282,7 @@ _inline void Matrix3x3_ConcatRotate( matrix3x3 out, float angle, float x, float
|
|||
#define Matrix4x4_LoadIdentity( mat ) Matrix4x4_Copy( mat, matrix4x4_identity )
|
||||
#define Matrix4x4_Copy( out, in ) Mem_Copy( out, in, sizeof( matrix4x4 ))
|
||||
|
||||
static const matrix4x4 matrix4x4_identity =
|
||||
static matrix4x4 matrix4x4_identity =
|
||||
{
|
||||
{ 1, 0, 0, 0 }, // PITCH
|
||||
{ 0, 1, 0, 0 }, // YAW
|
||||
|
|
|
@ -95,12 +95,10 @@ typedef struct
|
|||
float gaitframe; // client->frame + yaw
|
||||
float gaityaw; // local value
|
||||
|
||||
// EF_ANIMATE stuff
|
||||
int m_fSequenceLoops; // sequence is looped
|
||||
int m_fSequenceFinished;// sequence is finished
|
||||
float m_flFrameRate; // looped sequence framerate
|
||||
float m_flGroundSpeed; // looped sequence ground speed (movement)
|
||||
float m_flLastEventCheck; // last time when event is checked
|
||||
// EVENT SPECIFIC
|
||||
float m_flPrevEventFrame; // previous event frame
|
||||
int m_iEventSequence; // current event sequence
|
||||
|
||||
} lerpframe_t;
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -30,6 +30,7 @@ TYPEDESCRIPTION gEntvarsDescription[] =
|
|||
DEFINE_ENTITY_FIELD( movedir, FIELD_VECTOR ),
|
||||
|
||||
DEFINE_ENTITY_FIELD( angles, FIELD_VECTOR ),
|
||||
DEFINE_ENTITY_FIELD( oldangles, FIELD_VECTOR ),
|
||||
DEFINE_ENTITY_FIELD( avelocity, FIELD_VECTOR ),
|
||||
DEFINE_ENTITY_FIELD( punchangle, FIELD_VECTOR ),
|
||||
DEFINE_ENTITY_FIELD( viewangles, FIELD_VECTOR ),
|
||||
|
|
|
@ -458,6 +458,7 @@ TYPEDESCRIPTION gEntvarsDescription[] =
|
|||
DEFINE_ENTITY_FIELD( movedir, FIELD_VECTOR ),
|
||||
|
||||
DEFINE_ENTITY_FIELD( angles, FIELD_VECTOR ),
|
||||
DEFINE_ENTITY_FIELD( oldangles, FIELD_VECTOR ),
|
||||
DEFINE_ENTITY_FIELD( avelocity, FIELD_VECTOR ),
|
||||
DEFINE_ENTITY_FIELD( punchangle, FIELD_VECTOR ),
|
||||
DEFINE_ENTITY_FIELD( viewangles, FIELD_VECTOR ),
|
||||
|
|
3
todo.log
3
todo.log
|
@ -30,4 +30,5 @@ Xash 0.71 Beta 05.05.10
|
|||
6. fix save\restore global state OK
|
||||
7. rewrite WalkMove OK
|
||||
8. tune UPDATE_BACKUP value for singleplayer OK
|
||||
9. fix monsters interpolation
|
||||
9. fix monsters interpolation OK
|
||||
10.
|
|
@ -753,8 +753,6 @@ bool R_CullSpriteModel( ref_entity_t *e );
|
|||
|
||||
void R_AddStudioModelToList( ref_entity_t *e );
|
||||
void R_DrawStudioModel( const meshbuffer_t *mb );
|
||||
void R_StudioResetSequenceInfo( ref_entity_t *ent );
|
||||
float R_StudioFrameAdvance( ref_entity_t *ent, float flInterval );
|
||||
void R_StudioModelBBox( ref_entity_t *e, vec3_t mins, vec3_t maxs );
|
||||
bool R_CullStudioModel( ref_entity_t *e );
|
||||
void R_StudioRunEvents( ref_entity_t *e );
|
||||
|
|
|
@ -2330,25 +2330,8 @@ bool R_AddGenericEntity( edict_t *pRefEntity, ref_entity_t *refent )
|
|||
// check model
|
||||
if( !refent->model ) return false;
|
||||
|
||||
switch( refent->model->type )
|
||||
{
|
||||
case mod_world:
|
||||
case mod_brush:
|
||||
if( !refent->model->extradata )
|
||||
return false;
|
||||
refent->scale = 1.0f; // ignore scale for brush models
|
||||
refent->frame = pRefEntity->v.frame; // brush properly animating
|
||||
break;
|
||||
case mod_studio:
|
||||
case mod_sprite:
|
||||
if( !refent->model->extradata )
|
||||
return false;
|
||||
break;
|
||||
case mod_bad: // let the render drawing null model
|
||||
break;
|
||||
}
|
||||
|
||||
refent->lerp = ri.GetLerpFrame( refent->index ); // get pointer to lerping frame data
|
||||
// get pointer to lerping frame data
|
||||
refent->lerp = ri.GetLerpFrame( refent->index );
|
||||
|
||||
if( refent->lerp == NULL )
|
||||
{
|
||||
|
@ -2362,31 +2345,24 @@ bool R_AddGenericEntity( edict_t *pRefEntity, ref_entity_t *refent )
|
|||
VectorCopy( pRefEntity->v.origin, refent->lightingOrigin );
|
||||
refent->lightingOrigin[2] += 1;
|
||||
|
||||
// do animate
|
||||
if( refent->flags & EF_ANIMATE )
|
||||
switch( refent->model->type )
|
||||
{
|
||||
switch( refent->model->type )
|
||||
{
|
||||
case mod_sprite:
|
||||
if(((msprite_t *)refent->model->extradata)->numframes > 1 )
|
||||
{
|
||||
float numframes = ((msprite_t *)refent->model->extradata)->numframes;
|
||||
|
||||
refent->lerp->curstate.frame += (pRefEntity->v.framerate * RI.refdef.frametime);
|
||||
if( refent->lerp->curstate.frame > numframes && numframes > 0 )
|
||||
refent->lerp->curstate.frame = fmod( refent->lerp->curstate.frame, numframes );
|
||||
}
|
||||
break;
|
||||
case mod_studio:
|
||||
case mod_brush:
|
||||
case mod_world:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
refent->lerp->latched.frame = refent->lerp->curstate.frame; // save oldframe
|
||||
case mod_world:
|
||||
case mod_brush:
|
||||
if( !refent->model->extradata )
|
||||
return false;
|
||||
refent->scale = 1.0f; // ignore scale for brush models
|
||||
refent->frame = pRefEntity->v.frame; // brush properly animating
|
||||
break;
|
||||
case mod_studio:
|
||||
case mod_sprite:
|
||||
if( !refent->model->extradata )
|
||||
return false;
|
||||
refent->frame = 0.0f; // keep clear to prevent randomly change skins :-)
|
||||
refent->lerp->curstate.frame = pRefEntity->v.frame;
|
||||
break;
|
||||
case mod_bad: // let the render drawing null model
|
||||
break;
|
||||
}
|
||||
|
||||
// calculate angles
|
||||
|
@ -2679,8 +2655,6 @@ bool R_AddTeEntToScene( TEMPENTITY *pTempEntity, int ed_type, shader_t customSha
|
|||
else refent->customShader = NULL;
|
||||
|
||||
refent->rtype = RT_MODEL;
|
||||
|
||||
refent->lerp->latched.frame = refent->lerp->curstate.frame; // save oldframe
|
||||
refent->lerp->curstate.frame = pTempEntity->m_flFrame;
|
||||
|
||||
// setup light origin
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue