/* TODO: cleanup */ #ifndef ENGINE_LIGHT_HH #define ENGINE_LIGHT_HH #include #include #include "octa.hh" struct PackNode { PackNode *child1, *child2; ushort x, y, w, h; int available; PackNode(ushort x, ushort y, ushort w, ushort h) : child1(0), child2(0), x(x), y(y), w(w), h(h), available(min(w, h)) {} void discardchildren() { DELETEP(child1); DELETEP(child2); } void forceempty() { discardchildren(); available = 0; } void reset() { discardchildren(); available = min(w, h); } bool resize(int nw, int nh) { if(w == nw && h == nw) return false; discardchildren(); w = nw; h = nh; available = min(w, h); return true; } ~PackNode() { discardchildren(); } bool insert(ushort &tx, ushort &ty, ushort tw, ushort th); void reserve(ushort tx, ushort ty, ushort tw, ushort th); }; extern bvec ambient, skylight, sunlight; extern float ambientscale, skylightscale, sunlightscale; extern float sunlightyaw, sunlightpitch; extern vec sunlightdir; extern int fullbright, fullbrightlevel; extern void clearlights(); extern void initlights(); extern void brightencube(cube &c); extern void setsurfaces(cube &c, const surfaceinfo *surfs, const vertinfo *verts, int numverts); extern void setsurface(cube &c, int orient, const surfaceinfo &surf, const vertinfo *verts, int numverts); extern void previewblends(const ivec &bo, const ivec &bs); extern void calcnormals(bool lerptjoints = false); extern void clearnormals(); extern void resetsmoothgroups(); extern int smoothangle(int id, int angle); extern void findnormal(const vec &key, int smooth, const vec &surface, vec &v); #define CHECK_CALCLIGHT_PROGRESS_LOCKED(exit, show_calclight_progress, before, after) \ if(check_calclight_progress) \ { \ if(!calclight_canceled) \ { \ before; \ show_calclight_progress(); \ check_calclight_canceled(); \ after; \ } \ if(calclight_canceled) { exit; } \ } #define CHECK_CALCLIGHT_PROGRESS(exit, show_calclight_progress) CHECK_CALCLIGHT_PROGRESS_LOCKED(exit, show_calclight_progress, , ) extern bool calclight_canceled; extern volatile bool check_calclight_progress; extern void check_calclight_canceled(); #endif