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