2025-08-28 17:43:36 +09:00
|
|
|
#pragma once
|
|
|
|
|
#include <android/native_window.h>
|
|
|
|
|
#include "MediaAsset.h"
|
2025-08-29 16:00:24 +09:00
|
|
|
#include "AnimationStrategy.h" // AnimationState를 사용하기 위해 포함
|
2025-08-28 17:43:36 +09:00
|
|
|
|
2025-08-29 16:00:24 +09:00
|
|
|
class Renderer; // 전방 선언
|
2025-08-28 17:43:36 +09:00
|
|
|
|
2025-08-29 16:00:24 +09:00
|
|
|
/**
|
|
|
|
|
* @brief 모든 전환 효과 전문가(Strategy) 클래스의 기반이 되는 인터페이스입니다.
|
|
|
|
|
*/
|
2025-08-28 17:43:36 +09:00
|
|
|
class TransitionStrategy {
|
|
|
|
|
public:
|
|
|
|
|
virtual ~TransitionStrategy() = default;
|
|
|
|
|
|
|
|
|
|
// --- ⬇️ 두 함수로 역할을 분리 ⬇️ ---
|
|
|
|
|
/**
|
|
|
|
|
* @brief 전환이 완료되었는지 확인합니다.
|
|
|
|
|
* @param elapsedMs 전환 시작 후 경과 시간
|
|
|
|
|
* @return 완료되었으면 true
|
|
|
|
|
*/
|
|
|
|
|
virtual bool isComplete(long long elapsedMs) const = 0;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 전환 효과를 직접 렌더링 버퍼에 그립니다.
|
2025-08-29 16:00:24 +09:00
|
|
|
* @param sourceEnd 사라지는 미디어의 최종 애니메이션 상태
|
|
|
|
|
* @param destStart 나타나는 미디어의 시작 애니메이션 상태
|
|
|
|
|
* @return 전환이 완료되었으면 true를 반환합니다.
|
2025-08-28 17:43:36 +09:00
|
|
|
*/
|
2025-08-29 16:00:24 +09:00
|
|
|
virtual bool execute(Renderer* renderer, ANativeWindow_Buffer& buffer,
|
|
|
|
|
MediaAsset& source, const AnimationState& sourceEnd,
|
|
|
|
|
MediaAsset& dest, const AnimationState& destStart,
|
|
|
|
|
long long elapsedMs) = 0;
|
2025-08-28 17:43:36 +09:00
|
|
|
|
|
|
|
|
virtual void reset() = 0;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
TransitionStrategy(long long duration) : durationMs_(duration) {}
|
|
|
|
|
long long durationMs_;
|
|
|
|
|
};
|