/*
 * Copyright (c) Contributors to the Open 3D Engine Project.
 * For complete copyright and license terms please see the LICENSE at the root of this distribution.
 *
 * SPDX-License-Identifier: Apache-2.0 OR MIT
 *
 */


// Description : Comment node animator class

/*
    CCommentContext stores information about comment track.
    The Comment Track is activated only in the editor.
*/



#ifndef CRYINCLUDE_EDITOR_TRACKVIEW_COMMENTNODEANIMATOR_H
#define CRYINCLUDE_EDITOR_TRACKVIEW_COMMENTNODEANIMATOR_H
#pragma once

#include "TrackViewAnimNode.h"

class CTrackViewTrack;

struct CCommentContext
{
    CCommentContext()
        : m_nLastActiveKeyIndex(-1)
        , m_size(1.0f)
        , m_align(0)
        , m_color(0.f, 0.f, 0.f, 1.f)
    {
        sprintf_s(m_strFont, sizeof(m_strFont), "default");
        m_unitPos = Vec2(0.f, 0.f);
    }

    int m_nLastActiveKeyIndex;

    AZStd::string m_strComment;
    char m_strFont[64];
    Vec2 m_unitPos;
    AZ::Color m_color;
    float m_size;
    int m_align;
};

class CCommentNodeAnimator
    : public IAnimNodeAnimator
{
public:
    CCommentNodeAnimator(CTrackViewAnimNode* pCommentNode);
    virtual void Animate(CTrackViewAnimNode* pNode, const SAnimContext& ac);
    virtual void Render(CTrackViewAnimNode* pNode, const SAnimContext& ac);

private:
    virtual ~CCommentNodeAnimator();

    void AnimateCommentTextTrack(CTrackViewTrack* pTrack, const SAnimContext& ac);
    CTrackViewKeyHandle GetActiveKeyHandle(CTrackViewTrack* pTrack, float fTime);
    Vec2 GetScreenPosFromNormalizedPos(const Vec2& unitPos);
    void DrawText(const char* szFontName, float fSize, const Vec2& unitPos, const ColorF col, const char* szText, int align);

    CTrackViewAnimNode* m_pCommentNode;
    CCommentContext m_commentContext;
};
#endif // CRYINCLUDE_EDITOR_TRACKVIEW_COMMENTNODEANIMATOR_H
