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 ¢er_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
|