| 
									
										
										
										
											2018-04-21 21:24:46 +08:00
										 |  |  | #include "..\e2daction.h"
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-22 22:29:42 +08:00
										 |  |  | e2d::FiniteTimeAction::FiniteTimeAction(double duration) | 
					
						
							| 
									
										
										
										
											2018-05-08 20:03:29 +08:00
										 |  |  | 	: _delta(0) | 
					
						
							| 
									
										
										
										
											2018-07-04 12:49:05 +08:00
										 |  |  | 	, _duration(std::max(duration, 0.0)) | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-22 22:29:42 +08:00
										 |  |  | void e2d::FiniteTimeAction::reset() | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  | { | 
					
						
							|  |  |  | 	Action::reset(); | 
					
						
							|  |  |  | 	_delta = 0; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-22 22:29:42 +08:00
										 |  |  | void e2d::FiniteTimeAction::_init() | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-05-08 20:03:29 +08:00
										 |  |  | 	Action::_init(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-22 22:29:42 +08:00
										 |  |  | void e2d::FiniteTimeAction::_update() | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-05-08 20:03:29 +08:00
										 |  |  | 	Action::_update(); | 
					
						
							| 
									
										
										
										
											2018-05-10 14:03:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-08 20:03:29 +08:00
										 |  |  | 	if (_duration == 0) | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-05-08 20:03:29 +08:00
										 |  |  | 		_delta = 1; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  | 		this->stop(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  | 	else | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-07-04 12:49:05 +08:00
										 |  |  | 		_delta = std::min((Time::getTotalTime() - _last) / _duration, 1.0); | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if (_delta >= 1) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			this->stop(); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-22 22:29:42 +08:00
										 |  |  | void e2d::FiniteTimeAction::_resetTime() | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  | { | 
					
						
							|  |  |  | 	Action::_resetTime(); | 
					
						
							|  |  |  | 	_last = Time::getTotalTime() - _delta * _duration; | 
					
						
							|  |  |  | } |