/******************************Module*Header*******************************\
* Module Name: objects.h
*
* Copyright (c) 1994 Microsoft Corporation
*
\**************************************************************************/

#ifndef __objects_h__
#define __objects_h__

#include "sspipes.h"
#include "state.h"

class OBJECT_BUILD_INFO {
public:
    float radius;
    float divSize;
    int   nSlices;
    BOOL  bTexture;
    IPOINT2D *texRep;
};

/**************************************************************************\
*
* OBJECT classes
*
* - Display list objects
*
\**************************************************************************/

class OBJECT {
protected:
    int         listNum;
    int         nSlices;
public:
    void        Draw();

    OBJECT();
    ~OBJECT();
};

class PIPE_OBJECT : public OBJECT {
private:
    void Build( OBJECT_BUILD_INFO *state, float length, float start_s, float s_end );
public:
    PIPE_OBJECT( OBJECT_BUILD_INFO *state, float length );
    PIPE_OBJECT( OBJECT_BUILD_INFO *state, float length, float start_s, float end_s );
};

class ELBOW_OBJECT : public OBJECT {
private:
    void Build( OBJECT_BUILD_INFO *state, int notch, float start_s, float end_s );
public:
    ELBOW_OBJECT( OBJECT_BUILD_INFO *state, int notch );
    ELBOW_OBJECT( OBJECT_BUILD_INFO *state, int notch, float start_s, float end_s );
};

class BALLJOINT_OBJECT : public OBJECT {
private:
    void Build( OBJECT_BUILD_INFO *state, int notch, float start_s, float end_s );
public:
    // texturing version only
    BALLJOINT_OBJECT( OBJECT_BUILD_INFO *state, int notch, float start_s, float end_s );
};

class SPHERE_OBJECT : public OBJECT {
private:
    void Build( OBJECT_BUILD_INFO *state, float radius, float start_s, float end_s );
public:
    SPHERE_OBJECT( OBJECT_BUILD_INFO *state, float radius, float start_s, float end_s );
    SPHERE_OBJECT( OBJECT_BUILD_INFO *state, float radius );
};

#endif // __objects_h__