/* 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.*/

/* DESCRIPTION:*/
/*  MapObj data. Map Objects or mobjs are actors, entities,*/
/*  thinker, take-your-pick... anything that moves, acts, or*/
/*  suffers state changes of more or less violent nature.*/

/*-----------------------------------------------------------------------------*/


#ifndef __D_THINK__
#define __D_THINK__


#ifdef __GNUG__
#pragma interface
#endif




/* Experimental stuff.*/
/* To compile this as "ANSI C with classes"*/
/*  we will need to handle the various*/
/*  action functions cleanly.*/

typedef  void (*actionf_v)();
typedef  void (*actionf_p1)( void* );
typedef  void (*actionf_p2)( void*, void* );

typedef union
{
  actionf_p1	acp1;
  actionf_v	acv;
  actionf_p2	acp2;

} actionf_t;





/* Historically, "think_t" is yet another*/
/*  function pointer to a routine to handle*/
/*  an actor.*/
typedef actionf_t  think_t;


/* Doubly linked list of actors.*/
typedef struct thinker_s
{
    struct thinker_s*	prev;
    struct thinker_s*	next;
    think_t		function;

} thinker_t;



#endif
/*-----------------------------------------------------------------------------*/

/* $Log:$*/

/*-----------------------------------------------------------------------------*/
