@@ -323,7 +323,35 @@ class $modify(MacroPlayLayer, PlayLayer) {
323323 ? (engine->activeTTR && engine->activeTTR ->recordedFromStartPos )
324324 : (engine->activeMacro && engine->activeMacro ->recordedFromStartPos );
325325
326- if (m_startPosObject && anchors && !anchors->empty ()) {
326+ float recStartX = engine->ttrMode
327+ ? (engine->activeTTR ? engine->activeTTR ->startPosX : 0 .f )
328+ : (engine->activeMacro ? engine->activeMacro ->startPosX : 0 .f );
329+ float recStartY = engine->ttrMode
330+ ? (engine->activeTTR ? engine->activeTTR ->startPosY : 0 .f )
331+ : (engine->activeMacro ? engine->activeMacro ->startPosY : 0 .f );
332+
333+ bool startPosMatch = false ;
334+ if (m_startPosObject && recordedFromStartPos) {
335+ float dx = m_startPosObject->getPositionX () - recStartX;
336+ float dy = m_startPosObject->getPositionY () - recStartY;
337+ startPosMatch = std::sqrt (dx * dx + dy * dy) < 50 .0f ;
338+ }
339+
340+ if (m_startPosObject && startPosMatch) {
341+ engine->tickOffset = 0 ;
342+ engine->startPosActive = true ;
343+ if (anchors && !anchors->empty ()) {
344+ engine->playbackAnchorIndex = findFirstAnchorAtTick (*anchors, 0 );
345+ } else {
346+ engine->playbackAnchorIndex = 0 ;
347+ }
348+ if (engine->ttrMode && engine->activeTTR ) {
349+ engine->executeIndex = 0 ;
350+ } else if (engine->activeMacro ) {
351+ engine->executeIndex = 0 ;
352+ }
353+ engine->startPosWarning .clear ();
354+ } else if (m_startPosObject && anchors && !anchors->empty ()) {
327355 engine->tickOffset = computeStartPosOffset (this , *anchors);
328356 engine->startPosActive = true ;
329357 engine->playbackAnchorIndex = findFirstAnchorAtTick (*anchors, engine->tickOffset );
0 commit comments