351 lines
13 KiB
C#
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;
|
|
}
|
|
}
|