[Scummvm-cvs-logs] scummvm master -> aaec2e993ca7770ace9c2648f85c515fbcb9a604

sev- sev at scummvm.org
Sat May 31 09:19:11 CEST 2014


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:
aaec2e993c FULLPIPE: Implement MctlCompound::findClosestConnectionPoint()


Commit: aaec2e993ca7770ace9c2648f85c515fbcb9a604
    https://github.com/scummvm/scummvm/commit/aaec2e993ca7770ace9c2648f85c515fbcb9a604
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-05-31T10:18:33+03:00

Commit Message:
FULLPIPE: Implement MctlCompound::findClosestConnectionPoint()

Changed paths:
    engines/fullpipe/motion.cpp



diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 5b7419c..bea9bcd 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -430,59 +430,42 @@ MessageQueue *MctlLadder::controllerWalkTo(StaticANIObject *ani, int off) {
 	return doWalkTo(ani, _ladderX + off * _width, _ladderY + off * _height, 1, 0);
 }
 
-MctlConnectionPoint *MctlCompound::findClosestConnectionPoint(int ox, int oy, int destIndex, int connectionX, int connectionY, int sourceIndex, double *minDistancePtr) {
-#if 0
-	if (destIndex == sourceIndex) {
+MctlConnectionPoint *MctlCompound::findClosestConnectionPoint(int ox, int oy, int destIndex, int connectionX, int connectionY, int sourceIdx, double *minDistancePtr) {
+	if (destIndex == sourceIdx) {
 		*minDistancePtr = sqrt((double)((oy - connectionY) * (oy - connectionY) + (ox - connectionX) * (ox - connectionX)));
 
 		return 0;
 	}
 
-	v11 = this->_motionControllers.m_pData;
-	currDistance = 0.0;
-	v12 = 0;
-	v13 = (MctlCompoundArrayItem *)*(&v11->vmt + sourceIndex);
-	minDistance = 1.0e10;
-	minConnectionPoint = 0;
-	if (v13->mctlConnectionPointsArray.CObArray.m_nSize > 0) {
-		do {
-			v14 = 0;
-			for (currMctlIndex = 0; v14 < this->_motionControllers.m_nSize; currMctlIndex = v14) {
-				v15 = this->_motionControllers.m_pData;
-				v16 = *(MovGraphReact **)(*(&v15->vmt + v14) + offsetof(MctlCompoundArrayItem, movGraphReactObj));
-				if (v16) {
-					v17 = *(MctlConnectionPoint **)(*(_DWORD *)(*(&v15->vmt + sourceIndex) + 0x10) + 4 * v12);// MctlCompoundArrayItem.mctlConnectionPointsArray.CObArray.m_pData
-					LOBYTE(v18) = (*(bool (__thiscall **)(MovGraphReact *, int, int))(v16->CObject.vmt + offsetof(MovGraphReactVmt, pointInRegion)))(v16, v17->_connectionX, v17->_connectionY);
-					if (v18) {
-						v14 = currMctlIndex;
-						v19 = *(MctlConnectionPoint **)(*(_DWORD *)(*(&this->_motionControllers.m_pData->vmt + sourceIndex) + 0x10) + 4 * v12);
-						v20 = MctlCompound_findClosestConnectionPoint(this, ox, oy, destIndex, v19->_connectionX, v19->_connectionY, currMctlIndex, (int *)&currDistance);
-						if (currDistance < minDistance) {
-							minDistance = currDistance;
-							if (v20)
-								minConnectionPoint = v20;
-							else
-								minConnectionPoint = *(MctlConnectionPoint **)(*(_DWORD *)(*(&this->_motionControllers.m_pData->vmt + sourceIndex) + 0x10) + 4 * v12);
-						}
-					} else {
-						v14 = currMctlIndex;
+	double currDistance = 0.0;
+	double minDistance = 1.0e10;
+	MctlConnectionPoint *minConnectionPoint = 0;
+
+	for (uint i = 0; i < _motionControllers[sourceIdx]->_connectionPoints.size(); i++) {
+		for (int j = 0; j < _motionControllers.size(); j++) {
+			if (_motionControllers[j]->_movGraphReactObj) {
+				MctlConnectionPoint *pt = _motionControllers[sourceIdx]->_connectionPoints[i];
+
+				if (_motionControllers[j]->_movGraphReactObj->pointInRegion(pt->_connectionX, pt->_connectionY)) {
+					MctlConnectionPoint *npt = findClosestConnectionPoint(ox, oy, destIndex, pt->_connectionX, pt->_connectionY, j, &currDistance);
+
+					if (currDistance < minDistance) {
+						minDistance = currDistance;
+
+						if (npt)
+							minConnectionPoint = npt;
+						else
+							minConnectionPoint = pt;
 					}
 				}
-				++v14;
 			}
-			++v12;
-		} while (v12 < *(_DWORD *)(*(&this->_motionControllers.m_pData->vmt + sourceIndex) + 0x14)); // MctlCompoundArrayItem.mctlConnectionPointsArray.CObArray.m_nSize
+		}
 	}
 
 	*minDistancePtr = minDistance;
 
 	return minConnectionPoint;
 }
-#endif
-	warning("STUB: MctlCompound::findClosestConnectionPoint()");
-
-	return 0;
-}
 
 void MctlCompound::replaceNodeX(int from, int to) {
 	for (uint i = 0; i < _motionControllers.size(); i++) {






More information about the Scummvm-git-logs mailing list