/*
 * $Id: sphere.h,v 1.11 2002/07/19 20:33:29 msell Exp $
 *
 *
 * $Log: sphere.h,v $
 * Revision 1.11  2002/07/19 20:33:29  msell
 * #pragma once -> #ifndef
 *
 * Revision 1.10  2002/07/07 17:53:21  msell
 * Legoukon alku
 *
 * Revision 1.9  2002/07/04 21:05:41  msell
 * Se toimii!! =)
 * Törmäystarkistukset siis
 *
 * Revision 1.8  2002/06/30 16:05:04  msell
 * Törmäyksien parantelua, transformaatioita mukana
 *
 * Revision 1.7  2002/06/24 14:12:15  msell
 * Nyt toimii sphere -> mesh -törmäykset, ihan tosi
 *
 * Revision 1.6  2002/06/20 22:50:12  msell
 * Meshit
 *
 * Revision 1.5  2002/06/15 17:18:37  msell
 * Toimiva törmäystarkastus kiinteille laatikoille
 *
 * Revision 1.4  2002/06/14 00:05:05  msell
 * Törmäyssimulaatio kunnossa toivon mukaan
 *
 * Revision 1.3  2002/06/11 23:11:45  msell
 * Törmäystarkistusta
 *
 * Revision 1.2  2002/06/07 21:16:51  msell
 * Fysiikkaenginen alkua
 *
 * Revision 1.1  2002/06/05 23:55:46  msell
 * Pallo
 *
 *
 *
 * $Date: 2002/07/19 20:33:29 $
 *
 */

#ifndef __SPHERE_H_INCLUDED__
#define __SPHERE_H_INCLUDED__

#include "object.h"
#include "material.h"
#include "mesh.h"


class SphereAppearance;

//Object for sphere

class Sphere : public Object{
private:
	float r;
	SphereAppearance *appearance;
	SphereShape *geometry;

public:
	Sphere(void);

	void setRadius(float r);
	void setColor(float red, float green, float blue);
};



//Appearance of sphere

class SphereAppearance : public Appearance{
private:
	float r;

public:
	SphereAppearance(void);
	
	void setRadius(float r);
	void draw(void);
};



//Geometry of sphere

class SphereShape : public Shape{
private:
	float r;

public:
	SphereShape(Object *sphere);

	void setRadius(float r);
	float getRadius(void);

	float calculateMomentOfInertia(float *rotationvector);

	bool checkCollision(Object *target);

	bool checkCollisionPeer(SphereShape *target);
	bool checkCollisionPeer(MeshShape *target);

	friend class Sphere;
	friend class MeshShape;
};

#endif

