popcorn/popcorn/Assets/MyGame/Scripts/CoinManager.cs

76 lines
2.3 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class CoinManager : SingletonMonoBehaviour<CoinManager>
{
private static readonly int Add = Animator.StringToHash("Add");
// CoinView
[SerializeField] private RectTransform coinIconTransform;
[SerializeField] private TextWithCountUpInt coinCountText;
[SerializeField] private Animator coinAnimator;
[SerializeField] private RectTransform coinPrefab;
// Animation
[SerializeField] private float duration = 0.5f;
[SerializeField] private RectTransform rootTransform;
private int ownCoin;
public int OwnCoin => ownCoin;
private string coinTextFormat = "{0}";
void Awake(){
if(CheckInstance()) return ;
}
public void ChangeCoin(int count)
{
ownCoin = count;
coinCountText.ChangeValue(coinTextFormat, ownCoin);
}
public void AddCoin(int count)
{
ownCoin += count;
coinCountText.CountUpAnimation(coinTextFormat, ownCoin, duration);
}
public void AddCoinWithEffect(int count, Action callback = null)
{
ownCoin += count;
// 生成枚数決定
// 生成ポジション決め、生成
InstantiateEffeect(coinPrefab, count, Vector3.zero, coinIconTransform.position, () =>
{
coinCountText.CountUpAnimation(coinTextFormat, ownCoin, duration);
callback?.Invoke();
});
}
private void InstantiateEffeect(RectTransform prefab, int count, Vector3 from, Vector3 to, Action callback)
{
// アニメ50フレーム
this.CallWaitForSeconds(1.0f, () => {
// コインが到着したらSEとバイブ再生。コインはずみアニメーションを再生
VibrationManager.Instance.PlayVibrationOnceWeak();
coinAnimator.SetTrigger(Add);
// SoundManager.Instance.PlaySE("se_coin_count");
callback.Invoke();
});
}
public void SubCoin(int coin){
ownCoin -= coin;
if(coinCountText.gameObject.activeInHierarchy){
coinCountText.CountUpAnimation(coinTextFormat, ownCoin, duration);
}else{
coinCountText.ChangeValue(coinTextFormat, ownCoin);
}
}
}