diff options
| author | Tim Angus <tim@ngus.net> | 2001-12-02 02:16:25 +0000 | 
|---|---|---|
| committer | Tim Angus <tim@ngus.net> | 2001-12-02 02:16:25 +0000 | 
| commit | 771b1c676714928ab1dea4f3b9277ff991b00f65 (patch) | |
| tree | 853f47aa806862283959f23134d2b74a6295e48e | |
| parent | 749407ffc26c647c1faf675734559ab9fd8774fe (diff) | |
Tag based turrets
| -rw-r--r-- | src/cgame/cg_buildable.c | 58 | ||||
| -rw-r--r-- | src/game/bg_misc.c | 2 | 
2 files changed, 29 insertions, 31 deletions
diff --git a/src/cgame/cg_buildable.c b/src/cgame/cg_buildable.c index de0b1061..a931638a 100644 --- a/src/cgame/cg_buildable.c +++ b/src/cgame/cg_buildable.c @@ -384,7 +384,9 @@ void CG_Buildable( centity_t *cent )    refEntity_t     ent;    entityState_t   *es;    vec3_t          angles; -  vec3_t          forward, surfNormal, end, start, mins, maxs; +  vec3_t          forward, surfNormal, xNormal, end, start, mins, maxs; +  vec3_t          refNormal = { 0.0f, 0.0f, 1.0f }; +  float           rotAngle;    trace_t         tr;    es = ¢->currentState; @@ -406,6 +408,10 @@ void CG_Buildable( centity_t *cent )    VectorCopy( cent->lerpOrigin, ent.lightingOrigin );    VectorCopy( es->origin2, surfNormal ); +  CrossProduct( surfNormal, refNormal, xNormal ); +  VectorNormalize( xNormal ); +  rotAngle = RAD2DEG( acos( DotProduct( surfNormal, refNormal ) ) ); +      VectorCopy( es->angles, angles );    BG_FindBBoxForBuildable( es->modelindex, mins, maxs ); @@ -444,31 +450,19 @@ void CG_Buildable( centity_t *cent )    if( cg_buildables[ es->modelindex ].models[ 1 ] )    {      refEntity_t turretBarrel; +    vec3_t      flatAxis[ 3 ];      memset( &turretBarrel, 0, sizeof( turretBarrel ) ); -    AnglesToAxis( es->angles2, turretBarrel.axis ); -          turretBarrel.hModel = cg_buildables[ es->modelindex ].models[ 1 ];      VectorCopy( cent->lerpOrigin, turretBarrel.lightingOrigin ); -    CG_PositionRotatedEntityOnTag( &turretBarrel, &ent, ent.hModel, "tag_turret" ); +    CG_PositionEntityOnTag( &turretBarrel, &ent, ent.hModel, "tag_turret" ); +    AnglesToAxis( es->angles2, flatAxis ); -/*    AngleVectors( es->angles2, forward, NULL, NULL ); -    VectorCopy( surfNormal, turretBarrel.axis[ 2 ] ); -    ProjectPointOnPlane( turretBarrel.axis[ 0 ], forward, turretBarrel.axis[ 2 ] ); -     -    if( !VectorNormalize( turretBarrel.axis[ 0 ] ) ) -    { -      AngleVectors( es->angles2, NULL, NULL, forward ); -      ProjectPointOnPlane( turretBarrel.axis[ 0 ], forward, turretBarrel.axis[ 2 ] ); -      VectorNormalize( turretBarrel.axis[ 0 ] ); -    } -     -    CrossProduct( turretBarrel.axis[ 0 ], turretBarrel.axis[ 2 ], turretBarrel.axis[ 1 ] ); -    turretBarrel.axis[ 1 ][ 0 ] = -turretBarrel.axis[ 1 ][ 0 ]; -    turretBarrel.axis[ 1 ][ 1 ] = -turretBarrel.axis[ 1 ][ 1 ]; -    turretBarrel.axis[ 1 ][ 2 ] = -turretBarrel.axis[ 1 ][ 2 ];*/ +    RotatePointAroundVector( turretBarrel.axis[ 0 ], xNormal, flatAxis[ 0 ], -rotAngle ); +    RotatePointAroundVector( turretBarrel.axis[ 1 ], xNormal, flatAxis[ 1 ], -rotAngle ); +    RotatePointAroundVector( turretBarrel.axis[ 2 ], xNormal, flatAxis[ 2 ], -rotAngle );      turretBarrel.oldframe = ent.oldframe;      turretBarrel.frame    = ent.frame; @@ -480,26 +474,30 @@ void CG_Buildable( centity_t *cent )    //turret barrel bit    if( cg_buildables[ es->modelindex ].models[ 2 ] )    { -    refEntity_t turretBarrel; +    refEntity_t turretTop; +    vec3_t      flatAxis[ 3 ];      vec3_t      swivelAngles; -    memset( &turretBarrel, 0, sizeof( turretBarrel ) ); +    memset( &turretTop, 0, sizeof( turretTop ) );      VectorCopy( es->angles2, swivelAngles );      swivelAngles[ PITCH ] = 0.0f; -    AnglesToAxis( swivelAngles, turretBarrel.axis ); +    turretTop.hModel = cg_buildables[ es->modelindex ].models[ 2 ]; +    VectorCopy( cent->lerpOrigin, turretTop.lightingOrigin ); -    turretBarrel.hModel = cg_buildables[ es->modelindex ].models[ 1 ]; -    VectorCopy( cent->lerpOrigin, turretBarrel.lightingOrigin ); +    CG_PositionEntityOnTag( &turretTop, &ent, ent.hModel, "tag_turret" ); +    AnglesToAxis( swivelAngles, flatAxis ); -    CG_PositionRotatedEntityOnTag( &turretBarrel, &ent, ent.hModel, "tag_turret" ); - -    turretBarrel.oldframe = ent.oldframe; -    turretBarrel.frame    = ent.frame; -    turretBarrel.backlerp = ent.backlerp; +    RotatePointAroundVector( turretTop.axis[ 0 ], xNormal, flatAxis[ 0 ], -rotAngle ); +    RotatePointAroundVector( turretTop.axis[ 1 ], xNormal, flatAxis[ 1 ], -rotAngle ); +    RotatePointAroundVector( turretTop.axis[ 2 ], xNormal, flatAxis[ 2 ], -rotAngle ); +     +    turretTop.oldframe = ent.oldframe; +    turretTop.frame    = ent.frame; +    turretTop.backlerp = ent.backlerp; -    trap_R_AddRefEntityToScene( &turretBarrel ); +    trap_R_AddRefEntityToScene( &turretTop );    }    // add to refresh list diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c index 450bcd85..d7925ef2 100644 --- a/src/game/bg_misc.c +++ b/src/game/bg_misc.c @@ -1483,7 +1483,7 @@ buildableAttributes_t bg_buildableList[ ] =      BA_H_DEF2,             //int       buildNum;      "mgturret",            //char      *buildName;      "team_human_def2",     //char      *entityName; -    { "models/buildables/plasmaturret/pturret_base.md3", "models/weapons2/machinegun/machinegun.md3", 0, 0 }, +    { "models/buildables/mgturret/turret_base.md3", "models/buildables/mgturret/turret_barrel.md3", "models/buildables/mgturret/turret_top.md3", 0 },      { -24, -24, -11 },     //vec3_t    mins;      { 24, 24, 11 },        //vec3_t    maxs;      TR_GRAVITY,            //trType_t traj;  | 
