File: background.h

package info (click to toggle)
scummvm 2.9.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 450,268 kB
  • sloc: cpp: 4,297,604; asm: 28,322; python: 12,901; sh: 11,219; java: 8,477; xml: 7,843; perl: 2,633; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (168 lines) | stat: -rw-r--r-- 5,059 bytes parent folder | download | duplicates (3)
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
/* 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 3 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, see <http://www.gnu.org/licenses/>.
 *
 * Data structures used for handling backgrounds
 */

#ifndef TINSEL_BACKGND_H     // prevent multiple includes
#define TINSEL_BACKGND_H

#include "common/array.h"
#include "common/coroutines.h"
#include "common/frac.h"
#include "common/rect.h"
#include "tinsel/anim.h"	// for ANIM
#include "tinsel/dw.h"	// for SCNHANDLE
#include "tinsel/object.h"	// for OBJECT *
#include "tinsel/palette.h"	// palette definitions

namespace Tinsel {

struct OBJECT;


/** Scrolling padding. Needed because scroll process does not normally run on every frame */
enum {
	SCROLLX_PAD	= 64,
	SCROLLY_PAD	= 64
};

/** When module BLK_INFO list is this long, switch from a binary to linear search */
#define	LINEAR_SEARCH	5

/** background playfield structure - a playfield is a container for modules */
struct PLAYFIELD {
	OBJECT *pDispList;	///< object display list for this playfield
	frac_t fieldX;		///< current world x position of playfield
	frac_t fieldY;		///< current world y position of playfield
	frac_t fieldXvel;	///< current x velocity of playfield
	frac_t fieldYvel;	///< current y velocity of playfield
	Common::Rect rcClip;	///< clip rectangle for this playfield
	bool bMoved;		///< set when playfield has moved
};

/** multi-playfield background structure - a backgnd is a container of playfields */
struct BACKGND {
	COLORREF rgbSkyColor;	///< background sky color
	Common::Point ptInitWorld;		///< initial world position
	Common::Rect rcScrollLimits;	///< scroll limits
	int refreshRate;		///< background update process refresh rate
	frac_t *pXscrollTable;	///< pointer to x direction scroll table for this background
	frac_t *pYscrollTable;	///< pointer to y direction scroll table for this background
	Common::Array<PLAYFIELD> fieldArray;	///< list of all playfields for this background
	bool bAutoErase;		///< when set - screen is cleared before anything is plotted (unused)
};


/*----------------------------------------------------------------------*\
|*			Background Function Prototypes			*|
\*----------------------------------------------------------------------*/

#define MAX_BG	10

class Font;

class Background {
public:
	Background(Font* font);

	void InitBackground();

	void DrawBackgnd();		// Draws all playfields for the current background

	/**
	 * Called before scene change.
	 */
	void DropBackground();

	void ResetBackground() {
		_pCurBgnd->fieldArray.clear();
		delete _pCurBgnd;
		_pCurBgnd = nullptr;
	}

	void StartupBackground(CORO_PARAM, SCNHANDLE hFilm);

	void PlayfieldSetPos(		// Sets the xy position of the specified playfield in the current background
		unsigned int which,		// which playfield
		int newXpos,		// new x position
		int newYpos);		// new y position

	void PlayfieldGetPos(		// Returns the xy position of the specified playfield in the current background
		unsigned int which,		// which playfield
		int* pXpos,		// returns current x position
		int* pYpos);		// returns current y position

	int PlayfieldGetCenterX(	// Returns the xy position of the specified playfield in the current background
		unsigned int which);		// which playfield

	OBJECT** GetPlayfieldList(	// Returns the display list for the specified playfield
		unsigned int which);		// which playfield

	OBJECT* GetBgObject() { return _pBG[0]; }

	void ChangePalette(SCNHANDLE hPal);

	SCNHANDLE BgPal() { return _hBgPal; }

	void SetDoFadeIn(bool tf) { _bDoFadeIn = tf; }

	bool GetDoFadeIn() { return _bDoFadeIn; }

	/**
	 * Return the current scene handle.
	 */
	SCNHANDLE GetBgroundHandle() { return _hBackground; }

	/**
	 * Return the width of the current background.
	 */
	int BgWidth();

	/**
	 * Return the height of the current background.
	 */
	int BgHeight();

	void SetBackPal(SCNHANDLE hPal);

	int getBgSpeed() { return _BGspeed; }

	void WaitForBG(CORO_PARAM);

private:
	Font *_font;

	// current background
	BACKGND *_pCurBgnd;

	SCNHANDLE _hBgPal;	// Background's palette
	int _BGspeed;
	SCNHANDLE _hBackground;	// Current scene handle - stored in case of Save_Scene()
	bool _bDoFadeIn;

public:
	int     _bgReels;
	OBJECT  *_pBG[MAX_BG];
	ANIM    _thisAnim[MAX_BG];	// used by BGmainProcess()
};

} // End of namespace Tinsel

#endif	// TINSEL_BACKGND_H