Annotation of doom/p_tick.c, revision 1.1.1.4

1.1.1.4 ! root        1: // Emacs style mode select   -*- C++ -*- 
        !             2: //-----------------------------------------------------------------------------
        !             3: //
        !             4: // $Id:$
        !             5: //
        !             6: // Copyright (C) 1993-1996 by id Software, Inc.
        !             7: //
        !             8: // This source is available for distribution and/or modification
        !             9: // only under the terms of the DOOM Source Code License as
        !            10: // published by id Software. All rights reserved.
        !            11: //
        !            12: // The source is distributed in the hope that it will be useful,
        !            13: // but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            14: // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
        !            15: // for more details.
        !            16: //
        !            17: // $Log:$
        !            18: //
        !            19: // DESCRIPTION:
        !            20: //     Archiving: SaveGame I/O.
        !            21: //     Thinker, Ticker.
        !            22: //
        !            23: //-----------------------------------------------------------------------------
1.1       root       24: 
1.1.1.4 ! root       25: static const char
        !            26: rcsid[] = "$Id: p_tick.c,v 1.4 1997/02/03 16:47:55 b1 Exp $";
1.1.1.2   root       27: 
1.1.1.4 ! root       28: #include "z_zone.h"
1.1.1.3   root       29: #include "p_local.h"
1.1       root       30: 
1.1.1.4 ! root       31: #include "doomstat.h"
        !            32: 
1.1       root       33: 
1.1.1.4 ! root       34: int    leveltime;
1.1       root       35: 
1.1.1.4 ! root       36: //
        !            37: // THINKERS
        !            38: // All thinkers should be allocated by Z_Malloc
        !            39: // so they can be operated on uniformly.
        !            40: // The actual structures will vary in size,
        !            41: // but the first element must be thinker_t.
        !            42: //
1.1.1.2   root       43: 
                     44: 
                     45: 
1.1.1.4 ! root       46: // Both the head and tail of the thinker list.
        !            47: thinker_t      thinkercap;
1.1       root       48: 
                     49: 
1.1.1.4 ! root       50: //
        !            51: // P_InitThinkers
        !            52: //
        !            53: void P_InitThinkers (void)
        !            54: {
        !            55:     thinkercap.prev = thinkercap.next  = &thinkercap;
        !            56: }
1.1       root       57: 
1.1.1.2   root       58: 
1.1       root       59: 
                     60: 
1.1.1.2   root       61: //
1.1.1.4 ! root       62: // P_AddThinker
        !            63: // Adds a new thinker at the end of the list.
1.1.1.2   root       64: //
1.1.1.4 ! root       65: void P_AddThinker (thinker_t* thinker)
1.1       root       66: {
1.1.1.4 ! root       67:     thinkercap.prev->next = thinker;
        !            68:     thinker->next = &thinkercap;
        !            69:     thinker->prev = thinkercap.prev;
        !            70:     thinkercap.prev = thinker;
1.1       root       71: }
                     72: 
1.1.1.4 ! root       73: 
        !            74: 
1.1.1.3   root       75: //
1.1.1.4 ! root       76: // P_RemoveThinker
        !            77: // Deallocation is lazy -- it will not actually be freed
        !            78: // until its thinking turn comes up.
1.1.1.3   root       79: //
1.1.1.4 ! root       80: void P_RemoveThinker (thinker_t* thinker)
1.1       root       81: {
1.1.1.4 ! root       82:   // FIXME: NOP.
        !            83:   thinker->function.acv = (actionf_v)(-1);
1.1       root       84: }
                     85: 
1.1.1.4 ! root       86: 
        !            87: 
1.1.1.3   root       88: //
1.1.1.4 ! root       89: // P_AllocateThinker
        !            90: // Allocates memory and adds a new thinker at the end of the list.
1.1.1.3   root       91: //
1.1.1.4 ! root       92: void P_AllocateThinker (thinker_t*     thinker)
1.1       root       93: {
1.1.1.2   root       94: }
1.1       root       95: 
1.1.1.4 ! root       96: 
        !            97: 
1.1.1.3   root       98: //
1.1.1.4 ! root       99: // P_RunThinkers
1.1.1.3   root      100: //
1.1.1.4 ! root      101: void P_RunThinkers (void)
1.1.1.2   root      102: {
1.1.1.4 ! root      103:     thinker_t* currentthinker;
        !           104: 
        !           105:     currentthinker = thinkercap.next;
        !           106:     while (currentthinker != &thinkercap)
        !           107:     {
        !           108:        if ( currentthinker->function.acv == (actionf_v)(-1) )
        !           109:        {
        !           110:            // time to remove it
        !           111:            currentthinker->next->prev = currentthinker->prev;
        !           112:            currentthinker->prev->next = currentthinker->next;
        !           113:            Z_Free (currentthinker);
        !           114:        }
        !           115:        else
        !           116:        {
        !           117:            if (currentthinker->function.acp1)
        !           118:                currentthinker->function.acp1 (currentthinker);
        !           119:        }
        !           120:        currentthinker = currentthinker->next;
        !           121:     }
1.1.1.2   root      122: }
                    123: 
1.1.1.4 ! root      124: 
        !           125: 
1.1.1.2   root      126: //
1.1.1.4 ! root      127: // P_Ticker
1.1.1.2   root      128: //
1.1       root      129: 
1.1.1.4 ! root      130: void P_Ticker (void)
1.1       root      131: {
1.1.1.4 ! root      132:     int                i;
        !           133:     
        !           134:     // run the tic
        !           135:     if (paused)
        !           136:        return;
        !           137:                
        !           138:     // pause if in menu and at least one tic has been run
        !           139:     if ( !netgame
        !           140:         && menuactive
        !           141:         && !demoplayback
        !           142:         && players[consoleplayer].viewz != 1)
        !           143:     {
        !           144:        return;
        !           145:     }
        !           146:     
        !           147:                
        !           148:     for (i=0 ; i<MAXPLAYERS ; i++)
        !           149:        if (playeringame[i])
        !           150:            P_PlayerThink (&players[i]);
        !           151:                        
        !           152:     P_RunThinkers ();
        !           153:     P_UpdateSpecials ();
        !           154:     P_RespawnSpecials ();
        !           155: 
        !           156:     // for par times
        !           157:     leveltime++;       
1.1.1.2   root      158: }

unix.superglobalmegacorp.com

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