///////////////////////////////////////////////////////////////////////////
//Tom Valesky
//CS-752
//Dr. Chen, instructor
//explosion.h -- declaration of the Explosion class
///////////////////////////////////////////////////////////////////////////

#include "list.h"
class Explosion
{
        int num_points;
        //Point *point_array;
        List live_list, dead_list;
        int center_x;
        int center_y;
        int center_z;

	int countdown;			
	float initial_radius; //initial radius of explosion
	float initial_red, initial_green, initial_blue, initial_alpha;
	float dist; //working store, used to hold dist from cur. pt. to ctr.

	float unit_x, unit_y, unit_z; //unit vector from center at cur. point

	float timestep; //timestep in seconds
	float initial_velocity; //initial velocity in meters per second

	float alpha_decrement;
	float radius;
	int lifetime; //number of frames drawn


        public:
        Explosion(int num_points, int center_x, int center_y, int center_z,
                        float initial_radius, float initial_red, float initial_green,
                        float initial_blue, float initial_alpha, float timestep,
                        float initial_velocity, float alpha_decrement, int lifetime, int countdown);
        Explosion();
		~Explosion();
	int move(void); 	//move points
	void draw(void);	//draw points
	void generate_points_on_sphere(void);
	void generate_candidate_point(Point *p);

	int is_valid_point(Point p);
	void project_point_onto_sphere(Point *p);
	void initialize_velocity(Point *p);
	float get_radius(void);
	float get_x();
	float get_y();
	float get_z();
	float get_velocity();
        void dump(void);
        Point *alloc_node(void);    // allocate new node in live list,
                                        //return pointer to data area
		
};

