//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef IBSPLIGHTING_THREAD_H
#define IBSPLIGHTING_THREAD_H
#ifdef _WIN32
#pragma once
#endif


#include "ivraddll.h"


class IBSPLightingThread
{
public:
	enum
	{
		STATE_IDLE=0,
		STATE_LIGHTING=1,
		STATE_FINISHED=2
	};

	virtual				~IBSPLightingThread() {}	

	virtual void		Release() = 0;

	// Start processing light in the background thread. 
	//
	// Goes to STATE_LIGHTING, then if it's successful, it goes to STATE_FINISHED.
	// If unsuccessful or interrupted, it goes to STATE_IDLE.
	//
	// If this is called while it's already lighting, it stops the current lighting
	// process and restarts.
	virtual void		StartLighting( char const *pVMFFileWithEntities ) = 0;

	// Returns one of the STATE_ defines.
	virtual int			GetCurrentState() = 0;

	// If lighting is in progress, make it stop.
	virtual void		Interrupt() = 0;

	// Returns IVRadDLL::GetPercentComplete if it's lighting.
	virtual float		GetPercentComplete() = 0;
};

IBSPLightingThread* CreateBSPLightingThread( IVRadDLL *pDLL );


#endif // IBSPLIGHTING_THREAD_H