// Ray.h: interface for the Ray class.
//
//////////////////////////////////////////////////////////////////////

#include "Vector3.h"
#if !defined(AFX_RAY_H__0266E276_DE50_43C1_9975_69CE823BC043__INCLUDED_)
#define AFX_RAY_H__0266E276_DE50_43C1_9975_69CE823BC043__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class GeomObj;

//@@@@@@@@@@@@@@@@@@@@ Ray class @@@@@@@@@@@@@@@@@@@
class Ray
{
private:

public:
	Ray();
	Ray(Point3& p, Vector3& v);
	virtual ~Ray();
	Point3 start;
	Vector3 dir;
	float curLightSpeed;
	int recurseLevel;
	void setStart(const Point3& p);
	void setDir(const Vector3& v);
	void setDir(float x, float y, float z);
	Point3 rayPos(float t);
	void xfrmRay(float* invTransfMatrix, Ray r);

};

//@@@@@@@@@@@@@@@@@@@@ HitInfo class @@@@@@@@@@@@@@@@@@@
class HitInfo{
public:
	double hitTime;
	GeomObj* hitObject;
	bool isEntering;
	int surface;
	Point3 hitPoint;
	Vector3 hitNormal;
};

class Intersection
{
public:
	int numHits;
	HitInfo hit[8]; // list of hits
	void set(Intersection& i);
};

#endif // !defined(AFX_RAY_H__0266E276_DE50_43C1_9975_69CE823BC043__INCLUDED_)
