File: qd_camera_mode.h

package info (click to toggle)
scummvm 2.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 450,580 kB
  • sloc: cpp: 4,299,825; asm: 28,322; python: 12,901; sh: 11,302; java: 9,289; xml: 7,895; perl: 2,639; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (152 lines) | stat: -rw-r--r-- 4,612 bytes parent folder | download | duplicates (2)
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
/* 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/>.
 *
 */


#ifndef QDENGINE_QDCORE_QD_CAMERA_MODE_H
#define QDENGINE_QDCORE_QD_CAMERA_MODE_H

#include "qdengine/xmath.h"
#include "qdengine/parser/xml_fwd.h"

namespace Common {
class SeekableReadStream;
class WriteStream;
}

namespace QDEngine {

class qdGameObjectState;
class qdGameObjectAnimated;

//! Режим работы камеры.
class qdCameraMode {
public:
	qdCameraMode();
	~qdCameraMode() { }

	//! идентификаторы режимов камеры
	enum camera_mode_t {
		//! камера не выпускает объект с экрана
		MODE_OBJECT_ON_SCREEN,
		//! камера жестко привязана к объекту
		MODE_CENTER_OBJECT,
		//! камера все время центруется на объекте
		MODE_FOLLOW_OBJECT,
		//! когда объект подходит к краю экрана камера плавно на нем центруется
		MODE_CENTER_OBJECT_WHEN_LEAVING,
		//! режим не установлен
		MODE_UNASSIGNED
	};

	void set_camera_mode(camera_mode_t mode) {
		_camera_mode = mode;
	}
	camera_mode_t camera_mode() const {
		return _camera_mode;
	}

	void set_work_time(float tm) {
		_work_time = tm;
	}
	float work_time() const {
		return _work_time;
	}
	bool has_work_time() const {
		return _work_time > 0.001f;
	}

	void set_scrolling_speed(float v) {
		_scrolling_speed = v;
	}
	float scrolling_speed() const {
		return _scrolling_speed;
	}

	void set_scrolling_distance(int dist) {
		_scrolling_distance = dist;
	}
	int scrolling_distance() const {
		return _scrolling_distance;
	}

	bool smooth_switch() const {
		return _smooth_switch;
	}
	void set_smooth_switch(bool v) {
		_smooth_switch = v;
	}

	const Vect2i &center_offset() const {
		return _center_offset;
	}
	void set_center_offset(const Vect2i &offs) {
		_center_offset = offs;
	}

	bool load_script(const xml::tag *p);
	bool save_script(Common::WriteStream &fh, int indent = 0) const;

	//! Загрузка данных из сэйва.
	bool load_data(Common::SeekableReadStream &fh, int save_version);
	//! Запись данных в сэйв.
	bool save_data(Common::WriteStream &fh) const;

private:

	//! Идентификатор режима.
	camera_mode_t _camera_mode;

	//! Время работы режима (в секундах).
	/**
	По истечении этого времени камера переключается
	на активного персонажа (если он есть).

	Если это время нулевое, то сменить режим можно будет
	только в принудительном порядке из триггера.
	*/
	float _work_time;

	//! Скорость, с которой камера скроллируется (в пикселах в секунду).
	float _scrolling_speed;

	//! Расстояние от центра объекта до края экрана, при котором включается скроллинг.
	/**
	В режимах, когда камера не дает объекту выйти за пределы экрана или
	центруется на объекте когда он близко к краю экрана.

	Задается в пикселах.
	*/
	int _scrolling_distance;

	//! Смещение центра экрана в пикселах.
	/**
	Позволяет задавать режим, когда камера, центруясь на объекте,
	держит его в определенной точке экрана.
	*/
	Vect2i _center_offset;

	//! Плавное переключение в режим, если true.
	bool _smooth_switch;
};

} // namespace QDEngine

#endif // QDENGINE_QDCORE_QD_CAMERA_MODE_H