windows-nt/Source/XPSP1/NT/multimedia/directx/dinput/dx8/tdonuts/ffdonuts.h
2020-09-26 16:20:57 +08:00

199 lines
4.6 KiB
C

//-----------------------------------------------------------------------------
// File: ffdonuts.h
//
// Desc: DirectInput ForceFeedback version of Donuts game
//
// Copyright (C) 1995-1999 Microsoft Corporation. All Rights Reserved.
//-----------------------------------------------------------------------------
#ifndef FFDONUTS_H
#define FFDONUTS_H
// Program states
enum{ PS_SPLASH, PS_ACTIVE, PS_BEGINREST, PS_REST };
// Game object types
enum{ OBJ_DONUT=0, OBJ_PYRAMID, OBJ_CUBE, OBJ_SPHERE, OBJ_SHIP, OBJ_BULLET };
// Object dimensions and fixed properties
#define MAX_SCREEN_X (g_dwScreenWidth-1)
#define MAX_SCREEN_Y (g_dwScreenHeight-1)
#define DONUT_WIDTH 64
#define DONUT_HEIGHT 64
#define PYRAMID_WIDTH 32
#define PYRAMID_HEIGHT 32
#define SPHERE_WIDTH 16
#define SPHERE_HEIGHT 16
#define CUBE_WIDTH 16
#define CUBE_HEIGHT 16
#define SHIP_WIDTH 32
#define SHIP_HEIGHT 32
#define BULLET_WIDTH 3
#define BULLET_HEIGHT 3
#define MAX_DONUT_FRAME 30
#define MAX_PYRAMID_FRAME 40
#define MAX_SPHERE_FRAME 40
#define MAX_CUBE_FRAME 40
#define MAX_SHIP_FRAME 40
#define MAX_BULLET_FRAME 400
#define BULLET_XOFFSET 304
#define BULLET_YOFFSET 0
#define NO_PLAYER -1
//-----------------------------------------------------------------------------
// Name: struct DisplayObject
// Desc: A game object that goes in the display list
//-----------------------------------------------------------------------------
struct DisplayObject
{
DisplayObject* next; // Link to next object
DisplayObject* prev; // Link to previous object
BOOL bVisible; // Whether the object is visible
SHORT type; // Type of object
FLOAT posx, posy; // X and y position
FLOAT velx, vely; // X and y velocity (pixels/second)
FLOAT frame; // Current animation frame
FLOAT delay; // Frame/second
RECT rcSrc, rcDst; // Source and destination rects
LPDIRECTDRAWSURFACE7 pddsSurface; // Surface containing bitmap
int Player; //which player the pbject belongs to -- only for bullets and ships
};
FLOAT Dirx[40] =
{
0.000000f,
0.156434f,
0.309017f,
0.453991f,
0.587785f,
0.707107f,
0.809017f,
0.891007f,
0.951057f,
0.987688f,
1.000000f,
0.987688f,
0.951057f,
0.891007f,
0.809017f,
0.707107f,
0.587785f,
0.453990f,
0.309017f,
0.156434f,
0.000000f,
-0.156435f,
-0.309017f,
-0.453991f,
-0.587785f,
-0.707107f,
-0.809017f,
-0.891007f,
-0.951057f,
-0.987688f,
-1.000000f,
-0.987688f,
-0.951056f,
-0.891006f,
-0.809017f,
-0.707107f,
-0.587785f,
-0.453990f,
-0.309017f,
-0.156434f
};
FLOAT Diry[40] =
{
-1.000000f,
-0.987688f,
-0.951057f,
-0.891007f,
-0.809017f,
-0.707107f,
-0.587785f,
-0.453990f,
-0.309017f,
-0.156434f,
0.000000f,
0.156434f,
0.309017f,
0.453991f,
0.587785f,
0.707107f,
0.809017f,
0.891007f,
0.951057f,
0.987688f,
1.000000f,
0.987688f,
0.951057f,
0.891006f,
0.809017f,
0.707107f,
0.587785f,
0.453990f,
0.309017f,
0.156434f,
0.000000f,
-0.156435f,
-0.309017f,
-0.453991f,
-0.587785f,
-0.707107f,
-0.809017f,
-0.891007f,
-0.951057f,
-0.987688f
};
//-----------------------------------------------------------------------------
// Function prototypes
//-----------------------------------------------------------------------------
HRESULT InitializeGame( HWND hWnd );
HRESULT InitializeSound( HWND hWnd );
HRESULT InitializeInput( HWND hWnd );
VOID DestroyGame();
VOID DestroySound();
VOID DestroyInput();
VOID UpdateFrame(LPDIRECTDRAWSURFACE7 lpddsConfigDlg = NULL);
VOID CleanupAndDisplayError( CHAR* strError );
HRESULT RestoreSurfaces();
BOOL IsDisplayListEmpty();
BOOL IsDisplayListEmptyExceptShips();
VOID InitializeShips();
VOID AdvanceLevel();
VOID UpdateDisplayList();
VOID DrawDisplayList(LPDIRECTDRAWSURFACE7 lpConfigDlgSurf = NULL);
FLOAT rnd( FLOAT low=-1.0f, FLOAT high=1.0f );
VOID CheckForHits();
VOID BltBitmappedText( CHAR* strScore, int x, int y );
HRESULT DisplaySplashScreen();
VOID EraseScreen();
HRESULT FlipScreen();
VOID DisplayLevelIntroScreen( DWORD dwLevel );
DisplayObject* CreateObject( SHORT type, FLOAT x, FLOAT y, FLOAT vx, FLOAT vy, int Player );
VOID AddToList( DisplayObject* pObject );
VOID DeleteFromList( DisplayObject* pObject );
VOID GetDeviceInput(DWORD input[]);
#endif