summaryrefslogtreecommitdiff
path: root/src/game/g_physics.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/g_physics.c')
-rw-r--r--src/game/g_physics.c161
1 files changed, 0 insertions, 161 deletions
diff --git a/src/game/g_physics.c b/src/game/g_physics.c
deleted file mode 100644
index c6c03f69..00000000
--- a/src/game/g_physics.c
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright (C) 1999-2000 Id Software, Inc.
-//
-
-/*
- * Portions Copyright (C) 2000-2001 Tim Angus
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the OSML - Open Source Modification License v1.0 as
- * described in the file COPYING which is distributed with this source
- * code.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include "g_local.h"
-
-/*
-================
-G_Bounce
-
-================
-*/
-static void G_Bounce( gentity_t *ent, trace_t *trace )
-{
- vec3_t velocity;
- float dot;
- int hitTime;
- float minNormal;
- qboolean invert = qfalse;
-
- // reflect the velocity on the trace plane
- hitTime = level.previousTime + ( level.time - level.previousTime ) * trace->fraction;
- BG_EvaluateTrajectoryDelta( &ent->s.pos, hitTime, velocity );
- dot = DotProduct( velocity, trace->plane.normal );
- VectorMA( velocity, -2*dot, trace->plane.normal, ent->s.pos.trDelta );
-
- if( ent->s.eType == ET_BUILDABLE )
- {
- minNormal = BG_FindMinNormalForBuildable( ent->s.modelindex );
- invert = BG_FindInvertNormalForBuildable( ent->s.modelindex );
- }
- else
- minNormal = 0.707f;
-
- // cut the velocity to keep from bouncing forever
- if( ( trace->plane.normal[ 2 ] >= minNormal ||
- ( invert && trace->plane.normal[ 2 ] <= -minNormal ) ) &&
- trace->entityNum == ENTITYNUM_WORLD )
- VectorScale( ent->s.pos.trDelta, ent->physicsBounce, ent->s.pos.trDelta );
- else
- VectorScale( ent->s.pos.trDelta, 0.3f, ent->s.pos.trDelta );
-
- if( VectorLength( ent->s.pos.trDelta ) < 10 )
- {
- VectorMA( trace->endpos, 0.5, trace->plane.normal, trace->endpos ); // make sure it is off ground
- SnapVector( trace->endpos );
- G_SetOrigin( ent, trace->endpos );
- ent->s.groundEntityNum = trace->entityNum;
- VectorCopy( trace->plane.normal, ent->s.origin2 );
- VectorSet( ent->s.pos.trDelta, 0.0f, 0.0f, 0.0f );
- return;
- }
-
- VectorCopy( ent->r.currentOrigin, ent->s.pos.trBase );
- VectorAdd( ent->r.currentOrigin, trace->plane.normal, ent->r.currentOrigin);
- ent->s.pos.trTime = level.time;
-}
-
-#define PHYSICS_TIME 200
-
-/*
-================
-G_Physics
-
-================
-*/
-void G_Physics( gentity_t *ent, int msec )
-{
- vec3_t origin;
- trace_t tr;
- int contents;
- int mask;
-
- // if groundentity has been set to -1, it may have been pushed off an edge
- if( ent->s.groundEntityNum == -1 )
- {
- if( ent->s.eType == ET_BUILDABLE )
- {
- if( ent->s.pos.trType != BG_FindTrajectoryForBuildable( ent->s.modelindex ) )
- {
- ent->s.pos.trType = BG_FindTrajectoryForBuildable( ent->s.modelindex );
- ent->s.pos.trTime = level.time;
- }
- }
- else if( ent->s.pos.trType != TR_GRAVITY )
- {
- ent->s.pos.trType = TR_GRAVITY;
- ent->s.pos.trTime = level.time;
- }
- }
-
- // trace a line from the previous position to the current position
- if( ent->clipmask )
- mask = ent->clipmask;
- else
- mask = MASK_PLAYERSOLID & ~CONTENTS_BODY;//MASK_SOLID;
-
- if( ent->s.pos.trType == TR_STATIONARY )
- {
- // check think function
- G_RunThink( ent );
-
- //check floor infrequently
- if( ent->nextPhysicsTime < level.time )
- {
- VectorCopy( ent->r.currentOrigin, origin );
-
- VectorMA( origin, -2.0f, ent->s.origin2, origin );
-
- trap_Trace( &tr, ent->r.currentOrigin, ent->r.mins, ent->r.maxs, origin, ent->s.number, mask );
-
- if( tr.fraction == 1.0f )
- ent->s.groundEntityNum = -1;
-
- ent->nextPhysicsTime = level.time + PHYSICS_TIME;
- }
-
- return;
- }
-
- // get current position
- BG_EvaluateTrajectory( &ent->s.pos, level.time, origin );
-
- trap_Trace( &tr, ent->r.currentOrigin, ent->r.mins, ent->r.maxs, origin, ent->s.number, mask );
-
- VectorCopy( tr.endpos, ent->r.currentOrigin );
-
- if( tr.startsolid )
- tr.fraction = 0;
-
- trap_LinkEntity( ent ); // FIXME: avoid this for stationary?
-
- // check think function
- G_RunThink( ent );
-
- if( tr.fraction == 1.0f )
- return;
-
- // if it is in a nodrop volume, remove it
- contents = trap_PointContents( ent->r.currentOrigin, -1 );
- if( contents & CONTENTS_NODROP )
- {
- G_FreeEntity( ent );
- return;
- }
-
- G_Bounce( ent, &tr );
-}
-