aboutsummaryrefslogtreecommitdiff
path: root/engines/bbvs/minigames/bbtennis.h
blob: bedad285297b445bae6a527c46c46e358c2a8f9c (plain)
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
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef BBVS_MINIGAMES_BBTENNIS_H
#define BBVS_MINIGAMES_BBTENNIS_H

#include "bbvs/minigames/minigame.h"

namespace Bbvs {

class MinigameBbTennis : public Minigame {
public:
	MinigameBbTennis(BbvsEngine *vm) : Minigame(vm) {};
	bool run(bool fromMainGame);
public:

	struct Obj {
		int kind;
		int x, y;
		const ObjAnimation *anim;
		int frameIndex;
		int ticks;
		int status;
		int blinkCtr;
		float fltStepX;
		float fltStepY;
		float fltX;
		float fltY;
		int targetX;
		int targetY;
		int ballStep;
		int ballStepCtr;
		int netPlayDirection;
	};

	enum {
		kMaxObjectsCount = 256
	};

	enum {
		kGSTitleScreen      = 0,    // Title screen
		kGSMainGame         = 1,    // Game when called as part of the main game
		kGSStandaloneGame   = 2,    // Game when called as standalone game
		kGSScoreCountUp     = 3     // Score countup and next level text
	};

	Obj _objects[kMaxObjectsCount];

	int _numHearts;
	int _squirrelDelay;
	int _tennisPlayerDelay;
	int _throwerDelay;
	int _netPlayerDelay;
	int _playerDecrease;
	int _delayDecreaseTimer;
	int _numBalls;
	int _newBallTimer;
	int _initBallTimer;
	int _maxBalls;
	int _rapidFireBallsCount;
	int _score, _hiScore;
	int _hitMissRatio;
	bool _allHeartsGone;
	bool _playedThisIsTheCoolest;
	bool _startSoundPlayed;
	bool _endSoundPlaying;

	const ObjAnimation *getAnimation(int animIndex);

	void buildDrawList(DrawList &drawList);
	void buildDrawList0(DrawList &drawList);
	void buildDrawList1(DrawList &drawList);
	void buildDrawList2(DrawList &drawList);

	void drawSprites();

	void initObjs();
	Obj *getFreeObject();
	Obj *findTennisBall(int startObjIndex);
	bool isHit(Obj *obj1, Obj *obj2);

	void initObjects();
	void initObjects0();
	void initObjects1();
	void initObjects2();

	void initVars();
	void initVars0();
	void initVars1();
	void initVars2();

	bool updateStatus(int mouseX, int mouseY, uint mouseButtons);
	bool updateStatus0(int mouseX, int mouseY, uint mouseButtons);
	bool updateStatus1(int mouseX, int mouseY, uint mouseButtons);
	bool updateStatus2(int mouseX, int mouseY, uint mouseButtons);

	void updateObjs();
	void updateTennisBall(int objIndex);
	void updateSquirrel(int objIndex);
	void updateTennisPlayer(int objIndex);
	void updateThrower(int objIndex);
	void updateNetPlayer(int objIndex);
	void updateEnemyTennisBall(int objIndex);
	void makeEnemyBall(int x, int y, int frameIndex);
	void hitSomething();

	void update();

	void loadSounds();

};

} // End of namespace Bbvs

#endif // BBVS_MINIGAMES_BBTENNIS_H