//---------------------------------------------------------------------------
//
//	trigger.h - This file contains the class declaration for TriggerArea
//
//---------------------------------------------------------------------------//
// Copyright (C) Microsoft Corporation. All rights reserved.                 //
//===========================================================================//

#ifndef TRIGGER_H
#define TRIGGER_H

#ifndef TERRAIN_H
#include"terrain.h"
#endif

#ifndef DMOVER_H
#include"dmover.h"
#endif

//#ifndef DSTD_H
#include"dstd.h"
//#endif

//---------------------------------------------------------------------------

#define	MAX_TRIGGER_AREAS			16

typedef enum {
	TRIGGER_AREA_NONE,
	TRIGGER_AREA_MOVER,
	TRIGGER_AREA_TEAM,
	TRIGGER_AREA_GROUP,
	TRIGGER_AREA_COMMANDER,
	NUM_TRIGGER_AREA_TYPES
} TriggerAreaType;

typedef struct {
	char	type;
	long	param;
	long	dim[4];
	bool	hit;
} TriggerArea;

class TriggerAreaManager {

	public:

		TriggerArea				triggerAreas[MAX_TRIGGER_AREAS];
		unsigned char			map[MAX_MAP_CELL_WIDTH / 3][MAX_MAP_CELL_WIDTH / 3];
		
	public:

		void* operator new (size_t mySize);

		void operator delete (void* us);
			
		void init (void) {
			for (long i = 0; i < MAX_TRIGGER_AREAS; i++)
				triggerAreas[i].type = TRIGGER_AREA_NONE;
			for (long r = 0; r < MAX_MAP_CELL_WIDTH / 3; r++)
				for (long c = 0; c < MAX_MAP_CELL_WIDTH / 3; c++)
					map[r][c] = 0;
		}

		TriggerAreaManager (void) {
			init();
		}

		void destroy (void);

		~TriggerAreaManager (void) {
			destroy();
		}

		long add (long ULrow, long ULcol, long LRrow, long LRcol, long type, long param);

		void remove (long areaHandle);

		void reset (long areaHandle);

		bool isHit (long areaHandle);

		void setHit (MoverPtr mover);
};


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

