#ifndef _WR_LOG_H
#define _WR_LOG_H

#ifdef DISABLE_WR_LOG
#define WRLOG(event, entry)
#else
#define WRLOG(event, entry) LOG(WR_LOG_ON, event,entry)
#endif

#include "log.h"
#include "logentry.h"
#include "vec4.h"

class _KDTreeNode;
class WorkRec;

class WR_FrustumSubdivided_Entry {
public:
  WorkRec *_WR;
  int _had_objs; //subdivided because it had objs; false if it was going into different cells.
  
  WR_FrustumSubdivided_Entry (WorkRec *WR, int hadobjs) : _WR (WR), _had_objs (hadobjs) {}
};

class WR_EatCurCell_Entry {
public:
  WorkRec *_WR;
  _KDTreeNode *_cell;
  int _num_cell_objs, _num_clipped_objs;
  
  WR_EatCurCell_Entry (WorkRec *WR, _KDTreeNode *cell, int numcellobjs, int numclippedobjs) : _WR (WR), _cell (cell), _num_cell_objs (numcellobjs), _num_clipped_objs (numclippedobjs) {}
};

class WR_FrustumWalked_Entry {
public:
  WorkRec *_WR;
  _KDTreeNode *_src;
  _KDTreeNode *_dest;
  
  WR_FrustumWalked_Entry (WorkRec *WR, _KDTreeNode *src, _KDTreeNode *dest) : _WR (WR), _src (src), _dest (dest) {}
};

class WR_FindNextCells_Start_Entry {
public:
  WorkRec *_WR;
  WR_FindNextCells_Start_Entry (WorkRec *WR) : _WR (WR) {}
};

class WR_FindNextCells_End_Entry {
public:
  WorkRec *_WR;
  
  WR_FindNextCells_End_Entry (WorkRec *WR) : _WR (WR) {}
};

class WR_FloodYes_Entry {
public:
  WorkRec *_WR;
  RayCastable *_obj;
  
  WR_FloodYes_Entry (WorkRec *WR, RayCastable *obj) : _WR(WR), _obj (obj) {}
};

class WR_FloodNo_Entry {
public:
  WorkRec *_WR;
  
  WR_FloodNo_Entry (WorkRec *WR) : _WR(WR) {}
};

#endif
