/* 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. * */ #include "titanic/star_control/camera_mover.h" #include "titanic/star_control/base_stars.h" // includes class CStarVector #include "titanic/star_control/error_code.h" #include "titanic/support/simple_file.h" // Not currently being used: #include "common/textconsole.h" namespace Titanic { CCameraMover::CCameraMover(const CNavigationInfo *src) { _lockCounter = 0; _starVector = nullptr; if (src) { copyFrom(src); } else { reset(); } } CCameraMover::~CCameraMover() { clear(); } void CCameraMover::clear() { if (_starVector) { delete _starVector; _starVector = nullptr; } } void CCameraMover::reset() { _speed = 0.0; _speedChangeCtr = 0.0; _speedChangeInc = 20.0; _unused = 0.0; _maxSpeed = 50000.0; _unusedX = 1.0; _unusedY = 1.0; _unusedZ = 0.0; } void CCameraMover::setVector(CStarVector *sv) { clear(); _starVector = sv; } void CCameraMover::copyFrom(const CNavigationInfo *src) { _speed = src->_speed; _unused = src->_speedChangeCtr; _maxSpeed = src->_speedChangeInc; _speedChangeCtr = src->_unused; _speedChangeInc = src->_maxSpeed; _unusedX = src->_unusedX; _unusedY = src->_unusedY; _unusedZ = src->_unusedZ; } void CCameraMover::copyTo(CNavigationInfo *dest) { dest->_speed = _speed; dest->_speedChangeCtr = _unused; dest->_speedChangeInc = _maxSpeed; dest->_unused = _speedChangeCtr; dest->_maxSpeed = _speedChangeInc; dest->_unusedX = _unusedX; dest->_unusedY = _unusedY; dest->_unusedZ = _unusedZ; } void CCameraMover::increaseForwardSpeed() { if (!isLocked() && _speed < _maxSpeed) { _speedChangeCtr += _speedChangeInc; _speed += ABS(_speedChangeCtr); } } void CCameraMover::increaseBackwardSpeed() { if (!isLocked() && _speed > -_maxSpeed) { _speedChangeCtr -= _speedChangeInc; _speed -= ABS(_speedChangeCtr); } } void CCameraMover::fullSpeed() { if (!isLocked()) _speed = _maxSpeed; } void CCameraMover::stop() { if (!isLocked()) { _speed = 0.0; _speedChangeCtr = 0.0; } } // TODO: this is confusing to negate the val value void CCameraMover::load(SimpleFile *file, int val) { if (!val) { _speed = file->readFloat(); _speedChangeCtr = file->readFloat(); _speedChangeInc = file->readFloat(); _unused = file->readFloat(); _maxSpeed = file->readFloat(); _unusedX = file->readFloat(); _unusedY = file->readFloat(); _unusedZ = file->readFloat(); } } void CCameraMover::save(SimpleFile *file, int indent) { file->writeFloatLine(_speed, indent); file->writeFloatLine(_speedChangeCtr, indent); file->writeFloatLine(_speedChangeInc, indent); file->writeFloatLine(_unused, indent); file->writeFloatLine(_maxSpeed, indent); file->writeFloatLine(_unusedX, indent); file->writeFloatLine(_unusedY, indent); file->writeFloatLine(_unusedZ, indent); } void CCameraMover::incLockCount() { if (_lockCounter < 3) ++_lockCounter; } void CCameraMover::decLockCount() { if (_lockCounter > 0) --_lockCounter; } } // End of namespace Titanic