Annotation of quake1/chase.c, revision 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.