www.pudn.com > 3Dtableball.zip > billiards.h
// Billiard ball simulator // Created by Nelis Franken // ----------------------------------------------------------- // Main implementation's header file // ----------------------------------------------------------- #ifndef _BILLIARDS_H_ #define _BILLIARDS_H_ #include#include #include #include #include #include #include #include #include "vector3.h" #include "mySphere.h" // Various variable declarations. // ------------------------------------------------------------------------------------------------- // Define ASCII values for special keystrokes. #define ESCAPE 27 #define PAGE_UP 73 #define PAGE_DOWN 81 #define UP_ARROW 72 #define DOWN_ARROW 80 #define LEFT_ARROW 75 #define RIGHT_ARROW 77 // Define scene texture indices // - ball textures remain numbers 0 - 15 // - mini ball icons numbers 16 - 31 // - character portraits 32 - 33 #define CUE 34 #define GREEN_CARPET 35 #define BLACK 36 #define WOOD 37 #define DARK_WOOD 38 #define CHECKER 39 #define RED_CARPET 40 #define BLUE_WALL 41 #define RED_LIGHT 42 #define BEIGE_WALL 43 #define DARKBLUE_MARBLE 44 #define RED_MARBLE 45 #define POWER_BAR 46 #define SEA_VIEW 47 #define SEA_VIEW2 48 #define PAINTING2 49 #define PAINTING1 50 #define ROOF 51 // Define sound indices #define SHOOT 0 #define COLLIDE 1 #define SIDES 2 #define SINK 3 // Constants const int ballCount = 16; const int textureCount = 52; const int playerCount = 2; // Structures struct Image { unsigned long sizeX; unsigned long sizeY; char *data; }; struct Player { bool balls[ballCount]; char* name; int noOfShots; int side; int id; }; // Various lists mySphere ballList[ballCount]; Image myTextureData[textureCount]; GLuint theTexture[textureCount]; Player players[playerCount]; GLint displayList[5]; ALuint soundClip[4]; // Camera and lighting positions static GLdouble camera[6] = {0.0,60.0,70.0, 0.0, 0.0, 0.0}; GLfloat light0Pos[] = { 0.0f, 205.0, 0.0f, 1.0f }; // Spotlight GLfloat light0Dir[] = { 0.0f, -1.0f, 0.0f }; GLfloat light1Pos[] = { 100.0, 205.0, 100.0, 1.0 }; // Omni light // Various essential flags, values and objects. ALint error; static int mainWindow; GLUquadricObj *pillarCylinder, *ballQuadric; GLfloat tableWidth = 50.0, tableLength = 100.0, pocketRadius = 1.5, theta = M_PI + M_PI/2.0, power = 3.0, elevationAngle = 15.0*M_PI/180.0, zoom = 65.0, pressedTheta = 0.0, pressedZoom = zoom, pressedElevation = 0.0, maxX = tableWidth/(2.0) - 2, minX = tableWidth/(-2.0) + 2, maxZ = tableLength/(2.0) - 2, minZ = tableLength/(-2.0) + 2; GLint parentWindowHeight = 600, parentWindowWidth = 800, prevMouseX = 0, prevMouseY = 0, currentPlayer = 0; GLint font=(int)GLUT_BITMAP_HELVETICA_12, largeFont=(int)GLUT_BITMAP_HELVETICA_18; bool shootMode = false, doAnimation = false, leftMouseButton = false, rightMouseButton = false, middleMouseButton = false, turnStarting = true, returnWhiteBall = false, rollingBalls = false, gameover = false, useLazer = true; char endGame[20]; // Player names list char* nameList[playerCount] = {"Xavier", "Gabriel"}; // Texture names list char* textureFilenames[textureCount] = { "ball_white.bmp", "ball_yellow_solid.bmp", "ball_blue_solid.bmp", "ball_red_solid.bmp", "ball_purple_solid.bmp", "ball_orange_solid.bmp", "ball_green_solid.bmp", "ball_brown_solid.bmp", "ball_black.bmp", "ball_yellow_stripe.bmp", "ball_blue_stripe.bmp", "ball_red_stripe.bmp", "ball_purple_stripe.bmp", "ball_orange_stripe.bmp", "ball_green_stripe.bmp", "ball_brown_stripe.bmp", "mini_white.bmp", "mini_yellow_solid.bmp", "mini_blue_solid.bmp", "mini_red_solid.bmp", "mini_purple_solid.bmp", "mini_orange_solid.bmp", "mini_green_solid.bmp", "mini_brown_solid.bmp", "mini_black.bmp", "mini_yellow_stripe.bmp", "mini_blue_stripe.bmp", "mini_red_stripe.bmp", "mini_purple_stripe.bmp", "mini_orange_stripe.bmp", "mini_green_stripe.bmp", "mini_brown_stripe.bmp", "char1.bmp", "char2.bmp", "cuestick.bmp", "carpet.bmp", "black.bmp", "wood.bmp", "dark_wood.bmp", "checker.bmp", "marble.bmp", "wall_dark2.bmp", "red_light.bmp", "grey_marble.bmp", "darkblue_marble.bmp", "red_marble.bmp", "powerBar.bmp", "view.bmp", "view2.bmp", "painting2.bmp", "painting1.bmp", "roof.bmp" }; // Function declerations // ------------------------------------------------------------------------------------------------- // Vertex generation and drawing tools vector3 getNormal(GLfloat point1[3], GLfloat point3[3], GLfloat point4[3]); void renderQuad(GLfloat point1[3], GLfloat point2[3], GLfloat point3[3], GLfloat point4[3], GLfloat orientation, GLfloat texXTile, GLfloat texYTile); void renderSurface(GLfloat width, GLfloat length, GLfloat widthSegments, GLfloat lengthSegments, GLfloat elevation, GLfloat texXTile, GLfloat texYTile, GLfloat normalX, GLfloat normalY, GLfloat normalZ, GLuint &surfaceTexture); void renderCurve(GLfloat radius, GLfloat height, GLfloat sweep, GLuint segments, GLfloat orientation, GLuint &aTexture); void renderCap(GLfloat inner_radius, GLfloat outer_radius, GLfloat inner_sweep, GLfloat outer_sweep, GLuint segments, GLuint &myTexture); // Object rendering functions void renderBalls(void); void renderPocket(GLfloat sweep); void renderTableLegs(void); void renderTable(void); void renderStairs(void); void renderBalcony(void); void renderRoom(void); void renderCueStick(void); void drawSide(void); void drawGuideLine(void); // Camera functions void updateCamera(void); void updateTarget(void); // User interface functions void renderBitmapString(float x, float y, void *font, char* c); void drawUI(void); void drawEndScreen(void); // GLUT implementation functions and basic OpenGL setup (input/window handlers) void changeParentWindow(GLsizei width, GLsizei height); void renderParentWindow(void); void switchToOrtho(void); void switchFromOrtho(void); void keys(unsigned char key, int x, int y); void specialKeyPressed(int key, int x, int y); void useMouse(int button, int state, int x, int y); void lookMouse(int x, int y); void initlights(void); void initScene(int argc, char **argv); void idle(void); // Physics functions void deflectBalls(int ballOne, int ballTwo); void ballInPocket(int ballNr, int pocketNr); void initPhysics(void); // Setup functions (initializing display lists, loading sounds and textures, setting up players etc.) ALvoid DisplayALError(ALbyte *szText, ALint errorcode); int ImageLoad(const char *filename, Image *image); void setupPlayers(void); void setupLists(void); void resetGame(void); void LoadGLTextures(void); void loadSound(void); // Main function int main(int argc, char **argv); #endif