text: ﻿//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
  //
  // Purpose: 
  //
  // $NoKeywords: $
  //=============================================================================//
  
  #ifndef BSPLIGHTINGTHREAD_H
  #define BSPLIGHTINGTHREAD_H
  #ifdef _WIN32
  #pragma once
  #endif
  
  
  #include "stdafx.h"
  #include "ibsplightingthread.h"
  #include "utlvector.h"
  
  
  class CBSPLightingThread : public IBSPLightingThread {
  public:
  
      CBSPLightingThread();
  
  
  // IBSPLightingThread functions.
  public:
      virtual                ~CBSPLightingThread();
  
      virtual void Release();
  
      virtual void StartLighting(char const *pVMFFileWithEntities);
  
      virtual int GetCurrentState();
  
      virtual void Interrupt();
  
      virtual float GetPercentComplete();
  
  
  // Other functions.
  public:
  
      // This is called immediately after the constructor. It creates the thread.
      bool Init(IVRadDLL *pDLL);
  
  
  
  // Threadsafe functions.
  public:
  
      enum {
          THREADCMD_NONE = 0,
          THREADCMD_LIGHT = 1,
          THREADCMD_EXIT = 2
      };
  
      // Get the current command to the thread. Resets to THREADCMD_NONE on exit.
      int GetThreadCmd();
  
      void SetThreadCmd(int cmd);
  
      // Returns an IBSPLightingThread::STATE_ define.
      int GetThreadState();
  
      void SetThreadState(int state);
  
  
  public:
  
      // The thread's run function.
      DWORD ThreadMainLoop();
  
  
  public:
  
      int m_ThreadCmd;        // Next command for the thread to run.
      int m_ThreadState;        // Current state of the thread.
  
      CUtlVector<char> m_VMFFileWithEntities;
  
  
  public:
      IVRadDLL *m_pVRadDLL;
  
      HANDLE m_hThread;
      DWORD m_ThreadID;
      CRITICAL_SECTION m_CS;
  };
  
  
  #endif // BSPLIGHTINGTHREAD_H
  