Originally Posted By: Superku
EDIT: If the camera still looks through walls, try to replace
if(trace_hit) camera_distance = minv(camera_distance,result);
with
if(trace_hit) camera_distance = minv(camera_distance,result-32);
or any other negative value.


I would suggest using an entity as camera collider instead of shorten the ray by a constant.

Code:
ENTITY *entCameraCollider;
function camera_collider_startup ()
{
   entCameraCollider = ent_create(CUBE_MDL,vector(0,0,-100000),NULL);
   vec_fill(entCameraCollider.max_x, 16);
   vec_fill(entCameraCollider.min_x, -16);
   set ( entCameraCollider, INVISIBLE ); 
}

function camera_follow(ENTITY* ent)
{
   ...
   // check for walls

   set(ent,PASSABLE);
   ENTITY *entMeOld = me;
   me = entCameraCollider; 
   result = c_trace( ent.x, camera_target, IGNORE_PASSABLE | USE_BOX );
   reset(ent,PASSABLE);
   me = entMeOld;
   if(trace_hit) camera_distance = minv(camera_distance,result);
		
   ...
}


Last edited by txesmi; 06/17/13 08:28.