diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-26 23:30:17 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-26 23:30:17 +0000 |
commit | ec4bcbd01f73873a97a7d089e2f2de260db243d5 (patch) | |
tree | 47475764be4ec3b20caf7941ea52ca4b49e63f8a /sys/src/games/doom/p_tick.c | |
parent | 269e63406d8d9fe79351849ca5c225f7dd3024d1 (diff) |
rio: disable cons if /dev/kbd is open, add games/doom
Diffstat (limited to 'sys/src/games/doom/p_tick.c')
-rw-r--r-- | sys/src/games/doom/p_tick.c | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/sys/src/games/doom/p_tick.c b/sys/src/games/doom/p_tick.c new file mode 100644 index 000000000..1793d437a --- /dev/null +++ b/sys/src/games/doom/p_tick.c @@ -0,0 +1,147 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// $Id:$ +// +// Copyright (C) 1993-1996 by id Software, Inc. +// +// This source is available for distribution and/or modification +// only under the terms of the DOOM Source Code License as +// published by id Software. All rights reserved. +// +// The source is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License +// for more details. +// +// $Log:$ +// +// DESCRIPTION: +// Archiving: SaveGame I/O. +// Thinker, Ticker. +// +//----------------------------------------------------------------------------- + +static const char +rcsid[] = "$Id: p_tick.c,v 1.4 1997/02/03 16:47:55 b1 Exp $"; + +#include "z_zone.h" +#include "p_local.h" + +#include "doomstat.h" + + +int leveltime; + +// +// THINKERS +// All thinkers should be allocated by Z_Malloc +// so they can be operated on uniformly. +// The actual structures will vary in size, +// but the first element must be thinker_t. +// + + + +// Both the head and tail of the thinker list. +thinker_t thinkercap; + + +// +// P_InitThinkers +// +void P_InitThinkers (void) +{ + thinkercap.prev = thinkercap.next = &thinkercap; +} + + + + +// +// P_AddThinker +// Adds a new thinker at the end of the list. +// +void P_AddThinker (thinker_t* thinker) +{ + thinkercap.prev->next = thinker; + thinker->next = &thinkercap; + thinker->prev = thinkercap.prev; + thinkercap.prev = thinker; +} + + + +// +// P_RemoveThinker +// Deallocation is lazy -- it will not actually be freed +// until its thinking turn comes up. +// +void P_RemoveThinker (thinker_t* thinker) +{ + // FIXME: NOP. + thinker->function = (actionf_t)(-1); +} + + +// +// P_RunThinkers +// +void P_RunThinkers (void) +{ + thinker_t* currentthinker; + + currentthinker = thinkercap.next; + while (currentthinker != &thinkercap) + { + if ( currentthinker->function == (actionf_t)(-1) ) + { + // time to remove it + currentthinker->next->prev = currentthinker->prev; + currentthinker->prev->next = currentthinker->next; + Z_Free (currentthinker); + } + else + { + if (currentthinker->function) + currentthinker->function(currentthinker, NULL); + } + currentthinker = currentthinker->next; + } +} + + + +// +// P_Ticker +// + +void P_Ticker (void) +{ + int i; + + // run the tic + if (paused) + return; + + // pause if in menu and at least one tic has been run + if ( !netgame + && menuactive + && !demoplayback + && players[consoleplayer].viewz != 1) + { + return; + } + + + for (i=0 ; i<MAXPLAYERS ; i++) + if (playeringame[i]) + P_PlayerThink (&players[i]); + + P_RunThinkers (); + P_UpdateSpecials (); + P_RespawnSpecials (); + + // for par times + leveltime++; +} |