/// <summary>
    /// Initializes this instance.
    /// </summary>
    public void Initialize(CoinWinAnimator coinWinUI, float initialSpeed, float initialRotSpeed,
                           Vector3 moveDir, float deceleration)
    {
        m_coinWinUI    = coinWinUI;
        m_speed        = initialSpeed;
        m_rotSpeed     = initialRotSpeed;
        m_moveDir      = moveDir;
        m_deceleration = deceleration;

        // Initialize coin animator
        //  State 1: Zero scale
        //  State 2: Normal scale
        m_coinScaleAnimator = new UIAnimator(m_coinSprite.transform);
        m_coinScaleAnimator.SetScaleAnimation(Vector3.zero, m_coinSprite.transform.localScale);
        m_coinScaleAnimator.SetAnimSpeed(m_coinScaleAnimSpeed);

        // Initialize collect animator
        //  State 1: Original scale
        //  State 2: Zero scale
        m_collectAnimator = new UIAnimator(m_collectSprite.transform);
        m_collectAnimator.SetScaleAnimation(m_collectSprite.transform.localScale, Vector3.zero);
        m_collectAnimator.SetAnimSpeed(m_collectAnimSpeed);

        Reset();

        // Start coin scale animation
        m_coinScaleAnimator.AnimateToState2();

        // Set the initialized flag
        m_isInitialized = true;
    }
    /// <summary>
    /// Initializes this instance.
    /// </summary>
    public void Initialize(CoinWinAnimator coinWinAnimator,
                           ScreenshotUI screenshotUI,
                           System.EventHandler <System.EventArgs> videoAdsDelegate,
                           System.EventHandler <System.EventArgs> giftDelegate,
                           System.EventHandler <System.EventArgs> gachaDelegate,
                           System.EventHandler <System.EventArgs> settingsDelegate,
                           System.EventHandler <System.EventArgs> shareDelegate,
                           System.EventHandler <System.EventArgs> playAgainDelegate,
                           System.EventHandler <System.EventArgs> leaderboardsDelegate,
                           System.EventHandler <System.EventArgs> pressSoundDelegate,
                           System.EventHandler <System.EventArgs> releaseSoundDelegate)
    {
        m_coinAnim     = coinWinAnimator;
        m_screenshotUI = screenshotUI;

        // Initialize buttons
        m_videoAdsBtn.Initialize(videoAdsDelegate, UIButton.TriggerType.ON_RELEASE);
        m_giftBtn.Initialize(giftDelegate, UIButton.TriggerType.ON_RELEASE);
        m_gachaBtn.Initialize(gachaDelegate, UIButton.TriggerType.ON_RELEASE);
        m_settingsBtn.Initialize(settingsDelegate, UIButton.TriggerType.ON_RELEASE);
        m_shareBtn.Initialize(shareDelegate, UIButton.TriggerType.ON_RELEASE);
        m_playAgainBtn.Initialize(playAgainDelegate, UIButton.TriggerType.ON_RELEASE);
        m_leaderboardsBtn.Initialize(leaderboardsDelegate, UIButton.TriggerType.ON_RELEASE);
        // Set button ounds
        m_videoAdsBtn.AddSoundDelegates(pressSoundDelegate, releaseSoundDelegate);
        m_giftBtn.AddSoundDelegates(pressSoundDelegate, releaseSoundDelegate);
        m_gachaBtn.AddSoundDelegates(pressSoundDelegate, releaseSoundDelegate);
        m_settingsBtn.AddSoundDelegates(pressSoundDelegate, releaseSoundDelegate);
        m_shareBtn.AddSoundDelegates(pressSoundDelegate, releaseSoundDelegate);
        m_playAgainBtn.AddSoundDelegates(pressSoundDelegate, releaseSoundDelegate);
        m_leaderboardsBtn.AddSoundDelegates(pressSoundDelegate, releaseSoundDelegate);

        // Initialize text
        m_videoAdsText.Initialize();
        m_giftText.Initialize();
        m_gachaText.Initialize();

        // Create animators for the UI strips
        //  State 1: Hidden at the left edge of the screen
        //  State 2: Visible at the center of the screen
        InitializeStripAnimator(ref m_videoAdsStripAnimator, m_videoAdsStrip, m_videoAdsStripStartPos);
        InitializeStripAnimator(ref m_giftStripAnimator, m_giftStrip, m_giftStripStartPos);
        InitializeStripAnimator(ref m_gachaStripAnimator, m_gachaStrip, m_gachaStripStartPos);

        // Set the initialized flag
        m_isInitialized = true;
    }
    /// <summary>
    /// Initializes this instance.
    /// </summary>
    public void Initialize(CoinWinAnimator coinWinAnimUI,
                           System.EventHandler <System.EventArgs> giftOpenDelegate,
                           System.EventHandler <System.EventArgs> giftPlayDelegate,
                           System.EventHandler <GiftOpenedEventArgs> giftOpenedDelegate,
                           System.EventHandler <System.EventArgs> pressSoundDelegate,
                           System.EventHandler <System.EventArgs> releaseSoundDelegate)
    {
        m_coinAnim = coinWinAnimUI;

        // Initialize buttons
        m_openGiftBtn.Initialize(giftOpenDelegate, UIButton.TriggerType.ON_RELEASE);
        m_giftPlayBtn.Initialize(giftPlayDelegate, UIButton.TriggerType.ON_RELEASE);
        // Set button sounds
        m_openGiftBtn.AddSoundDelegates(pressSoundDelegate, releaseSoundDelegate);
        m_giftPlayBtn.AddSoundDelegates(pressSoundDelegate, releaseSoundDelegate);

        // Initialize invisible button on gift model
        m_giftOpener.Initialize(giftOpenDelegate, UIButton.TriggerType.ON_PRESS);

        // Initialize text
        m_giftAmountText.Initialize();
        m_nextGiftTimeText.Initialize();

        // Get delegate to call when gift has been opened
        m_giftOpenedDelegate = giftOpenedDelegate;

        // Initialize gift overlay UI animator
        //  State 1: 1 alpha, covering gift and entire screen
        //  State 2: 0 alpha, revealing gift contents
        m_giftOverlayAnimator = new UIAnimator(m_giftOverlay);
        m_giftOverlayAnimator.SetAlphaAnimation(1.0f, 0.0f);
        m_giftOverlayAnimator.SetAnimTime(m_giftOverlayAnimTime);
        m_giftOverlayAnimator.ResetToState1();

        // Note gift animator's initial speed
        m_giftAnimInitialSpeed = m_giftAnim.speed;

        // Reset state (should come after initializing other values)
        Reset();

        // Set the initialized flag
        m_isInitialized = true;
    }