SamsonGame/Assets/Scripts/Game/UI/Elements/RewardButton.cs

86 lines
2.2 KiB
C#

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
namespace RND
{
public class RewardButton : MonoBehaviour
{
[SerializeField] protected Button _button;
[SerializeField] private Text _takeMessage;
[SerializeField] private Text _loadingMessage;
[SerializeField] private Image _statusIcon;
[Header("Prefabs")] [SerializeField] private Sprite _loadingSprite;
[SerializeField] private Sprite _readySprite;
private Action<bool> _rewardCallback;
private string _placement = "non";
private void Awake()
{
_button.onClick.AddListener(ClickHandler);
Init();
}
protected virtual void Init()
{
}
public void SetPlacement(string placement)
{
_placement = placement;
}
public void SetHandler(Action<bool> handler)
{
_rewardCallback = handler;
}
public virtual void Begin()
{
StartCoroutine(RewardRoutine());
}
private IEnumerator RewardRoutine()
{
_takeMessage.gameObject.Hide();
_loadingMessage.gameObject.Show();
yield return ADsLoadingRoutine();
_takeMessage.gameObject.Show();
_loadingMessage.gameObject.Hide();
OnRewardLoaded();
}
protected virtual void OnRewardLoaded()
{
}
private IEnumerator ADsLoadingRoutine()
{
_button.gameObject.Show();
do
{
bool rewardAvailable = Ads.HasRewardVideo();
_button.interactable = rewardAvailable;
_statusIcon.sprite = rewardAvailable ? _readySprite : _loadingSprite;
yield return null;
} while (_button.interactable == false);
}
private void ClickHandler()
{
Ads.ShowReward(
_placement,
() =>
{
_button.gameObject.Hide();
_rewardCallback.Invoke(true);
},
() => { _rewardCallback.Invoke(false); });
}
}
}