From 6e46535c92fdfcc3a69b1dbec3f46dc5f818b6bf Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 30 May 2017 19:22:27 -0400 Subject: TITANIC: Rename CPhotoCrosshairs to CStarCrosshairs The crosshairs are used in the main starfield as well, so they shouldn't have a Photo specific name --- engines/titanic/module.mk | 2 +- engines/titanic/star_control/photo_crosshairs.cpp | 249 ---------------------- engines/titanic/star_control/photo_crosshairs.h | 128 ----------- engines/titanic/star_control/star_crosshairs.cpp | 249 ++++++++++++++++++++++ engines/titanic/star_control/star_crosshairs.h | 128 +++++++++++ engines/titanic/star_control/star_field.cpp | 4 +- engines/titanic/star_control/star_field.h | 8 +- 7 files changed, 384 insertions(+), 384 deletions(-) delete mode 100644 engines/titanic/star_control/photo_crosshairs.cpp delete mode 100644 engines/titanic/star_control/photo_crosshairs.h create mode 100644 engines/titanic/star_control/star_crosshairs.cpp create mode 100644 engines/titanic/star_control/star_crosshairs.h diff --git a/engines/titanic/module.mk b/engines/titanic/module.mk index dc6b9b7f5f..1e85874fd8 100644 --- a/engines/titanic/module.mk +++ b/engines/titanic/module.mk @@ -443,7 +443,6 @@ MODULE_OBJS := \ star_control/fvector.o \ star_control/matrix_transform.o \ star_control/orientation_changer.o \ - star_control/photo_crosshairs.o \ star_control/star_camera.o \ star_control/star_closeup.o \ star_control/star_control_sub2.o \ @@ -452,6 +451,7 @@ MODULE_OBJS := \ star_control/star_control_sub23.o \ star_control/star_control_sub24.o \ star_control/star_control_sub27.o \ + star_control/star_crosshairs.o \ star_control/star_field.o \ star_control/star_markers.o \ star_control/star_points1.o \ diff --git a/engines/titanic/star_control/photo_crosshairs.cpp b/engines/titanic/star_control/photo_crosshairs.cpp deleted file mode 100644 index eb6268ca96..0000000000 --- a/engines/titanic/star_control/photo_crosshairs.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/* 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/photo_crosshairs.h" -#include "titanic/star_control/star_markers.h" -#include "titanic/star_control/star_camera.h" -#include "titanic/star_control/star_field.h" -#include "titanic/star_control/star_ref.h" - -namespace Titanic { - -CPhotoCrosshairs::CPhotoCrosshairs() : _matchIndex(-1), _entryIndex(-1) { -} - -void CPhotoCrosshairs::selectStar(int index, CVideoSurface *surface, - CStarField *starField, CStarMarkers *markers) { - if (_entryIndex >= 0) { - // There are existing selected stars already - if (_entryIndex == _matchIndex) { - // All the stars selected so far have been matched. Only allow - // a selection addition if not all three stars have been found - if (!isSolved()) { - // Don't allow the most recent match to be re-selected - if (_positions[index] != _entries[_entryIndex]) { - surface->lock(); - - // Draw crosshairs around the selected star - CSurfaceArea surfaceArea(surface); - drawStar(index, &surfaceArea); - surface->unlock(); - - // Copy the star into the list of selected ones - ++_entryIndex; - CStarPosition &newP = _entries[_entryIndex]; - newP = _positions[index]; - - // Set up a marker in the main starfield for that same star - const CBaseStarEntry *starP = starField->getDataPtr(newP._index1); - markers->addStar(starP); - } - } - } else if (_entryIndex == _matchIndex + 1) { - // There is a most recently selected star that has not yet been matched. - // So we allow the user to reselect it to remove the selection, or shift - // the selection to some other star - if (_positions[index] == _entries[_entryIndex]) { - // Remove the crosshairs for the previously selected star - surface->lock(); - CSurfaceArea surfaceArea(surface); - eraseCurrent(&surfaceArea); - surface->unlock(); - - // Decrement number of selections - --_entryIndex; - - // Call the markers addStar method, which will remove the existing marker - const CBaseStarEntry *starP = starField->getDataPtr(_positions[index]._index1); - markers->addStar(starP); - } else { - // Erase the prior selection and draw the new one - surface->lock(); - CSurfaceArea surfaceArea(surface); - eraseCurrent(&surfaceArea); - drawStar(index, &surfaceArea); - surface->unlock(); - - // Remove the old selection from the starfield markers - const CBaseStarEntry *starP; - starP = starField->getDataPtr(_entries[_entryIndex]._index1); - markers->addStar(starP); - - // Add the new selection to the markers list - starP = starField->getDataPtr(_positions[index]._index1); - markers->addStar(starP); - - // Copy the newly selected star's details into our selections list - CStarPosition &newP = _entries[_entryIndex]; - newP = _positions[index]; - } - } - } else { - // Very first star being selected - // Draw crosshairs around the selected star - surface->lock(); - CSurfaceArea surfaceArea(surface); - drawStar(index, &surfaceArea); - surface->unlock(); - - // Copy the star into the list of selected ones - ++_entryIndex; - const CStarPosition &srcPos = _positions[index]; - CStarPosition &destPos = _entries[_entryIndex]; - destPos = srcPos; - - // Set up a marker in the main starfield for that same star - const CBaseStarEntry *starP = starField->getDataPtr(destPos._index1); - markers->addStar(starP); - } -} - -bool CPhotoCrosshairs::fn1(CStarField *starField, CSurfaceArea *surfaceArea, CStarCamera *camera) { - int count = starField->baseFn2(surfaceArea, camera); - - if (count > 0) { - allocate(count); - CStarRefArray starRef(starField, &_positions); - starRef.process(surfaceArea, camera); - return true; - } else { - clear(); - return false; - } -} - -void CPhotoCrosshairs::fn2(CVideoSurface *surface, CStarField *starField, CStarMarkers *markers) { - if (_matchIndex <= -1) { - if (_entryIndex > -1) { - drawEntry(_entryIndex, surface, starField, markers); - --_entryIndex; - } - } else { - --_matchIndex; - if (_entryIndex - _matchIndex > 1) { - drawEntry(_entryIndex, surface, starField, markers); - --_entryIndex; - } - } -} - -void CPhotoCrosshairs::incMatches() { - if (_matchIndex < 3) - ++_matchIndex; -} - -FPoint CPhotoCrosshairs::getPosition() const { - return (_entryIndex >= 0 && _entryIndex <= 2) ? - FPoint(_entries[_entryIndex]) : FPoint(); -} - -void CPhotoCrosshairs::draw(CSurfaceArea *surfaceArea) { - if (!_positions.empty()) { - uint savedPixel = surfaceArea->_pixel; - surfaceArea->_pixel = 0xff; - surfaceArea->setColorFromPixel(); - SurfaceAreaMode savedMode = surfaceArea->setMode(SA_NONE); - - for (int idx = 0; idx < _entryIndex; ++idx) { - const CStarPosition &src = _entries[idx]; - double xp = src.x, yp = src.y; - - surfaceArea->drawLine(FRect(xp - 8.0, yp, xp - 4.0, yp)); - surfaceArea->drawLine(FRect(xp + 4.0, yp, xp + 8.0, yp)); - surfaceArea->drawLine(FRect(xp, yp - 8.0, xp, yp - 4.0)); - surfaceArea->drawLine(FRect(xp, yp + 4.0, xp, yp + 8.0)); - } - - surfaceArea->_pixel = savedPixel; - surfaceArea->setColorFromPixel(); - surfaceArea->setMode(savedMode); - } -} - -void CPhotoCrosshairs::allocate(int count) { - if (!_positions.empty()) { - if ((int)_positions.size() == count) - return; - - clear(); - } - - _positions.resize(count); -} - -void CPhotoCrosshairs::clear() { - _positions.clear(); - _matchIndex = _entryIndex = -1; -} - -int CPhotoCrosshairs::indexOf(const Common::Point &pt) const { - Common::Rect r(pt.x - 2, pt.y - 2, pt.x + 2, pt.y + 2); - - for (int idx = 0; idx < (int)_positions.size(); ++idx) { - if (r.contains(_positions[idx])) - return idx; - } - - return -1; -} - -void CPhotoCrosshairs::drawStar(int index, CSurfaceArea *surfaceArea) { - if (index >= 0 && index < (int)_positions.size()) { - const CStarPosition &pt = _positions[index]; - drawAt(pt, surfaceArea); - } -} - -void CPhotoCrosshairs::drawEntry(int index, CVideoSurface *surface, CStarField *starField, CStarMarkers *markers) { - surface->lock(); - CSurfaceArea surfaceArea(surface); - drawAt(_entries[index], &surfaceArea); - surface->unlock(); - - const CBaseStarEntry *starP = starField->getDataPtr(_entries[index]._index1); - markers->addStar(starP); -} - -void CPhotoCrosshairs::eraseCurrent(CSurfaceArea *surfaceArea) { - assert(_entryIndex >= 0); - const CStarPosition &pt = _entries[_entryIndex]; - drawAt(pt, surfaceArea); -} - -void CPhotoCrosshairs::drawAt(const FPoint &pt, CSurfaceArea *surfaceArea) { - uint savedPixel = surfaceArea->_pixel; - surfaceArea->_pixel = 255; - surfaceArea->setColorFromPixel(); - SurfaceAreaMode savedMode = surfaceArea->setMode(SA_XOR); - - - surfaceArea->drawLine(FRect(pt._x - 8.0, pt._y, pt._x - 4.0, pt._y)); - surfaceArea->drawLine(FRect(pt._x + 4.0, pt._y, pt._x + 8.0, pt._y)); - surfaceArea->drawLine(FRect(pt._x, pt._y - 8.0, pt._x, pt._y - 4.0)); - surfaceArea->drawLine(FRect(pt._x, pt._y + 4.0, pt._x, pt._y + 8.0)); - - surfaceArea->_pixel = savedPixel; - surfaceArea->setColorFromPixel(); - surfaceArea->setMode(savedMode); -} - -} // End of namespace Titanic diff --git a/engines/titanic/star_control/photo_crosshairs.h b/engines/titanic/star_control/photo_crosshairs.h deleted file mode 100644 index 9f78a2d760..0000000000 --- a/engines/titanic/star_control/photo_crosshairs.h +++ /dev/null @@ -1,128 +0,0 @@ -/* 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 TITANIC_PHOTO_CROSSHAIRS_H -#define TITANIC_PHOTO_CROSSHAIRS_H - -#include "common/array.h" -#include "common/rect.h" -#include "titanic/star_control/base_stars.h" -#include "titanic/star_control/surface_area.h" -#include "titanic/star_control/fpoint.h" -#include "titanic/support/simple_file.h" -#include "titanic/support/video_surface.h" - -namespace Titanic { - -class CStarField; -class CStarMarkers; -class CStarCamera; - -class CPhotoCrosshairs { -private: - Common::Array _positions; - CStarPosition _entries[3]; -private: - /** - * Allocates space in the _rects array - */ - void allocate(int count); - - /** - * Clears any current data - */ - void clear(); -public: - int _matchIndex; - int _entryIndex; -public: - CPhotoCrosshairs(); - ~CPhotoCrosshairs() { clear(); } - - /** - * Load the data for the class from file - */ - void load(SimpleFile *file) {} - - /** - * Save the data for the class to file - */ - void save(SimpleFile *file, int indent) {} - - /** - * Returns true if there are no crosshairs present - */ - bool isEmpty() const { return _entryIndex == -1; } - - void selectStar(int starNum, CVideoSurface *surface, CStarField *starField, - CStarMarkers *markers); - - void draw(CSurfaceArea *surfaceArea); - - bool fn1(CStarField *starField, CSurfaceArea *surfaceArea, CStarCamera *camera); - void fn2(CVideoSurface *surface, CStarField *starField, CStarMarkers *markers); - - /** - * Increments the index for the number of matches - */ - void incMatches(); - - /** - * Draw the crosshairs for a given star - */ - void drawStar(int index, CSurfaceArea *surfaceArea); - - /** - * Draws the crosshairs for a specified entry, and adds the star - * to the starfield markers - */ - void drawEntry(int index, CVideoSurface *surface, CStarField *starField, CStarMarkers *markers); - - /** - * Erase crosshairs for the most recently selected star - */ - void eraseCurrent(CSurfaceArea *surfaceArea); - - /** - * Draw crosshairs at the given position - */ - void drawAt(const FPoint &pt, CSurfaceArea *surfaceArea); - - /** - * Returns the position of the most recently selected star - */ - FPoint getPosition() const; - - /** - * Returns the index of an entry in the rects list a given point falls within - */ - int indexOf(const Common::Point &pt) const; - - /** - * Returns true if the starfield is solved - */ - bool isSolved() const { return _matchIndex == 2; } -}; - -} // End of namespace Titanic - -#endif /* TITANIC_PHOTO_CROSSHAIRS_H */ diff --git a/engines/titanic/star_control/star_crosshairs.cpp b/engines/titanic/star_control/star_crosshairs.cpp new file mode 100644 index 0000000000..2f64505d32 --- /dev/null +++ b/engines/titanic/star_control/star_crosshairs.cpp @@ -0,0 +1,249 @@ +/* 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/star_crosshairs.h" +#include "titanic/star_control/star_markers.h" +#include "titanic/star_control/star_camera.h" +#include "titanic/star_control/star_field.h" +#include "titanic/star_control/star_ref.h" + +namespace Titanic { + +CStarCrosshairs::CStarCrosshairs() : _matchIndex(-1), _entryIndex(-1) { +} + +void CStarCrosshairs::selectStar(int index, CVideoSurface *surface, + CStarField *starField, CStarMarkers *markers) { + if (_entryIndex >= 0) { + // There are existing selected stars already + if (_entryIndex == _matchIndex) { + // All the stars selected so far have been matched. Only allow + // a selection addition if not all three stars have been found + if (!isSolved()) { + // Don't allow the most recent match to be re-selected + if (_positions[index] != _entries[_entryIndex]) { + surface->lock(); + + // Draw crosshairs around the selected star + CSurfaceArea surfaceArea(surface); + drawStar(index, &surfaceArea); + surface->unlock(); + + // Copy the star into the list of selected ones + ++_entryIndex; + CStarPosition &newP = _entries[_entryIndex]; + newP = _positions[index]; + + // Set up a marker in the main starfield for that same star + const CBaseStarEntry *starP = starField->getDataPtr(newP._index1); + markers->addStar(starP); + } + } + } else if (_entryIndex == _matchIndex + 1) { + // There is a most recently selected star that has not yet been matched. + // So we allow the user to reselect it to remove the selection, or shift + // the selection to some other star + if (_positions[index] == _entries[_entryIndex]) { + // Remove the crosshairs for the previously selected star + surface->lock(); + CSurfaceArea surfaceArea(surface); + eraseCurrent(&surfaceArea); + surface->unlock(); + + // Decrement number of selections + --_entryIndex; + + // Call the markers addStar method, which will remove the existing marker + const CBaseStarEntry *starP = starField->getDataPtr(_positions[index]._index1); + markers->addStar(starP); + } else { + // Erase the prior selection and draw the new one + surface->lock(); + CSurfaceArea surfaceArea(surface); + eraseCurrent(&surfaceArea); + drawStar(index, &surfaceArea); + surface->unlock(); + + // Remove the old selection from the starfield markers + const CBaseStarEntry *starP; + starP = starField->getDataPtr(_entries[_entryIndex]._index1); + markers->addStar(starP); + + // Add the new selection to the markers list + starP = starField->getDataPtr(_positions[index]._index1); + markers->addStar(starP); + + // Copy the newly selected star's details into our selections list + CStarPosition &newP = _entries[_entryIndex]; + newP = _positions[index]; + } + } + } else { + // Very first star being selected + // Draw crosshairs around the selected star + surface->lock(); + CSurfaceArea surfaceArea(surface); + drawStar(index, &surfaceArea); + surface->unlock(); + + // Copy the star into the list of selected ones + ++_entryIndex; + const CStarPosition &srcPos = _positions[index]; + CStarPosition &destPos = _entries[_entryIndex]; + destPos = srcPos; + + // Set up a marker in the main starfield for that same star + const CBaseStarEntry *starP = starField->getDataPtr(destPos._index1); + markers->addStar(starP); + } +} + +bool CStarCrosshairs::fn1(CStarField *starField, CSurfaceArea *surfaceArea, CStarCamera *camera) { + int count = starField->baseFn2(surfaceArea, camera); + + if (count > 0) { + allocate(count); + CStarRefArray starRef(starField, &_positions); + starRef.process(surfaceArea, camera); + return true; + } else { + clear(); + return false; + } +} + +void CStarCrosshairs::fn2(CVideoSurface *surface, CStarField *starField, CStarMarkers *markers) { + if (_matchIndex <= -1) { + if (_entryIndex > -1) { + drawEntry(_entryIndex, surface, starField, markers); + --_entryIndex; + } + } else { + --_matchIndex; + if (_entryIndex - _matchIndex > 1) { + drawEntry(_entryIndex, surface, starField, markers); + --_entryIndex; + } + } +} + +void CStarCrosshairs::incMatches() { + if (_matchIndex < 3) + ++_matchIndex; +} + +FPoint CStarCrosshairs::getPosition() const { + return (_entryIndex >= 0 && _entryIndex <= 2) ? + FPoint(_entries[_entryIndex]) : FPoint(); +} + +void CStarCrosshairs::draw(CSurfaceArea *surfaceArea) { + if (!_positions.empty()) { + uint savedPixel = surfaceArea->_pixel; + surfaceArea->_pixel = 0xff; + surfaceArea->setColorFromPixel(); + SurfaceAreaMode savedMode = surfaceArea->setMode(SA_NONE); + + for (int idx = 0; idx < _entryIndex; ++idx) { + const CStarPosition &src = _entries[idx]; + double xp = src.x, yp = src.y; + + surfaceArea->drawLine(FRect(xp - 8.0, yp, xp - 4.0, yp)); + surfaceArea->drawLine(FRect(xp + 4.0, yp, xp + 8.0, yp)); + surfaceArea->drawLine(FRect(xp, yp - 8.0, xp, yp - 4.0)); + surfaceArea->drawLine(FRect(xp, yp + 4.0, xp, yp + 8.0)); + } + + surfaceArea->_pixel = savedPixel; + surfaceArea->setColorFromPixel(); + surfaceArea->setMode(savedMode); + } +} + +void CStarCrosshairs::allocate(int count) { + if (!_positions.empty()) { + if ((int)_positions.size() == count) + return; + + clear(); + } + + _positions.resize(count); +} + +void CStarCrosshairs::clear() { + _positions.clear(); + _matchIndex = _entryIndex = -1; +} + +int CStarCrosshairs::indexOf(const Common::Point &pt) const { + Common::Rect r(pt.x - 2, pt.y - 2, pt.x + 2, pt.y + 2); + + for (int idx = 0; idx < (int)_positions.size(); ++idx) { + if (r.contains(_positions[idx])) + return idx; + } + + return -1; +} + +void CStarCrosshairs::drawStar(int index, CSurfaceArea *surfaceArea) { + if (index >= 0 && index < (int)_positions.size()) { + const CStarPosition &pt = _positions[index]; + drawAt(pt, surfaceArea); + } +} + +void CStarCrosshairs::drawEntry(int index, CVideoSurface *surface, CStarField *starField, CStarMarkers *markers) { + surface->lock(); + CSurfaceArea surfaceArea(surface); + drawAt(_entries[index], &surfaceArea); + surface->unlock(); + + const CBaseStarEntry *starP = starField->getDataPtr(_entries[index]._index1); + markers->addStar(starP); +} + +void CStarCrosshairs::eraseCurrent(CSurfaceArea *surfaceArea) { + assert(_entryIndex >= 0); + const CStarPosition &pt = _entries[_entryIndex]; + drawAt(pt, surfaceArea); +} + +void CStarCrosshairs::drawAt(const FPoint &pt, CSurfaceArea *surfaceArea) { + uint savedPixel = surfaceArea->_pixel; + surfaceArea->_pixel = 255; + surfaceArea->setColorFromPixel(); + SurfaceAreaMode savedMode = surfaceArea->setMode(SA_XOR); + + + surfaceArea->drawLine(FRect(pt._x - 8.0, pt._y, pt._x - 4.0, pt._y)); + surfaceArea->drawLine(FRect(pt._x + 4.0, pt._y, pt._x + 8.0, pt._y)); + surfaceArea->drawLine(FRect(pt._x, pt._y - 8.0, pt._x, pt._y - 4.0)); + surfaceArea->drawLine(FRect(pt._x, pt._y + 4.0, pt._x, pt._y + 8.0)); + + surfaceArea->_pixel = savedPixel; + surfaceArea->setColorFromPixel(); + surfaceArea->setMode(savedMode); +} + +} // End of namespace Titanic diff --git a/engines/titanic/star_control/star_crosshairs.h b/engines/titanic/star_control/star_crosshairs.h new file mode 100644 index 0000000000..e91e245ad1 --- /dev/null +++ b/engines/titanic/star_control/star_crosshairs.h @@ -0,0 +1,128 @@ +/* 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 TITANIC_STAR_CROSSHAIRS_H +#define TITANIC_STAR_CROSSHAIRS_H + +#include "common/array.h" +#include "common/rect.h" +#include "titanic/star_control/base_stars.h" +#include "titanic/star_control/surface_area.h" +#include "titanic/star_control/fpoint.h" +#include "titanic/support/simple_file.h" +#include "titanic/support/video_surface.h" + +namespace Titanic { + +class CStarField; +class CStarMarkers; +class CStarCamera; + +class CStarCrosshairs { +private: + Common::Array _positions; + CStarPosition _entries[3]; +private: + /** + * Allocates space in the _rects array + */ + void allocate(int count); + + /** + * Clears any current data + */ + void clear(); +public: + int _matchIndex; + int _entryIndex; +public: + CStarCrosshairs(); + ~CStarCrosshairs() { clear(); } + + /** + * Load the data for the class from file + */ + void load(SimpleFile *file) {} + + /** + * Save the data for the class to file + */ + void save(SimpleFile *file, int indent) {} + + /** + * Returns true if there are no crosshairs present + */ + bool isEmpty() const { return _entryIndex == -1; } + + void selectStar(int starNum, CVideoSurface *surface, CStarField *starField, + CStarMarkers *markers); + + void draw(CSurfaceArea *surfaceArea); + + bool fn1(CStarField *starField, CSurfaceArea *surfaceArea, CStarCamera *camera); + void fn2(CVideoSurface *surface, CStarField *starField, CStarMarkers *markers); + + /** + * Increments the index for the number of matches + */ + void incMatches(); + + /** + * Draw the crosshairs for a given star + */ + void drawStar(int index, CSurfaceArea *surfaceArea); + + /** + * Draws the crosshairs for a specified entry, and adds the star + * to the starfield markers + */ + void drawEntry(int index, CVideoSurface *surface, CStarField *starField, CStarMarkers *markers); + + /** + * Erase crosshairs for the most recently selected star + */ + void eraseCurrent(CSurfaceArea *surfaceArea); + + /** + * Draw crosshairs at the given position + */ + void drawAt(const FPoint &pt, CSurfaceArea *surfaceArea); + + /** + * Returns the position of the most recently selected star + */ + FPoint getPosition() const; + + /** + * Returns the index of an entry in the rects list a given point falls within + */ + int indexOf(const Common::Point &pt) const; + + /** + * Returns true if the starfield is solved + */ + bool isSolved() const { return _matchIndex == 2; } +}; + +} // End of namespace Titanic + +#endif /* TITANIC_STAR_CROSSHAIRS_H */ diff --git a/engines/titanic/star_control/star_field.cpp b/engines/titanic/star_control/star_field.cpp index aad6382d5d..669423bc60 100644 --- a/engines/titanic/star_control/star_field.cpp +++ b/engines/titanic/star_control/star_field.cpp @@ -67,7 +67,7 @@ void CStarField::render(CVideoSurface *surface, CStarCamera *camera) { CSurfaceArea surfaceArea(surface); draw(&surfaceArea, camera, &_starCloseup); if (_showCrosshairs) - drawCrosshairs(&surfaceArea); + drawBox(&surfaceArea); _markers.draw(&surfaceArea, camera, nullptr); _crosshairs.draw(&surfaceArea); @@ -142,7 +142,7 @@ void CStarField::fn1(CErrorCode *errorCode) { _starCloseup.proc3(errorCode); } -void CStarField::drawCrosshairs(CSurfaceArea *surfaceArea) { +void CStarField::drawBox(CSurfaceArea *surfaceArea) { uint oldPixel = surfaceArea->_pixel; surfaceArea->_pixel = 0x323232; surfaceArea->setColorFromPixel(); diff --git a/engines/titanic/star_control/star_field.h b/engines/titanic/star_control/star_field.h index a014894ef4..ecac23eac3 100644 --- a/engines/titanic/star_control/star_field.h +++ b/engines/titanic/star_control/star_field.h @@ -26,7 +26,7 @@ #include "titanic/star_control/star_control_sub2.h" #include "titanic/star_control/star_closeup.h" #include "titanic/star_control/star_markers.h" -#include "titanic/star_control/photo_crosshairs.h" +#include "titanic/star_control/star_crosshairs.h" #include "titanic/star_control/star_points1.h" #include "titanic/star_control/star_points2.h" @@ -35,7 +35,7 @@ namespace Titanic { class CStarField : public CStarControlSub2 { private: CStarMarkers _markers; - CPhotoCrosshairs _crosshairs; + CStarCrosshairs _crosshairs; CStarPoints1 _points1; CStarPoints2 _points2; CStarCloseup _starCloseup; @@ -47,9 +47,9 @@ private: bool _isSolved; private: /** - * Draws the square box crosshairs in the middle of the screen + * Draws the big square box in the middle of the screen */ - void drawCrosshairs(CSurfaceArea *surfaceArea); + void drawBox(CSurfaceArea *surfaceArea); void fn4(CSurfaceArea *surfaceArea, CStarCamera *camera); public: -- cgit v1.2.3