Annotation of quake1/chase.c, revision 1.1.1.1

1.1       root        1: // chase.c -- chase camera code
                      2: 
                      3: #include "quakedef.h"
                      4: 
                      5: cvar_t chase_back = {"chase_back", "100"};
                      6: cvar_t chase_up = {"chase_up", "16"};
                      7: cvar_t chase_right = {"chase_right", "0"};
                      8: cvar_t chase_active = {"chase_active", "0"};
                      9: 
                     10: vec3_t chase_pos;
                     11: vec3_t chase_angles;
                     12: 
                     13: vec3_t chase_dest;
                     14: vec3_t chase_dest_angles;
                     15: 
                     16: 
                     17: void Chase_Init (void)
                     18: {
                     19:        Cvar_RegisterVariable (&chase_back);
                     20:        Cvar_RegisterVariable (&chase_up);
                     21:        Cvar_RegisterVariable (&chase_right);
                     22:        Cvar_RegisterVariable (&chase_active);
                     23: }
                     24: 
                     25: void Chase_Reset (void)
                     26: {
                     27:        // for respawning and teleporting
                     28: //     start position 12 units behind head
                     29: }
                     30: 
                     31: void TraceLine (vec3_t start, vec3_t end, vec3_t impact)
                     32: {
                     33:        trace_t trace;
                     34: 
                     35:        memset (&trace, 0, sizeof(trace));
                     36:        SV_RecursiveHullCheck (cl.worldmodel->hulls, 0, 0, 1, start, end, &trace);
                     37: 
                     38:        VectorCopy (trace.endpos, impact);
                     39: }
                     40: 
                     41: void Chase_Update (void)
                     42: {
                     43:        int             i;
                     44:        float   dist;
                     45:        vec3_t  forward, up, right;
                     46:        vec3_t  dest, stop;
                     47: 
                     48: 
                     49:        // if can't see player, reset
                     50:        AngleVectors (cl.viewangles, forward, right, up);
                     51: 
                     52:        // calc exact destination
                     53:        for (i=0 ; i<3 ; i++)
                     54:                chase_dest[i] = r_refdef.vieworg[i] 
                     55:                - forward[i]*chase_back.value
                     56:                - right[i]*chase_right.value;
                     57:        chase_dest[2] = r_refdef.vieworg[2] + chase_up.value;
                     58: 
                     59:        // find the spot the player is looking at
                     60:        VectorMA (r_refdef.vieworg, 4096, forward, dest);
                     61:        TraceLine (r_refdef.vieworg, dest, stop);
                     62: 
                     63:        // calculate pitch to look at the same spot from camera
                     64:        VectorSubtract (stop, r_refdef.vieworg, stop);
                     65:        dist = DotProduct (stop, forward);
                     66:        if (dist < 1)
                     67:                dist = 1;
                     68:        r_refdef.viewangles[PITCH] = -atan(stop[2] / dist) / M_PI * 180;
                     69: 
                     70:        // move towards destination
                     71:        VectorCopy (chase_dest, r_refdef.vieworg);
                     72: }
                     73: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.