File: ball.h

package info (click to toggle)
xboing 2.4-26.1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 3,108 kB
  • ctags: 1,516
  • sloc: ansic: 17,999; sh: 51; makefile: 44
file content (184 lines) | stat: -rw-r--r-- 5,632 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#ifndef _BALL_H_
#define _BALL_H_

/*
 * XBoing - An X11 blockout style computer game
 *
 * (c) Copyright 1993, 1994, 1995, Justin C. Kibell, All Rights Reserved
 *
 * The X Consortium, and any party obtaining a copy of these files from
 * the X Consortium, directly or indirectly, is granted, free of charge, a
 * full and unrestricted irrevocable, world-wide, paid up, royalty-free,
 * nonexclusive right and license to deal in this software and
 * documentation files (the "Software"), including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons who receive
 * copies from any such party to do so.  This license includes without
 * limitation a license to do the foregoing actions under any patents of
 * the party supplying this software to the X Consortium.
 *
 * In no event shall the author be liable to any party for direct, indirect,
 * special, incidental, or consequential damages arising out of the use of
 * this software and its documentation, even if the author has been advised
 * of the possibility of such damage.
 *
 * The author specifically disclaims any warranties, including, but not limited
 * to, the implied warranties of merchantability and fitness for a particular
 * purpose.  The software provided hereunder is on an "AS IS" basis, and the
 * author has no obligation to provide maintenance, support, updates,
 * enhancements, or modifications.
 */

/* 
 * =========================================================================
 *
 * $Id: ball.h,v 1.1.1.1 1994/12/16 01:36:50 jck Exp $
 * $Source: /usr5/legends/jck/xb/master/xboing/include/ball.h,v $
 * $Revision: 1.1.1.1 $
 * $Date: 1994/12/16 01:36:50 $
 *
 * $Log: ball.h,v $
 * Revision 1.1.1.1  1994/12/16  01:36:50  jck
 * The XBoing distribution requires configuration management. This is why the
 * cvs utility is being used. This is the initial import of all source etc..
 *
 *
 * =========================================================================
 */

/*
 *  Dependencies on other include files:
 */

#include <X11/Xlib.h>

/*
 *  Constants and macros:
 */

#define BALL_WIDTH  		20
#define BALL_HEIGHT 		19
#define MAX_BALL_MASS 		3.0
#define MIN_BALL_MASS 		1.0

#define BALL_WC     		(BALL_WIDTH / 2)
#define BALL_HC     		(BALL_HEIGHT / 2)

#define BIRTH_SLIDES        8
#define BALL_SLIDES         5

#define MAX_BALLS 			5

#define MAX_X_VEL           14
#define MAX_Y_VEL           14

#define MIN_DY_BALL			2
#define MIN_DX_BALL			2

#define BALL_ANIM_RATE      50
#define BIRTH_FRAME_RATE    5
#define BALL_FRAME_RATE     5
#define BORDER_ANIM_DELAY   15

#define PADDLE_HIT_SCORE    10

#define BALL_AUTO_ACTIVE_DELAY  3000

#define DIST_BALL_OF_PADDLE 45

#define PADDLE_BALL_FRAME_TILT  5000


/*
 *  Type declarations:
 */

enum BallStates 
{ 
	BALL_POP, 
	BALL_ACTIVE, 
	BALL_STOP, 
	BALL_CREATE, 
	BALL_DIE, 
	BALL_WAIT, 
	BALL_READY, 
	BALL_NONE 
};

typedef struct ball
{
	enum BallStates	waitMode;		/* Ball waiting mode */
	int				waitingFrame;	/* Frame to wait until */
	int				newMode;		/* Ball's new mode */
	int				nextFrame;		/* next frame for something */
	int				active;			/* True - in use, False - dead */
    int             oldx;			/* Old x coord of ball centre */
    int             oldy;			/* Old y coord of ball centre */
    int             ballx;			/* Current x coord of ball centre */
    int             bally;			/* Current y coord of ball centre */
    int             dx;				/* Change in x axis increment */
    int             dy;				/* Change in y axis increment */
    int             slide;			/* Current pixmap visible */
	float          	radius;			/* The radius of the ball */
	float          	mass;			/* The mass of the ball */
	int 			lastPaddleHitFrame;	/* Last frame the ball hit paddle */
    enum BallStates	ballState;		/* The state of the ball */
} BALL;

/*
 *  Function prototypes:
 */

#if NeedFunctionPrototypes
void InitialiseBall(Display *display, Window window, Colormap colormap);
void FreeBall(Display *display);
void RedrawBall(Display *display, Window window);
void DrawTheBall(Display *display, Window window, int x, int y, int slide);
void DrawTheBallBirth(Display *display, Window window, int x, int y, int slide);
void KillBallNow(Display *display, Window window, int i);
void GetBallPosition(int *ballX, int *ballY, int i);
void ResetBallStart(Display *display, Window window);
int GetBallMode(int i);
void ChangeBallMode(enum BallStates newMode, int i);
int AddANewBall(Display *display, int x, int y, int dx, int dy);
void ClearAllBalls(void);
void HandleBallMode(Display *display, Window window);
int StartAnotherBall(Display *display, Window window);
int IsBallWaiting(void);
void ClearBall(int i);
void SplitBallInTwo(Display *display, Window window);
void ClearBallNow(Display *display, Window window, int i);
int GetAnActiveBall(void);
int ActivateWaitingBall(Display *display, Window window);
int GetNumberOfActiveBalls(void);
void DoBoardTilt(Display *display, int i);
#else
void DoBoardTilt();
int GetNumberOfActiveBalls();
int ActivateWaitingBall();
int GetAnActiveBall();
void ClearBallNow();
void SplitBallInTwo();
void ClearBall();
void InitialiseBall();
void FreeBall();
void RedrawBall();
void DrawTheBall();
void DrawTheBallBirth();
void KillBallNow();
void GetBallPosition();
void ResetBallStart();
int GetBallMode();
void ChangeBallMode();
int AddANewBall();
void ClearAllBalls();
void HandleBallMode();
int StartAnotherBall();
int IsBallWaiting();
#endif

extern BALL balls[MAX_BALLS];
extern int speedLevel;
extern int paddleDx;

#endif