/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
*/

#ifndef _SWITCH_H
#define _SWITCH_H

#include "inferno.h"
#include "segment.h"

#define	MAX_TRIGGERS				100
#define	MAX_WALLS_PER_LINK		10

// Trigger types

#define TT_OPEN_DOOR				0		// Open a door
#define TT_CLOSE_DOOR			1		// Close a door
#define TT_MATCEN					2		// Activate a matcen
#define TT_EXIT					3		// End the level
#define TT_SECRET_EXIT			4		// Go to secret level
#define TT_ILLUSION_OFF			5		// Turn an illusion off
#define TT_ILLUSION_ON			6		// Turn an illusion on
#define TT_UNLOCK_DOOR			7		// Unlock a door
#define TT_LOCK_DOOR				8		// Lock a door
#define TT_OPEN_WALL				9		// Makes a wall open
#define TT_CLOSE_WALL			10		//	Makes a wall closed
#define TT_ILLUSORY_WALL		11		// Makes a wall illusory
#define TT_LIGHT_OFF				12		// Turn a light off
#define TT_LIGHT_ON				13		// Turn s light on
#define NUM_TRIGGER_TYPES		14

// Trigger flags	  

//could also use flags for one-shots

#define TF_NO_MESSAGE			1		// Don't show a message when triggered
#define TF_ONE_SHOT				2		// Only trigger once
#define TF_DISABLED				4		// Set after one-shot fires


//the trigger really should have both a type & a flags, since most of the
//flags bits are exclusive of the others.
typedef struct trigger {
	ubyte		type;			//what this trigger does 
	ubyte		flags;		//currently unused
	byte	 	num_links;	//how many doors, etc. linked to this
	byte		pad;			//keep alignment
	fix		value;
	fix		time;
	short 	seg[MAX_WALLS_PER_LINK];
	short		side[MAX_WALLS_PER_LINK];
	} trigger;

extern trigger Triggers[MAX_TRIGGERS];

extern int Num_triggers;

extern void trigger_init();
extern void check_trigger(segment *seg, short side, short objnum,int shot);
extern int check_trigger_sub(int trigger_num, int player_num,int shot);
extern void triggers_frame_process();

#endif
