#ifndef DISJOINT_ENTITIES_H #define DISJOINT_ENTITIES_H #include #include "entity.h" class DisjointEntities : public Entity { public: DisjointEntities() {A = B = 0;} virtual ~DisjointEntities(){} DisjointEntities(Entity*a, Entity*b) {A=a; B=b;} virtual RayIntersect CalcRayIntersect(Ray ray, int flags, int special=-1) { RayIntersect t = A->CalcRayIntersect(ray, flags, special); RayIntersect u = B->CalcRayIntersect(ray, flags, special); if(t.param_t < 0.0) return u; if(u.param_t < 0.0) return t; if(t.param_t < u.param_t) return t; return u; } virtual int IntersectionTest(Ray ray, int flags, int special=-1) { if(A->IntersectionTest(ray, flags, special)) return 1; return B->IntersectionTest(ray, flags, special); } virtual vector3d CalcNormal(Ray ray, RayIntersect&ri) { assert("Cannot get here" && 0); return vector3d(); } virtual void PathCompress(const Transform&T, queue >&Q, vector&V) { Q.push(pair(A, T)); Q.push(pair(B, T)); } virtual void GridCollect(vector& vec) { A->GridCollect(vec); B->GridCollect(vec); } virtual Color GetTextureColor(Ray ray, RayIntersect& ri) { assert("Cannot get here!" && 0); return Color(); } virtual bool HasTexture() { assert("Cannot get here!" && 0); return false; } Entity *A, *B; }; #endif