@@ -86,6 +86,7 @@ void TrajectoryNode::simulate(PlayerObject* plr, bool held)
8686 return ;
8787
8888 simulating = true ;
89+ ringSimulated = !held;
8990
9091 PlayerState state;
9192 state.saveState (plr);
@@ -102,8 +103,6 @@ void TrajectoryNode::simulate(PlayerObject* plr, bool held)
102103 player->m_isSwing = gjbgl->m_levelSettings ->m_startMode == 7 ;
103104 }
104105
105- CCPoint prevPoint = plr->getPosition ();
106-
107106 if (
108107 (held && state.plMembers .m_dashRing ) ||
109108 (held && state.plMembers .m_isRobot && state.plMembers .m_holdingButtons [(int )PlayerButton::Jump])
@@ -137,7 +136,35 @@ void TrajectoryNode::simulate(PlayerObject* plr, bool held)
137136 if (player->m_regularTrail )
138137 player->m_regularTrail ->setVisible (false );
139138
140- trailStates.clear ();
139+ performSimulation (col, useTrail);
140+
141+ simulating = false ;
142+ }
143+
144+ void TrajectoryNode::simulateFromRing (PlayerObject* player2, RingObject* ring)
145+ {
146+ return ;
147+
148+ if (ringSimulated)
149+ return ;
150+
151+ ringSimulated = true ;
152+
153+ PlayerState state;
154+ state.saveState (player);
155+
156+ player->ringJump (ring, false );
157+
158+ performSimulation (ccc4f (1 , 1 , 0 , 1 ), false );
159+
160+ state.loadState (this ->player );
161+ }
162+
163+ void TrajectoryNode::performSimulation (cocos2d::ccColor4F colour, bool useTrail)
164+ {
165+ CCPoint prevPoint = player->getPosition ();
166+ auto oldTrails = trailStates;
167+ bool drewTrails = false ;
141168
142169 for (size_t i = 0 ; i < getIterCount (); i++)
143170 {
@@ -152,11 +179,12 @@ void TrajectoryNode::simulate(PlayerObject* plr, bool held)
152179 player->updateRotation (deltaIter);
153180 player->updatePlayerScale ();
154181
155- drawSegment (prevPoint, player->getPosition (), 1 , col );
182+ drawSegment (prevPoint, player->getPosition (), 1 , colour );
156183 prevPoint = player->getPosition ();
157184
158185 if (player->m_isDead || player->m_maybeIsColliding )
159186 {
187+ drewTrails = true ;
160188 drawPlayerTrails ();
161189 drawPlayerHitbox (player);
162190 break ;
@@ -171,7 +199,10 @@ void TrajectoryNode::simulate(PlayerObject* plr, bool held)
171199 }
172200 }
173201
174- simulating = false ;
202+ if (!drewTrails)
203+ drawPlayerTrails ();
204+
205+ trailStates = oldTrails;
175206}
176207
177208bool TrajectoryNode::shouldDrawTrail ()
0 commit comments