[Scummvm-git-logs] scummvm master -> ab0c57ac0c82ee72a18264db4df7e194c140d3d5

dreammaster dreammaster at scummvm.org
Sat Mar 18 23:17:21 CET 2017


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
ab0c57ac0c TITANIC: Implemented CStarControlSub8 selectStar


Commit: ab0c57ac0c82ee72a18264db4df7e194c140d3d5
    https://github.com/scummvm/scummvm/commit/ab0c57ac0c82ee72a18264db4df7e194c140d3d5
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2017-03-18T18:17:17-04:00

Commit Message:
TITANIC: Implemented CStarControlSub8 selectStar

Changed paths:
    engines/titanic/star_control/base_star.h
    engines/titanic/star_control/star_control_sub8.cpp
    engines/titanic/star_control/star_control_sub8.h


diff --git a/engines/titanic/star_control/base_star.h b/engines/titanic/star_control/base_star.h
index e75f7cc..8fc36ba 100644
--- a/engines/titanic/star_control/base_star.h
+++ b/engines/titanic/star_control/base_star.h
@@ -57,6 +57,10 @@ struct CStarPosition : public Common::Point {
 	int _index1;
 	int _index2;
 	CStarPosition() : _index1(0), _index2(0) {}
+
+	bool operator==(const CStarPosition &sp) const {
+		return x == sp.x && y == sp.y && _index1 == sp._index1 && _index2 == sp._index2;
+	}
 };
 
 class CBaseStar {
diff --git a/engines/titanic/star_control/star_control_sub8.cpp b/engines/titanic/star_control/star_control_sub8.cpp
index d4addc8..53f2394 100644
--- a/engines/titanic/star_control/star_control_sub8.cpp
+++ b/engines/titanic/star_control/star_control_sub8.cpp
@@ -38,7 +38,64 @@ int CStarControlSub8::findStar(const Common::Point &pt) {
 
 void CStarControlSub8::selectStar(int index, CVideoSurface *surface,
 		CStarField *starField, CStarControlSub7 *sub7) {
-	// TODO
+	if (_entryIndex >= 0) {
+		if (_entryIndex == _field8) {
+			if (_field8 != 2) {
+				if (_positions[index] != _positions[_entryIndex + 1]) {
+					surface->lock();
+
+					CSurfaceArea surfaceArea(surface);
+					fn4(index, &surfaceArea);
+					surface->unlock();
+
+					++_entryIndex;
+					CStarPosition &newP = _positions[_entryIndex + 1];
+					newP = _positions[index];
+
+					const CBaseStarEntry *starP = starField->getDataPtr(_positions[index]._index1);
+					sub7->addStar(starP);
+				}
+			}
+		} else if (_entryIndex == _field8 + 1) {
+			if (_positions[index] == _positions[_entryIndex + 1]) {
+				surface->lock();
+				CSurfaceArea surfaceArea(surface);
+				fn6(&surfaceArea);
+				surface->unlock();
+
+				--_entryIndex;
+				const CBaseStarEntry *starP = starField->getDataPtr(_positions[index]._index1);
+				sub7->addStar(starP);
+			} else {
+				surface->lock();
+				CSurfaceArea surfaceArea(surface);
+				fn6(&surfaceArea);
+				fn4(index, &surfaceArea);
+				surface->unlock();
+
+				const CBaseStarEntry *starP;
+				starP = starField->getDataPtr(_positions[_entryIndex]._index1);
+				sub7->addStar(starP);
+				starP = starField->getDataPtr(_positions[index]._index1);
+				sub7->addStar(starP);
+
+				CStarPosition &newP = _positions[_entryIndex + 1];
+				newP = _positions[index];
+			}
+		}
+	} else {
+		surface->lock();
+		CSurfaceArea surfaceArea(surface);
+		fn4(index, &surfaceArea);
+		surface->unlock();
+
+		++_entryIndex;
+		CStarPosition &newP = _positions[_entryIndex + 1];
+		newP = _positions[index];
+
+		const CBaseStarEntry *starP = starField->getDataPtr(_positions[index]._index1);
+		sub7->addStar(starP);
+	}
 }
 
 bool CStarControlSub8::fn1(CStarField *starField, CSurfaceArea *surfaceArea, CStarControlSub12 *sub12) {
@@ -80,7 +137,7 @@ void CStarControlSub8::fn3() {
 
 FPoint CStarControlSub8::getPosition() const {
 	return (_entryIndex >= 0 && _entryIndex <= 2) ? 
-		FPoint(_entries[_entryIndex].left, _entries[_entryIndex].top) : FPoint();
+		FPoint(_entries[_entryIndex]) : FPoint();
 }
 
 void CStarControlSub8::draw(CSurfaceArea *surfaceArea) {
@@ -91,8 +148,8 @@ void CStarControlSub8::draw(CSurfaceArea *surfaceArea) {
 		SurfaceAreaMode savedMode = surfaceArea->setMode(SA_NONE);
 
 		for (int idx = 0; idx < _entryIndex; ++idx) {
-			const Common::Rect &src = _entries[idx];
-			double xp = src.left, yp = src.top;
+			const CStarPosition &src = _entries[idx];
+			double xp = src.x, yp = src.y;
 
 			surfaceArea->fn1(FRect(xp - 8.0, yp, xp - 4.0, yp));
 			surfaceArea->fn1(FRect(xp + 4.0, yp, xp + 8.0, yp));
diff --git a/engines/titanic/star_control/star_control_sub8.h b/engines/titanic/star_control/star_control_sub8.h
index b9b544d..f61a6ff 100644
--- a/engines/titanic/star_control/star_control_sub8.h
+++ b/engines/titanic/star_control/star_control_sub8.h
@@ -41,7 +41,7 @@ class CStarControlSub8 {
 private:
 	Common::Array<CStarPosition> _positions;
 	int _entryIndex;
-	Common::Rect _entries[3];
+	CStarPosition _entries[3];
 private:
 	/**
 	 * Allocates space in the _rects array





More information about the Scummvm-git-logs mailing list