| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | #include "..\easy2d.h"
 | 
					
						
							|  |  |  |  | #include <stdarg.h>
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-30 16:18:45 +08:00
										 |  |  |  | ActionSequence::ActionSequence() : | 
					
						
							|  |  |  |  | 	m_nActionIndex(0) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | ActionSequence::ActionSequence(int number, Action * action1, ...) : | 
					
						
							|  |  |  |  | 	m_nActionIndex(0) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	va_list params; | 
					
						
							|  |  |  |  | 	va_start(params, number); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	while (number > 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-09-30 16:18:45 +08:00
										 |  |  |  | 		this->addAction(va_arg(params, Action*)); | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 		number--; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	va_end(params); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ActionSequence::~ActionSequence() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	for (auto action : m_vActions) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-10-05 00:53:03 +08:00
										 |  |  |  | 		SafeRelease(action); | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void ActionSequence::_init() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	for (auto action : m_vActions) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-10-06 02:32:33 +08:00
										 |  |  |  | 		action->m_pTargetSprite = m_pTargetSprite; | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 	m_vActions[0]->_init(); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool ActionSequence::_exec(LARGE_INTEGER nNow) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	if (m_bStop) return true; | 
					
						
							|  |  |  |  | 	if (!m_bRunning) return false; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	if (m_vActions[m_nActionIndex]->_exec(nNow)) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		m_nActionIndex++; | 
					
						
							|  |  |  |  | 		if (m_nActionIndex == m_vActions.size()) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			return true; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			m_vActions[m_nActionIndex]->_init(); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	return false; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void ActionSequence::_reset() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	for (auto action : m_vActions) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		action->_reset(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-10-06 01:07:15 +08:00
										 |  |  |  | 	m_vActions[0]->_init(); | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	m_nActionIndex = 0; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-30 16:18:45 +08:00
										 |  |  |  | void ActionSequence::addAction(Action * action) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_vActions.push_back(action); | 
					
						
							|  |  |  |  | 	action->retain(); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ActionSequence * ActionSequence::copy() const | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-30 16:18:45 +08:00
										 |  |  |  | 	auto a = new ActionSequence(); | 
					
						
							|  |  |  |  | 	for (auto action : m_vActions) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		a->addAction(action->copy()); | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	return a; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-30 16:18:45 +08:00
										 |  |  |  | ActionSequence * ActionSequence::reverse(bool actionReverse) const | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-30 16:18:45 +08:00
										 |  |  |  | 	auto a = new ActionSequence(); | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	for (auto action : a->m_vActions) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-09-30 16:18:45 +08:00
										 |  |  |  | 		if (actionReverse) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			a->addAction(action->reverse()); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			a->addAction(action->copy()); | 
					
						
							|  |  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-09-30 16:18:45 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	a->m_vActions.reserve(m_vActions.size()); | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	return a; | 
					
						
							|  |  |  |  | } |