RandomGFGoStop/Assets/Scripts/UI/GamePanel/GamePanel_Effect.cs

351 lines
13 KiB
C#

using CodeJay.Enum;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
// 임시 연출 스크립트 입니다.
public class GamePanel_Effect : MonoBehaviour
{
[SerializeField] private Animator EffectAnimator;
[SerializeField] private TMPro.TextMeshProUGUI TMP;
[SerializeField] private UnityEngine.UI.Image PlayerTurnDirectImage;
private Dictionary<EEffectAnimationKey, int> _dictAnimTriggerHash = new Dictionary<EEffectAnimationKey, int>();
private Dictionary<EEffectDirectType, float> _dicEffectDurations = new Dictionary<EEffectDirectType, float>();
private System.Collections.IEnumerator _eDirect = null;
private void Awake()
{
for (EEffectDirectType i = 0; i < EEffectDirectType.Max; i++)
_dicEffectDurations.Add(i, 1.3f);
_dicEffectDurations[EEffectDirectType.NoneCard] = 0.5f;
_dicEffectDurations[EEffectDirectType.Normal] = 0.25f;
_dicEffectDurations[EEffectDirectType.Bonus] = 0.5f;
TMP.enabled = false;
for (EEffectAnimationKey i = 0; i < EEffectAnimationKey.Max; i++)
{
_dictAnimTriggerHash.Add(i, Animator.StringToHash(i.ToString()));
}
if (GameManager.Instance != null)
{
GameManager.Event.RegistEvent(EEventType.OnGameEnd, this.OnGameEnd);
}
}
private void OnDestroy()
{
if (GameManager.Instance != null)
{
GameManager.Event.RegistEvent(EEventType.OnGameEnd, this.OnGameEnd);
}
}
private void OnGameEnd()
{
if (_eDirect != null)
StopCoroutine(_eDirect);
StopAllCoroutines();
TMP.enabled = false;
if (DOTween.IsTweening(PlayerTurnDirectImage))
PlayerTurnDirectImage.DOKill();
}
public float GetEffectDuration(EEffectDirectType effectType)
{
if (_dicEffectDurations.ContainsKey(effectType))
return _dicEffectDurations[effectType] / GamePanel.GameSpeed;
else
return 1f / GamePanel.GameSpeed;
}
public void PlayerTurnDirectEnabled(bool b)
{
PlayerTurnDirectImage.enabled = b;
if (b)
{
PlayerTurnDirectImage.DOColor(new Color(1, 1, 0, 1), 1f).From(new Color(1, 1, 0, 0.5f)).SetLoops(-1, LoopType.Yoyo).SetRecyclable();
}
else
{
if (DOTween.IsTweening(PlayerTurnDirectImage))
PlayerTurnDirectImage.DOKill();
}
}
public float Direct(EEffectDirectType type, bool isPlayer)
{
TMP.text = isPlayer ? "" : "상대 ";
if (_eDirect != null)
StopCoroutine(_eDirect);
_eDirect = coroDirect(type, isPlayer);
StartCoroutine(_eDirect);
return this.GetEffectDuration(type);
}
public IEnumerator Direct(ECombinationType combinationType, bool isPlayer)
{
TMP.text = isPlayer ? "" : "상대 ";
if (_eDirect != null)
StopCoroutine(_eDirect);
EEffectDirectType type = EEffectDirectType.Max;
switch (combinationType)
{
case ECombinationType.Hongdan:
type = EEffectDirectType.Hongdan;
break;
case ECombinationType.Chungdan:
type = EEffectDirectType.Chungdan;
break;
case ECombinationType.Chodan:
type = EEffectDirectType.Chodan;
break;
case ECombinationType.Godori:
type = EEffectDirectType.Godori;
break;
case ECombinationType.Be_Three_Ghwang:
type = EEffectDirectType.Be_Three_Ghwang;
break;
case ECombinationType.Three_Ghwang:
type = EEffectDirectType.Three_Ghwang;
break;
case ECombinationType.Four_Ghwang:
type = EEffectDirectType.Four_Ghwang;
break;
case ECombinationType.Five_Ghwang:
type = EEffectDirectType.Five_Ghwang;
break;
}
_eDirect = coroDirect(type, isPlayer);
yield return StartCoroutine(_eDirect);
}
public IEnumerator GoDirect(int goNumber, bool isPlayer)
{
TMP.text = isPlayer ? "" : "상대 ";
TMP.text += goNumber.ToString() + "고!";
TMP.enabled = false;
string triggerTxt = "Go" + string.Format("{0:D2}", goNumber);
EffectAnimator.SetTrigger(triggerTxt);
GameManager.Sound.PlayGoVoice(goNumber);
yield return new WaitForSeconds(1f);
TMP.enabled = false;
_eDirect = null;
}
public IEnumerator NagariEffect()
{
TMP.text = "이번판 2배!";
TMP.enabled = false;
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Nagari]);
yield return new WaitForSeconds(2f);
TMP.enabled = false;
_eDirect = null;
}
/*
// 카드를 통해 취한 '액션'을 나타내는 열거형.
public enum ECardActionType
{
// 카드를 제출하기 전 단계.
BeforeDiscard,
// 카드를 제출한 후 중앙 카드 덱을 뒤집어서 바닥패와 '월'이 일치하는지 행동(일치하면 해당 패 위로 일치하는것이 없으면 빈곳으로 )한 후의 단계.
AfterCenterDeckDiscard,
// 모든 카드제출이 끝나고난 후 자신이 가져올 수 있는 카드들을 스코어보드로 가져오기 직전의 단계.
BeforeBringTheCards,
// 카드제출 후 스코어보드로 가져오고 난 뒤의 단계.
AfterBringTheCards,
Max
}
*/
private System.Collections.IEnumerator coroDirect(EEffectDirectType type, bool isPlayer)
{
TMP.enabled = false;
switch (type)
{
case EEffectDirectType.NoneCard:
TMP.enabled = true;
TMP.text += "못먹음";
break;
case EEffectDirectType.Hongdan:
TMP.text += "홍단";
Animator.StringToHash(name);
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Hongdan]);
GameManager.Sound.PlaySFX(ESFXType.Hongdan_1);
GameManager.Sound.PlayVoice(EVoiceType.Hongdan_Voice);
break;
case EEffectDirectType.Chungdan:
TMP.text += "청단";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Chungdan]);
GameManager.Sound.PlaySFX(ESFXType.Chungdan_1);
GameManager.Sound.PlayVoice(EVoiceType.Chungdan_Voice);
break;
case EEffectDirectType.Chodan:
TMP.text += "초단";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Chodan]);
GameManager.Sound.PlaySFX(ESFXType.Chodan_1);
GameManager.Sound.PlayVoice(EVoiceType.Chodan_Voice);
break;
case EEffectDirectType.Godori:
TMP.text += "고도리";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Godori]);
GameManager.Sound.PlaySFX(ESFXType.Godori_2);
GameManager.Sound.PlayVoice(EVoiceType.Godori_Voice);
break;
case EEffectDirectType.Be_Three_Ghwang:
TMP.text += "비삼광";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Bisamgwang]);
GameManager.Sound.PlaySFX(ESFXType.Bee_Three_Ghwang);
GameManager.Sound.PlayVoice(EVoiceType.Be_Three_Gwhang);
break;
case EEffectDirectType.Three_Ghwang:
TMP.text += "삼광";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Samgwang]);
GameManager.Sound.PlaySFX(ESFXType.Three_Gwhang_1);
GameManager.Sound.PlayVoice(EVoiceType.Samgwang_Voice);
break;
case EEffectDirectType.Four_Ghwang:
TMP.text += "사광";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Sagwang]);
GameManager.Sound.PlaySFX(ESFXType.Four_Ghwang);
GameManager.Sound.PlayVoice(EVoiceType.Sagwang_Voice);
break;
case EEffectDirectType.Five_Ghwang:
TMP.text += "오광";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Ogwang]);
GameManager.Sound.PlaySFX(ESFXType.Five_Ghwang);
GameManager.Sound.PlayVoice(EVoiceType.Ogwang_Voice);
break;
case EEffectDirectType.FirstBbug:
TMP.text += "첫뻑";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Firstpuck]);
GameManager.Sound.PlaySFX(ESFXType.Bbug_2);
GameManager.Sound.PlayVoice(EVoiceType.Bbug_1_Voice);
break;
case EEffectDirectType.Bbug:
TMP.text += "뻑";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Puck]);
GameManager.Sound.PlaySFX(ESFXType.Bbug_2);
GameManager.Sound.PlayVoice(EVoiceType.Bbug_1_Voice);
break;
case EEffectDirectType.Bbug_Own:
TMP.text += "자뻑";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Selfpuck]);
GameManager.Sound.PlaySFX(ESFXType.Bbug_2);
GameManager.Sound.PlayVoice(EVoiceType.Bbug_1_Voice);
break;
case EEffectDirectType.GetBbug:
TMP.text += "뻑먹기";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Getpuck]);
break;
case EEffectDirectType.GetBbug_Own:
TMP.text += "자뻑먹기";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Getselfpuck]);
break;
case EEffectDirectType.Kiss:
TMP.text += "쪽";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Kiss]);
GameManager.Sound.PlaySFX(ESFXType.Kiss);
GameManager.Sound.PlayVoice(EVoiceType.Kiss_Voice);
break;
case EEffectDirectType.Clean:
TMP.text += "싹쓸이";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Clean]);
GameManager.Sound.PlaySFX(ESFXType.Clean_2);
GameManager.Sound.PlayVoice(EVoiceType.Clear_Voice_1);
break;
case EEffectDirectType.Bell:
TMP.text += "흔들기";
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Shake]);
GameManager.Sound.PlaySFX(ESFXType.Shake);
GameManager.Sound.PlayVoice(EVoiceType.Shake_Voice);
break;
case EEffectDirectType.Bomb_Double:
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Bomb]);
GameManager.Sound.PlaySFX(ESFXType.Bomb_1);
GameManager.Sound.PlayVoice(EVoiceType.Bomb_Voice);
TMP.text += "폭탄 2장";
break;
case EEffectDirectType.Bomb_Triple:
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Bomb]);
GameManager.Sound.PlaySFX(ESFXType.Bomb_1);
GameManager.Sound.PlayVoice(EVoiceType.Bomb_Voice);
TMP.text += "폭탄 3장";
break;
case EEffectDirectType.Normal:
TMP.enabled = true;
TMP.text += "기본";
break;
case EEffectDirectType.Selectable:
TMP.enabled = true;
TMP.text += "선택 가능";
break;
case EEffectDirectType.Bonus:
TMP.enabled = false;
if(isPlayer == true)
{
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Bonus]);
}
else
{
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.SangdaeBonus]);
}
GameManager.Sound.PlaySFX(ESFXType.Bonus);
TMP.text += "보너스";
break;
case EEffectDirectType.Stop:
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Stop]);
GameManager.Sound.PlayVoice(EVoiceType.Stop_1_Voice);
TMP.text += "스톱~";
break;
case EEffectDirectType.Ddadak:
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Ddadog]);
GameManager.Sound.PlaySFX(ESFXType.Ddadag_1);
GameManager.Sound.PlayVoice(EVoiceType.Ddadag_Voice);
TMP.text += "따닥!";
break;
case EEffectDirectType.Double:
EffectAnimator.SetTrigger(_dictAnimTriggerHash[EEffectAnimationKey.Double]);
GameManager.Sound.PlaySFX(ESFXType.Godori_2);
TMP.text += "두배!";
break;
}
yield return new WaitForSeconds(_dicEffectDurations[type]);
TMP.enabled = false;
_eDirect = null;
}
}