public virtual new CCActionInterval reverse() { CCPointArray cCPointArray = this.m_pPoints.copy(); CCPoint controlPointAtIndex = cCPointArray.getControlPointAtIndex(0); for (int i = 1; i < cCPointArray.count(); i++) { CCPoint cCPoint = cCPointArray.getControlPointAtIndex(i); cCPointArray.replaceControlPoint(cCPoint.Sub(controlPointAtIndex), i); controlPointAtIndex = cCPoint; } CCPointArray cCPointArray1 = cCPointArray.reverse(); controlPointAtIndex = cCPointArray1.getControlPointAtIndex(cCPointArray1.count() - 1); cCPointArray1.removeControlPointAtIndex(cCPointArray1.count() - 1); controlPointAtIndex = controlPointAtIndex.Neg(); cCPointArray1.insertControlPoint(controlPointAtIndex, 0); for (int j = 1; j < cCPointArray1.count(); j++) { CCPoint controlPointAtIndex1 = cCPointArray1.getControlPointAtIndex(j); CCPoint cCPoint1 = controlPointAtIndex1.Neg().Add(controlPointAtIndex); cCPointArray1.replaceControlPoint(cCPoint1, j); controlPointAtIndex = cCPoint1; } return(CCCardinalSplineBy.create(this.m_fDuration, cCPointArray1, this.m_fTension)); }
public virtual CCActionInterval reverse() { CCPointArray copyConfig = (CCPointArray)m_pPoints.copy(); // // convert "absolutes" to "diffs" // CCPoint p = copyConfig.getControlPointAtIndex(0); for (int i = 1; i < copyConfig.count(); ++i) { CCPoint current = copyConfig.getControlPointAtIndex(i); CCPoint diff = current - p; copyConfig.replaceControlPoint(diff, i); p = current; } // convert to "diffs" to "reverse absolute" CCPointArray pReverse = copyConfig.reverse(); // 1st element (which should be 0,0) should be here too p = pReverse.getControlPointAtIndex(pReverse.count() - 1); pReverse.removeControlPointAtIndex(pReverse.count() - 1); p = -p; pReverse.insertControlPoint(p, 0); for (int i = 1; i < pReverse.count(); ++i) { CCPoint current = pReverse.getControlPointAtIndex(i); current = -current; CCPoint abs = current + p; pReverse.replaceControlPoint(abs, i); p = abs; } return(CCCardinalSplineBy.create(Duration, pReverse, m_fTension)); }