84 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | #include "..\e2dtransition.h"
 | ||
|  | 
 | ||
|  | e2d::RotationTransition::RotationTransition(float duration, float rotation) | ||
|  | 	: Transition(duration) | ||
|  | 	, rotation_(rotation) | ||
|  | { | ||
|  | } | ||
|  | 
 | ||
|  | void e2d::RotationTransition::Init(Scene * prev, Scene * next) | ||
|  | { | ||
|  | 	Transition::Init(prev, next); | ||
|  | 
 | ||
|  | 	if (out_scene_) | ||
|  | 	{ | ||
|  | 		out_scene_->SetTransform(D2D1::Matrix3x2F::Identity()); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if (in_scene_) | ||
|  | 	{ | ||
|  | 		in_scene_->SetTransform(D2D1::Matrix3x2F::Identity()); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	in_layer_param_.opacity = 0; | ||
|  | } | ||
|  | 
 | ||
|  | void e2d::RotationTransition::Update() | ||
|  | { | ||
|  | 	Transition::Update(); | ||
|  | 
 | ||
|  | 	auto center_pos = D2D1::Point2F( | ||
|  | 		window_size_.width / 2, | ||
|  | 		window_size_.height / 2 | ||
|  | 	); | ||
|  | 
 | ||
|  | 	if (process_ < .5f) | ||
|  | 	{ | ||
|  | 		if (out_scene_) | ||
|  | 		{ | ||
|  | 			out_scene_->SetTransform( | ||
|  | 				D2D1::Matrix3x2F::Scale( | ||
|  | 					(.5f - process_) * 2, | ||
|  | 					(.5f - process_) * 2, | ||
|  | 					center_pos | ||
|  | 				) * D2D1::Matrix3x2F::Rotation( | ||
|  | 					rotation * (.5f - process_) * 2, | ||
|  | 					center_pos, | ||
|  | 				) | ||
|  | 			); | ||
|  | 		} | ||
|  | 	} | ||
|  | 	else | ||
|  | 	{ | ||
|  | 		if (in_scene_) | ||
|  | 		{ | ||
|  | 			out_layer_param_.opacity = 0; | ||
|  | 			in_layer_param_.opacity = 1; | ||
|  | 
 | ||
|  | 			in_scene_->SetTransform( | ||
|  | 				D2D1::Matrix3x2F::Scale( | ||
|  | 					(process_ - .5f) * 2, | ||
|  | 					(process_ - .5f) * 2, | ||
|  | 					center_pos | ||
|  | 				) * D2D1::Matrix3x2F::Rotation( | ||
|  | 					rotation * (process_ - .5f) * 2, | ||
|  | 					center_pos, | ||
|  | 				) | ||
|  | 			); | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | void e2d::RotationTransition::Reset() | ||
|  | { | ||
|  | 	if (out_scene_) | ||
|  | 	{ | ||
|  | 		out_scene_->SetTransform(D2D1::Matrix3x2F::Identity()); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	if (in_scene_) | ||
|  | 	{ | ||
|  | 		in_scene_->SetTransform(D2D1::Matrix3x2F::Identity()); | ||
|  | 	} | ||
|  | } |